Как в EDT сравнить таблицу значений до и после выполнения кода в отладке?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе с классического Конфигуратора на 1C:EDT (Enterprise Development Tools) многие разработчики сталкиваются с изменением привычных паттернов работы. Одной из самых частых проблем является отсутствие кнопки «Показать в табличном документе» (значок принтера) в окне вычисления выражений, которая в Конфигураторе позволяла мгновенно визуализировать таблицы значений, деревья значений и результаты запросов.

Рассмотрим подробно, как решать задачу сравнения состояния данных (например, таблицы значений) «До» и «После» выполнения функции в среде EDT, и разберем, как настроить среду, чтобы она корректно открывала файлы табличных документов.

Проблема визуального сравнения в EDT

В классическом Конфигураторе мы привыкли действовать так: ставим точку останова, вычисляем таблицу, выводим её в табличный документ, продолжаем отладку, снова выводим таблицу и сравниваем два окна визуально. В EDT панель «Переменные» (Variables) показывает структуру объекта, но не всегда дает наглядное представление большого массива данных для быстрого поиска изменений.

Более того, при попытке сохранить данные в файл .mxl и открыть его в EDT, разработчики часто видят не привычную таблицу, а XML-код (MOXCEL). Давайте разберем, как это исправить и какие инструменты сравнения предлагает нам платформа Eclipse, на базе которой построена EDT.

Способ 1: Вывод в табличный документ и настройка редактора MXL

Самый близкий к классическому методу способ — это программный вывод таблицы значений в файл. Однако, чтобы это работало удобно, нам нужно научить EDT воспринимать .mxl файлы как графические таблицы, а не как текст.

Шаг 1: Программный вывод данных

Вместо интерактивной кнопки используем код в консоли отладки (панель «Выражения» или код во временной обработке). Напишем вспомогательную процедуру или используем окно выражений для сохранения таблицы в файл:


// Пример кода для сохранения ТЗ в файл
ТЗ = МояФункцияПолученияДанных();
ТабДок = Новый ТабличныйДокумент;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Вывести(ТабДок);
ТабДок.Записать("C:\Temp\Debug_Before.mxl");

После выполнения функции сохраняем второй файл Debug_After.mxl.

Шаг 2: Решение проблемы с отображением MXL (MOXCEL)

Если при открытии сохраненного файла в EDT вы видите XML-теги, значит, ассоциация файлов настроена некорректно. Чтобы EDT открывала их во встроенном редакторе 1С:

  1. Нажмите правой кнопкой мыши на файл в навигаторе проекта.
  2. Выберите пункт Open With (Открыть с помощью).
  3. В выпадающем списке найдите редактор, связанный с 1С (обычно он называется Табличный редактор 1С:Предприятие или аналогично).

Чтобы закрепить этот выбор навсегда:

  1. Перейдите в меню Window -> Preferences (Окно -> Параметры).
  2. Найдите раздел General -> Editors -> File Associations (Общие -> Редакторы -> Ассоциации файлов).
  3. Найдите в списке расширение .mxl. Если его нет — добавьте.
  4. В нижнем списке выберите редактор 1С и нажмите кнопку Default (По умолчанию).

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

Способ 2: Использование встроенного инструмента сравнения (Diff)

EDT предоставляет мощнейший инструмент, которого нет в Конфигураторе — побайтовое и текстовое сравнение файлов (Diff). Это гораздо надежнее, чем «сравнивать глазками» в двух окнах, так как исключает человеческий фактор.

Алгоритм действий:

  1. Сохраните состояние таблицы «До» и «После» в два разных файла. Это могут быть .mxl, но для автоматического сравнения лучше использовать текстовые форматы (JSON или XML), так как они позволяют видеть конкретные изменившиеся строки.
  2. В панели Навигатор (Project Explorer) выделите оба файла, удерживая клавишу Ctrl.
  3. Нажмите правой кнопкой мыши на выделенные файлы.
  4. Выберите пункт Compare With -> Each Other (Сравнить с -> Друг с другом).

Откроется специальное окно сравнения, где слева будет старая версия, справа — новая, а все изменения будут подсвечены цветом. Линии, соединяющие блоки, покажут, где именно произошли вставки, удаления или изменения значений.

Способ 3: Сериализация в JSON для точного сравнения

Поскольку ТаблицаЗначений — это объект, который может содержать сложные типы данных, визуальное сравнение в табличном документе может быть обманчивым (например, представление ссылок одинаковое, а сами ссылки разные, как бывает при дублях). Сериализация в JSON позволяет увидеть «внутренности» данных.

Используйте следующий код в панели «Выражения» (Expressions) для быстрой выгрузки:


// Сериализация ТЗ в строку JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ТЗ, НазначениеТипаXML.Явное);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Далее эту строку можно сохранить в файл или просто скопировать в текстовый редактор

Получив две строки JSON (до и после), вы можете использовать встроенный в EDT инструмент сравнения (как описано в способе 2) или любой внешний инструмент (например, WinMerge, KDiff3). В этом случае вы увидите изменение не только значений, но и типов данных, если они произошли.

Почему это лучше, чем визуальный просмотр?

Визуальный контроль, к которому мы привыкли в Конфигураторе, имеет существенный недостаток. Представим ситуацию: в таблице есть колонка «Номенклатура». До выполнения функции там была ссылка на «Товар А» (Ref1), а после — ссылка на «Товар А» (Ref2). Это дубли.

Итог

Хотя отсутствие кнопки «Принтер» в EDT поначалу вызывает дискомфорт, инструменты среды разработки предлагают более профессиональный подход к анализу изменений:

  1. Настройте ассоциации файлов для корректного открытия .mxl.
  2. Используйте Compare With для автоматического поиска различий вместо визуального просмотра.
  3. Применяйте сериализацию в JSON для глубокого анализа данных, включая типы и уникальные идентификаторы.
← На главную