Снегопат
https://snegopat.ru/forum/

Автоматизированная вставка текста в модули
https://snegopat.ru/forum/viewtopic.php?f=3&t=379
Страница 1 из 4

Автор:  ildary [ 17 фев 2013, 11:56 ]
Заголовок сообщения:  Автоматизированная вставка текста в модули

Уважаемые скриптописатели, скажите пожалуйста, реализуема ли в настоящее время такая система-некий аналог inserter-а для 7.7: скрипт читает настройку из xml файла, в которой указано примерно следующее:
<ИмяОбъекта.Форма>, например Справочник.Номенклатура.ФормаЭлемента
<Процедура>, например ПриОткрытии()
<ТекстДоВставки>, например ПоказыватьКартинку = 1;
<ТекстВставки> например ПоказыватьКартинку = 0;//в нашей конфиге никто не увидит картинку

тут возможны некоторые плюшки, например указание вставлять текст в начало или в конец процедуры, + возможность вставить текст в конец модуля (например если мы делаем подписку на события), также возможность не просто вставлять, но и заменять текст.

К чему все это - возможность упростить обновление крупных конфигураций. Все свои изменения типового модуля вносим в этот xml и потом натравляем скрипт на новый cf, после чего остается произвести обновление текущей конфигурации. В итоге - долой ручной труд, "вкалывают роботы - счастлив человек" и все такое. Думаю такая штука была бы многим интересной, а после ее обкатки и доведения до боевого состояния - можно было бы с ее помощью продвигать снегопат в неохваченные массы, особенно если сравнить по цене с программой-обновлятором от izhtc.

Автор:  Magister [ 18 фев 2013, 02:21 ]
Заголовок сообщения:  Re: Автоматизированная вставка текста в модули

Я использую уже давно связку git + немножко прямых рук = > PROFIT.

А что за "программа-обновлятор"? Просто, чтобы понимать о чем речь идет. Может быть, там есть стоящие идеи.

Автор:  ildary [ 18 фев 2013, 08:38 ]
Заголовок сообщения:  Re: Автоматизированная вставка текста в модули

Программа обновлятор - http://1c-izhtc.ru стоит неслабых денег. Не знаю ее внутренних способов работы, но теоретически она делает то, что я описал в (0), с уточнением, что она же и генерирует xml настройки вставки текста. Для генерации настройки вставки текста надо уметь парсить модули на уровне процедур, а лучше всего еще и текст внутри них. Я же вижу облегчение в том, чтобы создав сценарий вставки текста вручную - автоматизировать его выполнение.

Автор:  orefkov [ 18 фев 2013, 08:43 ]
Заголовок сообщения:  Re: Автоматизированная вставка текста в модули

На мисте один из разработчиков говорил, что унутре все делается конвертацией конфы в 8.3, выгрузкой всего в файлы, модификацией файлов, загрузки обратно, и конвертацией обратно.
Если я конечно правильно понял.

Автор:  kuntashov [ 18 фев 2013, 08:49 ]
Заголовок сообщения:  Re: Автоматизированная вставка текста в модули

Имхо, эффективнее эту задачу решать путем выгрузки модулей во внешние файлы, парсить, потом заливать обратно, собственно, как и делает обновлятор ИЖ-ТиСи, насколько мне известно.
Можно адаптировать скрипты CodeWorks Алексея Диркса, который в составе OpenConf'а есть, правда парсер там пока заточен под код 7.7... ну и на perl он.

Описание вставляемого кода в CodeWorks задается не при помощи XML, а на своем DSL, но все очень прозрачно, пример:

Код:
CodeWorks::RenameObject($ObjName, "ВводНового", "ВведенКопированием", "Копирование");
CodeWorks::ReplaceCode($ObjName, "", 'Процедура ВводНового\\(\\)', "Процедура ВводНового(Копирование)");

CodeWorks::CreateProc("ПриОткрытии", $OnOpen, "стар_ПриЗаписи");

CodeWorks::CreateProc("ВводНового", $OnNew, "ПриОткрытии");
CodeWorks::InsertCode($ObjName, "ВводНового", "ЭтотСпр.ВводНового(Копирование);");


CodeWorks::CreateProc("ПриЗаписи", $OnSave2, "");
CodeWorks::InsertCode($ObjName, "ПриЗаписи", "ПриИзмененииОбъекта(Контекст, ТекущийЭлемент(), РабочаяДата());\nстар_ПриЗаписи();");
CodeWorks::CreateProc("стар_ПриЗаписи", $OnSave1, "ПриЗаписи");

CodeWorks::InsertVarDecl($ObjName, "", "ЭтотСпр");
CodeWorks::InsertCode($ObjName, "", "\nЭтотСпр = СоздатьОбъект(\"ТСправочник\");");

Автор:  orefkov [ 18 фев 2013, 08:56 ]
Заголовок сообщения:  Re: Автоматизированная вставка текста в модули

Александр, а что, разве обычный diff+patch не могут сделать эту работу?
Зачем выдумывать дополнительные языки?

Автор:  kuntashov [ 18 фев 2013, 09:07 ]
Заголовок сообщения:  Re: Автоматизированная вставка текста в модули

orefkov писал(а):
Александр, а что, разве обычный diff+patch не могут сделать эту работу?
Зачем выдумывать дополнительные языки?


А как при помощи "тупого" diff/patch для произвольно взятой конфигурации вставить во все модули объектов в обработчик события ПередЗаписью() вызов какой-либо своей процедуры в пакетном режиме, например? Или я чего-то про них не знаю?

Речь же в исходном посте шла о более сложных вещах, чем просто перенос перенос доработок из версии в версию, или я не правильно понял:

Цитата:
тут возможны некоторые плюшки, например указание вставлять текст в начало или в конец процедуры, + возможность вставить текст в конец модуля (например если мы делаем подписку на события), также возможность не просто вставлять, но и заменять текст

Автор:  ildary [ 18 фев 2013, 09:13 ]
Заголовок сообщения:  Re: Автоматизированная вставка текста в модули

Уважаемый Александр, скажите пожалуйста, позволяет ли объектная модель снегопата получить модули по имени и обратиться к их содержимому с редактированием?

p.s. я имел в виду именно перенос доработок из версии в версию, а плюшки - это варианты разного размещения доработок (вне процедур), упрощение указания места вставки (в конец процедуры).

Автор:  orefkov [ 18 фев 2013, 09:16 ]
Заголовок сообщения:  Re: Автоматизированная вставка текста в модули

А, ну это тогда более инструмент для модификации любой "чистой" конфы под свои стандарты.
Я то имел ввиду перенос своих доработок в свежий релиз поставщика, что везде делается с помощью 3-way merge.

Автор:  orefkov [ 18 фев 2013, 09:18 ]
Заголовок сообщения:  Re: Автоматизированная вставка текста в модули

2ildary
Конечно позволяет.
К модулю любых объектов любых контейнеров метаданных, открытых в конфигураторе (epf, erf, cf файлы)

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/