1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-02-10 19:41:26 +02:00

Merge pull request #173 from bia-technologies/feature/170

Добавить метод получения движений документа
This commit is contained in:
Koryakin Aleksey 2023-09-15 01:12:26 +03:00 committed by GitHub
commit 7003b6b18d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 182 additions and 14 deletions

View File

@ -184,6 +184,7 @@
// * КоличествоЗаписей - Число, Неопределено - Ограничение количества выбираемых записей
// * Условия - Массив из Строка - Коллекция выражений условий, которые будут объединены через `И`
// * ЗначенияПараметров - Структура - Набор параметров запроса
// * Порядок - Массив из Строка - Поля сортировки
Функция ОписаниеЗапроса() Экспорт
Описание = Новый Структура();
@ -191,6 +192,7 @@
Описание.Вставить("ВыбираемыеПоля", Новый Массив);
Описание.Вставить("КоличествоЗаписей", Неопределено);
Описание.Вставить("Условия", Новый Массив());
Описание.Вставить("Порядок", Новый Массив());
Описание.Вставить("ЗначенияПараметров", Новый Структура());
//@skip-check constructor-function-return-section
@ -198,4 +200,33 @@
КонецФункции
// Возвращает коллекцию движений документа
//
// Параметры:
// Документ - ДокументСсылка
// ИмяРегистра - Строка - Короткое или полное имя регистра движений
//
// Возвращаемое значение:
// Массив из Структура - Движения документа для клиента
// ТаблицаЗначений - Движения документа для сервера
Функция ДвиженияДокумента(Документ, Знач ИмяРегистра) Экспорт
Если СтрНайти(ИмяРегистра, ".") = 0 Тогда
РегистрыДвижения = ЮТМетаданные.РегистрыДвиженийДокумента(Документ);
Если НЕ РегистрыДвижения.Свойство(ИмяРегистра) Тогда
ВызватьИсключение "Документ не делает движений по регистру " + ИмяРегистра;
КонецЕсли;
ИмяРегистра = РегистрыДвижения[ИмяРегистра];
КонецЕсли;
Предикат = ЮТест.Предикат().Реквизит("Регистратор").Равно(Документ);
ОписаниеЗапроса = ЮТЗапросыКлиентСервер.ОписаниеЗапроса(ИмяРегистра, Предикат, "*");
ОписаниеЗапроса.Порядок.Добавить("НомерСтроки");
Возврат ЮТЗапросыВызовСервера.Записи(ОписаниеЗапроса, Ложь);
КонецФункции
#КонецОбласти

View File

@ -122,7 +122,7 @@
КонецЕсли;
Если ОдинРеквизит Тогда
Для каждого КлючЗнач Из Запись Цикл
Для Каждого КлючЗнач Из Запись Цикл
Возврат КлючЗнач.Значение;
КонецЦикла;
Иначе
@ -166,6 +166,11 @@
Строки.Добавить(")");
КонецЕсли;
Если ОписаниеЗапроса.Порядок.Количество() Тогда
Строки.Добавить("УПОРЯДОЧИТЬ ПО ");
Строки.Добавить(СтрСоединить(ОписаниеЗапроса.Порядок, ","));
КонецЕсли;
Запрос = Новый Запрос(СтрСоединить(Строки, Символы.ПС));
ЮТОбщий.ОбъединитьВСтруктуру(Запрос.Параметры, ОписаниеЗапроса.ЗначенияПараметров);
@ -254,8 +259,8 @@
СхемаЗапроса = Новый СхемаЗапроса();
СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст);
Для каждого ЗапросСЗ Из СхемаЗапроса.ПакетЗапросов Цикл
Для каждого КолонкаСЗ Из ЗапросСЗ.Колонки Цикл
Для Каждого ЗапросСЗ Из СхемаЗапроса.ПакетЗапросов Цикл
Для Каждого КолонкаСЗ Из ЗапросСЗ.Колонки Цикл
Псевдонимы.Добавить(КолонкаСЗ.Псевдоним);
КонецЦикла;
КонецЦикла;

View File

@ -66,7 +66,7 @@
Для Каждого Элемент Из Реквизиты Цикл
Реквизит = Элемент.Значение;
Если Реквизит.Обязательный И НЕ Контекст.Данные.Свойство(Реквизит.Имя) Тогда
Если Реквизит.Обязательный И НЕ ТекущаяЗапись.Свойство(Реквизит.Имя) Тогда
Значение = ЮТТестовыеДанныеСлужебный.Фикция(Реквизит.Тип);
ТекущаяЗапись.Вставить(Реквизит.Имя, Значение);
КонецЕсли;

View File

@ -102,4 +102,26 @@
КонецФункции
// Возвращяет набор регистров движений документа
//
// Параметры:
// Документ - ОбъектМетаданных
// - Тип - Тип объекта информационной базы
// - Строка - Полное имя объекта метаданных
// - см. ОписаниеОбъектаМетаданных
// - ДокументСсылка, ДокументОбъект - Объект информационной базы
// - ДокументМенеджер - Менеджер вида документа
//
// Возвращаемое значение:
// Структура - Регистры движений документа. Ключи - Имя регистра, Значение - Полное имя регистра
Функция РегистрыДвиженийДокумента(Документ) Экспорт
ОписаниеОбъектаМетаданных = ОписаниеОбъектаМетаданных(Документ);
ПолноеИмя = СтрШаблон("%1.%2", ОписаниеОбъектаМетаданных.ОписаниеТипа.ИмяКоллекции, ОписаниеОбъектаМетаданных.Имя);
Возврат ЮТМетаданныеПовтИсп.РегистрыДвиженийДокумента(ПолноеИмя);
КонецФункции
#КонецОбласти

View File

@ -49,4 +49,10 @@
КонецФункции
Функция РегистрыДвиженийДокумента(ПолноеИмя) Экспорт
Возврат ЮТМетаданныеСервер.РегистрыДвиженийДокумента(ПолноеИмя);
КонецФункции
#КонецОбласти

View File

@ -229,6 +229,26 @@
КонецФункции
Функция РегистрыДвиженийДокумента(ПолноеИмя) Экспорт
ОбъектМетаданных = ОбъектМетаданных(ПолноеИмя);
Если НЕ Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда
ВызватьИсключение "Движения доступны только для документов. Не поддерживается получение движений для " + ПолноеИмя;
КонецЕсли;
Регистры = Новый Структура;
Для Каждого Регистр Из ОбъектМетаданных.Движения Цикл
Регистры.Вставить(Регистр.Имя, Регистр.ПолноеИмя());
КонецЦикла;
Возврат Регистры;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@ -247,17 +267,11 @@
ИначеЕсли ТипЗначение = Тип("Строка") Тогда
ЧастиСтроки = СтрРазделить(Значение, ".");
ОбъектМетаданных = ОбъектМетаданныхИзСтроки(Значение);
Если ЧастиСтроки.Количество() = 2 Тогда
ТипыМетаданных = ЮТМетаданные.ТипыМетаданных();
ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]];
Если ОписаниеТипа <> Неопределено Тогда
ОбъектМетаданных = Метаданные[ОписаниеТипа.ИмяКоллекции][ЧастиСтроки[1]];
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗначение = Тип("Структура") И Значение.Свойство("ОписаниеТипа") И Значение.Свойство("Имя") Тогда
ОбъектМетаданных = Метаданные[Значение.ОписаниеТипа.ИмяКоллекции][Значение.Имя];
Иначе
@ -274,6 +288,29 @@
КонецФункции
Функция ОбъектМетаданныхИзСтроки(Значение)
ЧастиСтроки = СтрРазделить(Значение, ".");
Если ЧастиСтроки.Количество() = 2 Тогда
ТипыМетаданных = ЮТМетаданные.ТипыМетаданных();
ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]];
Если ОписаниеТипа <> Неопределено Тогда
ОбъектМетаданных = Метаданные[ОписаниеТипа.ИмяКоллекции].Найти(ЧастиСтроки[1]);
Если ОбъектМетаданных = Неопределено Тогда
ВызватьИсключение "Не найден объект метаданных " + Значение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ОбъектМетаданных;
КонецФункции
Процедура ДобавитьОписанияРеквизитов(КоллекцияРеквизитов, КоллекцияОписаний, Знач ЭтоКлюч)
Если ТипЗнч(ЭтоКлюч) = Тип("Строка") Тогда

View File

@ -30,6 +30,7 @@
.ДобавитьТест("Записи")
.ДобавитьТест("ЗначенияРеквизитовЗаписи")
.ДобавитьТест("ЗначениеРеквизитаЗаписи")
.ДобавитьТест("ДвиженияДокумента")
;
КонецПроцедуры
@ -330,4 +331,45 @@
КонецПроцедуры
Процедура ДвиженияДокумента() Экспорт
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документ.ПриходТовара")
.ФикцияОбязательныхПолей()
.ТабличнаяЧасть("Товары")
.ДобавитьСтроку()
.Установить("Сумма", ЮТест.Данные().СлучайноеПоложительноеЧисло(999999)) // иначе возможно переполнение
.ФикцияОбязательныхПолей()
.ДобавитьСтроку()
.Установить("Сумма", ЮТест.Данные().СлучайноеПоложительноеЧисло(999999)) // иначе возможно переполнение
.ФикцияОбязательныхПолей();
Документ = Конструктор.Провести();
ДанныеОбъекта = Конструктор.ДанныеОбъекта();
ЮТест.ОжидаетЧто(ЮТЗапросы.ДвиженияДокумента(Документ, "Взаиморасчеты"))
.Заполнено()
.ИмеетДлину(1)
.Свойство("[0].Регистратор").Равно(Документ)
.Свойство("[0].НомерСтроки").Равно(1)
.Свойство("[0].Контрагент").Равно(ДанныеОбъекта.Поставщик)
.Свойство("[0].Валюта")
.Свойство("[0].Сумма").Равно(ДанныеОбъекта.Товары[0].Сумма + ДанныеОбъекта.Товары[1].Сумма)
;
ЮТест.ОжидаетЧто(ЮТЗапросы.ДвиженияДокумента(Документ, "ТоварныеЗапасы"))
.Заполнено()
.ИмеетДлину(2)
.Свойство("[0].Регистратор").Равно(Документ)
.Свойство("[0].НомерСтроки").Равно(1)
.Свойство("[0].Товар").Равно(ДанныеОбъекта.Товары[0].Товар)
.Свойство("[0].Склад").Равно(ДанныеОбъекта.Склад)
.Свойство("[0].Количество").Равно(ДанныеОбъекта.Товары[0].Количество)
.Свойство("[1].Регистратор").Равно(Документ)
.Свойство("[1].НомерСтроки").Равно(2)
.Свойство("[1].Товар").Равно(ДанныеОбъекта.Товары[1].Товар)
.Свойство("[1].Склад").Равно(ДанныеОбъекта.Склад)
.Свойство("[1].Количество").Равно(ДанныеОбъекта.Товары[1].Количество)
;
КонецПроцедуры
#КонецОбласти

View File

@ -22,6 +22,7 @@
ЮТТесты
.ДобавитьТест("ОписаниеОбъектаМетаданных")
.ДобавитьТест("РегистрыДвиженийДокумента")
;
КонецПроцедуры
@ -46,6 +47,30 @@
КонецПроцедуры
Процедура РегистрыДвиженийДокумента() Экспорт
ЮТест.ОжидаетЧто(ЮТМетаданные.РегистрыДвиженийДокумента("Документ.Заказ"))
.ИмеетТип("Структура")
.НеЗаполнено();
ЮТест.ОжидаетЧто(ЮТМетаданные.РегистрыДвиженийДокумента("Документы.ОперацияПоУчетуТоваров"))
.ИмеетТип("Структура")
.Заполнено()
.Свойство("ТоварныеЗапасы").Равно("РегистрНакопления.ТоварныеЗапасы");
ЮТест.ОжидаетЧто(ЮТМетаданные.РегистрыДвиженийДокумента(ПредопределенноеЗначение("Документ.ПриходТовара.ПустаяСсылка")))
.ИмеетТип("Структура")
.Заполнено()
.ИмеетДлину(2)
.Свойство("ТоварныеЗапасы").Равно("РегистрНакопления.ТоварныеЗапасы")
.Свойство("Взаиморасчеты").Равно("РегистрНакопления.Взаиморасчеты");
ЮТест.ОжидаетЧто(ЮТМетаданные)
.Метод("РегистрыДвиженийДокумента").Параметр("РегистрНакопления.ТоварныеЗапасы")
.ВыбрасываетИсключение("Не поддерживается получение движений для РегистрыНакопления.ТоварныеЗапасы");
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции