При переходе с классического Конфигуратора на 1C:EDT (Enterprise Development Tools) многие разработчики сталкиваются с изменением привычных паттернов работы. Одной из самых частых проблем является отсутствие кнопки «Показать в табличном документе» (значок принтера) в окне вычисления выражений, которая в Конфигураторе позволяла мгновенно визуализировать таблицы значений, деревья значений и результаты запросов.
Рассмотрим подробно, как решать задачу сравнения состояния данных (например, таблицы значений) «До» и «После» выполнения функции в среде EDT, и разберем, как настроить среду, чтобы она корректно открывала файлы табличных документов.
В классическом Конфигураторе мы привыкли действовать так: ставим точку останова, вычисляем таблицу, выводим её в табличный документ, продолжаем отладку, снова выводим таблицу и сравниваем два окна визуально. В EDT панель «Переменные» (Variables) показывает структуру объекта, но не всегда дает наглядное представление большого массива данных для быстрого поиска изменений.
Более того, при попытке сохранить данные в файл .mxl и открыть его в EDT, разработчики часто видят не привычную таблицу, а XML-код (MOXCEL). Давайте разберем, как это исправить и какие инструменты сравнения предлагает нам платформа Eclipse, на базе которой построена EDT.
Самый близкий к классическому методу способ — это программный вывод таблицы значений в файл. Однако, чтобы это работало удобно, нам нужно научить EDT воспринимать .mxl файлы как графические таблицы, а не как текст.
Шаг 1: Программный вывод данных
Вместо интерактивной кнопки используем код в консоли отладки (панель «Выражения» или код во временной обработке). Напишем вспомогательную процедуру или используем окно выражений для сохранения таблицы в файл:
// Пример кода для сохранения ТЗ в файл
ТЗ = МояФункцияПолученияДанных();
ТабДок = Новый ТабличныйДокумент;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Вывести(ТабДок);
ТабДок.Записать("C:\Temp\Debug_Before.mxl");
После выполнения функции сохраняем второй файл Debug_After.mxl.
Шаг 2: Решение проблемы с отображением MXL (MOXCEL)
Если при открытии сохраненного файла в EDT вы видите XML-теги, значит, ассоциация файлов настроена некорректно. Чтобы EDT открывала их во встроенном редакторе 1С:
Чтобы закрепить этот выбор навсегда:
.mxl. Если его нет — добавьте.Теперь файлы будут открываться в привычном визуальном виде.
EDT предоставляет мощнейший инструмент, которого нет в Конфигураторе — побайтовое и текстовое сравнение файлов (Diff). Это гораздо надежнее, чем «сравнивать глазками» в двух окнах, так как исключает человеческий фактор.
Алгоритм действий:
.mxl, но для автоматического сравнения лучше использовать текстовые форматы (JSON или XML), так как они позволяют видеть конкретные изменившиеся строки.Ctrl.Откроется специальное окно сравнения, где слева будет старая версия, справа — новая, а все изменения будут подсвечены цветом. Линии, соединяющие блоки, покажут, где именно произошли вставки, удаления или изменения значений.
Поскольку ТаблицаЗначений — это объект, который может содержать сложные типы данных, визуальное сравнение в табличном документе может быть обманчивым (например, представление ссылок одинаковое, а сами ссылки разные, как бывает при дублях). Сериализация в JSON позволяет увидеть «внутренности» данных.
Используйте следующий код в панели «Выражения» (Expressions) для быстрой выгрузки:
// Сериализация ТЗ в строку JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ТЗ, НазначениеТипаXML.Явное);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Далее эту строку можно сохранить в файл или просто скопировать в текстовый редактор
Получив две строки JSON (до и после), вы можете использовать встроенный в EDT инструмент сравнения (как описано в способе 2) или любой внешний инструмент (например, WinMerge, KDiff3). В этом случае вы увидите изменение не только значений, но и типов данных, если они произошли.
Визуальный контроль, к которому мы привыкли в Конфигураторе, имеет существенный недостаток. Представим ситуацию: в таблице есть колонка «Номенклатура». До выполнения функции там была ссылка на «Товар А» (Ref1), а после — ссылка на «Товар А» (Ref2). Это дубли.
Хотя отсутствие кнопки «Принтер» в EDT поначалу вызывает дискомфорт, инструменты среды разработки предлагают более профессиональный подход к анализу изменений:
.mxl.