Часто в процессе разработки или доработки внешних печатных форм возникают ситуации, когда отладка в клиент-серверном режиме затруднена или вовсе недоступна. В такие моменты разработчик оказывается в ситуации «слепого поиска», когда нужно вывести на печать данные, состав которых неочевиден. Рассмотрим пошагово, как проанализировать структуру объекта и извлечь нужные сведения с помощью встроенных средств языка 1С.
Если ваша переменная представляет собой строку ТаблицаЗначений (что часто встречается при работе с данными табличных частей документа), самый надежный способ узнать состав доступных полей — это перебор коллекции колонок самой таблицы. Для этого мы можем воспользоваться циклом Для Каждого, который позволит вывести имена всех доступных колонок через Сообщить.
Разберем пример кода для исследования структуры:
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
Сообщить(Колонка.Имя);
КонецЦикла;
Этот простой алгоритм выведет в окно сообщений полный перечень имен всех колонок, которые доступны в данной таблице. Это критически важно, когда вы не уверены, присутствует ли конкретный реквизит (например, Артикул) в выборке.
Если данные передаются не в таблице, а в виде коллекции типа Структура или Соответствие, перебор по колонкам не поможет. В этом случае мы должны перебирать ключи коллекции. Это позволит не только увидеть имена полей, но и сразу посмотреть значения, хранящиеся в них.
Для Каждого КлючИЗначение Из ДанныеСтруктуры Цикл
Сообщить("Поле: " + КлючИЗначение.Ключ + ", Значение: " + Строка(КлючИЗначение.Значение));
КонецЦикла;
Использование функции Строка() позволяет быстро привести значение к читаемому виду и вывести его в системный журнал или окно сообщений.
Если переменная, с которой вы работаете, получена в результате выполнения запроса (тип РезультатЗапроса), попытка обратиться к её метаданным будет неэффективной, так как структура полей задается непосредственно в тексте запроса. Чтобы понять, какие поля доступны для вывода, нам нужно проанализировать сам запрос.
Выполним следующие шаги:
Сообщить(Запрос.Текст);.Консоль запросов.ВЫБРАТЬ.Помните, что псевдонимы полей (например, НоменклатураНаименование), которые вы видите в модуле, зачастую являются результатом работы псевдонимов в запросе, а не реальными именами реквизитов объекта метаданных. Поэтому анализ текста запроса — единственный способ достоверно узнать, какие данные доступны для использования.
Когда тип объекта заранее неизвестен или структура слишком сложна, можно применить метод сериализации в формат XML или JSON. Это позволит «выгрузить» все данные объекта в текстовую строку, которую легко прочитать.
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, ОбъектДляАнализа);
Сообщить(ЗаписьXML.Закрыть());
Этот метод дает наиболее наглядное представление обо всех свойствах объекта, которые доступны для сериализации. Это отличный способ «заглянуть внутрь» переменной, не имея возможности поставить точку останова.
Если вы столкнулись с тем, что отладка внешних печатных форм не работает, обратите внимание на следующие моменты:
Дополнительные отчеты и обработки заново после каждого изменения.conf.cfg на сервере 1С. Параметры отладки должны быть разрешены для серверных вызовов.Используя эти методы, вы сможете успешно проводить диагностику кода даже в самых сложных условиях, где нет прямого доступа к отладчику.