<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Возьмем на заметку…
А что? Это идея…
Интересно.. надо попробовать
С объектами понятно, а вот с формами… Сделать наследование форм…
Документы, обработки — можно сделать наследованными, с реквизитами и методами… А вот как бы форму унаследовать…
(4) Форму можно также наследовать. Только для того, чтобы самому обращаться как производному от формы классу.
Или ты хотел бы производный класс подсунуть системе вместо базовой формы?
Тут как раз вопрос именно в визуальном редактировании наследованной формы и подмене обработчиков формы.
(6) Я не совсем тебя понимаю. Объясни на пальцах.
Вот есть форма, на ней реквизит, у реквизита обработчик. Теперь создаем новую форму и, типа, наследуем ее от первой. Как это выглядит? Что в редакторе формы? Что наследуется? Реквизиты или поведение реквизитов?
(7) Классическое наследование формы:
Есть форма, на ней реквизиТ, у реквизита обработчик — получаем новую форму, аналогичную, только обработчик реквизита новой формы работает в старой форме. Но имеем возможность добавлять свои реквизиты у новой формы.
(8) Ладно, идею понял. Пораскину мозгами.
(8) Не, это совсем из другой оперы.
(10) Ну почему же? Наследовать же мы можем любые объекты, добавлять новые свойства, переопределять методы своими…
Для начала отлично.
В свое время мы с Dmitro думали над возможными реализациями ООП в 8ке, и пришли почти к такому же решению, однако делать не стали.
Так сразу же вопросы и пожелания и своя толика видения развития.
Сделано ли множественное наследование?
Будет ли какая-то декларативность в описании классов?
То есть сейчас наследование (и обращение из класса к базовым методам) делается «ручками»:
в инициализируещем методе обработки сами создаем объект ВК, и объекты базовых классов.
Если хотим обращаться к методам базовых классов, то должны сами сохранить где-то (например в переменных модуля) ссылки на нами же созданные объекты.
А вот тут Dmitro (как больший чем я спец по 8ке) подсказывает — у обработки могут быть реквизиты обработки с типом «Обработка.Объект», которые как-раз и было бы удобно использовать как базовые классы.
Те у ВК допустим метод — CreateClass(ИмяОбработки)
ВК создает эту обработку, базовые классы создаются САМИ как реквизиты этой обработки.
Дальше ВК должна просто обойти реквизиты обработки, выделить среди них те, которые есть базовые классы (может там инфа в синонимах метаданных и тп), и вернуть уже свой объект. Также для каждого подобъекта, являющегося классом, можно будет вызывать какой-то инит-метод, в который передавать ссылку на конечный объект, для реализации виртуальных вызовов (аналог Сам(Контекст) в 1С++).
Вобщем, надо думать над этим, и для начала определиться со стандартами — как прописывать/создавать иерархию наследования, как инициализировать, как описать public/protected/private методы и наследование, и тп.
+ Хорошо!
Напрашивающийся вопрос: что будешь делать с исходниками? Будешь ли выкладывать в открытый доступ?
Ага, вопросов куча 🙂
Например, виртуальные методы реализованы?
(12)http://www.1cpp.ru/forum/YaBB.pl?num=1237134465
(11) Наследовать можем. А заставить V8 искать обработчик событий формы в модуле другой формы я не могу.
(15) Ну тогда только копировать обработчики в новую форму.
(13) Дался тебе этот открытый доступ. Там кода кот наплакал. Выложу.
(14) Как таковы виртульных методов нет. Можешь определить метод в базовом классе, но оставить метод пустым или добавить генерацию ошибки при вызове этого метода. А в производном классе переопределить этот метод и написать реализацию. В любом случае метод будет публичным и клиент может обратиться к методу.
(16) Ты можешь не копировать текст обработчиков в новую форму, а в обработчиках новой формы вызывать обработчики из старой формы (базового класса). Соотв. при изменении базового класса изменится поведение всех обработчиков всех форм, которые на него завязаны. Но это можно и без всяких классов сделать
Роберт, а скорость тестировал? Насколько сильно тормозить по сравнению с типовым/штатным вызовом метода обработки?
А как быть с конструкторами классов, как базовых, так и наследников?
Есть какой-нибудь вариант?
ЗЫ кстати, народ, есть ли у кого-нибудь какая-нибудь система тестирования (функционального или юнит-тестирования) для 8 ?
С ее помощью было бы удобно протестировать и данную ВК 🙂
(19) Скорость не тестировал. Время вызова метода увеличивается максимум на время поиска метода в каждом базовом классе последовательно.
(20) В моем примере _КакКласс по сути и есть конструктор. Если ты создаешь класс, у которого базовым является другой класс, то он создается также через _КакКласс, т.е. через вызов конструктора.
Вообще, orefkov может быть предложит вариант изящнее.
(21) По конструктору: Хотелось бы отделить/выделить стадии создания (статический метод) и стадию конструирования (на уже готовом объекте).
Т.е. метод _КакКласс и метод Конструктор() ИМХО удобнее иметь отдельно.
При этом было бы совсем красиво, если бы метод Конструктор вызывался из твоей ВК автоматом внутри твоего метода Инит 🙂
(21) А как построена схема поиска метода? линейный поиск, бинарный, хеш, деревья и т.д.?
(22) Без понятия 🙂 Я в код 1С не залезал. Это не RainbowV8. Я получаю IDispatch интерфейсы базовых объектов и использую их методы GetIDsOfNames и Invoke. Можно, конечно, кэшировать вызовы и по мере работы класса создавать собственный хеш, дерево или что угодно. Но заранее методы базовых объектов мне не известны.
(24) Да, через ИДиспатч скорость будет слабенькая 🙁
Вот честно, не понимаю, какая в этом практическая польза? ) Столько разговоров про ООП, наследование… Зачем это в языке КОНФИГУРИРОВАНИЯ? Может конечно, дело в том, что я пришел в 1С не с «нормального» языка программирования, а изначально писал только на восьмерке (ну если не считать скрипты всякие)… Но вот за всю свою практику решения самых разнообразных задач, ни разу не чувствовал необходимости в чем-то подобном…
я вижу применение только для обфускации кода и подобных задач.
(26) ООП это способ выражения программистской мысли. Весьма популярный способ на настоящий момент. Он имеет ряд преимуществ и ряд недостатков. Поклонников и противников.
ИМХО, V8 имеет все признаки объектно ориентированного языка или системы, как угодно.
(26) ООП нужен тем, кто не занимается копи-пастом, а любит/умеет строить нормальные программы, удобные при сопровождении, разработке и т.д.
А 77 и 8, к сожалению, проповедуют минимальные знания разработчика/программиста — спец.термин даже придумали «внедренец» 🙁
(28) 8 имеет только признаки ООП и сама сделана внутри на ООП-языке, но вот для разработчиков в среде 1С ничего в плане ООП не сделано.
ИМХО ООП — в первую очередь возможность создавать собственные классы, схемы наследования и т.д.
Интересно
А, пардон, тут ВКшэчка, ну да не в этом суть.
(32) Не хочешь — не ешь 🙂
Если не понимаешь смысла, также не говори.
ООП нужно тем, кто не хочет выполнять постоянный копи-паст, а ведет постоянное накопление рабочего кода в виде необходимых классов + (29)
(26)Цитируем Кодера: ну зачем мне знать, как устроен автомобиль, если мне на нем ЕЗДИТЬ.
А никто и не заставляет. Выложен инструментик для инженера (=творца), а не для юзера.
(32)Сам-то ведь тоже в стае глупых пингвинов. ООП пользуешься — 1С на нем и стоит.
Автору. Привязка к 8 и 1С++ в заголовке не требуется. Семерочникам методичность мышления тоже требуется. А для «особо юзвернутых» читателей неплохо бы добавить что-то типа «потребителей просят не беспокоиться»
(0)>Общеизвестно(Sic!), что ООП строится на трех основных принципах: полиморфизме, наследовании и инкапсуляции
Безудержный оптимизм автора сильно воодушевляет.
(35) Цитата «Автору. Привязка к 8 и 1С++ в заголовке не требуется. Семерочникам методичность мышления тоже требуется» к чему относится?
Расшифруй, нифига не понятно 🙂
Ну вот, один (29) сказал что я «не умею стоить нормальные программы» и вообще занимаюсь «копи-пастом», второй (35) юзером обозвал! ))
(37)А это я поддерживаю посты 29 и 34. В том, что ООП — это, в первую очередь, стиль/метод мышления. И сам пользуюсь оным методом на семерке, хотя синтаксиса семерочного и не хватает.
Автору плюсанул за методическую идею, а не за ВК-шку
(38)Если у тебя есть свои индивидуальные инструменты, ты, вероятно, мастер, а если нет, так, в лучшем случае, ремесленник. Т.е. пользователь (user).
А между тем все забывают что есть стандарты написания кода 1С, разработанные непосредственно создателями платформы, где использование всяких ВК и ООП отнюдь не поощряется. Специфика конфигураций 1С такова, что есть большая вероятность того что в дальнейшем ваш код будет сопровождать и разбирать кто-то другой. А для среднестатистического одинэсника, ООП — темный лес! Да, тут можно говорить о низком «пороге вхождения» в эту специальность, что поделать, так уж сложилось… Вот поэтому написание кода согласно стандартам 1С — это хороший стиль, признак мастера, не для себя, не для другого профи, а в первую очередь для ЗАКАЗЧИКА.
(40) Какие-такие инструменты? ) Поясни, пожалуйста…
(41) > есть стандарты написания кода 1С, разработанные непосредственно создателями платформы, где использование всяких ВК и ООП отнюдь не поощряется
Холивар! :)) А в 7-ке ВК очень даже используются в типовых… v7plus.dll к примеру…
(43) Ну с семеркой-то как раз все понятно… Здесь холивар на другую тему! ))
(41)Ровно все наоборот. 1С сама выпустила книжечку про технологию ВК. На использовании ООП вся платформа построена. «Агрегатные объекты» языка — это классы с присущими им атрибутами и методами, наследуемыми при создании экземпляра класса и/или подкласса. «Среднестатистический одинэсник» может их, конечно, называть колобашками или хреновинками — это вопрос культуры речи. Да, мастер должен обеспечить сопровождаемость продаваемого продукта — но именно продукта, а не инсрументария, им использованного. И уж совсем глупо запрещать одному мастеру поделиться с другим своими приемами.
(42)Ноу-хау.
(46) хауноу? )
(41) Как раз с этим нельзя согласиться!
Данный стандарт, как и любой стандарт разработки, не является обязательным и автоматическим применяемым.
1С его ввела для упрощения/стандартизации ведения разработки и помощи разработчикам в плане указания полезных фич решения учетных задач и т.д.
ООП-схемы прекрасно можно уложить даже и в этот стандарт 🙂
Плюсану за оригинальность идеи…
Больше всего от ООП действительно не хватает полиморфизма и наследования. Особенно это касается форм. TormozIT как-то поднимал вопрос инкапсуляции форм, т.е. чтобы готовую форму можно было вставить в другую форму в качестве закладки на панели или что-то в этом роде.
Автору плюс. Тем кто пытается доказать что это не нужно — минус. Любая вещь не является нужной или не нужной по определению, она может быть нужной или нет для кого-то конкретно. И у этой обязательно найдутся свои поклонники!
я когда чего-то не понимаю часто думаю что наверное это что-то очень умное. Плюсану
Чего-то не получается зарегистрировать: «regsvr32 RClassMngr.dll»
Права администратора есть. Говорит «Приложение некорректно настроено».
Пробовал в Windows XP SP3 и в Windows Server 2003 SP1
(53) Никогда не встречал такой ошибки при регистрации.
Попробуй загрузить библиотеку через ЗагрузитьВнешнююКомпоненту. При такой загрузке она должна самостоятельно зарегистрироваться.
(54) Так, естественно, тоже не регистрируется.
Я нашел ссылку на подобную проблему
http://www.rsdn.ru/Forum/message/3022647.all.aspx
В принципе все начинает регистроваться и работать, если установить «Microsoft Visual C++ 2008 Redistributable Package».
(55) Понял. Спасибо. Буду иметь в виду
Чтобы не зависеть от VC90 runtime, можно собрать ВК прилинковав runtime статически:
в свойствах проекта -> c/c++ ->Code Generation -> Runtime Library поставить «Multi-threaded» вместо «Multi-threaded DLL»
dll-как чуток распухнет в размере и избавится от зависимости от msvcr90
Ой.
А она еще от ATL90.dll зависит.
Можно избавить так:
Свойства проекта -> Configuration properties -> General -> Use of ATL поставить «Static link to ATL»
(55,57,58) Сделано. Спасибо.
Роберт, а ты отладчиком пробовал заходить в подобные классы/субклассы.
Работает ли отладка для подобной схемы?
(60) Пробовал. Работает.
(61) Это очень хорошо, заморочек будет меньше.
В последнее время, работая на 8, все больше начинаю задумываться о классах и наследовании в 8 и применении твоей ВК.
(32) и др. не попробовавших ООП или не программировавших ничего, кроме учетных задач..
.. 1С не годится для моделирования чего либо, кроме задач учёта. Даже в VBA + Access больше возможностей, если честно, чем в 1C — в плане ВОЗМОЖНОСТЕЙ.. но 1С подарила на преднастроенные классы для решения учетных задач — Документ, Справочник, ПланСчетов.. и т.п. А в VBA пришлось бы самим создавать всю реализация и методы для решения учетных задач.
Смотрите что происходит — с появлением 8.1 — появились новые объекты (на самом деле классы) — БизнесПроцессы.. А будь там ООП — юзеры сами бы создали этот и много других классов.. но для 1С это плохо, — посмотрите на пользователей 1С++ — теперь их за уши не оттащишь от 7.7 с 1С++.. в общем, потерянные клиенты для 1С на неопределенное время.
(50) а можно ссылку на эту тему? я и сам собирался реализовать подобное
хм. а множественное наследование?
(62) artbear, столько времени прошло, честно скажи пользовался этой ВК? …просто интересно…
(66) Нет, не пользовался, т.к. создание собственных классов все-таки не очень удобно.
Планирую сделать собственную ВК для реализации ООП и Перехватчика для 8-ки аналогично реализованным в 1С++ для 77 На базе прямого доступа к внутренним функциям 1С 8.2
ЗЫ в принципе уже есть примеры реализации ООП для 8.2, товарищ chessman с 1cpp.ru сделал 🙂
(67) Сама идея неплоха, вот только проблема как мне кажется в 1С, они же не используют ничего подобного;-((( а с типовыми работать надо…
(68) В 1С++ для 77 мы вполне успешно юзали отдельные классы и целые наборы классов. было очень удобно.
(68) Например, уже сейчас у chessman-a работает такой код
ЗЫ кстати, рекомендуюОбъект Информатор 🙂
Скриншот
ЗЗЫ tormozit в своей подсистеме «Инструменты ИР» уже начал пользоваться.
забейте граждане.
будущее не за ООП, а за АОП (аспектно-ориентированным)
(67) artbear,
а в чем неудобство конкретно? в том, что 1с не дружит с ООП принципиально? или в конкретной реализации?
(70) artbear,
это, я так понимаю, ВК из (67)?
(71) fixin,
АОП полностью работает на ООП. Сам АОП никогда не откажется от ООП, т.к. аспекты — это прикладная реализация, а ООП — это база для реализации.
(72) Да, именно эта доработка.
Работает на базе КОМ-объекта DynaWrapperX
(72) не согласен. В 1С есть элемент АОП — подписка на события. она не объектно-ориентированная.
Не получается переопределить метод.
Как вызывать абстрактные методы, предназначенные для переопределения в потомках?
(74) fixin,
Это подделка под АОП. Как если сделать машину из фанеры, покрасить качественно, колеса приделать настоящие. И рядом поставить действительно настоящую. Обе стоят, от друг друга не отличить. Но одна сама ездит, другая — нет.
В 1С нет вообще ничего объектно-ориентированно в настоящем значении этого определения. А есть подделки «ну вы же видите, что в результате некоторые моменты в платформе вроде как будто ООП!»
(75) bainov,
Как вызывать абстрактные методы,
И не получится. Здесь имеем отдельную реализацию, «подтаскивание» 1С к ООП по каким-то пунктам или моментам. Если события или методы, или обработка «объекта» не реализованы у данной ВК — их не будет в 1С. Т.к. в 1С ООП нет и не было никогда. По-моему, фраза в описании
должна все объяснять сразу.
(77) AlexO, Мне удалось таки реализовать при помощи данной разработки полиморфизм.
В обработке БазовыйКласс определяем переменную:
Показать
В потомке НовыйКласс реализовываем инициализирующий метод-конструктор:
Показать
Используем классы:
(78) bainov,
У вас в примере минимум не хватает функции «Класс», которая вызывается в
, и что выводится в
(79) AlexO, Писал по памяти. Очепятался немного 🙂
Правильная процедура теста:
Показать
Результат работы:
Выводим список методом предка:
Базовый класс рисует. № 1
Базовый класс рисует. № 2
Базовый класс рисует. № 3
Базовый класс рисует. № 4
Базовый класс рисует. № 5
Базовый класс рисует. № 6
Базовый класс рисует. № 7
Базовый класс рисует. № 8
Базовый класс рисует. № 9
Базовый класс рисует. № 10
Выводим список методом потомка:
Класс-потомок класс рисует. № 1 уже по другому.
Класс-потомок класс рисует. № 2 уже по другому.
Класс-потомок класс рисует. № 3 уже по другому.
Класс-потомок класс рисует. № 4 уже по другому.
Класс-потомок класс рисует. № 5 уже по другому.
Класс-потомок класс рисует. № 6 уже по другому.
Класс-потомок класс рисует. № 7 уже по другому.
Класс-потомок класс рисует. № 8 уже по другому.
Класс-потомок класс рисует. № 9 уже по другому.
Класс-потомок класс рисует. № 10 уже по другому.
ВЫВОД:
Респект автору! Решение работает отлично!
Хотя и было разработано во времена 8.0. Пример для 1С идет для 1С 8.0. Кое-как нашел дистрибутив 8.0 чтобы проверить.
Протестировано на 1С:Предприятие 8.3 (8.3.5.1383).
Вдохновившись, за эти выходные переписал частично работу с интерфейсом в нашей программке.
В результате количество программного кода уменьшилось раза в три, а функциональности стало намного больше.
На скриншоте отображен результат приведенного мной выше теста с использованием виртуальных методов.
А также результат применения ООП при разработке интерфейса для моей программы.
Прикрепил обработки для демонстрации возможностей.
(80) bainov, а почему не сделали на общих функциях и программном формировании элементов?
(81) AlexO,
так и сделано: классы программно отрисовывают свои области.
Общие функции — теперь в базовом классе.
Различающиеся методы рисования объектов — в потомках.
Каждый потомок теперь оснащен автоматически своими кнопками-скроллерами, отображаемыми при необходимости (если количество объектов не влезает в панель).
Базовый класс рулит общими процессами: порядком вывода «квадратиков» на экран, настройка вывода кнопок навигации, которые показываются и скрываются при автоматически.
количество элементов по горизонтали и вертикали, цвет, шрифт и т.п.
Потомки же сами выводят свои данные каждого объекта из своего списка в предназначенный ему «квадратик».
Раньше все было реализовано методами 1С. Код был очень громоздким, запутанным, зачастую повторяющимся.
Сейчас наконец-то можно писать на 1C, получая удовольствие от процесса работы с ООП.
А главное, производительность разработки существенно выше, чем при процедурном программировании — меньше ошибок, легче разработка.
(82) Красиво, большой плюс за ООП 🙂
Главное наверное — скорость работы решения, а не объем кода и его следование каким-то мегапринципам.
а то вот смотрю я на нашего восьмерочника и бп3 в таксях — две строки в документе и проводится документ секунд пять…
тоже на наверное на ооп все отрисовано..
(84) CheBurator,
Здесь еще на первое место выходит — наличие и работоспособность длл-ки. Как основа.
Нет, это 8.3 так работает…. Говорят, быстрее в десять раз, чем когда она только вышла. И радуются, радуются…
(84) ОФФ. главное, чтобы всех все устраивало — и бизнес, и разработчики, и конечных пользователей, и администраторов.
для этого и придумываются всякие методики, оптимизации и т.п.
(82) bainov,
Я, может, не понимаю чего, но почему это нельзя было реализовать «общими» процедурами?
«Базовая» процедура — управляет общими процессами, «потомки» — «выводят свои данные каждого объекта».
Т.е. вызываются последовательно универсальные процедуры. Их можно сделать со своими «методами» и «свойствами».
Именно так предлагал в свое время реализовать «подобие ООП» Гений1С.
Вот если бы можно было готовый объект использовать или класс, например — базовый интерфейс, а на его основе — потомки. Меняем базовый — меняются и потомки. меняем потомка — меняется только он.
А тут все те же функции надо писать, т.е. отличия от концепции, предложенной Гением1С, минимальны.
(87) AlexO, Конечно можно. Я ж говорил что так оно и было раньше. А сейчас код выглядит понятнее. И легче вносить изменения в потомков.
Вы наверное приниципиальный противник ООП.
Не нравится классы проектировать? Или вмешательство в работу платформы 1С для вас кошунство? 🙂
С классами же проще как-то работать.
По скорости же работы 1С — ничуть не уступает обычному методу работы.
Представленный COM-объект просто переадресовывает обращения от одной обработки к другой.
А нам не приходится напрягать себе мозг лишними усилиями.
В результате глюков меньше, толку больше. Что нам и нужно в итоге.
(87) AlexO, Предполагаю что в какой нибудь 1С9 добавят ООП — и все, в том числе и Вы, только и будут классы новые вовсю создавать.
И говорить потом — почему это вы отошли от принципов ООП? Сделали все обработками!
🙂
(88) bainov,
Наоборот ))
Ну так я здесь настоящих «классов»-то и не вижу — подмена функций — COM-объектами с функциями «внутри». Отличия от ранее предложенного подхода — минимальны.
Вот именно, т.е. говорить о существовании отдельного объекта — нельзя. Чуть изменен способ перенаправления, и только.
Что у вас раньше было — в отдельных функциях, а теперь — в «отделной» обработке… ну, вам-то, может, и проще стало )). А я разницы не особо вижу )
Вот это точно не следствие «отдельных обработок».
(89) bainov,
Нет, не добавят. Потому что ООП — это крест на поддерживаемой ныне и бесконечно парадигме 1С «пропритетарности платформы», как они это понимают.
(90) AlexO, Соглашусь с вами, что основным недостатком данной реализации является то, что нельзя сделать наследование более одного уровня.
Но, несмотря на это, все таки мне лично применение этого решения очень облегчает жизнь. Например, интерфейс с отрисовкой кнопок раньше я бы делал несколько дней.
А тут я успел переделать его несколько раз за день всего.
(90) AlexO,
А чем интересно ООП мешает «проприетарности платформы»?
(91) bainov,
Видимо, потому что вы уже заранее разобрались с механизмом формирования интерфейса по задаче «ООП в 1с»? 🙂
Не вижу возможности увеличения производительности при замене редактирования функций — редактированием функций в отдельных обработках.
(92) bainov,
Само ООП — не мешает проприетарности. Как мы это понимаем.
ООП мешает «проприетарности» в понимании 1С.