Использование 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++ и видим, что он без проблем парсится.

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

См. также

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

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

2160 руб.

05.08.2024    1277    12    1    

7

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

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

2400 руб.

04.07.2022    8368    38    1    

29

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

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

1800 руб.

20.01.2022    7783    19    0    

13

Облачные сервисы, хостинг Linux Тестирование QA Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

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

31.10.2024    1308    capitan    0    

0

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

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

21.10.2024    2780    leemuar    8    

22

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

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

30.08.2024    1292    Scorpion4eg    6    

7

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

Иногда возникают ситуации, когда надо развернуть тестовую базу клиента / свою на серверах Windows или Linux. Тестовые базы могут понадобиться в разных ситуациях: у клиента ошибка, на нашей базе она не воспроизводится, реализуем новый функционал и хотелось бы протестировать на Linux и т.д. А теперь представим, что это все на потоке. Что тестовых баз 1С не одна, а 20-30. И получаем проблему, что непонятно, занята она сейчас кем-то или нет. Предлагаю вариант решения этой проблемы.

28.06.2024    1511    Diversus    12    

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