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:
commit
7003b6b18d
@ -184,6 +184,7 @@
|
||||
// * КоличествоЗаписей - Число, Неопределено - Ограничение количества выбираемых записей
|
||||
// * Условия - Массив из Строка - Коллекция выражений условий, которые будут объединены через `И`
|
||||
// * ЗначенияПараметров - Структура - Набор параметров запроса
|
||||
// * Порядок - Массив из Строка - Поля сортировки
|
||||
Функция ОписаниеЗапроса() Экспорт
|
||||
|
||||
Описание = Новый Структура();
|
||||
@ -191,6 +192,7 @@
|
||||
Описание.Вставить("ВыбираемыеПоля", Новый Массив);
|
||||
Описание.Вставить("КоличествоЗаписей", Неопределено);
|
||||
Описание.Вставить("Условия", Новый Массив());
|
||||
Описание.Вставить("Порядок", Новый Массив());
|
||||
Описание.Вставить("ЗначенияПараметров", Новый Структура());
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
@ -198,4 +200,33 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает коллекцию движений документа
|
||||
//
|
||||
// Параметры:
|
||||
// Документ - ДокументСсылка
|
||||
// ИмяРегистра - Строка - Короткое или полное имя регистра движений
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив из Структура - Движения документа для клиента
|
||||
// ТаблицаЗначений - Движения документа для сервера
|
||||
Функция ДвиженияДокумента(Документ, Знач ИмяРегистра) Экспорт
|
||||
|
||||
Если СтрНайти(ИмяРегистра, ".") = 0 Тогда
|
||||
РегистрыДвижения = ЮТМетаданные.РегистрыДвиженийДокумента(Документ);
|
||||
|
||||
Если НЕ РегистрыДвижения.Свойство(ИмяРегистра) Тогда
|
||||
ВызватьИсключение "Документ не делает движений по регистру " + ИмяРегистра;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяРегистра = РегистрыДвижения[ИмяРегистра];
|
||||
КонецЕсли;
|
||||
|
||||
Предикат = ЮТест.Предикат().Реквизит("Регистратор").Равно(Документ);
|
||||
ОписаниеЗапроса = ЮТЗапросыКлиентСервер.ОписаниеЗапроса(ИмяРегистра, Предикат, "*");
|
||||
ОписаниеЗапроса.Порядок.Добавить("НомерСтроки");
|
||||
|
||||
Возврат ЮТЗапросыВызовСервера.Записи(ОписаниеЗапроса, Ложь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -122,7 +122,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
Если ОдинРеквизит Тогда
|
||||
Для каждого КлючЗнач Из Запись Цикл
|
||||
Для Каждого КлючЗнач Из Запись Цикл
|
||||
Возврат КлючЗнач.Значение;
|
||||
КонецЦикла;
|
||||
Иначе
|
||||
@ -166,6 +166,11 @@
|
||||
Строки.Добавить(")");
|
||||
КонецЕсли;
|
||||
|
||||
Если ОписаниеЗапроса.Порядок.Количество() Тогда
|
||||
Строки.Добавить("УПОРЯДОЧИТЬ ПО ");
|
||||
Строки.Добавить(СтрСоединить(ОписаниеЗапроса.Порядок, ","));
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Новый Запрос(СтрСоединить(Строки, Символы.ПС));
|
||||
ЮТОбщий.ОбъединитьВСтруктуру(Запрос.Параметры, ОписаниеЗапроса.ЗначенияПараметров);
|
||||
|
||||
@ -254,8 +259,8 @@
|
||||
СхемаЗапроса = Новый СхемаЗапроса();
|
||||
СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст);
|
||||
|
||||
Для каждого ЗапросСЗ Из СхемаЗапроса.ПакетЗапросов Цикл
|
||||
Для каждого КолонкаСЗ Из ЗапросСЗ.Колонки Цикл
|
||||
Для Каждого ЗапросСЗ Из СхемаЗапроса.ПакетЗапросов Цикл
|
||||
Для Каждого КолонкаСЗ Из ЗапросСЗ.Колонки Цикл
|
||||
Псевдонимы.Добавить(КолонкаСЗ.Псевдоним);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
|
@ -66,7 +66,7 @@
|
||||
|
||||
Для Каждого Элемент Из Реквизиты Цикл
|
||||
Реквизит = Элемент.Значение;
|
||||
Если Реквизит.Обязательный И НЕ Контекст.Данные.Свойство(Реквизит.Имя) Тогда
|
||||
Если Реквизит.Обязательный И НЕ ТекущаяЗапись.Свойство(Реквизит.Имя) Тогда
|
||||
Значение = ЮТТестовыеДанныеСлужебный.Фикция(Реквизит.Тип);
|
||||
ТекущаяЗапись.Вставить(Реквизит.Имя, Значение);
|
||||
КонецЕсли;
|
||||
|
@ -102,4 +102,26 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращяет набор регистров движений документа
|
||||
//
|
||||
// Параметры:
|
||||
// Документ - ОбъектМетаданных
|
||||
// - Тип - Тип объекта информационной базы
|
||||
// - Строка - Полное имя объекта метаданных
|
||||
// - см. ОписаниеОбъектаМетаданных
|
||||
// - ДокументСсылка, ДокументОбъект - Объект информационной базы
|
||||
// - ДокументМенеджер - Менеджер вида документа
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Регистры движений документа. Ключи - Имя регистра, Значение - Полное имя регистра
|
||||
Функция РегистрыДвиженийДокумента(Документ) Экспорт
|
||||
|
||||
ОписаниеОбъектаМетаданных = ОписаниеОбъектаМетаданных(Документ);
|
||||
|
||||
ПолноеИмя = СтрШаблон("%1.%2", ОписаниеОбъектаМетаданных.ОписаниеТипа.ИмяКоллекции, ОписаниеОбъектаМетаданных.Имя);
|
||||
|
||||
Возврат ЮТМетаданныеПовтИсп.РегистрыДвиженийДокумента(ПолноеИмя);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -49,4 +49,10 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция РегистрыДвиженийДокумента(ПолноеИмя) Экспорт
|
||||
|
||||
Возврат ЮТМетаданныеСервер.РегистрыДвиженийДокумента(ПолноеИмя);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -229,6 +229,26 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция РегистрыДвиженийДокумента(ПолноеИмя) Экспорт
|
||||
|
||||
ОбъектМетаданных = ОбъектМетаданных(ПолноеИмя);
|
||||
|
||||
Если НЕ Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда
|
||||
ВызватьИсключение "Движения доступны только для документов. Не поддерживается получение движений для " + ПолноеИмя;
|
||||
КонецЕсли;
|
||||
|
||||
Регистры = Новый Структура;
|
||||
|
||||
Для Каждого Регистр Из ОбъектМетаданных.Движения Цикл
|
||||
|
||||
Регистры.Вставить(Регистр.Имя, Регистр.ПолноеИмя());
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Регистры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
@ -247,17 +267,11 @@
|
||||
|
||||
ИначеЕсли ТипЗначение = Тип("Строка") Тогда
|
||||
|
||||
ЧастиСтроки = СтрРазделить(Значение, ".");
|
||||
ОбъектМетаданных = ОбъектМетаданныхИзСтроки(Значение);
|
||||
|
||||
Если ЧастиСтроки.Количество() = 2 Тогда
|
||||
|
||||
ТипыМетаданных = ЮТМетаданные.ТипыМетаданных();
|
||||
ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]];
|
||||
Если ОписаниеТипа <> Неопределено Тогда
|
||||
ОбъектМетаданных = Метаданные[ОписаниеТипа.ИмяКоллекции][ЧастиСтроки[1]];
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
ИначеЕсли ТипЗначение = Тип("Структура") И Значение.Свойство("ОписаниеТипа") И Значение.Свойство("Имя") Тогда
|
||||
|
||||
ОбъектМетаданных = Метаданные[Значение.ОписаниеТипа.ИмяКоллекции][Значение.Имя];
|
||||
|
||||
Иначе
|
||||
|
||||
@ -274,6 +288,29 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОбъектМетаданныхИзСтроки(Значение)
|
||||
|
||||
ЧастиСтроки = СтрРазделить(Значение, ".");
|
||||
|
||||
Если ЧастиСтроки.Количество() = 2 Тогда
|
||||
|
||||
ТипыМетаданных = ЮТМетаданные.ТипыМетаданных();
|
||||
ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]];
|
||||
Если ОписаниеТипа <> Неопределено Тогда
|
||||
ОбъектМетаданных = Метаданные[ОписаниеТипа.ИмяКоллекции].Найти(ЧастиСтроки[1]);
|
||||
|
||||
Если ОбъектМетаданных = Неопределено Тогда
|
||||
ВызватьИсключение "Не найден объект метаданных " + Значение;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ОбъектМетаданных;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьОписанияРеквизитов(КоллекцияРеквизитов, КоллекцияОписаний, Знач ЭтоКлюч)
|
||||
|
||||
Если ТипЗнч(ЭтоКлюч) = Тип("Строка") Тогда
|
||||
|
@ -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].Количество)
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("ОписаниеОбъектаМетаданных")
|
||||
.ДобавитьТест("РегистрыДвиженийДокумента")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -46,6 +47,30 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РегистрыДвиженийДокумента() Экспорт
|
||||
|
||||
ЮТест.ОжидаетЧто(ЮТМетаданные.РегистрыДвиженийДокумента("Документ.Заказ"))
|
||||
.ИмеетТип("Структура")
|
||||
.НеЗаполнено();
|
||||
|
||||
ЮТест.ОжидаетЧто(ЮТМетаданные.РегистрыДвиженийДокумента("Документы.ОперацияПоУчетуТоваров"))
|
||||
.ИмеетТип("Структура")
|
||||
.Заполнено()
|
||||
.Свойство("ТоварныеЗапасы").Равно("РегистрНакопления.ТоварныеЗапасы");
|
||||
|
||||
ЮТест.ОжидаетЧто(ЮТМетаданные.РегистрыДвиженийДокумента(ПредопределенноеЗначение("Документ.ПриходТовара.ПустаяСсылка")))
|
||||
.ИмеетТип("Структура")
|
||||
.Заполнено()
|
||||
.ИмеетДлину(2)
|
||||
.Свойство("ТоварныеЗапасы").Равно("РегистрНакопления.ТоварныеЗапасы")
|
||||
.Свойство("Взаиморасчеты").Равно("РегистрНакопления.Взаиморасчеты");
|
||||
|
||||
ЮТест.ОжидаетЧто(ЮТМетаданные)
|
||||
.Метод("РегистрыДвиженийДокумента").Параметр("РегистрНакопления.ТоварныеЗапасы")
|
||||
.ВыбрасываетИсключение("Не поддерживается получение движений для РегистрыНакопления.ТоварныеЗапасы");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
Loading…
x
Reference in New Issue
Block a user