1с как посмотреть код обработки
Как создать или где посмотреть код модуля внешней обработки для создания счет-фактуры
Версия ПО: 1С:Предприятие 8.2 (8.2.13.205) Бухгалтерия предприятия, редакция 2.0 (2.0.18.1)
Дайте мне правильное направление где можно посмотреть код для создания счета. То, что можно поглядеть в конфигурации это понятно. Я имею ввиду в случае внешней обработки.
Нужно направление как создавать внешние обработки?
Иходные данные у меня представлены в виде текстового файла:
+——+
СЧЕТ-ФАКТУРА: 753
Лсчет: 26743
Покупатель: Название покупателя
Договор: Номер договора
Шапка: Наименование товара | Единица | Колво | Цена | Стоимость | НДС | СуммаНДС| Сумма
Шапка: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
Метка:абонплата за основной телефон | июнь 2012 г.| 1| 198.00| 198.00| 18%| 35.64| 233.64
Метка:телефон оплата за базовый объем | июнь 2012 г.| 1| 144.00| 144.00| 18%| 25.92| 169.92
Метка:местные соединения жуковский | июнь 2012 г.| 1| 37.52| 37.52| 18%| 6.75| 44.27
Метка:Межгород | июнь 2012 г.| 1| 131.57| 131.57| 18%| 23.68| 155.25
Извлечение текстов модулей из внешней обработки 1С
На этот раз, устав от добавления текстов модулей множества форм в обработке «Анализ процедур и функций», решил реализовать автоматическую загрузку этих модулей из выгруженных файлов (функционал платформы 1с «Выгрузить в файлы»).
Для внешней обработки формируется следующая структура каталогов.
Текст модуля обработки выгружается в файл «\Ext\ObjectModule.bsl«.
Тексты модулей управляемых форм — в файлы с расширением «.bsl«: «\Forms\НазваниеФормы\Ext\Form\Module.bsl«.
А вот обычные (не управляемые) формы выгружаются в следующие двоичные файлы: «\Forms\НазваниеФормы\Ext\Form.bin«.
Пришлось повозиться с парсингом этих бинарных файлов. Зато опробовал новую (для меня) возможность платформы работы с бинарными файлами
Файл с данными обычной формы представляет из себя бинарный файл с блоками данных.
Блоки разделены секциями, состоящими из 3-х 16-ричных чисел, оканчивающихся числом 7fffffff.
В процессе анализа некоторого количества обработок обнаружилось 2 варианта расположения блоков.
Вариант 1
Вариант 2
Первые 3 блока в моей выборке обработок всегда начинались с одних и тех же адресов : 00000012(hex) или 18(dec), 00000231(hex) или 561(dec), 00000270(hex) или 624(dec).
Я остановился на следующем алгоритме определения необходимой секции, содержащей код модуля формы.
Данный алгоритм был получен империческим путем и не может слепо использоваться в продуктивной разработке!
Если Вы владеете информацией по данному формату, буду рад увидеть Ваш комментарий к данной публикации 🙂
Если последнее число 3-го блока = 7fffffff, считаю, что это первый вариант расположения блоков. В остальных случаях — второй вариант.
Для первого варианта
Начало блока с текстом модуля формы совпадает с началом 4-го блока (необходимо только пропустить секцию с 3-мя цифрами), т.е. это в 10-чной системе счисления: 691(начало 4-го блока) + 8*3(3 16-чных числа) + 2(пробелы между числами).
Т.е. считаю, что это всегда 717 (dec)
Адрес окончания текстового блока — второе число секции из 3-х чисел + смещение на константу 000002D2(hex) или 722(dec).
Для случая, приведенного на скриншоте (см. выше) получаем:
где 551(dec) это 00000227(hex)
Для второго варианта
Анализируем секцию из 3-х чисел блока 3.
Адрес начала блока с кодом 1С — второе число (к этому числу необходимо еще добавить смещение на константу 722(dec) и размер секции из 3-х чисел 26(dec)).
Для случая, приведенного на скриншоте (см. выше) получаем:
где 127773(dec) — это 0001F31D(hex)
Адрес окончания блока с кодом 1С — третье число.
Для случая, приведенного на скриншоте (см. выше) получаем:
где 471603(dec) — это 00073233(hex)
Для чтения из двоичного файла написал процедуру:
Ну в заключении, чтобы не «бегать» в конфигуратор для выгрузки обработки в файлы, добавил выгрузку с помощью пакетного запуска конфигуратора 1С с выводом на экран результата выполнения данной выгрузки:
Ссылка на обработку на infostart и на github
Извлечение текстов модулей из внешней обработки 1С
Лень в очередной раз сподвигла меня на доработку существующего инструментария.
Для внешней обработки формируется следующая структура каталогов.
Текст модуля обработки выгружается в файл «\Ext\ObjectModule.bsl«.
Тексты модулей управляемых форм — в файлы с расширением «.bsl«: «\Forms\ НазваниеФормы \Ext\Form\Module.bsl«.
А вот обычные (не управляемые) формы выгружаются в следующие двоичные файлы: «\Forms\ НазваниеФормы \Ext\Form.bin«.
Пришлось повозиться с парсингом этих бинарных файлов. Зато опробовал новую (для меня) возможность платформы работы с бинарными файлами
Файл с данными обычной формы представляет из себя бинарный файл с блоками данных.
Блоки разделены секциями, состоящими из 3-х 16-ричных чисел, оканчивающихся числом 7fffffff.
В процессе анализа некоторого количества обработок обнаружилось 2 варианта расположения блоков.
Вариант 1
Вариант 2
Первые 3 блока в моей выборке обработок всегда начинались с одних и тех же адресов : 00000012(hex) или 18(dec), 00000231(hex) или 561(dec), 00000270(hex) или 624(dec)
Я остановился на следующем алгоритме определения необходимой секции, содержащей код модуля формы.
Данный алгоритм был получен империческим путем и не может слепо использоваться в продуктивной разработке!
Если Вы владеете информацией по данному формату, буду рад увидеть Ваш комментарий к данной публикации 🙂
Если последнее число 3-го блока = 7fffffff, считаю, что это первый вариант расположения блоков. В остальных случаях — второй вариант.
Для первого варианта
Начало блока с текстом модуля формы совпадает с началом 4-го блока (необходимо только пропустить секцию с 3-мя цифрами), т.е. это в 10-чной системе счисления: 691(начало 4-го блока) + 8*3(3 16-чных числа) + 2(пробелы между числами). Т.е. считаю, что это всегда 717 (dec)
Адрес окончания текстового блока — второе число секции из 3-х чисел + смещение на константу 000002D2(hex) или 722(dec).
Для случая, приведенного на скриншоте (см. выше) получаем:
где 551(dec) это 00000227(hex)
Для второго варианта
Анализируем секцию из 3-х чисел блока 3.
Адрес начала блока с кодом 1С — второе число (к этому числу необходимо еще добавить смещение на константу 722(dec) и размер секции из 3-х чисел 26(dec)).
Для случая, приведенного на скриншоте (см. выше) получаем:
где 127773(dec) — это 0001F31D(hex)
Адрес окончания блока с кодом 1С — третье число.
Для случая, приведенного на скриншоте (см. выше) получаем:
где 471603(dec) — это 00073233(hex)
Для чтения из двоичного файла написал процедуру:
Ну в заключении, чтобы не «бегать» в конфигуратор для выгрузки обработки в файлы, добавил выгрузку с помощью пакетного запуска конфигуратора 1С с выводом на экран результата выполнения данной выгрузки:
Ссылка на обработку на infostart и на github
Инструкция: как открыть и запустить внешнюю обработку или отчет в 1С
Материал поможет вам разобраться, как запустить любую внешнюю обработку или отчет в информационной базе «1С:Предприятие» 8.2 и 8.3.
Внешняя обработка — это инструмент для создания модификаций прикладных решений 1С без изменения типовой структуры конфигурации. Весь код внешней обработки хранится в отдельных файлах с расширением *.epf.
Рассмотрим последовательность шагов для работы с готовым файлом обработки или отчета.
1. В режиме «1С:Предприятие» через меню «Все функции» открываем Справочник «Дополнительные отчеты и обработки».
2. В открывшемся окне Справочника, нажимаем кнопку «Создать».
В результате открывается окно с предложением выбрать файл внешнего отчета или обработки. Указываем требуемую внешнюю обработку и нажимаем кнопку «Открыть».
3. Далее, форма автоматически заполняется данными из внешней обработки. Необходимо обратить особое внимание на поле «Назначение» — в нем указывается имя Объекта из которого вызывается данная внешняя обработка.
Если это поле не заполнено, то обработку просто не откуда будет вызывать.
И последнее, нажимаем кнопку «Записать и закрыть» и только после этого нужно открыть Объект и пользоваться внешней обработкой.
Что нового для вашей 1С?
Рассылка осуществляется в день выхода обновления. Никакой рекламы, только полезная информация. Посмотрите пример →
Анализ процедур и функций (структура кода)
Глубокая переработка своей консоли запросов подтолкнула меня к поиску, а затем и созданию, инструмента для анализа взаимосвязей процедур и функций модуля и различных форм обработки.
Я лучше воспринимаю графическое представление и для целей анализа структуры кода мне изначально подошла следующая обработка «Граф вызовов для модулей 1С…», которая парсит предложенный текст на процедуры и функции, строит дерево взаимосвязей и рисует по полученным данным связанный граф в виде картинки.
Все прекрасно, но при большом объеме кода граф получается перегружен и не всегда удачно формируется с точки зрения визуализации.
Затем указанную обработку доработал Павел Заяш (Pavl0), добавив возможность выгрузки в формате gml. Это значительно повысило возможности визуализации полученного графа.
Но хотелось еще большего удобства 🙂
Так, было бы не плохо анализировать выбранный список функций и процедур, анализировать асинхронные вызовы, выводить граф используемых и/или использующих процедуры и/или функции из списка.
В итоге я решил создать свой велосипед, учитывающий эти хотелки, а заодно и ознакомиться с замечательным форматом yml.
Парсить код решил с помощью regexp. Для детального синтаксического разбора языка — это вряд ли лучший вариант, но для реализации моей задачи вполне походящее решение.
Шаблон для процедур и функций получил следующий: « ^Процедура([^КонецПроцедуры].*\n+)+КонецПроцедуры » и « ^Функция([^КонецФункции].*\n+)+КонецФункции »
Шаблон для процедур и функций с параметрами такой: « ^Процедура([^\)])+\) » и « ^Функция([^\)])+\) »
Шаблон для имени процедур и функций: « ^Процедура([^\(])+\( » и « ^Функция([^\(])+\( »
Формат gml достаточно хорошо описан здесь у разработчика программы yEd, читающей этот формат.
Для моих целей на текущий момент оказалось достаточно следующих блоков gml:
В итоге получил следующий инструмент «АнализПроцедурИФункций»:
Это нельзя назвать законченным решение, но первичный анализ он проводить уже позволяет.
Вы можете поучаствовать в развитие разработки на github.
Разработка велась на платформе: 8.3.11.2954.
Ограничения и обнаруженные ошибки можно посмотреть здесь
Новое:
— добавлена загрузка модулей из файлов, выгруженных с помощью функционала платформы 1с «Выгрузить в файлы»
— добавлена выгрузка обработки в файлы (через пакетный вызов конфигуратора)
Подробнее добавленный функционал описан в статье «Извлечение текстов модулей из внешней обработки 1С»