Волею судеб пришлось глубоко менять СКД программно. В попытках глубже разобраться в вопросе обратился к чужим наработкам. Но по факту не нашел ни одной достаточно полной, а некоторые были с откровенными ошибками (если кто знает хорошие примеры, сообщите в комментариях). Пришлось делать самому. На мой взгляд получилось неплохо, посему и решил поделиться. Уверен, что многим пригодится.
Обработка очень даже рабочая, использовалась на практике, но это не гарантирует её 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) то будет попытка отсеять генерацию срок с значениями, которые совпадают с значения по-умолчанию. Поэтому строго говоря название не точное, но короткое. На моём тестовом примере без потери полноты генерации удалось сократить число строк примерно вдвое. Впрочем вариант без отсева тоже имеет смысл для изменения вручную, чтоб не искать доступные поля в конфигураторе. Ну и для дополнительного контроля качества генерации.