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

05.07.24

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Генератор схемы компоновки данных (СКД), написание кода схемы программно (версия 001):
.epf 31,28Kb
14
14
3 SM
Скачать Купить за 2 450 руб.
Генератор схемы компоновки данных (СКД), написание кода схемы программно (версия 002):
.epf 33,73Kb
29
29
3 SM
Скачать Купить за 2 450 руб.

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

Обработка очень даже рабочая, использовалась на практике, но это не гарантирует её 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. ПолосаИзмерительнойДиаграммы
  4. ПолосыИзмерительнойДиаграммы

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

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

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

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

См. также

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

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

10000 руб.

02.09.2020    141506    777    391    

804

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

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

18000 руб.

06.10.2023    11763    31    6    

62

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

5400 руб.

17.05.2024    14443    36    29    

81

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

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

10000 руб.

10.11.2023    7406    27    4    

51

SALE! %

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

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

3600 2880 руб.

14.01.2013    182215    1105    0    

876

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

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

5000 руб.

07.02.2018    101261    243    97    

304

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

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

2400 руб.

24.09.2019    24580    17    15    

34

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

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    19535    7    8    

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

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

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

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

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

Спасибо!

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

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

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

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

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

В процедуре _СледующаяСтрокаКодаСКД по ТекстСтроки = "текст кода, который хотим подправить" ставим точку останова с условием. Далее находим откуда вызывается и в найденном фрагменте для типа можем менять прядок вывода, добавляем разделы, комментарии, пустые строки и любое форматирование... И... наслаждаемся.
15. obmailok 189 12.02.24 13:36 Сейчас в теме
(5)Смог убрать бОльшую часть генерации строк со значением по-умолчанию. Есть нюансы, но все-равно на тестовой СКД-шке код уменьшился на 50%.
11. rpgshnik 3753 07.02.24 16:25 Сейчас в теме
Я как-то пользовался этой https://infostart.ru/1c/tools/1376937/ это какое-то развитие или отдельное решение?
12. obmailok 189 08.02.24 08:09 Сейчас в теме
(11)Это отдельное решение. В указанной Вами обработке реализована генерация для ограниченного количества типов (например совсем не генерируются макеты, вложенные схемы). На примерах, которые я проверял, были ошибки с генерацией вложенных группировок и некоторых значений. Хотя это одна из лучших обработок, которые я смотрел. В итоге написал свою.
rpgshnik; +1 Ответить
13. rpgshnik 3753 08.02.24 08:18 Сейчас в теме
16. webester 26 21.02.24 07:22 Сейчас в теме
Рабочий день можно сказать сэкономлен. Просто взял кусок кода из обработки и вставил в общий модуль. Не надо разбираться, где какие типы, поля, как добавлять и прочее. Очень полезно, очень удобно. Автор пиши еще.
2ncom; obmailok; +2 Ответить
17. obmailok 189 22.02.24 07:21 Сейчас в теме
(16)Спасибо за оценку. Наработки то есть, но обычно это рабочие инструменты, которые постоянно дорабатываются под себя по ситуации. Не все выложишь.
18. tango 544 07.04.24 14:26 Сейчас в теме
(3) Очень интересно, спасибо
19. Светлый ум 407 12.04.24 08:16 Сейчас в теме
20. redtram 30 24.05.24 23:22 Сейчас в теме
Гениально :) намного быстрее чем лазить по всем примерам и смотреть как там что вставляется программно.
21. obmailok 189 05.07.24 10:46 Сейчас в теме
Дополнение к коду Функция ПисательЗначения:

	Иначе
		
		ОбъектМетаданных = Метаданные.НайтиПоТипу(ПроверяемыйТип);


Дополнить:

	ИначеЕсли ПроверяемыйТип = Тип("ТаблицаЗначений") Тогда
		ЗначениеСтрокой = "Новый ТаблицаЗначений";
	Иначе
		
		ОбъектМетаданных = Метаданные.НайтиПоТипу(ПроверяемыйТип);
Оставьте свое сообщение