Снегопат 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/ |