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

09.06.13

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
YML.epf
.epf 7,58Kb
10
10 Скачать (1 SM) Купить за 1 850 руб.
YML-file.epf
.epf 7,64Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

Результат:

Обрабатывается ПоступлениеТоваровУслуг
Обрабатывается документ: Поступление товаров и услуг 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С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

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

2160 руб.

20.01.2022    8804    30    0    

16

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

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

2400 руб.

04.07.2022    9294    40    1    

31

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

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

3000 руб.

05.08.2024    2208    17    1    

11

Нейросети Рефакторинг и качество кода Тестирование QA Программист Платформа 1С v8.3 Бесплатно (free)

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

11.03.2025    4502    mrXoxot    52    

48

Рефакторинг и качество кода Тестирование QA Программист Платформа 1С v8.3 Бесплатно (free)

В последней статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, обсудим особенности тестирования после завершения рефакторинга платформеннозависимого кода

11.03.2025    490    it-expertise    0    

3

Тестирование QA Программист Платформа 1С v8.3 Бесплатно (free)

Внедрили мы, с моими девчонками, в тестовом режиме в конце прошлого года в свой рабочий процесс Сонар. Всем очень понравилось - оповещения об ошибках приходят, мы эти ошибки правим. Можно гордо на годовом собрании о достижениях отчитываться. А теперь, наконец-то, пришло время оценить результаты.

10.03.2025    1475    ovetgana    22    

3

Тестирование QA Программист Платформа 1С v8.3 1С:Документооборот Россия Абонемент ($m)

Обработка подготавливает тестовую базу для удобного тестирования и разработки.

1 стартмани

04.03.2025    392    0    FeDBuka    3    

0

Тестирование QA Программист Платформа 1С v8.3 Бесплатно (free)

Чтобы обеспечить высокое качество тиражной конфигурации 1С, ручного тестирования недостаточно – нужно учесть множество комбинаций функциональных опций, группы доступа и влияние подсистем друг на друга. Расскажем о промышленном тестировании флагманского продукта 1С:ERP и его дочерних конфигураций.

31.01.2025    9293    Pr-Mex    63    

43
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DoctorRoza 14.06.13 06:44 Сейчас в теме
Подход не совсем стандартный, однако он будет применим только программистом. Никакой начальник, тем более юэер, ничего копипастись в нод не будет! :)
2. dmpas 418 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 Сейчас в теме
Оставьте свое сообщение