Использование YAML в отладке

09.06.13

Разработка - Тестирование QA

Пример использования YAML вывода отладочной информации

Файлы

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

Наименование Скачано Купить файл
YML.epf
.epf 7,58Kb
10 2 500 руб. Купить
YML-file.epf
.epf 7,64Kb
3 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Все мы для отладки (да и не только) используем вывод некоторой иногда полезной информации. Как правило, используется старое доброе "Сообщить". Обычно это выглядит вот так:

СписокВидовДокументов = Новый Массив;
СписокВидовДокументов.Добавить("ПоступлениеТоваровУслуг");
СписокВидовДокументов.Добавить("РеализацияТоваровУслуг");
СписокВидовДокументов.Добавить("ПеремещениеТоваров");

Для Каждого мВидДокумента Из СписокВидовДокументов Цикл
    
    Сообщить("Обрабатывается " + мВидДокумента);
    
    Выборка = ПолучитьНекоторуюВыборку(мВидДокумента);
    Пока Выборка.Следующий() Цикл 
        
        Сообщить("Обрабатывается документ: " + Выборка.Ссылка);
        
    КонецЦикла;
    
КонецЦикла;

Результат:

Обрабатывается ПоступлениеТоваровУслуг
Обрабатывается документ: Поступление товаров и услуг 00000000016 от 29.10.2012 12:00:04
Обрабатывается документ: Поступление товаров и услуг 00000000017 от 27.11.2012 18:11:02
Обрабатывается документ: Поступление товаров и услуг 00000000018 от 27.11.2012 18:11:03
Обрабатывается документ: Поступление товаров и услуг 00000000019 от 27.11.2012 18:11:04
....
Обрабатывается РеализацияТоваровУслуг
Обрабатывается документ: Реализация товаров и услуг 00000000001 от 29.11.2012 17:18:12
....
Обрабатывается ПеремещениеТоваров
Обрабатывается документ: Перемещение товаров 00000000024 от 06.12.2012 17:51:27
Обрабатывается документ: Перемещение товаров 00000000033 от 12.12.2012 17:22:06
....

И всё хорошо, все рады, всё видно - можно кинуть сообщения начальнику, чтоб знал, какие документы были обработаны. Но можно сделать эту информацию чуточку удобнее:

СписокВидовДокументов = Новый Массив;
СписокВидовДокументов.Добавить("ПоступлениеТоваровУслуг");
СписокВидовДокументов.Добавить("РеализацияТоваровУслуг");
СписокВидовДокументов.Добавить("ПеремещениеТоваров");

Для Каждого мВидДокумента Из СписокВидовДокументов Цикл
    
    Сообщить("- Обрабатывается " + мВидДокумента);
    
    Выборка = ПолучитьНекоторуюВыборку(мВидДокумента);
    Пока Выборка.Следующий() Цикл 
        
        Сообщить("  - " + Выборка.Ссылка);
        
    КонецЦикла;
    
КонецЦикла;

В результате чего получим следующий вывод:

 

- Обрабатывается ПоступлениеТоваровУслуг
  - Поступление товаров и услуг 00000000016 от 29.10.2012 12:00:04
  - Поступление товаров и услуг 00000000017 от 27.11.2012 18:11:02
  - Поступление товаров и услуг 00000000018 от 27.11.2012 18:11:03
  - Поступление товаров и услуг 00000000019 от 27.11.2012 18:11:04
  .....
- Обрабатывается РеализацияТоваровУслуг
  - Реализация товаров и услуг 00000000001 от 29.11.2012 17:18:12
  .....
- Обрабатывается ПеремещениеТоваров
  - Перемещение товаров 00000000024 от 06.12.2012 17:51:27
  - Перемещение товаров 00000000033 от 12.12.2012 17:22:06
  - Перемещение товаров 00000000036 от 18.12.2012 16:46:44
  .....

 

Копипастим сие дело в Notepad++ (искренне надеюсь, что нечто подобное стоит у многих), включаем синтаксис YAML и видим:

npp_yaml_output

 

Основное преимущество YAML в том, что это по сути просто текст, но с минимально необходимой разметкой. Что делает его удобным для отладочного вывода? То, что в нём нет закрывающих тэгов: т.е., всё, что вы уже подали на вывод, является верно размеченным текстом. Это особенно важно, когда процесс прерывается по Ctrl+Break или по исключению.

Безусловно, реализация всего стандарта целиком - дело довольно муторное, но я думаю, редкий человек будет заниматься в 1С использованием YAML вместо XML в боевых целях. Маленькое несоответствие стандарту как-раз можно увидеть на картинке: минуты и секунды подкрашены чёрным цветом, а текст ДО них - синим. Всё дело в том, что первое двоеточие заставляет парсер воспринимать строку, как элемент Ключ: Значение. Дело исправляется обёрткой вывода в кавычки, но опять же - в целях быстрого отладочного вывода это совершенно не критично.

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

Кстати, для любителей библиотек могу привести набросанный на скорую руку код:

Перем мУровень;

Функция Уровень() Экспорт 
    Возврат мУровень;
КонецФункции

Функция Отступ(Дельта = 0)
    
    Р = "";
    
    Для Инд = 1 По мУровень + Дельта Цикл
        Р = Р + "  ";
    КонецЦикла;
    
    Возврат Р;
    
КонецФункции

Процедура ОткрытьРаздел(ИмяРаздела) Экспорт
    
    Сообщить("" + Отступ() + "- " + ИмяРаздела);
    мУровень = мУровень + 1;
    
КонецПроцедуры

Процедура СообщитьСОтступом(Сообщение, Дельта = 0)
    Сообщить("" + Отступ(Дельта) + Сообщение);
КонецПроцедуры

Процедура Вывести(Значение) Экспорт 
    
    Если ТипЗнч(Значение) = Тип("Массив") Тогда
        
        ОткрытьРаздел("");
        
        Для Каждого мЗначение Из Значение Цикл
            СообщитьСОтступом("- " + мЗначение, 1);
        КонецЦикла;
        
        ЗакрытьРаздел();
        
    ИначеЕсли ТипЗнч(Значение) = Тип("Структура") Тогда
        
        ОткрытьРаздел("");
        
        Для Каждого мКлючЗначение Из Значение Цикл
            СообщитьСОтступом("- " + мКлючЗначение.Ключ + ": " + мКлючЗначение.Значение, 1);
        КонецЦикла;
        
        ЗакрытьРаздел();
        
    Иначе 
        СообщитьСОтступом("- " + Значение);
    КонецЕсли;
    
КонецПроцедуры

Процедура ЗакрытьРаздел() Экспорт
    
    Если мУровень > 0 Тогда
        мУровень = мУровень - 1;
    КонецЕсли;
    
КонецПроцедуры

мУровень = 0;

И пример использования:

Перем МаксимальныйУровеньВложенности;

Функция ОпределитьНекотороеЗначение()
    Г = Новый ГенераторСлучайныхЧисел;
    Ч = Г.СлучайноеЧисло(0, 3);
    
    Если Ч = 0 Тогда
        
        М = Новый Массив;
        КоличествоЭлементов = Г.СлучайноеЧисло(1, 5);
        
        Для Инд = 1 По КоличествоЭлементов Цикл
            М.Добавить(Г.СлучайноеЧисло(0, 20) - 10);
        КонецЦикла;
        
        Возврат М;
        
    ИначеЕсли Ч = 1 Тогда
        
        Возврат Новый Структура("СлучайноеЧисло,ТекущаяДата", Г.СлучайноеЧисло(0, 10), ТекущаяДата());
        
    ИначеЕсли Ч = 2 Тогда
        
        Возврат Г.СлучайноеЧисло(0, 20) - 10;
        
    ИначеЕсли Ч = 3 Тогда
        
        Возврат "СтрокаСтрокаСтрока";
        
    КонецЕсли;
    
КонецФункции

Процедура Протестировать(Уровень, СлучайныйПараметр = Неопределено) Экспорт
    
    мТекущееЗначениеОтладки = ОпределитьНекотороеЗначение();
    ОткрытьРаздел("Вызов ");
    
    ОткрытьРаздел("Параметры вызова");
    Вывести("Уровень: " + Уровень);
    Вывести("Параметр1: " + СлучайныйПараметр);
    ЗакрытьРаздел();
    
    Вывести(мТекущееЗначениеОтладки);
    
    Если Уровень < МаксимальныйУровеньВложенности Тогда
        
        Г = Новый ГенераторСлучайныхЧисел;
        Ч = Г.СлучайноеЧисло(0, 10);
        
        Для Инд = 1 По Ч Цикл
            ОбработкаПрерыванияПользователя();
            Протестировать(Уровень + 1, Г.СлучайноеЧисло(0, 10));
        КонецЦикла;
        
    КонецЕсли;
    
    ЗакрытьРаздел();
    
КонецПроцедуры


Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    МаксимальныйУровеньВложенности = 5;
    Протестировать(1);
    
КонецПроцедуры

Вот пример возможного результата работы:

npp_yaml-lib_example_output

 

Для тех, кому не жалко инфобаксов - обработка приложена.

 

В заключение и немного продолжая тему YAML:

Если вместо Сообщить использовать вывод в файл, то полученную информацию можно будет использовать даже после аварийного завершения программы. Для многих языков программирования существуют парсеры YAML (для 1С: //infostart.ru/public/173076/), что даёт возможность автоматически обрабатывать полученный файл отладочной информации: понять, что было проделано и на каком месте, собственно, рухнуло.

Обработка с выводом в файл в приложении YML-file.epf. Хотя, разница там только в том, что вместо Сообщить используется ЗаписьТекста.ЗаписатьСтроку. Запускаем обработку, обрубаем процесс через диспетчер задач, открываем файл в Notepad++ и видим, что он без проблем парсится.

На этом всё. Благодарю за внимание.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Рефакторинг и качество кода Тестирование QA Разработчик Бесплатно (free)

Штатная страховка внутри цепочки обработки умеет прятать дефекты того шага, который стоит перед ней. У нас так и вышло: валидатор чинил результат постфактум, на выходе всё выглядело корректно, и никто не видел, что предыдущий шаг молча теряет данные. Вылезло это только на независимой проверке чужими глазами. Разбираю, чем инвариант отличается от сценарного теста и почему обычное умножение вытащило дефект из красивой метрики 0,997. Отдельно про 13 дублей, которые приехали из источника ещё до всякой обработки, и про две находки, которые оказались вообще не моими: они жили в эталонной реализации, откуда я списывал логику. Вторая часть про лимит выхода модели: почему обрезка ответа по длине это тихий ноль в мониторинге и как смена формата на дельты уронила выход до 4 951 токена. Есть отклонённые гипотезы и честный список того, чего мы так и не померили.

21.09.2026    386    nedomolkov.ivan    2    

1

Тестирование QA 1С 8.3 1С 8.5 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Зарплата и кадры государственного учреждения 3 1С:Управление торговлей 11 1С:Управление холдингом Абонемент ($m)

Обработка «Изменения движений» проверяет, меняются ли движения документов после перепроведения — без изменения данных в базе (перепроведение в транзакции с откатом). Удобна после обновления конфигурации, рефакторинга проведения и для регрессии доработок, в том числе сгенерированных ИИ. Можно запускать из формы или программно (регламент, HTTP-сервис, автотесты): задаёте период, виды документов и регистров, лимит выборки — получаете отчёт и таблицу расхождений.

10 стартмани

17.09.2026    393    1    MaxxiMiliSan    0    

0

DevOps и автоматизация разработки Тестирование QA Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Бесплатно (free)

Четыре года в интеграторе я работал с git и EDT. Git после хранилища полюбил сразу: видно, кто и что менял. С EDT сложнее: тормозит, ошибки при обновлении ERP, автономный сервер внутри него работает только с файловой базой. На новой работе команда захотела перейти на git, я развернул EDT, и оно на второй день разрушило проект при загрузке расширения. Тогда я решил дать команде git с привычным Конфигуратором и инструмент, который за минуту доносит коммит до базы через ibcmd, вместо получасовой загрузки из файлов. На новой работе разрешили ИИ, и я написал это приложение с его помощью: от чтения документации и первого ТЗ до идей в электричке. Впервые за годы снова почувствовал себя творцом, а не закрывателем задач. По дороге приросли выгрузка, объединение и проверка конфигурации по коммитам, YAxUnit и режим MCP-сервера. В статье: схемы, скриншоты, грабли и честный список ограничений. Ссылки пока нет: хочу понять, нужно ли это кому-то, кроме меня.

03.09.2026    11193    KatanaDragon511    29    

40

Инструменты администратора БД Инструментарий разработчика Тестирование QA Системный администратор Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)

В экосистеме 1С давно живут сотни инструментов: от Конфигуратора и Хранилища до систем тестирования, мониторинга, интеграции и CI/CD. Я собрал их в Ландшафт технологий, а теперь добавляю данные о реальном использовании. Рассказываю, как устроена карта, что показал первый опрос и почему в новой волне особенно нужны администраторы, аналитики и тестировщики.

01.09.2026    2402    mrXoxot    6    

25

DevOps и автоматизация разработки Мониторинг Тестирование QA Разработчик 1С:Предприятие 8 Бесплатно (free)

Платформа 1С давно вышла за рамки учетных систем. Сегодня это полноценная среда для создания сложных, высоконагруженных и распределенных приложений. А значит, и стек технологий современного разработчика кардинально изменился. Систематизируем весь инструментарий, который превращает 1С-программиста в инженера: от EDT и Git до автотестов на YAxUnit, контейнеризации приложений в Docker, мониторинга в Prometheus и организации шины данных на Kafka. Разберемся, зачем каждый инструмент нужен, как он вписывается в жизненный цикл разработки и с чего начать его внедрение.

25.08.2026    22424    mrXoxot    55    

84

HighLoad оптимизация Тестирование QA Разработчик 1С 8.3 Бесплатно (free)

Шесть внешних отчётов на боевой базе крупной сети переписали за неделю. По секундомеру ускорились четыре, в акт пошли три: у одного отчёта минус тринадцать процентов оказались выбросом нагрузки прода, а не эффектом кода. Поймал это чередующийся замер до/после в одном окне, обычные три прогона с метрикой "минимум" показывали ускорение уверенно. Дальше в тексте: почему построчная сверка выхода ломается ровно на тех правках, ради которых её заводят; из чего собирается повторяемый слепок результата и почему главную работу в нём делает нормализация, а хеш только сигнализация; где слепок не берётся вовсе и его заменяет по-колоночная сверка; чем проверять пересчёт итогов, чистку данных и операции с кластером. Отдельно - гипотеза, которую замер отклонил, и честный счёт, во что вся эта дисциплина обходится.

21.08.2026    1569    nedomolkov.ivan    0    

0

Тестирование QA Разработчик Бесплатно (free)

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

17.08.2026    1263    user2181343    0    

1

Тестирование QA Разработчик 1С 8.3 Россия Бесплатно (free)

Написать тест на 1С несложно. Дорого стоит привести базу в состояние, где прогон вообще стартует: семь шагов, каждый ломает запуск молча — без ошибки, без записи в журнале. И эту цену платит заново каждый новый человек на проекте. Разбираю молчаливый отказ окружения как класс проблем, показываю, почему его не закрывают ни документация, ни скрипт развёртывания, и предлагаю решение — фиксацию состояния в артефакте с машинно-проверяемым критерием приёмки. Подход проверен на сквозной задаче (первая задача экзамена «1С:Специалист по платформе» с юнит- и функциональными тестами), а затем перенесён на пул тестовых баз с типовыми конфигурациями. Отдельно — каталог симптомов и их настоящих причин, который пригодится независимо от инструментария.

13.08.2026    1626    chagbig    1    

0
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DoctorRoza 14.06.13 06:44 Сейчас в теме
Подход не совсем стандартный, однако он будет применим только программистом. Никакой начальник, тем более юэер, ничего копипастись в нод не будет! :)
2. dmpas 420 14.06.13 09:54 Сейчас в теме
(1) DoctorRoza,
юзеры всякие бывают :) наши вот даже в консоли отчётов маньячат.
3. gaglo 14.06.13 12:46 Сейчас в теме
.... я только что узнал, что выводил свои сообщения прозой YAML-ом!...
4. galinka1c8 21.06.13 22:01 Сейчас в теме
Не знаю как начальнику, но себе для отладки пригодится.
5. user1094657 10.12.21 14:21 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация