Использование 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 DevOps и автоматизация разработки Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.27.47.

5000 руб.

04.07.2022    14502    65    5    

41

DevOps и автоматизация разработки Тестирование QA Программист Пользователь 1С:Предприятие 8 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Зарплата и Управление Персоналом 3 и версии КОРП: 3.1.35.48.

5000 руб.

05.08.2024    6301    42    1    

20

Тестирование QA DevOps и автоматизация разработки Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Набор универсальных подсценариев для заполнения форм типовых объектов справочников и документов конфигураций ERP 2.5 и КА 2.5. Сценарии представляют собой feature-файлы для vanessa-automation с тегом @exportscenarios. Используются для разработки функциональных сценариев.

4270 руб.

26.01.2023    5369    8    2    

4

Тестирование QA DevOps и автоматизация разработки Программист Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.190.11.

5368 руб.

20.01.2022    11964    49    1    

23

Тестирование QA Программист Бесплатно (free)

Tantor Postgres 18 - масштабный релиз СУБД, за которым стоят месяцы тестирования, сотни часов нагрузочных прогонов и десятки исправлений, о которых пользователь никогда не узнает просто потому, что они были найдены и устранены до выхода версии. Александр Симонов, руководитель направления развития 1С в "Тантор Лабс", рассказывает, как устроен процесс тестирования изнутри - почему одного эталонного прогона недостаточно, что делать, когда ванильный PostgreSQL 18 ломает собственные оптимизации, и как Tantor Postgres приближается к той планке, которую MS SQL Server держал годами.

07.07.2026    397    Tantor    2    

6

Тестирование QA Программист Бесплатно (free)

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

29.06.2026    1688    alexandr_yang    4    

8

Тестирование QA Программист 1С:Предприятие 8 Бесплатно (free)

Как мы пришли к использованию Ванессы для автоматизации действий пользователей? Сначала я увидел в интернете лекцию Олега Филиппова про RPA. И когда встал вопрос про автоматизацию небольших процессов, то эта лекция у меня прекрасно соединилась с опытом тестирования программ с помощью Vanessa Automation. Минимум усилий, минимум ручного кода и высокая скорость внедрения. И самое главное, не надо менять программу. А если программа изменится, то алгоритм быстро поправить и дополнить.

19.06.2026    1015    swimdog    3    

7

Тестирование QA Программист Россия Бесплатно (free)

Разбираемся, какие виды тестирования нужно проводить при внедрении заказных бизнес-приложений. Что такое воронка «бесконечного тестирования». Чем синдром «сапера» отличается от синдрома «лудомана». А также можно ли полюбить тестирование.

18.06.2026    652    DmitryShostak    0    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация