Генератор схемы компоновки данных (СКД), написание кода схемы программно

05.02.24

Разработка - Инструментарий разработчика

По выбранной схеме компоновки данных генерирует программный код, который генерирует СКД, аналогичную исходной схеме. Есть дополнительные инструменты для просмотра дерева схемы, сравнение исходной схемы и полученной по коду, а также сравнение изменений в сгенерированном коде для исходной схемы и для измененной.

Скачать файлы

Наименование Файл Версия Размер
Генератор схемы компоновки данных (СКД), написание кода схемы программно (версия 002):
.epf 33,45Kb
6
.epf 33,45Kb 6 Скачать
Генератор схемы компоновки данных (СКД), написание кода схемы программно (версия 001):
.epf 31,28Kb
11
.epf 31,28Kb 11 Скачать

Волею судеб пришлось глубоко менять СКД программно. В попытках глубже разобраться в вопросе обратился к чужим наработкам. Но по факту не нашел ни одной достаточно полной, а некоторые были с откровенными ошибками (если кто знает хорошие примеры, сообщите в комментариях). Пришлось делать самому. На мой взгляд получилось неплохо, посему и решил поделиться. Уверен, что многим пригодится.

Обработка очень даже рабочая, использовалась на практике, но это не гарантирует её 100% полноту. Могут найтись типы, до которых я не дотянулся. Но код открыт и достаточно прост, и для генерации кода используется всего 6 процедур + вызов.

 

 

Так что дополнить по аналогии, при желании, будет несложно.

На момент создания публикации уже описана генерация кода для данных более 100 типов:

 
 Типы, доступные для генерации кода

Из минусов: обработку лучше использовать на толстом клиенте - так доступен конструктор СКД, но можно и обойтись тонким, если заранее заготовить схемы в конфигураторе.

На всякий случай напоминаю, что СКД использует описания типов и значения, к которым идет обращение при генерации, так что схему нужно открывать соответствующую конфигурации, в которой открыта обработка.

 

Источники СКД

 

Выбор источника СКД

 

Самый простой и естественный способ получить схему - воспользоваться конструктором (п 1) (если текст XML заполнен, то подхватит соответствующую схему), если Вы на толстом клиенте. Если клиент тонкий или есть заготовка в виде внешнего отчета или сохраненной схемы, то через выбор файла (п 2). И 1й и 2й способ приведет к генерации текста XML (п 3), но текст можно и просто вставить. Правильный текст XML будет преобразован в дерево (п 4), что намного удобней для просмотра. Атрибуты и значения будут видны в окнах (п 5) и (п 6). Дерево (п 4) может быть заполнено по любому XML файлу, так что обработку можно использовать просто для просмотра XML.

Если текст XML соответствует СКД, то можно переходить на вторую закладку для генерации кода. 

 

Генерация кода

 

Генерация кода

 

После генерации кода (п 1) формируется список разделов (п 2) и сам текст (п 3). Так как код формируется избыточно, список разделов призван упростить нахождение фрагмента, отвечающего за формирование соответствующего раздела. При выборе пункта из списка (п 2), курсор установится в начало фрагмента кода (п 3).

 

Дополнительные функции

 

Дополнительные функции

 

Если открыт толстый клиент, сгенерированный текст кода можно проверить, открыв конструктор СКД (п 1) при этом схема генерируется из кода. Изменив схему, можно сохранить новый текст XML и снова сгенерировать код (пригодится для сравнения кода). Если схема Вас устраивает, то можно сравнить XML исходной схемы и схемы сгенерированной по коду (п 2). Сравнение доступно и на тонком клиенте. Запомнить текущий код (п 3) следует ДО изменения схемы и новой генерации кода. Если Вы ранее сохраняли код, то можно текущий код из окна сравнить с ранее сохраненным кодом (п 4) и быстрее найти измененные места. Сравнение также доступно на тонком клиенте.

 

Сравнение

 

Процесс сравнения несколько "творческий". Некоторые изменения, которых нет, придется увидеть.

В основном это другое представление текста:

 

 

или отсутствие настроек, которые могут присутствовать в исходной схеме, но отсутствовать в созданном объекте схема или отсеяны генератором кода (например для ЗначениеПараметраНастроекКомпоновкиДанных) по Использованию. Ещё бывает вариант, когда свойства читаются и устанавливаются методом (например ПараметрСхемыКомпоновкиДанных, методы ПолучитьДоступныеЗначения и УстановитьДоступныеЗначения) - мог упустить.

 

 

Но все равно это проще, чем выискивать разницы через конструктор СКД глазками.

При сравнении кода тоже есть "творческий" момент. После нахождения разницы Вам все-таки придется понять, как "докопаться" до конкретного свойства схемы:

 

 

Но наличие кода это сильно упрощает.

PS: Последние доработки обработки велись на платформе 1С:Предприятие 8.3 (8.3.24.1342), но это не должно быть ограничение и обработка должна работать и на более ранних версиях. Проверить конкретный предел возможности нет, но и какие-то специфические методы не использовались.

 

Версия 002:

 

Добавлена генерация кода для типов:

 
 Добавленные типы
  1. ИспользуемаяКопияБазыДанных
  2. ИспользуемыеКопииБазыДанных
  3. ПолосыИзмерительнойДиаграммы

Добавлены новые возможности:

По кнопке "Сравнить СКД по кодам" (п. 1) можно сравнить между собой схемы, которые получаются после выполнения сохраненного кода и текущего кода из окна.

Если при генерации кода включена настройка "Проверять пустые значения" (п. 2) то будет попытка отсеять генерацию срок с значениями, которые совпадают с значения по-умолчанию. Поэтому строго говоря название не точное, но короткое. На моём тестовом примере без потери полноты генерации удалось сократить число строк примерно вдвое. Впрочем вариант без отсева тоже имеет смысл для изменения вручную, чтоб не искать доступные поля в конфигураторе. Ну и для дополнительного контроля качества генерации.

Проверено на следующих конфигурациях и релизах:

  • Зарплата и управление персоналом, редакция 3.1, релизы 3.1.28.84, 3.1.28.65

Конструктор генератор кода СКД схема компоновки данных сравнение программно

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 руб.

02.09.2020    115757    634    389    

685

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    6418    13    3    

35

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    176357    1063    0    

840

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Администрирование Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    2663    4    1    

26

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    98594    238    97    

292

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23250    15    15    

30

Менеджер конфигураций 1С

Инструментарий разработчика Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    6313    4    34    

16
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6678 06.02.24 12:30 Сейчас в теме
Читаю интересно, но с практической точки зрения, пока не понимаю как это использовать (не сталкивался)
Можете, пожалуйста, описать несколько ситуаций, где в реальных проектах это пригодилось?
2. obmailok 170 06.02.24 14:22 Сейчас в теме
(1)Ситуация действительно редкая, но на практике, например, пришлось реализовывать не стандартную расшифровку СКД. Стандартно если расшифровываешь сотрудником, то и видишь список сотрудников, расшифровываешь регистратором, то список регистраторов. А вот чтоб сотрудники по регистраторам или таблицей с колонками ещё чего-нибудь - надо писать код, формировать дерево или таблицу с описаниями, а может вообще диаграмму. Вот тут может и пригодится.
sapervodichka; +1 Ответить
3. ktb 616 06.02.24 20:23 Сейчас в теме
Посмотрите https://github.com/arkuznetsov/SerLib1C.
Там есть преобразование СКД в/из массивы и структуры. А далее в/из JSON.
В JSON сравнивать удобнее.
4. obmailok 170 07.02.24 08:05 Сейчас в теме
6. obmailok 170 07.02.24 11:54 Сейчас в теме
(3)Не понял прелесть промежуточного преобразования. Для тех же параметров значение сравнивается как "Значение": "/UnknownType({\"#\",fe368b30-a819-45c2-886d-759dc2d83a58})/" и совсем не понятно, что там с его свойствами. Уж лучше сразу схему в JSON сериализовать, но какого-то плюса я не увидел. Кстати в обработке это можно сделать, правда программно. Функция есть, а настройки нет, но при желании попробовать можно.
7. ktb 616 07.02.24 11:59 Сейчас в теме
(6) Хм, для ссылок не должно быть "UnknowType" в значениях, должно быть развернутое представление ссылки. А можно мне куда-нить кинуть пример СКД, с которым такое получается?
Промежуточное преобразование нужно было изначально для других целей.
9. obmailok 170 07.02.24 12:13 Сейчас в теме
(7)Сразу уточняю речь идет о

__Тип": "ЗначениеПараметраКомпоновкиДанных" из "__Тип": ПараметрыРедактированияКомпоновкиДанных", "Элементы"

И ссылки тут не могут быть.

А взял первый попавшийся отчет из типовой ЗУП (конкретно "Аккредитации специалистов")
Подозреваю, что это будет для любой СКД.

А еще меня смущают вложенные схемы. Там рекурсия напрашивается, а я её не увидел.
14. ktb 616 08.02.24 15:12 Сейчас в теме
(9) Я понял в чем косяк, это системные типы в таком виде пишутся, подпилю на днях, чтобы в человеко читаемом виде писались в JSON.

Спасибо!

А с рекурсией там все в порядке, тесты сохранения восстановления я на всех отчетах ERP гонял. :-)
obmailok; +1 Ответить
5. nikolav 47 07.02.24 11:53 Сейчас в теме
Отличная обработка, уже применил на практике, нужно было программно модифицировать схему отчета, чтобы сохранить его в таблицу значений. Обработка сэкономила несколько часов, не пришлось продираться через справку и тратить время на проверку предположений.

Пожелания
1. не генерировать код для значений, которые уже установлены по-умолчанию конструктором объекта (краткий режим)
2. сделать что-то с выравниванием пробелами, бесяче это. Для себя конечно исправил автозаменой по исходникам
3. разделять строки на группы, например строки добавления отбора отделять пустой строкой, иначе сливается в цельную простыню.
8. obmailok 170 07.02.24 12:05 Сейчас в теме
(5)Спасибо за оценку.

1. У самого была такая мысль, но для этого нужно знать значения по умолчанию для каждого типа, а с этим проблемы. Может есть какие-то мысли? Но с другой стороны видно что и где можно изменить, так что есть и плюсы.

2. Справились же, тем более, что код открыт. А вот обратное преобразование было бы проблематичней. Каждый волен выбирать.

3. Поиграйтесь с "ВывестиРаздел" при ЭтоКомментарий = Итина или добавьте _СледующаяСтрокаКодаСКД() в желаемое место (добавит пустую строку для разделения).
10. obmailok 170 07.02.24 12:58 Сейчас в теме
(5)На всякий случай моя методика правки генерируемого текста:

В процедуре _СледующаяСтрокаКодаСКД по ТекстСтроки = "текст кода, который хотим подправить" ставим точку останова с условием. Далее находим откуда вызывается и в найденном фрагменте для типа можем менять прядок вывода, добавляем разделы, комментарии, пустые строки и любое форматирование... И... наслаждаемся.
15. obmailok 170 12.02.24 13:36 Сейчас в теме
(5)Смог убрать бОльшую часть генерации строк со значением по-умолчанию. Есть нюансы, но все-равно на тестовой СКД-шке код уменьшился на 50%.
11. rpgshnik 3595 07.02.24 16:25 Сейчас в теме
Я как-то пользовался этой https://infostart.ru/1c/tools/1376937/ это какое-то развитие или отдельное решение?
12. obmailok 170 08.02.24 08:09 Сейчас в теме
(11)Это отдельное решение. В указанной Вами обработке реализована генерация для ограниченного количества типов (например совсем не генерируются макеты, вложенные схемы). На примерах, которые я проверял, были ошибки с генерацией вложенных группировок и некоторых значений. Хотя это одна из лучших обработок, которые я смотрел. В итоге написал свою.
rpgshnik; +1 Ответить
13. rpgshnik 3595 08.02.24 08:18 Сейчас в теме
16. webester 26 21.02.24 07:22 Сейчас в теме
Рабочий день можно сказать сэкономлен. Просто взял кусок кода из обработки и вставил в общий модуль. Не надо разбираться, где какие типы, поля, как добавлять и прочее. Очень полезно, очень удобно. Автор пиши еще.
Оставьте свое сообщение