Перейти к основному содержимому

Конструктор движений документа

YAXUnit предоставляет мощный инструмент для создания тестовых данных — Конструктор движений документа (ЮТест.Данные().КонструкторДвижений). Этот инструмент позволяет быстро и удобно формировать движения документов, что значительно упрощает процесс подготовки данных для тестов. Конструктор поддерживает работу с различными видами документов и регистров, а также автоматизирует генерацию фиктивных значений для реквизитов.

Основные возможности

  • Текучий интерфейс: Удобная цепочка вызовов для формирования данных.
  • Генерация фиктивных значений: Упрощает заполнение реквизитов, оставляя акцент на важных для теста данных.
  • Поддержка обязательных полей: Автоматически заполняет обязательные реквизиты.
  • Универсальность: Работает с любыми документами и регистрами движений.
  • Работа с клиентом: Умеет создавать данные с клиента и удалять их по окончании теста.
  • Обработка ошибок: Предоставляет понятные сообщения об ошибках.

Примеры использования

Кроме примеров ниже вы можете ознакомиться с тесты движка

Движения по регистру накопления

Рассмотрим пример формирования движений по регистру накопления "ОстаткиТоваров".

// Создаем пустой документ "ПриходнаяНакладная"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ПриходнаяНакладная");

// Формируем движения по регистру "ОстаткиТоваров"
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.Установить("Количество", 10)
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.Установить("Количество", 5)
.Записать();

Движения по регистру накопления с разными видами операций

Док = ЮТест.Данные().СоздатьДокумент("Документы.ПеремещениеТоваров");
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Номенклатура");
Количество = 100500;

// Создаем конструктор для регистра "ТоварныеЗапасы"
Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ТоварныеЗапасы");

// Приход на склад-получатель
Конструктор.ДобавитьСтроку()
.Установить("ВидДвижения", ВидДвиженияНакопления.Приход)
.Фикция("Склад")
.Установить("Товар", Товар)
.Установить("Количество", Количество);

// Расход со склада-отправителя
Конструктор.ДобавитьСтроку()
.Установить("ВидДвижения", ВидДвиженияНакопления.Расход)
.Фикция("Склад")
.Установить("Товар", Товар)
.Установить("Количество", Количество);

Конструктор.Записать();

// Проверка записанных движений
Движения = ЮТЗапросы.ДвиженияДокумента(Док, "ТоварныеЗапасы");
ЮТест.ОжидаетЧто(Движения)
.ИмеетДлину(2)
.Что(Движения[0].ВидДвижения).Равно(ВидДвиженияНакопления.Приход)
.Что(Движения[1].ВидДвижения).Равно(ВидДвиженияНакопления.Расход);

Движения по регистру бухгалтерии

Пример формирования проводок по регистру бухгалтерии "Хозрасчетный".

// Создаем пустой документ "ОперацияБухгалтерскийУчет"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ОперацияБухгалтерскийУчет");

// Формируем проводки по регистру "Хозрасчетный"
ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
.ДобавитьСтроку()
.ФикцияРеквизитов("СчетДт, СчетКт")
.Установить("Сумма", 1000)
.ДобавитьСтроку()
.ФикцияРеквизитов("СчетДт, СчетКт")
.Установить("Сумма", 500)
.Записать();

Движения по регистру расчета

Пример формирования движений по регистру расчета "НачислениеЗарплаты".

// Создаем пустой документ "НачислениеЗарплаты"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.НачислениеЗарплаты");

// Формируем движения по регистру "НачислениеЗарплаты"
ЮТест.Данные().КонструкторДвижений(Документ, "НачислениеЗарплаты")
.ДобавитьСтроку()
.ФикцияРеквизитов("Сотрудник, ВидРасчета")
.Установить("Сумма", 50000)
.ДобавитьСтроку()
.ФикцияРеквизитов("Сотрудник, ВидРасчета")
.Установить("Сумма", 30000)
.Записать();

Установка произвольного периода для движения

По умолчанию конструктор в качестве периода использует дату документа, но вы можете указать свой период для каждой строки движений.

Док = ЮТест.Данные().СоздатьДокумент("Документы.КорректировкаОстатков");
ПроизвольнаяДата = '20240101';

Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияОбязательныхПолей()
.Установить("Период", ПроизвольнаяДата);

Конструктор.Записать();

// Проверка периода в записи регистра
Запись = ЮТЗапросы.ДвиженияДокумента(Док, "ОстаткиТоваров")[0];
ЮТест.ОжидаетЧто(Запись.Период).Равно(ПроизвольнаяДата);

Автоматическое заполнением обязательных реквизитов

Док = ЮТест.Данные().СоздатьДокумент("Документы.АктВыполненныхРабот");

Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ВыполненныеУслуги")
.ДобавитьСтроку()
.ФикцияОбязательныхПолей()
.Установить("Сумма", 10000);

Конструктор.Записать();

// Проверка заполнения обязательных полей
Запись = ЮТЗапросы.ДвиженияДокумента(Док, "ВыполненныеУслуги");
ЮТест.ОжидаетЧто(Запись[0])
.Свойство("Услуга").Заполнено()
.Свойство("Контрагент").Заполнено()
.Свойство("Сумма").Равно(10000);

Контроль остатков

ДокПриход = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара");

Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары");
Склад = ЮТест.Данные().СоздатьЭлемент("Справочники.Склады");

Конструктор = ЮТест.Данные().КонструкторДвижений(ДокПриход, "ТоварныеЗапасы")
.ДобавитьСтроку()
.Установить("ВидДвижения", ВидДвиженияНакопления.Приход)
.Установить("Товар", Товар)
.Установить("Склад", Склад)
.Установить("Количество", 1);

КонструкторДокумента = ЮТест.Данные().КонструкторОбъекта("Документы.РасходТовара")
.ФикцияОбязательныхПолей()
.ТабличнаяЧасть("Товары")
.ДобавитьСтроку()
.Установить("Товар", Товар)
.Установить("Склад", Склад)
.Установить("Количество", 100);

// Попытка списания без остатка
ЮТест.ОжидаетЧто(КонструкторДокумента)
.Метод("Провести")
.ВыбрасываетИсключение("Недостаточно товара на складе");

Методы конструктора движений

Добавление строки движения

Метод ДобавитьСтроку добавляет новую запись в набор движений. При необходимости можно сразу установить значения реквизитов.

Функция ДобавитьСтроку(ЗначенияРеквизитов = Неопределено) Экспорт

Параметры:

  • ЗначенияРеквизитов (Структура, по умолчанию Неопределено): Устанавливаемые значения реквизитов новой записи.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.Установить("Номенклатура", ЮТест.Данные().Создать("Справочники.Номенклатура"));

Установка значения реквизита

Метод Установить позволяет задать значение конкретного реквизита текущей записи.

Функция Установить(ИмяРеквизита, Значение) Экспорт

Параметры:

  • ИмяРеквизита (Строка): Имя реквизита записи.
  • Значение (Произвольный): Значение реквизита.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
.ДобавитьСтроку()
.Установить("СчетДт", ЮТест.Данные().Создать("ПланыСчетов.Хозрасчетный"));

Установка значений нескольких реквизитов

Метод УстановитьРеквизиты позволяет задать сразу несколько реквизитов.

Функция УстановитьРеквизиты(ЗначенияРеквизитов) Экспорт

Параметры:

  • ЗначенияРеквизитов (Структура): Устанавливаемые значения реквизитов.

Пример:

Значения = Новый Структура;
Значения.Вставить("СчетДт", ЮТест.Данные().Создать("ПланыСчетов.Хозрасчетный"));
Значения.Вставить("СчетКт", ЮТест.Данные().Создать("ПланыСчетов.Хозрасчетный"));

ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
.ДобавитьСтроку()
.УстановитьРеквизиты(Значения);

Генерация фиктивных значений

Метод Фикция автоматически заполняет реквизит фиктивным значением, основываясь на его типе.

Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт

Параметры:

  • ИмяРеквизита (Строка): Имя реквизита записи.
  • РеквизитыЗаполнения (Структура, по умолчанию Неопределено): Значения реквизитов заполнения создаваемого объекта.
  • ОграничениеТипа (Тип, ОписаниеТипов, по умолчанию Неопределено): Используется для ограничения типа составного реквизита.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.Фикция("Номенклатура");

Генерация фиктивных значений для нескольких реквизитов

Метод ФикцияРеквизитов заполняет сразу несколько реквизитов фиктивными значениями.

Функция ФикцияРеквизитов(ИменаРеквизитов) Экспорт

Параметры:

  • ИменаРеквизитов (Строка или Массив из Строка): Имена реквизитов записи, разделенные запятыми или переданные в массиве.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад");

Заполнение обязательных полей

Метод ФикцияОбязательныхПолей автоматически заполняет обязательные реквизиты записи.

Функция ФикцияОбязательныхПолей() Экспорт

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияОбязательныхПолей();

Установка дополнительного свойства

Метод УстановитьДополнительноеСвойство позволяет задать дополнительное свойство набора записей.

Функция УстановитьДополнительноеСвойство(ИмяСвойства, Значение = Неопределено) Экспорт

Параметры:

  • ИмяСвойства (Строка): Имя дополнительного свойства.
  • Значение (Произвольный, по умолчанию Неопределено): Значение дополнительного свойства.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
.УстановитьДополнительноеСвойство("ПризнакДвижения", "Приход");

Получение данных строки

Метод ДанныеСтроки возвращает данные текущей записи набора.

Функция ДанныеСтроки() Экспорт

Пример:

Данные = ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.ДанныеСтроки();

Получение данных набора

Метод Данные возвращает данные всего набора записей.

Функция Данные() Экспорт

Пример:

Данные = ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.Данные();

Запись движений

Метод Записать фиксирует сформированные движения документа.

Процедура Записать(ОбменДаннымиЗагрузка = Ложь) Экспорт

Параметры:

  • ОбменДаннымиЗагрузка (Булево, по умолчанию Ложь): Признак записи с флагом ОбменДанными.Загрузка = Истина.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.Записать();

Заключение

Конструктор движений документа в YAXUnit — это мощный инструмент для создания тестовых данных, который значительно упрощает и ускоряет процесс тестирования. Его использование позволяет сосредоточиться на логике тестов, а не на рутинной подготовке данных.