1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2024-11-24 08:22:22 +02:00

Merge pull request #413 from bia-technologies/feature/120

120 / Конструктор движений
This commit is contained in:
Koryakin Aleksey 2024-09-25 00:59:10 +03:00 committed by GitHub
commit 11b81104aa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
42 changed files with 1982 additions and 473 deletions

View File

@ -1,6 +1,7 @@
---
tags: [Начало, Тестовые данные]
sidebar_position: 1
toc_max_heading_level: 4
---
# Программное создание тестовых данных
@ -91,68 +92,118 @@ sidebar_position: 1
### Методы создания данных в информационной базе
* Создание пустышек - примитивных объектов с минимальным заполнения. Полезно использовать когда вам нужна ссылка определенного типа, но не важно ее заполнение
* [`ЮТест.Данные().СоздатьЭлемент`](/api/ЮТТестовыеДанные#создатьэлемент) - Создает новый элемент справочника или плана видов характеристик
#### Создание пустышек
```bsl
Товар = ЮТест.Данные().СоздатьЭлемент(Справочники.Товары); // На основании менеджера
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары"); // На основании имени менеджера
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ОбменДаннымиЗагрузка = Истина;
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары", , , ПараметрыЗаписи); // Запись в режиме ОбменДанными.Загрузка = Истина
```
Создание записей в базе с минимальным заполнения (наименование, код, номер, дата).
Полезно использовать когда вам нужна ссылка определенного типа, но не важно ее заполнение.
* [`ЮТест.Данные().СоздатьДокумент`](/api/ЮТТестовыеДанные#создатьдокумент) - Создает новый документ
* [`ЮТест.Данные().СоздатьЭлемент`](/api/ЮТТестовыеДанные#создатьэлемент) - Создает новый элемент справочника или плана видов характеристик
```bsl
Товар = ЮТест.Данные().СоздатьДокумент(Документ.ПриходТовара); // На основании менеджера
Товар = ЮТест.Данные().СоздатьДокумент("Документ.ПриходТовара"); // На основании имени менеджера
```
* [`ЮТест.Данные().СоздатьГруппу`](/api/ЮТТестовыеДанные#создатьгруппу) - Создает новую группу справочника или плана видов характеристик
```bsl
Товар = ЮТест.Данные().СоздатьГруппу(Документ.ПриходТовара); // На основании менеджера
Товар = ЮТест.Данные().СоздатьГруппу("Документ.ПриходТовара"); // На основании имени менеджера
```
* [`ЮТест.Данные().Фикция`](/api/ЮТТестовыеДанные#фикция) - Создает новый объект на основании его типа
```bsl
Товар = ЮТест.Данные().Фикция(Тип("ДокументСсылка.ПриходТовара"));
Товар = ЮТест.Данные().Фикция(Новый ОписаниеТипов("ДокументСсылка.ПриходТовара"));
Товар = ЮТест.Данные().Фикция(Новый ОписаниеТипов("ДокументСсылка.ПриходТовара, ДокументСсылка.РасходТовара")); // Будет выбран случайный тип
```
* [`ЮТест.Данные().КонструкторОбъекта`](/api/ЮТТестовыеДанные#конструкторобъекта), с помощью которого вы можете создать объект информационной базы с необходимыми реквизитами.
Конструктор позволяет:
* В более компактной форме заполнять объект
* Имеет методы записи и проведения
* При возникновении ошибки оборачивает их в более понятные человеку описания
* Киллер фича - `Фикция`, `ФикцияРеквизитов` и `ФикцияОбязательныхПолей`. Устанавливает случайно сгенерированные значения реквизитов. Таким образом делается акцент на важных для теста реквизитах и экономит "строки" на генерацию ненужных значений
* Умеет создавать данные с клиента и [удалять их по окончании теста](test-data-deletion.md)
```bsl
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара")
.ФикцияРеквизитов("Поставщик, Склад")
.ФикцияОбязательныхПолей()
.ТабличнаяЧасть("Товары")
ОбщиеДанные = Новый Структура("ВидЦены, Поставщик", Закупочная, Конструктор.ДанныеОбъекта().Поставщик);
Для Инд = 1 По 3 Цикл
Конструктор.ДобавитьСтроку()
.Фикция("Товар")
.УстановитьРеквизиты(ОбщиеДанные)
.Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
.Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
.Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
КонецЦикла;
Возврат Конструктор.Провести();
Товар = ЮТест.Данные().СоздатьЭлемент(Справочники.Товары); // На основании менеджера
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары"); // На основании имени менеджера
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ОбменДаннымиЗагрузка = Истина;
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары", , , ПараметрыЗаписи); // Запись в режиме ОбменДанными.Загрузка = Истина
```
* [`ЮТест.Данные().СоздатьДокумент`](/api/ЮТТестовыеДанные#создатьдокумент) - Создает новый документ
```bsl
Товар = ЮТест.Данные().СоздатьДокумент(Документ.ПриходТовара); // На основании менеджера
Товар = ЮТест.Данные().СоздатьДокумент("Документ.ПриходТовара"); // На основании имени менеджера
```
* [`ЮТест.Данные().СоздатьГруппу`](/api/ЮТТестовыеДанные#создатьгруппу) - Создает новую группу справочника или плана видов характеристик
```bsl
Товар = ЮТест.Данные().СоздатьГруппу(Документ.ПриходТовара); // На основании менеджера
Товар = ЮТест.Данные().СоздатьГруппу("Документ.ПриходТовара"); // На основании имени менеджера
```
* [`ЮТест.Данные().Фикция`](/api/ЮТТестовыеДанные#фикция) - Создает новый объект на основании его типа
```bsl
Товар = ЮТест.Данные().Фикция(Тип("ДокументСсылка.ПриходТовара"));
Товар = ЮТест.Данные().Фикция(Новый ОписаниеТипов("ДокументСсылка.ПриходТовара"));
Товар = ЮТест.Данные().Фикция(Новый ОписаниеТипов("ДокументСсылка.ПриходТовара, ДокументСсылка.РасходТовара")); // Будет выбран случайный тип
```
#### Конструктор объекта
[`ЮТест.Данные().КонструкторОбъекта`](/api/ЮТТестовыеДанные#конструкторобъекта) - инструмент, с помощью которого вы можете создать объект информационной базы с необходимыми реквизитами.
Конструктор позволяет:
* В более компактной форме заполнять объект
* Имеет методы записи и проведения
* При возникновении ошибки оборачивает их в более понятные человеку описания
* Киллер фича - `Фикция`, `ФикцияРеквизитов` и `ФикцияОбязательныхПолей`. Устанавливает случайно сгенерированные значения реквизитов. Таким образом делается акцент на важных для теста реквизитах и экономит "строки" на генерацию ненужных значений
* Умеет создавать данные с клиента и [удалять их по окончании теста](test-data-deletion.md)
```bsl
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара")
.ФикцияРеквизитов("Поставщик, Склад")
.ФикцияОбязательныхПолей()
.ТабличнаяЧасть("Товары")
ОбщиеДанные = Новый Структура("ВидЦены, Поставщик", Закупочная, Конструктор.ДанныеОбъекта().Поставщик);
Для Инд = 1 По 3 Цикл
Конструктор.ДобавитьСтроку()
.Фикция("Товар")
.УстановитьРеквизиты(ОбщиеДанные)
.Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
.Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
.Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
КонецЦикла;
Возврат Конструктор.Провести();
```
#### Конструктор движения документа
[`ЮТест.Данные().КонструкторДвижений`](/api/ЮТТестовыеДанные#конструктордвижений) - инструмент, с помощью которого вы можете формировать необходимые для теста движения документа.
С его помощью вы можете сократить время на подготовку данных и упростить логику их создания.
Конструктор позволяет:
* В более компактной форме формировать движения объекта.
* При возникновении ошибки оборачивает их в более понятные человеку описания.
* Киллер фича - `Фикция`, `ФикцияРеквизитов` и `ФикцияОбязательныхПолей`. Устанавливает случайно сгенерированные значения реквизитов.
Таким образом делается акцент на важных для теста реквизитах и экономит "строки" на генерацию ненужных значений.
* Умеет создавать данные с клиента и [удалять их по окончании теста](test-data-deletion.md).
```bsl title="Пример установки движений документа"
// Создание пустышки документа, будет использоваться в качестве регистратора
Документ = ЮТест.Данные().СоздатьДокумент("Документы.УстановкаЦен");
// Формирование нужных проводок по регистру ЦеныТоваров
ЮТест.Данные().КонструкторДвижений(Документ, "ЦеныТоваров") // Инициализация конструктора
.ДобавитьСтроку() // Добавление записи в набор
.ФикцияРеквизитов("Товар, ВидЦен") // Заполнение фиктивными данными
.Установить("Цена", 0) // Установка цены
.Записать(); // Сохранение
// Создание дополнительных данных
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара");
Покупатель = ЮТест.Данные().СоздатьЭлемент("Справочники.Контрагенты");
// Инициализация конструктора
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "Продажи");
// Заполнение движений
Для Инд = 1 По 10 Цикл
Конструктор
.ДобавитьСтроку()
.Установить("Покупатель", Покупатель)
.ФикцияРеквизитов("Товар, Сумма");
КонецЦикла;
// Сохранение записей в базе
Конструктор.Записать();
```
### Загрузка данных из макетов
Работа с макетами описана в отдельной [статье](load-from-templates.md)

View File

@ -146,7 +146,7 @@
Приемник = СкопироватьСтруктуру(Источник, Истина);
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСоответствие(ТипИсточника) Тогда
Приемник = СкопироватьСоответствие(Источник, Истина);
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассива(ТипИсточника) Тогда
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассив(ТипИсточника) Тогда
Приемник = СкопироватьМассив(Источник, Истина);
ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда
Приемник = СкопироватьСписокЗначений(Источник, Истина);

View File

@ -20,6 +20,8 @@
Процедура Установить(Контекст, ИмяРеквизита, Значение) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
ОписаниеРеквизита(Контекст, ИмяРеквизита); // Проверка наличия реквизита
ТекущаяЗапись = ТекущаяЗапись(Контекст);
@ -29,6 +31,8 @@
Процедура УстановитьРеквизиты(Контекст, ЗначенияРеквизитов) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
ТекущаяЗапись = ТекущаяЗапись(Контекст);
Для Каждого ЗначениеРеквизита Из ЗначенияРеквизитов Цикл
@ -41,6 +45,8 @@
Процедура Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, Знач ОграничениеТипа) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
ЮТПроверкиСлужебный.ПроверитьТипПараметра(ОграничениеТипа, "Тип, ОписаниеТипов, Строка", "Фикция", "ЮТКонструкторТестовыхДанных", Истина);
ТекущаяЗапись = ТекущаяЗапись(Контекст);
@ -60,6 +66,8 @@
Процедура ФикцияОбязательныхПолей(Контекст) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
Реквизиты = Реквизиты(Контекст);
ТекущаяЗапись = ТекущаяЗапись(Контекст);
@ -77,6 +85,8 @@
Процедура ФикцияРеквизитов(Контекст, ИменаРеквизитов) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
ТекущаяЗапись = ТекущаяЗапись(Контекст);
ОписаниеРеквизитов = Новый Структура;
@ -97,6 +107,8 @@
Процедура ТабличнаяЧасть(Контекст, ИмяТабличнойЧасти) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
Контекст.ТекущаяТабличнаяЧасть = ИмяТабличнойЧасти;
Если ИмяТабличнойЧасти <> Неопределено Тогда
@ -107,6 +119,8 @@
Процедура ДобавитьСтроку(Контекст, ЗначенияРеквизитов) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
Запись = Новый Структура();
ДанныеТабличнойЧасти(Контекст).Добавить(Запись);
@ -118,12 +132,16 @@
Процедура УстановитьДополнительноеСвойство(Контекст, ИмяСвойства, Значение = Неопределено) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
Контекст.ДополнительныеСвойства.Вставить(ИмяСвойства, Значение);
КонецПроцедуры
Процедура УстановитьСсылкуНового(Контекст, Значение) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
Если ТипЗнч(Значение) = Тип("УникальныйИдентификатор") Тогда
УникальныйИдентификаторСсылки = Значение;
ИначеЕсли ЮТСтроки.ЭтоУникальныйИдентификаторСтрокой(Значение) Тогда
@ -136,8 +154,61 @@
КонецПроцедуры
Функция НовыйОбъект(Контекст) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
Возврат ЮТТестовыеДанныеСлужебный.НовыйОбъект(Контекст.Менеджер,
Контекст.Данные,
Контекст.ДополнительныеСвойства,
Контекст.УникальныйИдентификаторСсылки);
КонецФункции
Функция ДанныеСтрокиТабличнойЧасти(Контекст) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
Если ПустаяСтрока(Контекст.ТекущаяТабличнаяЧасть) Тогда
Возврат Неопределено;
КонецЕсли;
ДанныеТабличнойЧасти = ДанныеТабличнойЧасти(Контекст);
Если ЗначениеЗаполнено(ДанныеТабличнойЧасти) Тогда
Возврат ДанныеТабличнойЧасти[ДанныеТабличнойЧасти.ВГраница()];
Иначе
ВызватьИсключение "Сначала необходимо добавить строку табличной части";
КонецЕсли;
КонецФункции
Функция ДанныеСтрокиКоллекции(Контекст) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
Если ЗначениеЗаполнено(Контекст.Данные) Тогда
Возврат Контекст.Данные[Контекст.Данные.ВГраница()];
Иначе
ВызватьИсключение "Сначала необходимо добавить строку";
КонецЕсли;
КонецФункции
Функция ДанныеОбъекта(Контекст) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
Возврат Контекст.Данные;
КонецФункции
#Область Запись
Функция Записать(Контекст, ВернутьОбъект = Ложь, ОбменДаннымиЗагрузка = Ложь) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
ПараметрыЗаписи.УникальныйИдентификаторСсылки = Контекст.УникальныйИдентификаторСсылки;
@ -149,17 +220,10 @@
КонецФункции
Функция НовыйОбъект(Контекст) Экспорт
Возврат ЮТТестовыеДанныеСлужебный.НовыйОбъект(Контекст.Менеджер,
Контекст.Данные,
Контекст.ДополнительныеСвойства,
Контекст.УникальныйИдентификаторСсылки);
КонецФункции
Функция Провести(Контекст, ВернутьОбъект = Ложь) Экспорт
ПроверитьИнициализациюКонтекста(Контекст);
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
ПараметрыЗаписи.УникальныйИдентификаторСсылки = Контекст.УникальныйИдентификаторСсылки;
@ -171,27 +235,33 @@
КонецФункции
Функция ДанныеСтроки(Контекст) Экспорт
Процедура ЗаписатьДвиженияДокумента(Контекст, ОбменДаннымиЗагрузка) Экспорт
Если ПустаяСтрока(Контекст.ТекущаяТабличнаяЧасть) Тогда
Возврат Неопределено;
КонецЕсли;
ПроверитьИнициализациюКонтекста(Контекст);
ДанныеТабличнойЧасти = ДанныеТабличнойЧасти(Контекст);
Если ДанныеТабличнойЧасти.Количество() Тогда
Возврат ДанныеТабличнойЧасти[ДанныеТабличнойЧасти.ВГраница()];
Если ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗнч(Контекст.Документ)) Тогда
СсылкаНаДокумент = Контекст.Документ;
ИначеЕсли ЗначениеЗаполнено(Контекст.Документ.Ссылка) Тогда
СсылкаНаДокумент = Контекст.Документ.Ссылка;
Иначе
ВызватьИсключение "Сначала необходимо добавить строку табличной части";
ВызватьИсключение "Документ не записан";
КонецЕсли;
КонецФункции
Если НЕ ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
ВызватьИсключение "Не установлена ссылка на документ, владелец движений";
КонецЕсли;
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
ПараметрыЗаписи.ОбменДаннымиЗагрузка = ОбменДаннымиЗагрузка;
ЮТТестовыеДанныеСлужебный.ЗаписатьДвиженияРегистратора(СсылкаНаДокумент, Контекст.Данные, Контекст.Метаданные, ПараметрыЗаписи);
КонецПроцедуры
Функция ДанныеОбъекта(Контекст) Экспорт
Возврат Контекст.Данные;
КонецФункции
#КонецОбласти
#Область ИнициализацияКонструкторов
// Инициализирует конструктор тестовых данных
//
@ -216,10 +286,43 @@
КонецФункции
Функция ИнициализироватьКонструкторДвижений(Документ, ИмяРегистра) Экспорт
ЮТПроверкиСлужебный.ПроверитьТипПараметра(ИмяРегистра,
"Строка",
"ЮТест.Данные().КонструкторДвижений",
"ИмяРегистра");
Если НЕ ЮТМетаданные.ЭтоДокумент(Документ) Или ЮТТипыДанныхСлужебный.ЭтоМенеджер(ТипЗнч(Документ)) Тогда
ТекстОшибки = СтрШаблон("Некорректный тип параметра `Документ` метода `ЮТест.Данные().КонструкторДвижений`.
|Это должен быть документ (ссылка или объект), а получили `%1` (%2)",
ТипЗнч(Документ),
Документ);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Конструктор = Обработки.ЮТКонструкторДвижений.Создать();
#Иначе
//@skip-check use-non-recommended-method
Конструктор = ПолучитьФорму("Обработка.ЮТКонструкторДвижений.Форма.КлиентскийКонструктор"); // BSLLS:GetFormMethod-off
#КонецЕсли
//@skip-check unknown-method-property
Конструктор.Инициализировать(Документ, ИмяРегистра);
Возврат Конструктор;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область КонструкторыКонтекстов
// Новый контекст конструктора.
//
// Параметры:
@ -249,6 +352,27 @@
КонецФункции
Функция НовыйКонтекстКонструктораДвижений(Документ, ИмяРегистра) Экспорт
ОписаниеРегистра = ЮТМетаданные.ОписаниеРегистраДвиженийДокумента(Документ, ИмяРегистра);
Если ОписаниеРегистра = Неопределено Тогда
ВызватьИсключение СтрШаблон("Документ %1 не делает движений по регистру ""%2""", Документ, ИмяРегистра);
КонецЕсли;
Контекст = Новый Структура();
Контекст.Вставить("Документ", Документ);
Контекст.Вставить("Данные", Новый Массив());
Контекст.Вставить("Метаданные", ОписаниеРегистра);
Контекст.Вставить("ДополнительныеСвойства", Новый Структура());
//@skip-check constructor-function-return-section
Возврат Контекст;
КонецФункции
#КонецОбласти
Функция ДанныеТабличнойЧасти(Контекст)
Возврат Контекст.Данные[Контекст.ТекущаяТабличнаяЧасть];
@ -292,7 +416,7 @@
Функция Реквизиты(Контекст)
Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда
Если ФокусНаТабличнойЧасти(Контекст) Тогда
Возврат Контекст.Метаданные.ТабличныеЧасти[Контекст.ТекущаяТабличнаяЧасть];
Иначе
Возврат Контекст.Метаданные.Реквизиты;
@ -306,7 +430,7 @@
Если НЕ Реквизиты.Свойство(ИмяРеквизита) Тогда
ИмяОсновнойТаблицы = ЮТМетаданные.НормализованноеИмяТаблицы(Контекст.Метаданные);
Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда
Если ФокусНаТабличнойЧасти(Контекст) Тогда
Пояснение = СтрШаблон("Табличная часть `%1.%2` не содержит реквизит `%3`", ИмяОсновнойТаблицы, Контекст.ТекущаяТабличнаяЧасть, ИмяРеквизита);
Иначе
Пояснение = СтрШаблон("`%1` не содержит реквизит `%2`", ИмяОсновнойТаблицы, ИмяРеквизита);
@ -321,8 +445,10 @@
Функция ТекущаяЗапись(Контекст)
Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда
Возврат ДанныеСтроки(Контекст);
Если ФокусНаТабличнойЧасти(Контекст) Тогда
Возврат ДанныеСтрокиТабличнойЧасти(Контекст);
ИначеЕсли ЭтоКонструкторКоллекции(Контекст) Тогда
Возврат ДанныеСтрокиКоллекции(Контекст);
Иначе
Возврат Контекст.Данные;
КонецЕсли;
@ -336,4 +462,24 @@
КонецПроцедуры
Функция ФокусНаТабличнойЧасти(Контекст)
Возврат Контекст.Свойство("ТекущаяТабличнаяЧасть") И ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть);
КонецФункции
Функция ЭтоКонструкторКоллекции(Контекст)
Возврат ЮТТипыДанныхСлужебный.ЭтоМассив(ТипЗнч(Контекст.Данные));
КонецФункции
Процедура ПроверитьИнициализациюКонтекста(Контекст)
Если Контекст = Неопределено Тогда
ВызватьИсключение "Контекст не инициализирован. Вызовите соответствующий метод конструктор из `ЮТест.Данные()` перед использованием.";
КонецЕсли;
КонецПроцедуры
#КонецОбласти

View File

@ -307,6 +307,30 @@
КонецФункции
// Возвращает описание регистра движений документа.
//
// Параметры:
// Документ - ДокументСсылка, ДокументОбъект, ДокументМенеджер - Документ или менеджер
// - ОбъектМетаданных, Тип - Метаданные или тип документа
// - Строка - Полное имя объекта метаданных
// ИмяРегистра - Строка - Имя регистра движений.
//
// Возвращаемое значение:
// Структура - Описание регистра движений документа
// Неопределено - Документ не делает движений по указанному регистру
Функция ОписаниеРегистраДвиженийДокумента(Документ, ИмяРегистра) Экспорт
ПолноеИмяРегистра = Неопределено;
Если НЕ РегистрыДвиженийДокумента(Документ).Свойство(ИмяРегистра, ПолноеИмяРегистра) Тогда
Возврат Неопределено;
КонецЕсли;
//@skip-check constructor-function-return-section
Возврат ОписаниеОбъектаМетаданных(ПолноеИмяРегистра);
КонецФункции
// Возвращает текущую версию тестового движка (YAxUnit)
//
// Возвращаемое значение:

View File

@ -120,8 +120,8 @@
ЮТНастройкиВыполнения.КаталогПроекта(),
Параметры.ПолныйПуть);
ПолноеИмяСервер = ЮТФайлы.ОбъединитьПути(Результат.СохраняемыйКонтекстСервер.РабочийКаталог, Параметры.ПутьКФайлуПроекта);
Результат.СохраняемыйКонтекстСервер = РезультатПередачиФайлов;
ПолноеИмяСервер = ЮТФайлы.ОбъединитьПути(Результат.СохраняемыйКонтекстСервер.РабочийКаталог, Параметры.ПутьКФайлуПроекта);
Результат.СохраняемыйКонтекстСервер.Вставить("ПолноеИмя", ПолноеИмяСервер);
КонецЕсли;

View File

@ -59,7 +59,7 @@
Результат = СоответствияРавны(Данные1, Данные2);
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассива(ТипЗначения) Тогда
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассив(ТипЗначения) Тогда
Результат = МассивыРавны(Данные1, Данные2);
@ -362,7 +362,7 @@
ИскомоеЗначениеНайдено = СтрНайти(ПроверяемоеЗначение, ОжидаемоеЗначение) > 0;
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассива(ТипПроверяемогоЗначения) Тогда
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассив(ТипПроверяемогоЗначения) Тогда
Индекс = ПроверяемоеЗначение.Найти(ОжидаемоеЗначение);
ИскомоеЗначениеНайдено = Индекс <> Неопределено;
@ -670,7 +670,7 @@
ТипСписка = ТипЗнч(ОжидаемоеЗначение);
Если ЮТТипыДанныхСлужебный.ЭтоМассива(ТипСписка) Тогда
Если ЮТТипыДанныхСлужебный.ЭтоМассив(ТипСписка) Тогда
Возврат ОжидаемоеЗначение.Найти(ПроверяемоеЗначение) <> Неопределено;
Иначе
Возврат ОжидаемоеЗначение.НайтиПоЗначению(ПроверяемоеЗначение) <> Неопределено;

View File

@ -838,12 +838,12 @@
// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор создания тестовых данных для указанного объекта метаданных.
//
// Пример:
// Конструктор = КонструкторОбъекта("Справочники.Товары");
// Конструктор.Установить("Наименование", "Товар 1");
// Конструктор.Установить("Цена", 100);
// Конструктор.Записать(); // Создает товар с наименованием "Товар 1" и ценой 100.
// Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары") // Используя формат текучих выражений
// .Установить("Наименование", "Товар 1")
// .Установить("Цена", 100)
// .Записать(); // Создает товар с наименованием "Товар 1" и ценой 100.
//
// Конструктор = КонструкторОбъекта(Документы.ПриходТоваров);
// Конструктор = ЮТест.Данные().(Документы.ПриходТоваров); // Без использования текучих выражений
// Конструктор.Установить("Организация", Справочники.Организации.ПустаяСсылка());
// Конструктор.Установить("Склад", Справочники.Склады.ПустаяСсылка());
// Конструктор.Установить("Товар", Справочники.Товары.ПустаяСсылка());
@ -855,6 +855,33 @@
КонецФункции
// Возвращает конструктор создания движений для указанного документа и регистра.
//
// Конструктор имеет ряд особенностей:
//
// * Создание движений происходит при вызове метода `Записать`, а заполнение реквизитов движений осуществляется через методы установки.
// * При использовании на клиенте все значения должны быть сериализуемыми.
//
// Параметры:
// Документ - ДокументОбъект, ДокументСсылка - Документ, для которого создаются движения.
// ИмяРегистра - Строка - Имя регистра, движения которого необходимо создать.
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор для создания движений по указанному документу и регистру.
//
// Пример:
// Конструктор = КонструкторДвижений(Документы.РеализацияТоваров.СоздатьДокумент(), "Продажи")
// .ДобавитьСтроку()
// .Установить("Номенклатура", Справочники.Номенклатура.НайтиПоНаименованию("Товар 1"))
// .Фикция("Склад")
// .Установить("Количество", 10)
// .Записать(); // Создает движение реализации товаров.
Функция КонструкторДвижений(Документ, ИмяРегистра) Экспорт
Возврат ЮТКонструкторТестовыхДанныхСлужебный.ИнициализироватьКонструкторДвижений(Документ, ИмяРегистра);
КонецФункции
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
// Возвращает конструктор создания объекта XDTO.
//

View File

@ -174,6 +174,16 @@
КонецФункции
Процедура ЗаписатьДвиженияРегистратора(Регистратор, Данные, Менеджер, ПараметрыЗаписи) Экспорт
#Если Сервер Тогда
ЮТТестовыеДанныеСлужебныйСервер.ЗаписатьДвиженияРегистратора(Регистратор, Данные, Менеджер, ПараметрыЗаписи);
#Иначе
ЮТТестовыеДанныеСлужебныйВызовСервера.ЗаписатьДвиженияРегистратора(Регистратор, Данные, Менеджер, ПараметрыЗаписи);
#КонецЕсли
КонецПроцедуры
// Создает новый объект и заполняет его данными
//
// Параметры:

View File

@ -24,6 +24,12 @@
КонецФункции
Процедура ЗаписатьДвиженияРегистратора(Знач Регистратор, Знач Данные, Знач Менеджер, Знач ПараметрыЗаписи) Экспорт
ЮТТестовыеДанныеСлужебныйСервер.ЗаписатьДвиженияРегистратора(Регистратор, Данные, Менеджер, ПараметрыЗаписи);
КонецПроцедуры
Функция НовыйОбъект(Знач Менеджер, Знач Данные, Знач ДополнительныеСвойства, Знач УникальныйИдентификаторСсылки) Экспорт
Возврат ЮТТестовыеДанныеСлужебныйСервер.НовыйОбъект(Менеджер, Данные, ДополнительныеСвойства, УникальныйИдентификаторСсылки);

View File

@ -68,6 +68,35 @@
КонецФункции
Процедура ЗаписатьДвиженияРегистратора(Регистратор, Данные, МетаданныеРегистра, ПараметрыЗаписи) Экспорт
Менеджер = ЮТОбщий.Менеджер(МетаданныеРегистра);
НаборЗаписей = Менеджер.СоздатьНаборЗаписей();
ПредставлениеРегистратора = Строка(Регистратор);
ДатаРегистратора = ЮТЗапросы.ЗначениеРеквизита(Регистратор, "Дата");
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
Для Каждого Строка Из Данные Цикл
Запись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(Запись, Строка);
Если НЕ ЗначениеЗаполнено(Запись.Период) Тогда
Запись.Период = ДатаРегистратора;
КонецЕсли;
КонецЦикла;
Попытка
НаборЗаписей.Записать();
Исключение
Сообщение = СтрШаблон("Не удалось записать движения `$1` для %2", МетаданныеРегистра.Имя, ПредставлениеРегистратора);
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(Сообщение);
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Функция НовыйОбъект(Знач Менеджер, Данные, ДополнительныеСвойства, УникальныйИдентификаторСсылки) Экспорт
ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер);

View File

@ -78,6 +78,13 @@
КонецФункции
Функция ЭтоМенеджер(ТипЗначения) Экспорт
ПредставлениеТипа = ПредставлениеТипа(ТипЗначения);
Возврат СтрНайти(ПредставлениеТипа, "Manager.") > 0;
КонецФункции
Функция ЭтоМенеджерЗаписи(ТипЗначения) Экспорт
ПредставлениеТипа = ПредставлениеТипа(ТипЗначения);
@ -232,7 +239,7 @@
КонецФункции
Функция ЭтоМассива(ТипЗначения) Экспорт
Функция ЭтоМассив(ТипЗначения) Экспорт
Возврат ТипЗначения = Тип("Массив")
Или ТипЗначения = Тип("ФиксированныйМассив");

View File

@ -159,6 +159,7 @@
<dataProcessors>DataProcessor.ЮТHTTPServiceRequest</dataProcessors>
<dataProcessors>DataProcessor.ЮТHTTPСервисЗапрос</dataProcessors>
<dataProcessors>DataProcessor.ЮТRecordSet</dataProcessors>
<dataProcessors>DataProcessor.ЮТКонструкторДвижений</dataProcessors>
<dataProcessors>DataProcessor.ЮТКонструкторОбъектаXDTO</dataProcessors>
<dataProcessors>DataProcessor.ЮТКонструкторТестовыхДанных</dataProcessors>
<dataProcessors>DataProcessor.ЮТЮнитТесты</dataProcessors>

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<commandBarLocation>None</commandBarLocation>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>false</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Объект</name>
<id>1</id>
<valueType>
<types>DataProcessorObject.ЮТКонструкторДвижений</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ObjectFormExtInfo"/>
</form:Form>

View File

@ -0,0 +1,215 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
// BSLLS:NonStandardRegion-off
#Область ОписаниеПеременных
// см. ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктора
&НаКлиенте
Перем Контекст;
#КонецОбласти
//@skip-check module-structure-top-region
#Область ПрограммныйИнтерфейс
#Область УстановкаЗначение
// Добавляет новую запись в набор движений.
// При необходимости можно выполнить установку реквизитов новой записи.
//
// Параметры:
// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов новой записи.
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция ДобавитьСтроку(ЗначенияРеквизитов = Неопределено) Экспорт
Контекст.Данные.Добавить(Новый Структура);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает значение реквизита текущей записи набора.
//
// Параметры:
// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
// Значение - Произвольный - Значение реквизита объекта или табличной части
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция Установить(ИмяРеквизита, Значение) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.Установить(Контекст, ИмяРеквизита, Значение);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает значения реквизитов текущей записи набора.
//
// Параметры:
// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Установить реквизиты
&НаКлиенте
Функция УстановитьРеквизиты(ЗначенияРеквизитов) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.УстановитьРеквизиты(Контекст, ЗначенияРеквизитов);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает фиктивное значение реквизита текущей записи набора.
//
// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение.
//
// * Для примитивных значение генерируется случайное значение
// * Для ссылочных типов создается новый объект
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
//
// Параметры:
// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
// РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы
// - Неопределено
// ОграничениеТипа - Тип, ОписаниеТипов - Испольуется для ограничения типа составного реквизита, будет сгерерировано значение указанного типа
// - Неопределено - Будет сгенерировано значение, на основании типа реквизита,
// если реквизит составной, то будет использован случайный тип
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, ОграничениеТипа);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает фиктивные значения реквизитов текущей записи набора.
//
// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение.
//
// * Для примитивных значение генерируется случайное значение
// * Для ссылочных типов создается новый объект
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
//
// Параметры:
// ИменаРеквизитов - Строка - Имена реквизитов объекта или табличной части разделенные запятыми
// - Массив из Строка - Имена реквизитов объекта или табличной части
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция ФикцияРеквизитов(ИменаРеквизитов) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.ФикцияРеквизитов(Контекст, ИменаРеквизитов);
Возврат ЭтотОбъект;
КонецФункции
// Заполняет обязательные поля записи набора фиктивными значениями
//
// На основании метаданных определяются обязательные поля (Проверка заполнения = Выдавать ошибку),
// для них генерируются и устанавливаются фиктивные значение.
//
// * Для примитивных значение генерируется случайное значение
// * Для ссылочных типов создается новый объект
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
&НаКлиенте
Функция ФикцияОбязательныхПолей() Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.ФикцияОбязательныхПолей(Контекст);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает дополнительное свойство набора записей.
//
// Параметры:
// ИмяСвойства - Строка - Имя дополнительного свойства
// Значение - Произвольный - Значение дополнительного свойства
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор
&НаКлиенте
Функция УстановитьДополнительноеСвойство(ИмяСвойства, Значение = Неопределено) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.УстановитьДополнительноеСвойство(Контекст, ИмяСвойства, Значение);
Возврат ЭтотОбъект;
КонецФункции
#КонецОбласти
#Область ПолучениеДанных
// Возвращает данные текущей записи набора.
//
// Возвращаемое значение:
// - Структура - Данные записи
&НаКлиенте
Функция ДанныеСтроки() Экспорт
Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеСтрокиКоллекции(Контекст);
КонецФункции
// Возвращает данные набора записей.
//
// Возвращаемое значение:
// Массив из Структура - Данные набора записей.
&НаКлиенте
Функция Данные() Экспорт
Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеОбъекта(Контекст);
КонецФункции
#КонецОбласти
// Записывает движения документа.
//
// Параметры:
// ОбменДаннымиЗагрузка - Булево - Записать с признаком `ОбменДанными.Загрузка = Истина`
&НаКлиенте
Процедура Записать(ОбменДаннымиЗагрузка = Ложь) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.ЗаписатьДвиженияДокумента(Контекст, ОбменДаннымиЗагрузка);
КонецПроцедуры
#КонецОбласти
//@skip-check module-structure-top-region
#Область СлужебныйПрограммныйИнтерфейс
&НаКлиенте
Процедура Инициализировать(Документ, ИмяРегистра) Экспорт
Контекст = ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктораДвижений(Документ, ИмяРегистра);
КонецПроцедуры
#КонецОбласти
// BSLLS:NonStandardRegion-on

View File

@ -0,0 +1,203 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
#Область ОписаниеПеременных
// см. ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктора
Перем Контекст;
#КонецОбласти
#Область ПрограммныйИнтерфейс
#Область УстановкаЗначение
// Добавляет новую запись в набор движений.
// При необходимости можно выполнить установку реквизитов новой записи.
//
// Параметры:
// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов новой записи.
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
Функция ДобавитьСтроку(ЗначенияРеквизитов = Неопределено) Экспорт
Контекст.Данные.Добавить(Новый Структура);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает значение реквизита текущей записи набора.
//
// Параметры:
// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
// Значение - Произвольный - Значение реквизита объекта или табличной части
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
Функция Установить(ИмяРеквизита, Значение) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.Установить(Контекст, ИмяРеквизита, Значение);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает значения реквизитов текущей записи набора.
//
// Параметры:
// ЗначенияРеквизитов - Структура - Устанавливаемые значения реквизитов
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Установить реквизиты
Функция УстановитьРеквизиты(ЗначенияРеквизитов) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.УстановитьРеквизиты(Контекст, ЗначенияРеквизитов);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает фиктивное значение реквизита текущей записи набора.
//
// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение.
//
// * Для примитивных значение генерируется случайное значение
// * Для ссылочных типов создается новый объект
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
//
// Параметры:
// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
// РеквизитыЗаполнения - Структура - Значения реквизитов заполнения создаваемого объекта базы
// - Неопределено
// ОграничениеТипа - Тип, ОписаниеТипов - Испольуется для ограничения типа составного реквизита, будет сгерерировано значение указанного типа
// - Неопределено - Будет сгенерировано значение, на основании типа реквизита,
// если реквизит составной, то будет использован случайный тип
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.Фикция(Контекст, ИмяРеквизита, РеквизитыЗаполнения, ОграничениеТипа);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает фиктивные значения реквизитов текущей записи набора.
//
// На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение.
//
// * Для примитивных значение генерируется случайное значение
// * Для ссылочных типов создается новый объект
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
//
// Параметры:
// ИменаРеквизитов - Строка - Имена реквизитов объекта или табличной части разделенные запятыми
// - Массив из Строка - Имена реквизитов объекта или табличной части
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
Функция ФикцияРеквизитов(ИменаРеквизитов) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.ФикцияРеквизитов(Контекст, ИменаРеквизитов);
Возврат ЭтотОбъект;
КонецФункции
// Заполняет обязательные поля записи набора фиктивными значениями
//
// На основании метаданных определяются обязательные поля (Проверка заполнения = Выдавать ошибку),
// для них генерируются и устанавливаются фиктивные значение.
//
// * Для примитивных значение генерируется случайное значение
// * Для ссылочных типов создается новый объект
// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторДвижений - Конструктор
Функция ФикцияОбязательныхПолей() Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.ФикцияОбязательныхПолей(Контекст);
Возврат ЭтотОбъект;
КонецФункции
// Устанавливает дополнительное свойство набора записей.
//
// Параметры:
// ИмяСвойства - Строка - Имя дополнительного свойства
// Значение - Произвольный - Значение дополнительного свойства
//
// Возвращаемое значение:
// ОбработкаОбъект.ЮТКонструкторТестовыхДанных - Конструктор
Функция УстановитьДополнительноеСвойство(ИмяСвойства, Значение = Неопределено) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.УстановитьДополнительноеСвойство(Контекст, ИмяСвойства, Значение);
Возврат ЭтотОбъект;
КонецФункции
#КонецОбласти
#Область ПолучениеДанных
// Возвращает данные текущей записи набора.
//
// Возвращаемое значение:
// - Структура - Данные записи
Функция ДанныеСтроки() Экспорт
Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеСтрокиКоллекции(Контекст);
КонецФункции
// Возвращает данные набора записей.
//
// Возвращаемое значение:
// Массив из Структура - Данные набора записей.
Функция Данные() Экспорт
Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеОбъекта(Контекст);
КонецФункции
#КонецОбласти
// Записывает движения документа.
//
// Параметры:
// ОбменДаннымиЗагрузка - Булево - Записать с признаком `ОбменДанными.Загрузка = Истина`
Процедура Записать(ОбменДаннымиЗагрузка = Ложь) Экспорт
ЮТКонструкторТестовыхДанныхСлужебный.ЗаписатьДвиженияДокумента(Контекст, ОбменДаннымиЗагрузка);
КонецПроцедуры
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Процедура Инициализировать(Документ, ИмяРегистра) Экспорт
Контекст = ЮТКонструкторТестовыхДанныхСлужебный.НовыйКонтекстКонструктораДвижений(Документ, ИмяРегистра);
КонецПроцедуры
#КонецОбласти
#КонецЕсли

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1c3ab9bb-081a-4979-b974-47f71a493102">
<producedTypes>
<objectType typeId="8b95e761-b1ef-418a-867f-4f2eff0ea331" valueTypeId="b72c1015-520b-4ba0-96a9-8d2e2b06e40a"/>
<managerType typeId="f1f3d607-8ecf-4754-9871-36dc64683eb6" valueTypeId="80ba7528-f664-43fb-b283-cb9a57701132"/>
</producedTypes>
<name>ЮТКонструкторДвижений</name>
<synonym>
<key>ru</key>
<value>Конструктор движений</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<defaultForm>DataProcessor.ЮТКонструкторДвижений.Form.КлиентскийКонструктор</defaultForm>
<forms uuid="a899ede5-ed2a-4aa6-afb6-179007f12ae4">
<name>КлиентскийКонструктор</name>
<synonym>
<key>ru</key>
<value>Клиентский конструктор</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
</mdclass:DataProcessor>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<commandBarLocation>None</commandBarLocation>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>

View File

@ -287,7 +287,7 @@
&НаКлиенте
Функция ДанныеСтроки() Экспорт
Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеСтроки(Контекст);
Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеСтрокиТабличнойЧасти(Контекст);
КонецФункции

View File

@ -271,7 +271,7 @@
// - Неопределено - Если заполняется объект
Функция ДанныеСтроки() Экспорт
Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеСтроки(Контекст);
Возврат ЮТКонструкторТестовыхДанныхСлужебный.ДанныеСтрокиТабличнойЧасти(Контекст);
КонецФункции

View File

@ -162,56 +162,6 @@
<textEdit>true</textEdit>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ВидДвижения</name>
<id>35</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>НаборЗаписей.RecordType</segments>
</dataPath>
<extendedTooltip>
<name>ВидДвиженияРасширеннаяПодсказка</name>
<id>37</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ВидДвиженияКонтекстноеМеню</name>
<id>36</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>EnterOnInput</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Организация</name>
<id>38</id>
@ -500,7 +450,6 @@
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>false</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>

View File

@ -282,52 +282,6 @@
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ВидДвижения</name>
<id>31</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.RecordType</segments>
</dataPath>
<extendedTooltip>
<name>ВидДвиженияРасширеннаяПодсказка</name>
<id>33</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ВидДвиженияКонтекстноеМеню</name>
<id>32</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>LabelField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Организация</name>
<id>34</id>
@ -622,7 +576,6 @@
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>false</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>

View File

@ -30,7 +30,6 @@
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>DontUse</fullTextSearch>
<balance>true</balance>
</dimensions>
<resources uuid="a44be632-022a-49e2-b349-4c5b20ff7951">
@ -48,7 +47,6 @@
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>DontUse</fullTextSearch>
<balance>true</balance>
</resources>
<forms uuid="0c785b4f-817e-45bc-b0eb-40e37d8e2fd7">

View File

@ -232,6 +232,7 @@
<documents>Document.ПоступлениеДенег</documents>
<documents>Document.ПриходТовара</documents>
<documents>Document.РасходТовара</documents>
<documents>Document.УстановкаЦен</documents>
<documentJournals>DocumentJournal.ДокументыПродаж</documentJournals>
<documentJournals>DocumentJournal.ФинансовыеДокументы</documentJournals>
<enums>Enum.PushУведомления</enums>

View File

@ -0,0 +1,36 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
Процедура ОбработкаПроведения(Отказ,Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
//Данный фрагмент построен конструктором.
//При повторном использовании конструктора, внесенные вручную данные будут утеряны!
// регистр ЦеныТоваров
Движения.ЦеныТоваров.Записывать = Истина;
Для Каждого ТекСтрокаЦены Из Цены Цикл
Движение = Движения.ЦеныТоваров.Добавить();
Движение.Период = Дата;
Движение.Товар = ТекСтрокаЦены.Товар;
Движение.ВидЦен = ТекСтрокаЦены.ВидЦены;
Движение.Цена = ТекСтрокаЦены.Цена;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="04eea2d1-be03-4e82-93cc-901c2c6c13da">
<producedTypes>
<objectType typeId="a1846517-692a-4d70-89b5-411c7f1be049" valueTypeId="003d5395-cf4a-443f-997a-7d865a5f919b"/>
<refType typeId="17713b39-2970-4bda-adac-55fcb08ce96b" valueTypeId="d332e0fa-4f46-42ea-a987-0b0c2f86276c"/>
<selectionType typeId="c66b808c-2049-4729-9e6c-685c0bf69745" valueTypeId="9fbd852c-cc04-4535-be32-84a138663bac"/>
<listType typeId="bc0212bf-0f02-4016-9571-47704ac429f3" valueTypeId="43ea92d5-92fe-4369-8f16-c70a647daf76"/>
<managerType typeId="2e865a90-d103-4d83-a89c-e4630780838a" valueTypeId="92162b5b-c4df-42e5-b030-1f4ddf0a6e64"/>
</producedTypes>
<name>УстановкаЦен</name>
<synonym>
<key>ru</key>
<value>Установка цен</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>Document.УстановкаЦен.StandardAttribute.Number</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<createOnInput>Use</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>DontUse</fullTextSearch>
<numberType>String</numberType>
<numberLength>9</numberLength>
<numberAllowedLength>Variable</numberAllowedLength>
<checkUnique>true</checkUnique>
<autonumbering>true</autonumbering>
<registerRecords>InformationRegister.ЦеныТоваров</registerRecords>
<postInPrivilegedMode>true</postInPrivilegedMode>
<unpostInPrivilegedMode>true</unpostInPrivilegedMode>
<tabularSections uuid="1ffa2f0b-e0b5-4c87-9c69-826e4750162a">
<producedTypes>
<objectType typeId="e3f2edc7-cde6-4e71-a097-4ec23797eeaf" valueTypeId="be4ceb77-b3c8-4f3d-a6ef-e1c47ede3ce0"/>
<rowType typeId="9006ab15-8748-4bb0-aac1-fb9de507b1d9" valueTypeId="e84884af-e925-4d2c-ab53-dff6458ab951"/>
</producedTypes>
<name>Цены</name>
<synonym>
<key>ru</key>
<value>Цены</value>
</synonym>
<attributes uuid="d5d8d3fa-3043-4649-8868-82dfa298fe11">
<name>Товар</name>
<synonym>
<key>ru</key>
<value>Товар</value>
</synonym>
<type>
<types>CatalogRef.Товары</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>DontUse</fullTextSearch>
</attributes>
<attributes uuid="e5185013-c3e0-46de-9ba1-d47a51dcf886">
<name>ВидЦены</name>
<synonym>
<key>ru</key>
<value>Вид цены</value>
</synonym>
<type>
<types>CatalogRef.ВидыЦен</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>DontUse</fullTextSearch>
</attributes>
<attributes uuid="73bf6af6-2b6b-437e-ab19-396ab21a9153">
<name>Цена</name>
<synonym>
<key>ru</key>
<value>Цена</value>
</synonym>
<type>
<types>Number</types>
<numberQualifiers>
<precision>10</precision>
<scale>2</scale>
</numberQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>DontUse</fullTextSearch>
</attributes>
</tabularSections>
</mdclass:Document>

View File

@ -0,0 +1,41 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ, Замещение)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Для Каждого Строка Из ЭтотОбъект Цикл
Если Строка.Курс <= 0 Тогда
ВызватьИсключение НСтр("ru='Курс не может быть отрицательным или нулем';en='Exchange rate cannot be negative or zero'");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецЕсли

View File

@ -24,7 +24,6 @@
<name>Active</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -34,7 +33,6 @@
<name>LineNumber</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -44,7 +42,6 @@
<name>Recorder</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -55,7 +52,6 @@
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -96,7 +92,6 @@
<numberQualifiers>
<precision>10</precision>
<scale>2</scale>
<nonNegative>true</nonNegative>
</numberQualifiers>
</type>
<toolTip>
@ -109,13 +104,9 @@
</minValue>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<quickChoice>DontUse</quickChoice>
<createOnInput>Use</createOnInput>
<fullTextSearch>DontUse</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:NumberValue">
<value>0</value>
</fillValue>
<fillValue xsi:type="core:UndefinedValue"/>
</resources>
<dimensions uuid="ea36350e-96f1-480f-a16a-1dab6bfedf9e">
<name>Валюта</name>
@ -136,7 +127,6 @@
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<denyIncompleteValues>true</denyIncompleteValues>
<fullTextSearch>DontUse</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:ReferenceValue">

View File

@ -1,243 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:FormField">
<name>Период</name>
<id>13</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Запись.Period</segments>
</dataPath>
<extendedTooltip>
<name>ПериодРасширеннаяПодсказка</name>
<id>3</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПериодКонтекстноеМеню</name>
<id>2</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Товар</name>
<id>4</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Запись.Товар</segments>
</dataPath>
<extendedTooltip>
<name>ТоварРасширеннаяПодсказка</name>
<id>6</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТоварКонтекстноеМеню</name>
<id>5</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ВидЦен</name>
<id>7</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Запись.ВидЦен</segments>
</dataPath>
<extendedTooltip>
<name>ВидЦенРасширеннаяПодсказка</name>
<id>9</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ВидЦенКонтекстноеМеню</name>
<id>8</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Цена</name>
<id>10</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Запись.Цена</segments>
</dataPath>
<extendedTooltip>
<name>ЦенаРасширеннаяПодсказка</name>
<id>12</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ЦенаКонтекстноеМеню</name>
<id>11</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<windowOpeningMode>LockOwnerWindow</windowOpeningMode>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>false</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Запись</name>
<id>1</id>
<valueType>
<types>InformationRegisterRecordManager.ЦеныТоваров</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
<savedData>true</savedData>
</attributes>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:InformationRegisterManagerFormExtInfo"/>
</form:Form>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core">
<filter>
<viewMode>Normal</viewMode>
<userSettingID>8450ccec-2746-4ac4-8058-01be7feed729</userSettingID>
</filter>
<order>
<viewMode>Normal</viewMode>
<userSettingID>53af573d-5d8e-44c6-a55b-8f7631c4e45e</userSettingID>
</order>
<conditionalAppearance>
<viewMode>Normal</viewMode>
<userSettingID>7b7e7a34-b35a-4669-9903-b382d64d8e64</userSettingID>
</conditionalAppearance>
<itemsViewMode>Normal</itemsViewMode>
<itemsUserSettingID>38779193-b7c6-42b1-ba56-93fe0878477b</itemsUserSettingID>
</Settings>

View File

@ -0,0 +1,562 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:FormGroup">
<name>СписокКомпоновщикНастроекПользовательскиеНастройки</name>
<id>34</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Настройки пользователя</value>
</title>
<verticalStretch>false</verticalStretch>
<extendedTooltip>
<name>СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка</name>
<id>2</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>DontUse</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:Table">
<name>Список</name>
<id>3</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список</segments>
</dataPath>
<defaultItem>true</defaultItem>
<titleLocation>None</titleLocation>
<items xsi:type="form:FormField">
<name>Период</name>
<id>16</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.Period</segments>
</dataPath>
<defaultItem>true</defaultItem>
<extendedTooltip>
<name>ПериодРасширеннаяПодсказка</name>
<id>18</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПериодКонтекстноеМеню</name>
<id>17</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>LabelField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Регистратор</name>
<id>19</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.Recorder</segments>
</dataPath>
<extendedTooltip>
<name>РегистраторРасширеннаяПодсказка</name>
<id>21</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>РегистраторКонтекстноеМеню</name>
<id>20</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>LabelField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>НомерСтроки</name>
<id>22</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.LineNumber</segments>
</dataPath>
<extendedTooltip>
<name>НомерСтрокиРасширеннаяПодсказка</name>
<id>24</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>НомерСтрокиКонтекстноеМеню</name>
<id>23</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>LabelField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Товар</name>
<id>25</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.Товар</segments>
</dataPath>
<extendedTooltip>
<name>ТоварРасширеннаяПодсказка</name>
<id>27</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТоварКонтекстноеМеню</name>
<id>26</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>LabelField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ВидЦен</name>
<id>28</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.ВидЦен</segments>
</dataPath>
<extendedTooltip>
<name>ВидЦенРасширеннаяПодсказка</name>
<id>30</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ВидЦенКонтекстноеМеню</name>
<id>29</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>LabelField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Цена</name>
<id>31</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.Цена</segments>
</dataPath>
<extendedTooltip>
<name>ЦенаРасширеннаяПодсказка</name>
<id>33</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ЦенаКонтекстноеМеню</name>
<id>32</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>LabelField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<commandBarLocation>None</commandBarLocation>
<autoCommandBar>
<name>СписокКоманднаяПанель</name>
<id>5</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<searchStringAddition>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<name>СписокСтрокаПоиска</name>
<id>7</id>
<extendedTooltip>
<name>СписокСтрокаПоискаРасширеннаяПодсказка</name>
<id>9</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокСтрокаПоискаКонтекстноеМеню</name>
<id>8</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<source>СписокСтрокаПоиска</source>
<extInfo xsi:type="form:SearchStringAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchStringAddition>
<viewStatusAddition>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<name>СписокСостояниеПросмотра</name>
<id>10</id>
<extendedTooltip>
<name>СписокСостояниеПросмотраРасширеннаяПодсказка</name>
<id>12</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокСостояниеПросмотраКонтекстноеМеню</name>
<id>11</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>ViewStatusAddition</type>
<source>СписокСостояниеПросмотра</source>
<extInfo xsi:type="form:ViewStatusAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</viewStatusAddition>
<searchControlAddition>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<name>СписокУправлениеПоиском</name>
<id>13</id>
<extendedTooltip>
<name>СписокУправлениеПоискомРасширеннаяПодсказка</name>
<id>15</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокУправлениеПоискомКонтекстноеМеню</name>
<id>14</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>SearchControlAddition</type>
<source>СписокУправлениеПоиском</source>
<extInfo xsi:type="form:SearchControlAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchControlAddition>
<extendedTooltip>
<name>СписокРасширеннаяПодсказка</name>
<id>6</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокКонтекстноеМеню</name>
<id>4</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<changeRowSet>true</changeRowSet>
<changeRowOrder>true</changeRowOrder>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<selectionMode>MultiRow</selectionMode>
<header>true</header>
<headerHeight>1</headerHeight>
<footerHeight>1</footerHeight>
<horizontalScrollBar>AutoUse</horizontalScrollBar>
<verticalScrollBar>AutoUse</verticalScrollBar>
<horizontalLines>true</horizontalLines>
<verticalLines>true</verticalLines>
<useAlternationRowColor>true</useAlternationRowColor>
<searchOnInput>Auto</searchOnInput>
<initialListView>Auto</initialListView>
<initialTreeView>ExpandTopLevel</initialTreeView>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<enableStartDrag>true</enableStartDrag>
<enableDrag>true</enableDrag>
<rowPictureDataPath xsi:type="form:DataPath">
<segments>Список.DefaultPicture</segments>
</rowPictureDataPath>
<extInfo xsi:type="form:DynamicListTableExtInfo">
<autoRefreshPeriod>60</autoRefreshPeriod>
<period>
<startDate>0001-01-01T00:00:00</startDate>
<endDate>0001-01-01T00:00:00</endDate>
</period>
<topLevelParent xsi:type="core:UndefinedValue"/>
<showRoot>true</showRoot>
<userSettingsGroup>СписокКомпоновщикНастроекПользовательскиеНастройки</userSettingsGroup>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Список</name>
<id>1</id>
<valueType>
<types>DynamicList</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
<extInfo xsi:type="form:DynamicListExtInfo">
<mainTable>InformationRegister.ЦеныТоваров</mainTable>
<dynamicDataRead>true</dynamicDataRead>
<autoFillAvailableFields>true</autoFillAvailableFields>
<autoSaveUserSettings>true</autoSaveUserSettings>
<getInvisibleFieldPresentations>true</getInvisibleFieldPresentations>
</extInfo>
</attributes>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:DynamicListFormExtInfo"/>
</form:Form>

View File

@ -18,7 +18,7 @@
<dataHistory>Use</dataHistory>
<useStandardCommands>true</useStandardCommands>
<editType>InDialog</editType>
<defaultRecordForm>InformationRegister.ЦеныТоваров.Form.ФормаЗаписи</defaultRecordForm>
<defaultListForm>InformationRegister.ЦеныТоваров.Form.ФормаСписка</defaultListForm>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Active</name>
@ -57,6 +57,7 @@
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<informationRegisterPeriodicity>Day</informationRegisterPeriodicity>
<writeMode>RecorderSubordinate</writeMode>
<mainFilterOnPeriod>true</mainFilterOnPeriod>
<includeHelpInContents>true</includeHelpInContents>
<help>
@ -153,11 +154,11 @@
</fillValue>
<mainFilter>true</mainFilter>
</dimensions>
<forms uuid="48a2125e-1ffb-4cf7-8986-1df6c0e39123">
<name>ФормаЗаписи</name>
<forms uuid="7a5e9417-fef0-4e2d-b2cf-43a00d73f0b8">
<name>ФормаСписка</name>
<synonym>
<key>ru</key>
<value>Форма записи</value>
<value>Форма списка</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>

View File

@ -313,7 +313,11 @@
.Прогон()
;
Регистратор = ЮТест.Данные().СоздатьДокумент(Документы.УстановкаЦен);
НаборЗаписей = РегистрыСведений.ЦеныТоваров.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
ЮТест.ОжидаетЧто(НаборЗаписей)
.Метод("ПроверитьЗаполнение")
.НеВыбрасываетИсключение()
@ -330,6 +334,7 @@
// Через набор записей
Мокито.Сбросить();
НаборЗаписей2 = РегистрыСведений.ЦеныТоваров.СоздатьНаборЗаписей();
НаборЗаписей2.Отбор.Регистратор.Установить(Регистратор);
Мокито.Обучение(НаборЗаписей)
.Наблюдать("ПередЗаписью")

View File

@ -235,10 +235,11 @@
.Свойство("Товар").Равно(ДанныеОбъекта.Товары[0].Товар);
// Регистры
Курс = ЮТест.Данные().СлучайноеПоложительноеЧисло(99999);
Конструктор = ЮТест.Данные().КонструкторОбъекта("РегистрыСведений.КурсыВалют")
.Фикция("Период")
.Фикция("Валюта")
.Фикция("Курс");
.Установить("Курс", Курс);
Конструктор.Записать();
ДанныеОбъекта = Конструктор.ДанныеОбъекта();
@ -247,7 +248,7 @@
ЮТест.ОжидаетЧто(ДанныеЗаписи)
.Свойство("Валюта").Равно(ДанныеОбъекта.Валюта)
.Свойство("Курс").Равно(ДанныеОбъекта.Курс);
.Свойство("Курс").Равно(Курс);
КонецПроцедуры

View File

@ -132,9 +132,10 @@
Процедура СоздатьЗаписьРегистраСведений() Экспорт
Курс = ЮТест.Данные().СлучайноеПоложительноеЧисло(99999);
Результат = ЮТест.Данные().КонструкторОбъекта("РегистрыСведений.КурсыВалют")
.Фикция("Валюта")
.Фикция("Курс")
.Установить("Курс", Курс)
.Установить("Период", ТекущаяДата())
.Записать();
@ -146,11 +147,12 @@
Процедура СоздатьЗаписьРегистраСведений_ОбменДанными() Экспорт
Конструктор = ЮТест.Данные().КонструкторОбъекта("РегистрСведений.ЦеныТоваров")
ИмяРегистра = "РегистрСведений.КурсыВалют";
Конструктор = ЮТест.Данные().КонструкторОбъекта(ИмяРегистра)
.Фикция("Период")
.Фикция("Товар")
.Фикция("ВидЦен")
.Установить("Цена", -1);
.Фикция("Валюта")
.Установить("Курс", -1);
ДанныеОбъекта = Конструктор.ДанныеОбъекта();
@ -158,12 +160,12 @@
.Метод("Записать").Параметр(Ложь).Параметр(Истина)
.НеВыбрасываетИсключение();
ЮТест.ОжидаетЧтоТаблицаБазы("РегистрСведений.ЦеныТоваров")
ЮТест.ОжидаетЧтоТаблицаБазы(ИмяРегистра)
.СодержитЗаписи(ЮТест.Предикат(ДанныеОбъекта));
ЮТест.ОжидаетЧто(Конструктор)
.Метод("Записать")
.ВыбрасываетИсключение("Цена товара не может быть отрицательной");
.ВыбрасываетИсключение("Курс не может быть отрицательным или нулем");
КонецПроцедуры

View File

@ -628,11 +628,12 @@
Процедура УстановитьФоновуюБлокировку() Экспорт
Валюта = ЮТест.Данные().СоздатьЭлемент(Справочники.Валюты);
Курс = ЮТест.Данные().СлучайноеПоложительноеЧисло(99999);
Конструктор = ЮТест.Данные().КонструкторОбъекта("РегистрСведений.КурсыВалют")
.Установить("Валюта", Валюта)
.Фикция("Период")
.Фикция("Курс");
.Установить("Курс", Курс);
Блокировка = Новый БлокировкаДанных();
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КурсыВалют");

View File

@ -88,10 +88,13 @@
Процедура УдалениеТестовыхДанныхРегистрСведений(Период) Экспорт
ЮТест.ОжидаетЧтоТаблицаБазы("РегистрСведений.КурсыВалют").НеСодержитЗаписи(ЮТест.Предикат().Реквизит("Период").Равно(Период));
ЮТест.ОжидаетЧтоТаблицаБазы("РегистрСведений.КурсыВалют")
.НеСодержитЗаписи(ЮТест.Предикат()
.Реквизит("Период").Равно(Период));
Курс = ЮТест.Данные().СлучайноеПоложительноеЧисло(99999);
ЮТест.Данные().КонструкторОбъекта("РегистрыСведений.КурсыВалют")
.Фикция("Валюта")
.Фикция("Курс")
.Установить("Курс", Курс)
.Установить("Период", Период)
.Записать();

View File

@ -42,16 +42,18 @@
Конструктор.Записать();
ДанныеСправочника = Конструктор.ДанныеОбъекта();
Курс = ЮТест.Данные().СлучайноеПоложительноеЧисло(99999);
Конструктор = ЮТест.Данные().КонструкторОбъекта("РегистрыСведений.КурсыВалют")
.Фикция("Валюта")
.Фикция("Период")
.Фикция("Курс");
.Установить("Курс", Курс);
ДанныеРегистра = Конструктор.ДанныеОбъекта();
Конструктор.Записать();
Конструктор
.Фикция("Период")
.Фикция("Курс")
.Установить("Курс", Курс)
.Записать();
ЮТест.ОжидаетЧтоТаблицаБазы("Справочник.Товары")

View File

@ -90,7 +90,7 @@
Наборы = ЮТЧитательСлужебный.ЗагрузитьТесты(ПараметрыЗапуска);
ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы расширения tests")
.ИмеетДлину(36);
.ИмеетДлину(37);
КонецПроцедуры

View File

@ -0,0 +1,317 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Область СлужебныйПрограммныйИнтерфейс
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.ВТранзакции()
.ДобавитьТест("Инициализировать")
.ДобавитьТест("ДобавитьСтроку")
.ДобавитьТест("Установить")
.ДобавитьТест("Установить_Период")
.ДобавитьТест("УстановитьРеквизиты")
.ДобавитьТест("Фикция")
.ДобавитьТест("ФикцияРеквизитов")
.ДобавитьТест("ФикцияОбязательныхПолей")
.ДобавитьТест("Записать_РегистрСведений")
.ДобавитьТест("Записать_РегистрНакопления")
;
КонецПроцедуры
Процедура Инициализировать() Экспорт
// Создаем документ
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара");
// Инициализируем конструктор движений
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "ТоварныеЗапасы");
// Проверяем, что конструктор инициализирован
ЮТест.ОжидаетЧто(Конструктор, "Конструктор должен быть инициализирован")
.НеРавно(Неопределено);
// Проверяем, что данные конструктора пусты
Данные = Конструктор.Данные();
ЮТест.ОжидаетЧто(Данные, "Данные конструктора должны быть пустым массивом")
.ИмеетТип("Массив")
.Равно(Новый Массив);
ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("КонструкторДвижений", ЮТКоллекции.ЗначениеВМассиве(Документ, "НесуществующийРегистр"))
.ВыбрасываетИсключение("Документ " + Документ + " не делает движений по регистру ""НесуществующийРегистр""");
КонецПроцедуры
Процедура ДобавитьСтроку() Экспорт
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара");
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "Продажи");
ЮТест.ОжидаетЧто(Конструктор)
.Метод("ДобавитьСтроку").НеВыбрасываетИсключение();
Данные = Конструктор.Данные();
ЮТест.ОжидаетЧто(Данные)
.Заполнено()
.ИмеетТип("Массив")
.ИмеетДлину(1)
.Свойство(0)
.ИмеетТип("Структура")
.НеЗаполнено();
КонецПроцедуры
Процедура Установить() Экспорт
МаксимальноеЧисло = 99999;
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара");
Покупатель = ЮТест.Данные().СоздатьЭлемент("Справочники.Контрагенты");
Сумма = ЮТест.Данные().СлучайноеПоложительноеЧисло(МаксимальноеЧисло);
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "Продажи");
ЮТест.ОжидаетЧто(Конструктор)
.Метод("Установить", ЮТКоллекции.ЗначениеВМассиве("Покупатель", Покупатель)).ВыбрасываетИсключение("Сначала необходимо добавить строку");
Конструктор
.ДобавитьСтроку()
.Установить("Покупатель", Покупатель)
.Установить("Сумма", Сумма);
Данные = Конструктор.ДанныеСтроки();
ЮТест.ОжидаетЧто(Данные)
.Заполнено()
.Свойство("Покупатель").Равно(Покупатель)
.Свойство("Сумма").Равно(Сумма);
КонецПроцедуры
Процедура Установить_Период() Экспорт
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара");
Период = ЮТест.Данные().СлучайнаяДата();
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "Продажи")
.ДобавитьСтроку()
.ФикцияРеквизитов("Покупатель, Сумма")
.Установить("Период", Период);
Данные = Конструктор.ДанныеСтроки();
ЮТест.ОжидаетЧто(Данные, "Проверка данных записи")
.Заполнено()
.Свойство("Покупатель").Заполнено()
.Свойство("Сумма").Заполнено()
.Свойство("Период").Равно(Период);
Конструктор.Записать();
ЗаписиРегистра = ЮТЗапросы.ДвиженияДокумента(Документ, "Продажи");
ЮТест.ОжидаетЧто(ЗаписиРегистра, "Проверка сформированных движений")
.Заполнено()
.ИмеетДлину(1)
.Что(ЗаписиРегистра[0])
.Свойство("Покупатель").Заполнено()
.Свойство("Сумма").Заполнено()
.Свойство("Период").Равно(Период);
КонецПроцедуры
Процедура УстановитьРеквизиты() Экспорт
МаксимальноеЧисло = 99999;
// Создаем документ и контрагента
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара");
Контрагент = ЮТест.Данные().СоздатьЭлемент("Справочники.Контрагенты");
Сумма = ЮТест.Данные().СлучайноеПоложительноеЧисло(МаксимальноеЧисло);
Количество = ЮТест.Данные().СлучайноеПоложительноеЧисло(МаксимальноеЧисло);
// Инициализируем конструктор движений
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "Продажи")
.ДобавитьСтроку().УстановитьРеквизиты(Новый Структура);
ЮТест.ОжидаетЧто(Конструктор.ДанныеСтроки()).НеЗаполнено();
// Добавляем строку и устанавливаем реквизиты
ЗначенияРеквизитов = Новый Структура("Покупатель, Сумма", Контрагент, Сумма);
Конструктор.УстановитьРеквизиты(ЗначенияРеквизитов);
ЗначенияРеквизитов = Новый Структура("Количество", Количество);
Конструктор.УстановитьРеквизиты(ЗначенияРеквизитов);
// Получаем данные строки
Данные = Конструктор.ДанныеСтроки();
// Проверяем, что реквизиты установлены корректно
ЮТест.ОжидаетЧто(Данные)
.Заполнено("Данные конструктора должны быть заполнены структурой")
.ИмеетТип("Структура")
.Свойство("Покупатель").Равно(Контрагент, "Контрагент должен совпадать")
.Свойство("Сумма").Равно(Сумма, "Сумма должна быть равна " + Сумма)
.Свойство("Количество").Равно(Количество, "Количество должна быть равна " + Количество);
КонецПроцедуры
Процедура Фикция() Экспорт
// Создаем документ
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара");
// Инициализируем конструктор движений
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "ТоварныеЗапасы");
// Добавляем строку и устанавливаем фиктивное значение реквизита
Конструктор.ДобавитьСтроку().Фикция("Товар");
// Получаем данные строки
Данные = Конструктор.ДанныеСтроки();
// Проверяем, что реквизит "Номенклатура" заполнен
ЮТест.ОжидаетЧто(Данные, "Данные строки должны быть заполнены")
.Заполнено()
.Свойство("Товар")
.Заполнено("Номенклатура должна быть заполнена")
.ИмеетТип("СправочникСсылка.Товары");
// Проверяем, что метод выбрасывает исключение
МассивПараметров = ЮТКоллекции.ЗначениеВМассиве("НесуществующийРеквизит");
ЮТест.ОжидаетЧто(Конструктор)
.Метод("Фикция", МассивПараметров)
.ВыбрасываетИсключение("`РегистрНакопления.ТоварныеЗапасы` не содержит реквизит `НесуществующийРеквизит`");
КонецПроцедуры
Процедура ФикцияРеквизитов() Экспорт
// Создаем документ
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара");
// Инициализируем конструктор движений
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "ТоварныеЗапасы");
// Добавляем строку и устанавливаем фиктивные значения реквизитов
Конструктор.ДобавитьСтроку().ФикцияРеквизитов("Товар, Склад, Количество");
// Получаем данные строки
Данные = Конструктор.ДанныеСтроки();
// Проверяем, что все реквизиты заполнены
ЮТест.ОжидаетЧто(Данные, "Данные строки должны быть заполнены")
.Заполнено()
.Свойство("Товар")
.Заполнено("Товар должн быть заполнен")
.ИмеетТип("СправочникСсылка.Товары")
.Свойство("Склад")
.Заполнено("Склад должен быть заполнен")
.ИмеетТип("СправочникСсылка.Склады")
.Свойство("Количество")
.Заполнено("Количество должено быть заполнено")
.ИмеетТип("Число");
// Проверяем, что при указании несуществующих реквизитов выбрасывается исключение
МассивПараметров = ЮТКоллекции.ЗначениеВМассиве("Несуществующий1");
ЮТест.ОжидаетЧто(Конструктор)
.Метод("ФикцияРеквизитов", МассивПараметров)
.ВыбрасываетИсключение("`РегистрНакопления.ТоварныеЗапасы` не содержит реквизит `Несуществующий1`");
КонецПроцедуры
Процедура ФикцияОбязательныхПолей() Экспорт
// Создаем документ
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара");
// Инициализируем конструктор движений
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "ТоварныеЗапасы");
// Добавляем строку и заполняем обязательные поля фиктивными значениями
Конструктор.ДобавитьСтроку().ФикцияОбязательныхПолей();
// Получаем данные строки
Данные = Конструктор.ДанныеСтроки();
// Получаем список обязательных полей из метаданных
ОбязательныеПоля = ЮТКоллекции.ЗначениеВМассиве("Товар", "Склад");
// Проверяем, что все обязательные поля заполнены
Утверждение = ЮТест.ОжидаетЧто(Данные);
Для Каждого Поле Из ОбязательныеПоля Цикл
Утверждение.Свойство(Поле)
.Заполнено();
КонецЦикла;
КонецПроцедуры
Процедура Записать_РегистрСведений() Экспорт
МаксимальноеЧисло = 99999;
// Создаем документ "УстановкаЦен"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.УстановкаЦен");
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары");
ВидыЦены = ЮТест.Данные().СоздатьЭлемент("Справочники.ВидыЦен");
Цена = ЮТест.Данные().СлучайноеПоложительноеЧисло(МаксимальноеЧисло);
// Инициализируем конструктор движений для регистра сведений "ЦеныТоваров"
Конструктор = ЮТест.Данные().КонструкторДвижений(Документ, "ЦеныТоваров");
// Добавляем строку и заполняем необходимые реквизиты
Конструктор.ДобавитьСтроку().УстановитьРеквизиты(Новый Структура("Товар, ВидЦен, Цена", Товар, ВидыЦены, Цена));
// Записываем движения
Конструктор.Записать();
// Проверяем, что движения были записаны в регистр сведений
ЮТест.ОжидаетЧтоТаблицаБазы("РегистрСведений.ЦеныТоваров")
.СодержитЗаписи(ЮТест.Предикат()
.Реквизит("Регистратор").Равно(Документ));
// Получаем записи регистра движений документа
ЗаписиРегистра = ЮТЗапросы.ДвиженияДокумента(Документ, "ЦеныТоваров");
// Проверяем, что движения были записаны в регистр сведений
ЮТест.ОжидаетЧто(ЗаписиРегистра)
.Заполнено()
.ИмеетДлину(1)
.Свойство("[0].Регистратор").Равно(Документ)
.Свойство("[0].Товар").Равно(Товар)
.Свойство("[0].ВидЦен").Равно(ВидыЦены)
.Свойство("[0].Цена").Равно(Цена)
;
КонецПроцедуры
Процедура Записать_РегистрНакопления() Экспорт
// Создаем документ
Документ = ЮТест.Данные().СоздатьДокумент("Документы.РасходТовара");
// Инициализируем конструктор движений
ЮТест.Данные().КонструкторДвижений(Документ, "ТоварныеЗапасы")
.ДобавитьСтроку()
.ФикцияРеквизитов("Товар, Склад, Количество")
.Записать();
ЮТест.ОжидаетЧтоТаблицаБазы("РегистрНакопления.ТоварныеЗапасы")
.СодержитЗаписи(ЮТест.Предикат()
.Реквизит("Регистратор").Равно(Документ));
КонецПроцедуры
#КонецОбласти

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="13a81a97-4c5c-4d9d-873f-993d3959eed7">
<name>Обр_ЮТКонструкторДвижений_МО</name>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -30,6 +30,7 @@
<commonModules>CommonModule.НастройкаYAxUnit</commonModules>
<commonModules>CommonModule.Обр_ЮТHTTPСервисЗапрос</commonModules>
<commonModules>CommonModule.Обр_ЮТRecordSet_МО</commonModules>
<commonModules>CommonModule.Обр_ЮТКонструкторДвижений_МО</commonModules>
<commonModules>CommonModule.Обр_ЮТКонструкторОбъектаXDTO_МО</commonModules>
<commonModules>CommonModule.ОМ_ДТОткрытиеФормСлужебныйВызовСервера</commonModules>
<commonModules>CommonModule.ОМ_Мокито</commonModules>

View File

@ -12,10 +12,7 @@
<name>ЦеныТоваров</name>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:InformationRegisterExtension">
<informationRegisterPeriodicity>Checked</informationRegisterPeriodicity>
<writeMode>Checked</writeMode>
<recordSetModule>Extended</recordSetModule>
<managerModule>Extended</managerModule>
</extension>
<informationRegisterPeriodicity>Day</informationRegisterPeriodicity>
</mdclass:InformationRegister>