Шпаргалка. Автоматическое тестирование внешних отчетов и обработок в нескольких информационных базах

15.05.20

Разработка - Инструментарий разработчика

Используем Автоматизированное тестирование на практике. Простой код для обновления и запуска внешних отчетов и обработок в нескольких ИБ. Создаем рабочее решение с нуля.
Проверено на
  1. Платформа 8.3.16.1224
  2. Файловые демонстрационные конфигурации
  3. УТ 11.4.11.88, КА 2.4.11.88, ERP 2.4.6.188, УТ 11.2.2.94

Обновление отчетов и обработок должно работать на конфигурациях с БП 3.0.
Запуск обработки надо настраивать для конкретной задачи.

Введение

Не нашел ни одного рабочего примера Автоматизированного тестирования 1С.
Такого, чтобы взять и запустить. Попадаются либо фрагменты кода с объяснениями, либо конфигурации которые надо изучать.Решил поделиться рабочим примером, который сам использую. Для реального использования надо только настроить под себя: прописать пути, имена и т.п..

Автоматизированное или автоматическое?

Технология (инструментарий) 1С называется “Автоматизированное тестирование”, а в названии статьи используется слово “Автоматическое” в смысле без участия человека. Более точное название статьи было бы “Автоматическое тестирование … с помощью Автоматизированного тестирования 1С”

Автоматизированное тестирование 1C

Автоматизированное тестирование (АТ 1С) - инструмент 1С для имитации интерактивных действий пользователя. В АТ 1С всегда участвуют два клиентских приложения. Одно приложение выполняет роль менеджера тестирования, второе приложение выполняет роль клиента тестирования.

Сам процесс такой: Менеджер запускает клиента и подключается к нему (примерно как по Com-соединению). Для управления клиентом используется набор объектов. Этот набор недоступен при стандартном запуске.

Предыстория

По требованиям пользователей опубликованная на Инфостарте обработка постепенно расширила свою область использования. В результате, при внесении любых изменений приходится проверять работу в четырех конфигурациях. Минимальная проверка заключается в запуске обработки.Было решено автоматизировать процесс.

На первый взгляд, просто в запуске обработки нет никакого тестирования.

Но обработка сделанная в УТ 11.4 может не пройти проверку синтаксиса  в УТ 11.2. Например, из-за использования различных версий БСП В УТ 11.4 и УТ 11.2.

Создание ИБ - менеджера тестирования

Конфигурация состоит из единственного модуля - модуля приложения. Также надо установить одно свойство конфигурации и режим запуска ИБ.

Итак,

  1. Создаем пустую информационную базу, назовем к примеру ТестМенеджер
  2. В свойствах конфигурации устанавливаем режим использования модальности
  3. Берем код под спойлером и копируем его в Модуль приложения
  4. Устанавливаем флаг
    Сервис => Параметры => Запуск 1С:Предприятия  => Дополнительно  => Автоматизированное тестирование => Запускать как менеджер тестирования
    .

ИБ ТестМенеджер готова. Остается настроить параметры тестирования (пути к файлам, имена и т.п) для своих нужд.

 
 Текст модуля приложения
Запуск конфигурации

При запуске получаем окно для выбора теста:

Состав теста

Тест состоит из 3 шагов:

  • Шаг 1.Обновление отчета или обработки в справочнике Дополнительные отчеты и обработки
  • Шаг 2.Запуск отчета или обработки
    Вызывается процедура ЗапускОбработки(). Код процедуры создается вручную с учетом конкретного отчета или обработки.
    Шаг можно отключить
  •  Шаг 3.Закрытие приложения после теста
    Шаг можно отключить
Настройка параметров теста

Параметры тестов задаются в функции ПолучитьМассивВсехТестов(). 

Каждый тест представлен структурой со следующими ключами:

  • ПредставлениеВСпискеВопроса
    • Наименование теста
    • “УТ 11.4”
  • Файл1СПредприятие
    • Путь к исполняемому файлу 1С
    • "C:\Program Files (x86)\1cv8\8.3.16.1224\bin\1cv8.exe"
  • КаталогИнформационнойБазы
    • Путь к папке ИБ
    • "D:\1SBases\Демо УТ 11.4"
  • Пользователь
    • Пользователь ИБ
    • “Администратор (ОрловАВ)";
  • Пароль
    • Пароль пользователя ИБ
  • НаименованиеОтчетаОбработки
    • Наименование отчета или обработки как в справочнике Дополнительные отчеты и обработки
    • “Печать договоров по шаблонам”. Может содержать знаки подстановки "*" и "?"
  • ФайлОтчетаОбработки
    • Путь к файлу обработки
    • "D:\ПечатьДоговоровПоШаблонам\20200430 ПечатьДоговоровПоШаблонам_УТ_КА_ERP.epf");
  • ЗапускОбработки
    • Флаг запуска Процедуры ЗапускОбработки (флаг шага 2 теста)
    • Ложь
  • СсылкаНаОбъектНазначения
    • Навигационная ссылка на объект, из формы которого запускается отчет или обработки
    • "e1cib/data/Справочник.ДоговорыКонтрагентов?ref=af8f0015e9b8c48d11e0e504cc1e1aca"
      Как получить ссылку:
  • НаименованиеОбъектаНазначения
    • Заголовок объекта назначения Может содержать знаки подстановки "*" и "?"
    • "Договор продажи - ТД-890 от 01.04.2015"
  • ЗакрыватьПриложениеПослеТеста
    • Флаг  закрытия приложения (флаг шага 3 теста)
    • Ложь
  • ПаузаДляЗакрытииПриложенмя
    • Задает таймаут после закрытия в секундах.
      Не нашел способа определить, что закрытие приложения завершилось. Сделано просто паузой. Без паузы возникают сбои
    • 20
  • ЗаписьЖурналаДействийПользователя
    • Приложение запускается с ключом /UILOGRECORDER
    • Истина
      Получим кнопки в окне приложения:
Инструменты для создания кода Автоматизированного тестирования 1С

Нам понадобятся два инструмента.
Первый инструмент - создание журнала действий пользователя уже есть в платформе.
Второй инструмент - обработку для создания кода надо скачать с ИТС.

  1. Создаем журнал действий пользователя. Для этого открываем конфигуратор клиента тестирования (например УТ 11.4) и запускаем:

    в запущенном приложении увидим кнопки для записи журнала:

    Запишем нужный фрагмент действий и получим XML текст, который надо где-то сохранить.
  2. Теперь нам надо скачать с ИТС обработку UILogToScript для преобразования журнала действий (XML текст) в код программы 1С. К сожалению, обработка UILogToScript отрабатывает не все ситуации. Например диалог открытия файла не поддерживается, обработка выдает ошибку. Но это не критично, потому что можно поискать решение в Интернете или сделать самому по аналогии.
    Надо сказать, что при небольшом опыте работы можно обходиться без обработки UILogToScript.
Поддержка совместимости

Поддержка совместимости - непростая задача.

  •  Пример 1. Рассмотрим форму дополнительной обработки в В УТ 11.2 2.94 (БСП 2.1.2.86
    :
    А вот форма дополнительной обработки в УТ11.4.11.88 (БСП 3.0.3.223):

    Видим, что заголовок нужной нам кнопки другой, А ведь в клиенте тестирования поиск объектов (элементов интерфейса) идет именно по заголовкам. В коде, который приведен в данной статье сделано просто: Если кнопка “Обновить из файла” не найдена, ищется кнопка “Загрузить из файла”
  •  Пример 2. Предупреждения безопасности при загрузке файла внешней обработки. В Платформе 8.3.16 выдается вопрос подтверждения, нажимаешь Продолжить и все.
  • В каких-то версиях платформы был вопрос подтверждения, а затем надо было повторно нажать кнопку “Обновить из файла”.
  •  Пример 3. Закрытие окна тестируемого приложения. Здесь тоже диалог закрытия зависит от версии платформы

Резюме: Универсальный тест для различных версий платформ и конфигураций сделать невозможно, но под свои задачи вполне доступно реализовать.

Диалоги безопасности

При написании кода теста пришлось учитывать вариативность предупреждений безопасности.
Вот описание действий пользователя для загрузки файла обработки в УТ 11.2. Конфигурация использует БСП 2.3

  •  Вариант 1. Файл загружается впервые
    • Нажатие кнопки Загрузить из файла
      • Диалог Выбор файла
        • Окно диалога:: Предупреждение безопасности
          • Нажатие кнопки Да
        • Окно диалога:: Это предупреждение ..., загрузите еще раз.
          • Нажатие кнопки Ок
    • Нажатие кнопки Загрузить из файла (Второй раз!!)
      • Диалог Выбор файла
  •  Вариант 2. Файл загружается повторно
    • Нажатие кнопки Загрузить из файла
      • Диалог Выбор файла
  • Нажатие кнопки Записать и закрыть
    • Окно диалога:: Необходимо перезакрыть окна
      • Нажатие кнопки Ок
Немного итогов

Создание автоматического теста с помощью Автоматизированного тестирования 1С задача трудоемкая, Но результат оправдывает себя.

Тестируемая обработка

Печать договоров по шаблонам

 

бесплатно free автоматическое автоматизированное тестирование обработки отчеты конфигурация testmanager testclient

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122225    673    389    

715

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 15300 руб.

06.10.2023    7309    22    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3558    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177765    1074    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99358    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18122    6    8    

40

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28113    3    10    

15
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Xershi 1475 04.05.20 22:09 Сейчас в теме
Насколько понимаю это аналог конфигурации с итс для решения узкой задачи?
2. pparshin 501 04.05.20 22:41 Сейчас в теме
Какая конфигурация имеется ввиду и какая узкая задача?
3. JohnyDeath 301 04.05.20 23:00 Сейчас в теме
Не нашел ни одного рабочего примера Автоматизированного тестирования 1С.

А вы что именно смотрели? Навскидку имеется 4 продукта (бесплатных и с открытым исходным кодом) по этой тематике.
4. pparshin 501 04.05.20 23:12 Сейчас в теме
(3) Приведите пример, пожалуйста.
5. kwazi 615 04.05.20 23:17 Сейчас в теме
6. pparshin 501 04.05.20 23:31 Сейчас в теме
(5) Это инструменты тестирования.
Понятно, что на тему автоматизированного тестирования есть много чего. Различные фреймворки, еще и с вариантами.
Я упоминал о "рабочем примере", т.е. то, что можно посмотреть и запустить.
Так сказать для понимания основ.
Можно считать, что данная публикация - "Hello, World" в области тестирования.
7. awk 741 05.05.20 21:56 Сейчас в теме
(6)
Для Hello world - как то сложновато, не находите? Как пример на ассемблере:
.model flat, stdcall
.data
message db 'Hello World',13,10,0
.code
.start:
      mov ah, 09h
      mov edx, offset message
      int 21h
end start
Показать


В остальных языках проще...

Hello world в тестировании на 1С - это:

Функция СообщитьПриветствие()
    Сообщить("Привет мир!");
КонецФункции


Функция Тест()
   Попытка
        СообщитьПриветствие();
        Сообщить("Привет мир! - Добро.");
   Исключение
        Сообщить("Привет мир! - Потуга.");
   КонецПопытки
КонецФункции
Показать
8. pparshin 501 05.05.20 22:45 Сейчас в теме
(7)
1.Имелся ввиду именно пример использования инструментария 1С, который называется "Автоматизированное тестирование". Комментарий был в контексте публикации.
2.Также была поставлена задача, чтобы пример был содержательным (полезным). И тут просто и коротко не получилось.
3.Да, еще для содержательности пример должен работать с реальной конфигурацией, например УТ 11.4
9. awk 741 06.05.20 07:57 Сейчас в теме
(8)
1. "Автоматизированное тестирование" - это полуфабрикат. Давать его нельзя, ни программисту, ни консультанту, т.к. результат очевиден. Первый забьет на него, при первой срочно-важной задаче, второй просто покрутит пальцем у виска. Это не означает что инструмент плох, это значит что он не для них.
2. Пока я вижу, что пример только может отталкивать от тестирования. Ибо на 1 кнопку 578 строк кода. Вы серьезно? Реальный сценарий Vanessa-behavior - это 30 строк псевдокода максимум.

Бонус:

В статье ошибочная посылка:

Автоматизированное тестирование (АТ 1С) - инструмент 1С для имитации интерактивных действий пользователя. В АТ 1С всегда участвуют две ИБ: одна база выполняет роль менеджера тестирования, вторая база выполняет роль клиента тестирования.


Используется клиент и менеджер тестирования. То есть ИБ может быть и одна!!!
18. pparshin 501 06.05.20 21:49 Сейчас в теме
(9) awk, спасибо еще раз за бонус. Исправил в тексте статьи.
19. awk 741 06.05.20 21:53 Сейчас в теме
(18) Да, не за что... Я плюс поставил. Статья не "Привет мир". Это не значит что она плохая...
11. JohnyDeath 301 06.05.20 10:18 Сейчас в теме
(4) Если я правильно понял задачу, которая заключается в "открыть и сформировать дополнительный отчет в базе после её обновления", то приведу пример как это делалось бы в Тестере http://test1c.com/ (он мне наиболее мил из всех текущих инструментов тестирования 1С)
1. Качаем и разворачиваем последний dt https://github.com/grumagargler/tester и называем эту базу "Тестер"
2. Запускаем Тестер в режиме менеджера тестирования. Если не сделали этого сразу, то Тестер вам подскажет в виде гиперссылки на начальном экране.
3. Добавляем в Тестер тестируемое приложение, где указывается порт, на котором будет запущен тест-клиент.
4. Запускаем тестируемую базу в режиме тест-клиента (/TESTCLIENT). Или пользуемся встроенными методами-сценариями для запуска нужных баз ("Тестер.Запустить")
5. В тестере создаем новый сценарий, нажимаем "микрофон" и записываем свои действия. Например вот что записалось автоматом микрофончиком, когда я переходил в доп обработки и оттуда открыл доп отчет с именем "Интерактивная ОСВ"
Подключить ();
ЗакрытьВсе();

Меню ( "Панель разделов / Администрирование" );
Меню ( "Меню функций / Настройки программы / Печатные формы, отчеты и обработки" );

Здесь ( "Печатные формы, отчеты и обработки" );
Нажать ( "!ОткрытьДополнительныеОтчетыИОбработки" );

Здесь ( "Дополнительные отчеты и обработки" );
Нажать ( "!ФормаНайти" );

Здесь ( "Найти" );
Установить ( "!Pattern", "Интерактивная ОСВ" );
Нажать ( "!Find" );

Здесь ( "Дополнительные отчеты и обработки" );
Список = Получить ( "!Список" );
Список.Выбрать ();

Здесь ( "Интерактивная ОСВ (Дополнительный отчет)" );
Нажать ( "!ВыполнитьКоманду" );

Здесь ( "Интерактивная ОСВ: * г." );
Нажать ( "!GenerateReport" );
Показать


Собственно всё.
Если есть ссылка на конкретный вариант отчета или обработку, то можно сразу открывать с помощью "Коммандоса" и не бродить по разделам и меню:
Коммандос ( "e1cib/command/Справочник.Номенклатура.Создать" );


Как тестировать сразу несколько приложений описано здесь: http://test1c.com/faqtesting/#_15
Суть такая: для каждого приложения выделяем свой порт в клиенте тестирования и указываем его в Тестере
12. pparshin 501 06.05.20 10:53 Сейчас в теме
(11) Да, Тестер самый дружелюбный из всех подобных продуктов.
У Ванесс порог вхождения значительно выше.
Чтобы пользоваться или каким-либо инструментом или создавать свой инструмент, надо понимать, как он устроен.
Для этого и служит данная публикации.

Что касается "Как тестировать несколько приложений" - рекомендация неверная.
Дело в том, что порт мы можем указать только в ком. строке запуска клиента тестирования.
А в методах объектов автоматизированного тестирования (например у объекта ТестируемоеПриложение) порт не используется.
13. JohnyDeath 301 06.05.20 11:28 Сейчас в теме
(12)
Что касается "Как тестировать несколько приложений" - рекомендация неверная.

Что именно не верно? Там по ссылке даже готовый пример есть запуска и тестирования двух разных конфигураций. Вот оно:
// Порты запуска приложений
портЕРП = 1538;
портБух = 1539;

// Мы хотим, чтобы Тестер фотографировал ошибки каждого приложения
// даже если их окна будут перекрывать друг друга. Маска поиска задается
// регулярным выражением. Поиск производится по заголовку главного окна
скриншотыЕРП = "Демонстрационная база / 1С:ERP.+";
скриншотыБух = "Демонстрационная база / Абдулов.+";

// ********************
// Запуск ERP
// ********************

п = Вызвать ( "Тестер.Запустить.Параметры" );
п.База = "ERP Управление предприятием 2 (демо)";
п.Пользователь = "Администратор (ОрловАВ)";
п.Порт = портЕРП;
п.Параметры = "/LRU"; // Язык интерфейса
п.Ждать = 45;
Вызвать ( "Тестер.Запустить", п );

// ********************
// Запуск Бухгалтерии
// ********************

п.База = "Бухгалтерия предприятия КОРП (демо)";
п.Пользователь = "Абдулов (директор)";
п.Порт = портБух; // Другой порт
Вызвать ( "Тестер.Запустить", п );

// ***********************************
// Работаем с запущенными приложениями
// ***********************************

// Системный параметр, задает маску поиска приложения по его заголовку
ScreenshotsLocator = скриншотыЕРП;

// Закроем окна в ЕРП
Подключить ( , портЕРП );
ЗакрытьВсё ();
Отключить ();

// Закроем окна в Бухгалтерии
ScreenshotsLocator = скриншотыБух;
Подключить ( , портБух );
ЗакрытьВсё ();
Отключить ();

// Откроем в ЕРП справочник номенклатура
ScreenshotsLocator = скриншотыЕрп;
Подключить ( , портЕРП );
Коммандос ( "e1cib/list/Справочник.Номенклатура" );

// Делаем что-то еще
// .....

// Закрываем приложения

Подключить ( , портЕРП );
Отключить ( истина ); // Параметр истина - приложение будет закрыто

Подключить ( , портБух );
Отключить ( истина );
Показать


Тут надо только вставить ваш код, который будет открывать нужные вам обработки. Запуск, подключение и отключение уже сделаны
14. JohnyDeath 301 06.05.20 11:33 Сейчас в теме
(12)
А в методах объектов автоматизированного тестирования (например у объекта ТестируемоеПриложение) порт не используется.


Из встроенной справки:

ТестируемоеПриложение (TestedApplication)
По умолчанию
Синтаксис:
Новый ТестируемоеПриложение(<ИмяКомпьютера>, <Порт>, <ИдентификаторКлиента>)
Параметры:
<ИмяКомпьютера> (необязательный)
Тип: Строка.
Имя или IP-адрес компьютера на котором запущено тестируемое приложение. Например: TEST1 или 165.15.27.11.
Значение по умолчанию: 127.0.0.1.
<Порт> (необязательный)
Тип: Число.
Номер порта TCP/IP, который нужно использовать для передачи данных. По умолчанию используется порт 1538.
15. pparshin 501 06.05.20 11:51 Сейчас в теме
(14) Вот за это спасибо. Признаю ошибку. Искал порт в методах, а он в конструкторе.
У меня не было необходимости держать одновременно 2 открытых приложения.
16. pparshin 501 06.05.20 12:06 Сейчас в теме
(11)
Коммандос
- Это всего-навсего метод ВыполнитьКоманду используется в примере
17. pparshin 501 06.05.20 14:21 Сейчас в теме
(11)
3. Добавляем в Тестер тестируемое приложение, где указывается порт, на котором будет запущен тест-клиент.
4. Запускаем тестируемую базу в режиме тест-клиента (/TESTCLIENT). Или пользуемся встроенными методами-сценариями для запуска нужных баз ("Тестер.Запустить")
5. В тестере создаем новый сценарий, нажимаем "микрофон" и записываем свои действия. Например вот что записалось автоматом микрофончиком, когда я переходил в доп обработки и оттуда открыл доп отчет с именем "Интерактивная ОСВ"


У меня развернут Тестер.
Поясните эти 3 пункта. Какие кнопки нажимать.
10. pparshin 501 06.05.20 09:45 Сейчас в теме
За бонус спасибо.
1.Автоматизированное тестирование 1С можно вполне использовать.
Ничего страшного нет. Много строк кода не написаны, а сгенерированы
2.Различные фреймворки - по определению являются полуфабрикатами.
3.Для использования Ванесс надо изучить-ознакомиться с Геркином, каким-бы простым он не был
4.Любой фреймворк надо развернуть/установить.
20. sapervodichka 6754 08.05.20 09:36 Сейчас в теме
(10) тут можно глянуть групповую проверку доработок, типа открыть, сформировать, записать https://infostart.ru/public/1056811/
21. pparshin 501 08.05.20 10:11 Сейчас в теме
(20) Да, я помню эту публикацию.
У меня была задача разобраться, что такое Автоматизированное тестирование.
Лучший способ - написать код. Поставил доп. условия для кода:
1.Использовать нативные инструменты 1С
2.Код должен быть хоть немного полезным.
В результате получившийся код реально использую для тестирования обработки, которую продвигаю на ИС.
Тест самой обработки в публикацию не включен.
sapervodichka; +1 Ответить
Оставьте свое сообщение