1с получить текст модуля
Попытки найти ответ по поиску ни к чему не привели, поэтому, если кто даст ссылочку на требуемое инфо - буду благодарен. Ситуация: Платформа 8.2. - нужно заменить в модулях внешних обработок и отчетов индификаторы вызова процедур и функций по списку. Выгрузил внешние обработки и отчеты избаы в каталог. Мне нужно получить тексты модулей, что бы произвести замену и далее загрузить внешние обработки и функции в базу. Вопрос: как получить тексты модулей (формы, объекта) внешней обработки ? Наверняка кто-то делал и все просто, но не могу найти как .
Конфигурация - Выгрузить файлы конфигурации (Загрузить файлы конфигурации)
идентификаторы, во-первых. во-вторых, глобальный поиск и замена
С конфигурацией все уже проделал. Вопрос именно о внешних обработках и внешних отчетах (меню: СервисДополнительные отчеты и обработкиДополнительные внешние обработки) - как получить тексты их модулей ? В конфигурации они хранятся в Справочнике Внешние обработки, реквизит ХранилищеВнешнейОбработки (тип:ХранилищеЗначений, т.е. двоичные данные).
как это сделать через переднее место - я в свое время не нашел. просто цеплял в конфигурацию, выгружал, правил, загружал, выгружал во внешние обработки.
спасибо за поправку, во-первых. Во-вторых, у меня порядка 70 пар замен для 80 внешних обработок и отчетов - хотелось бы как-нибудь программно. Я правильно понял, глобальный поиск и замена работают на файлах .epf и .ert при указании каталога ?
Спасибо. Настройки глобального поиска не открывал, а зря, т.к. это оказалось очень полезно и поучительно.
Два варианта решения уже есть! Если на будущее и для общего развития: Может кто все-таки знает, как получить программный доступ к тексту модуля внешней обработки ? Насколько я понимаю, здесь вопрос в знании структуры данных и методах обращения к ним.
Использование: Только чтение. Описание: Тип: Неопределено. Доступность: Сервер, толстый клиент, внешнее соединение. Примечание: Данное свойство всегда имеет значение Неопределено, т.к. во встроенном языке не предусмотрена работа со значением данного свойства. При запуске конфигуратора в пакетном режиме из командной строки существует возможность выгрузить тексты модулей конфигурации. Для этого следует использовать параметр запуска /DumpConfigFiles с ключом –Module.
Тексты модулей выгрузил именно через /DumpConfigFiles , обработал и загрузил. всё быстро, культурно и чистенько (таблицу замен скопировал из Excel в макет), так же аккуратно и быстро хотелось и со внешними отчетами и обработками.
Где - то в иннете есть обработка оп декодированию текстов модулей которые не включены в поставку. Она работает так же и с обработками/отчетами. Она в начале все распаковывает потом обратно запаковывает. Я думаю на основании ее можно и твою проблему решить. Там по моему программка используется V8UPack.
В 1С можно защитить исходный код общих модулей и модулей объектов.
Код формы защитить нельзя.
Защитить можно только те модули, которые не содержат
Пароль на код модуля
Исходный код шифруется с помощью данного пароля, взломать без знания пароля невозможно.
Откройте любой код модуля.
Выберите пункт меню Текст - Установить Пароль. Введите пароль и подтверждение.
Исключение кода модуля
С помощью поставки конфигурации можно вообще исключить исходный код модуля из конфигурации - он будет храниться в скомпилированном виде. Причем делается это все очень просто.
Открываете конфигурацию.
Через пункт Конфигурация - Поставка конфигурации - Настройка поставки заходите в форму настройки поставки, выбираете текст каких модулей нужно исключить из поставки (можно выбрать сразу все для каждого уровня иерархии). Выберите также галочку "Файл поставки может использоваться для обновления".
Далее через пункт Конфигурация - Поставка конфигурации - Комплект поставки создаете CF-файл.
Теперь этот CF файл можно загружать у клиента - в этом CF файле нужные модули исключены (защищены от просмотра).
Настройки поставки хранятся в CF-файле, но к сожалению их нельзя изменить через сравнение конфигураций, только путем полной загрузки CF-файла. Поэтому лучше сделать один общий модуль "КлиентСервер", где хранить функции, которые используют директивы препроцессора, а все остальные модули закрыть.
Но к сожалению это слабая защита. Простенький пример подтверждает это.
ВНИМАНИЕ! ДАЛЕЕ ТЕКСТ ПИСАЛ НЕ АВТОР СТАТЬИ, ГЕНИЙ 1С
Просьба не обращаться к Гению с просьбами рассказать, как расшифровать байт-код или как его получить из закрытой конфигурации. Я этого никогда не делал.
Чтобы получить байт код, рекомендую открытый конфигуратор SQL для 1С8 (ищите на инфостарт)
Чтобы расшифровать байт-код, посмотрите обработки автора TormozIT там же.
Точнее не знаю.
Вот маленький кусок программы:
имеющий вот такой байт-код:
(он получается когда ставится пароль на модуль и когда делается поставка без текстов)
А вот программа декомпилирования этого примера, написать которую может каждый второй 1С-ник:
Описание байт-кода имеет разделы:
- описание алгоритма
- описание констант
- описание переменных
- описание процедур
Разбор байт-кода показывает, что движок 1С это простая стековая машина с "польской" системой вычислений.
Данная система исчисления хорошо знакома большинству программистов по калькуляторам БЗ-34 и другим этой серии.
Основываясь на этом можно, сказать об упрощенном понимании заложенном в приведенный алгоритм.
На самом деле, так называемый спусковой крючок для калькулятора не сам оператор как в приведенном алгоритме, а завершающий оператор "".
Не разбираемый в приведенном коде набор "", на самом деле возврат управления из выполняемого фрагмента на выше стоящий уровень.
Естественно, мы не приводим полный набор команд этого макро языка, составить список сможет, каждый второй 1С-ник, готовый потратить на это какое то время.
Приведу, только фрагмент:
№ п/п | Оператор | Количество данных подним в стеке | Наименование |
---|---|---|---|
1 | 56 | 1 | СокрЛП |
2 | 57 | 2 | Лев |
3 | 58 | 2 | Прав |
4 | 59 | 3 | Сред |
5 | 60 | 2 | Найти |
Как понятно, структура байт-кода такова:
Пример кода позволит разобрать дерево байт кода какой бы глубины оно не было (Не стоит думать, что приведенный код станет основой для написания полноценного декомпилятора для стековой машины 1С, т.к. он содержит упрощенный алгоритм разбора потока):
Второй приводимый фрагмент, рассматривает код более обобщенно по сравнению с предыдущим, но не претендует на абсолютную истину и написан только для демонстрации обобщенного взгляда на проблему.
Не забывайте о том, что декомпилируя код, вы можете нарушить право собственности на интелектуальный продукт.
Лень в очередной раз сподвигла меня на доработку существующего инструментария.
Для внешней обработки формируется следующая структура каталогов.
Пришлось повозиться с парсингом этих бинарных файлов. Зато опробовал новую (для меня) возможность платформы работы с бинарными файлами
Файл с данными обычной формы представляет из себя бинарный файл с блоками данных.
Блоки разделены секциями, состоящими из 3-х 16-ричных чисел, оканчивающихся числом 7fffffff.
В процессе анализа некоторого количества обработок обнаружилось 2 варианта расположения блоков.
Вариант 1
Вариант 2
Я остановился на следующем алгоритме определения необходимой секции, содержащей код модуля формы.
Данный алгоритм был получен империческим путем и не может слепо использоваться в продуктивной разработке!
Если Вы владеете информацией по данному формату, буду рад увидеть Ваш комментарий к данной публикации 🙂
Для первого варианта
Начало блока с текстом модуля формы совпадает с началом 4-го блока (необходимо только пропустить секцию с 3-мя цифрами), т.е. это в 10-чной системе счисления: 691(начало 4-го блока) + 8*3(3 16-чных числа) + 2(пробелы между числами). Т.е. считаю, что это всегда 717 (dec)
Для случая, приведенного на скриншоте (см. выше) получаем:
551(dec) + 722(dec) ,
где 551(dec) это 00000227(hex)
Для второго варианта
Анализируем секцию из 3-х чисел блока 3.
Для случая, приведенного на скриншоте (см. выше) получаем:
127773(dec) + 722(dec) + 26(dec) ,
Для случая, приведенного на скриншоте (см. выше) получаем:
471603(dec) ,
Для чтения из двоичного файла написал процедуру:
Редактор текста и модуля — это один из инструментов разработки. Он используется для редактирования текстовых документов и для редактирования программных модулей конфигурации.
Редактор текстов и модулей предоставляет пользователю все основные функции, необходимые при редактировании как простых текстов, так и текстов программных модулей. Конфигуратор 1С:Предприятия 8 использует этот редактор в двух режимах:- для редактирования текстовых документов;
- для редактирования текстов модулей (как составную часть редактора формы).
Редактирование текстовых документов
В режиме редактирования текстовых документов редактор поддерживает все стандартные функции редактирования текста:- создание нового документа или открытие одного из существующих документов;
- ввод и редактирование текста;
- сохранение отредактированного текста;
- печать текста.
В процессе редактирования текста можно переходить к конкретной строке документа, сдвигать блоки текста на позицию табуляции, выполнять поиск и замену и использовать закладки. Закладки могут быть размещены на любой строке текста:
В дальнейшем быстрый переход по закладкам возможен по сочетанию клавиш или команде меню:
Редактирование текстов модулей
Редактирование текстов модулей может выполняться в процессе создания формы объекта прикладного решения, непосредственно при разработке модулей объектов или всего приложения, и при редактировании внешнего текстового файла, содержащего текст модуля.
Помимо стандартных действий, присущих любому текстовому редактору, редактор текстов и модулей имеет ряд специфических особенностей:
Выделение цветом синтаксических конструкций
Для удобства редактирования текстов модулей редактор выделяет цветом элементы встроенного языка: ключевые слова, языковые константы, операторы, комментарии и пр.:
Разработчик может использовать цвета выделения, установленные по умолчанию, или настроить их самостоятельно. В общем случае система сама отслеживает необходимость включения режима выделения цветом. Однако в ситуации, когда система «не знает» о том, что редактируется текст модуля (например, если редактируется внешний текстовый файл, содержащий текст модуля), разработчик может включить режим выделения цветом вручную, используя меню конфигуратора:
Группировка
При просмотре модулей редактор позволяет объединять некоторые синтаксические конструкции языка в группы, сворачивать и разворачивать их. Использование группировки синтаксических конструкций позволяет лучше воспринимать различные части текста, а также переносить и копировать группы целиком:
Свернутый текст замещается специальным маркером, который позволяет просмотреть содержимое свернутой группы в виде подсказки:
Разработчику предоставляется возможность настраивать режим группировки, указывая, какие синтаксические конструкции могут группироваться, и каким должно быть исходное состояние группировки (свернутая или развернутая) при открытии документа. Таким образом, он может настроить, например, использование группировок «по максимуму»:
Области
Разработчик может выделять произвольные области текста, группировать и сворачивать их подобно тому, как сворачиваются инструкции циклов, условий, процедур и функций.
Каждой области текста, которую выделяет разработчик, он может дать собственное имя. Это позволяет простым и понятным образом выделять части модуля, имеющие сходный смысл.
Области могут быть вложены друг в друга или в другие группируемые конструкции языка.
Операции с блоками
Редактор позволяет выполнять ряд операций над выделенными блоками текста модуля: автоматическое форматирование, изменение отступа, добавление/удаление комментариев и переносов строк.
Форматирование модуля
Хорошим стилем написания модулей считается использование синтаксического отступа для выделения управляющих конструкций встроенного языка. Редактор позволяет автоматически форматировать текст при его вводе, и кроме этого, выполнять автоматическое форматирование уже введенного текста.
Результат автоматического форматирования:
Увеличение/уменьшение отступа
Наряду с автоматическим форматированием всего выделенного текста, редактор поддерживает также операции сдвига выделенного блока вправо или влево на шаг табуляции.
Это облегчает ручное форматирование больших фрагментов кода.
Добавление/удаление комментариев
Также редактор содержит очень удобную для разработчика функцию автоматической (одним нажатием мыши) установки и снятия комментариев на выделенный текст. Такая возможность часто используется при отладке модулей:
Добавление/удаление переноса строки
Использование добавления и удаления переноса строки часто применяется при переносе текстов запроса между модулем и, например, консолью запросов.
Таким образом, отладив запрос в консоли запросов, разработчик может просто скопировать текст запроса из консоли, вставить его в модуль и одним движением добавить перенос строки ко всем строкам текста запроса:
Переход по процедурам и функциям
В ситуации, когда модуль содержит большое количество процедур и функций, удобно использовать режим поиска процедур, который поддерживается редактором. Процедуры и функции отображаются в отдельном окне в порядке их расположения в модуле, однако разработчик может отсортировать их по алфавиту. Пиктограммы слева от названия обозначают имеющиеся процедуры и функции, а имена в угловых скобках соответствуют предопределенным процедурам, которые в настоящий момент отсутствуют, но могут быть размещены в данном модуле.
Если установить курсор на той процедуре, которая еще отсутствует в модуле, и нажать Перейти, конструктор автоматически вставит в текст модуля заголовок предопределенной процедуры.
Переход к определению процедур и функций
Редактор позволяет автоматически переходить к определению процедуры или функции, использованной в тексте модуля. Для этого достаточно установить курсор на имени нужной функции в теле модуля и выполнить команду контекстного меню или нажать «горячую» клавишу. В окне редактора будет открыт текст искомой процедуры или функции:
Контекстная подсказка
Редактор предоставляет средство контекстного ввода выражений с использованием системных объектов, их свойств, методов и пр. В процессе ввода текста или при нажатии комбинации клавиш редактор выводит контекстный список, позволяющий выбрать нужное свойство, метод, функцию и т. д., что позволяет быстро и правильно набирать тексты модулей:
Контекстная подсказка также работает и для параметров некоторых методов, если эти параметры задаются строковыми литералами.
Копирование имен объектов и реквизитов
При написании текста модуля разработчик может просто перетаскивать мышью имена объектов или их реквизитов из дерева метаданных в нужное место модуля:
Проверка модуля
Редактируемый модуль может быть проверен на правильность использования синтаксических конструкций встроенного языка, корректность обращений к методам и свойствам объектов «через точку», а также на корректность некоторых параметров, имеющих тип «Строка»:
Кроме этого конфигуратор поддерживает выполнение полной проверки всех модулей, содержащихся в прикладном решении.
В процессе работы с модулем разработчик имеет возможность получать контекстную подсказку по встроенному языку, используя синтакс-помощник. Для этого достаточно установить курсор на интересующий элемент языка и нажатием комбинации клавиш (или по контекстному меню) перейти к описанию этого элемента языка в синтакс-помощнике.
Ограничение доступа к модулю
Для большинства модулей прикладного решения можно установить пароль доступа, защищающий авторские права разработчика конфигурации. При попытке открыть защищенный модуль выводится диалог ввода пароля:
Использование шаблонов
При редактировании текстовых документов и модулей конфигуратор предоставляет разработчику возможность использовать механизм шаблонов для автоматической подстановки часто используемых фрагментов текста.
Читайте также: