Загрузка данных из макетов
Описание
Для загрузки данных из макетов подойдет метод ЮТест.Данные().ЗагрузитьИзМакета
Он позволяет:
- Загружать данные из табличных макет (
ТабличныйДокумент
илиТекстовыйДокумент
с таблицей markdown) - Загружать данные на клиенте и на сервер
- Загружать не весь макет, а конкретную область (в одном макете может находится несколько таблиц данных)
- Приводить значения к указанным типам и создавать записи в базе данных
Пример табличного документа:
Товар | Товар.Поставщик | Товар.Вид | Цена | Количество | Сумма |
---|---|---|---|---|---|
Товар 1 | Поставщик 1 | Товар | 100 | 1 | 100 |
Товар 1 | 100 | 2 | 200 | ||
Товар 1 | Поставщик 2 | Товар | 100 | 3 | 300 |
Товар 2 | Поставщик 1 | Товар | 2 000 | 1 | 2000 |
Услуга | Услуга | 300,5 | 1 | 300.5 |
Особенности:
-
Данные в базе всегда создаются, не выполняется поиск уже существующих ссылок. При необходимости вы можете найти данные сами и передать в параметрах
ЗаменяемыеЗначения
подсказкаПри преобразовании табличного документа в таблицу значений существующие объекты метаданных не изменяются, только создаются новые. Нужно проявлять внимательность в случаях, если в базе уже имеются данные с тем же кодом/наименованием (и по ним используется контроль уникальности), что и в табличном документе.
-
Можно указывать значения вложенных реквизитов, например при создании товаров (колонка
Товар
) необходимо указать конкретные значения поставщика и вида товара. Для этого необходимо добавить колонкиТовар.Поставщик
иТовар.Вид
, в которых указать нужные значения. -
Переиспользование созданных данных, используется
КэшЗначений
, в который помещаются все созданные данные, если кэш содержит данные подходящего типа с указанным идентификатором, то используется ранее созданное значение из кэша. Например, в примере выше, для первой строки будет создан товар с идентификаторомТовар 1
. В строках 2 и 3 будет использовано значение из кэша -Товар 1
, в 4й и 5й строке - созданы новые товары.подсказкаКэш значений может передаваться между загрузками разных макетов, например есть макет с табличной частью документа и второй макет с набором ожидаемых движений. Чтобы созданные товары из табличной части соответствовали товарам движений необходимо передать
КэшЗначений
между загрузками.КэшЗначений = Неопределено;
ТабличнаяЧасть = ЮТест.Данные().ЗагрузитьИзМакета("ОбщийМакет.ДанныеДокумента.ТабличнаяЧасть", ОписанияТиповТЧ, КэшЗначений);
ОжидаемыеДвижения = ЮТест.Данные().ЗагрузитьИзМакета("ОбщийМакет.ДанныеДокумента.ДвиженияРегистра1", ОписанияТиповРегистра1, КэшЗначений);подсказкаЗначение в колонке "Товар" является идентификатором ссылки. Для справочника значение этой колонки по умолчанию записывается в реквизит "Наименование" или "Код", в зависимости от того, какой из этих реквизитов является основным представлением. Для документа это значение никуда не записывается, оно лишь является идентификатором. Таким образом, если одному значению в колонке "Товар" соответствуют различные значения в других колонках, то в элемент справочника запишутся реквизиты из первой строки, а для других строк ссылка на этот элемент будет проставлена по соответствующему идентификатору
Примеры
Загрузка всего макета
В качестве источника данных можно использовать весь табличный документ. В этом случае будет получена таблица значений, начиная с 1-ой строки и 1-ой колонки табличного документа до первой пустой строки.
Исходные данные
Товар | Товар.Поставщик | Товар.Вид | Цена | Количество | Сумма |
---|---|---|---|---|---|
Товар 1 | Поставщик 1 | Товар | 100 | 1 | 100 |
Товар 1 | 100 | 2 | 200 | ||
Товар 1 | Поставщик 2 | Товар | 100 | 3 | 300 |
Товар 2 | Поставщик 1 | Товар | 2 000 | 1 | 2000 |
Услуга | Услуга | 300,5 | 1 | 300.5 |
Этот код работает и на клиенте и на сервер. Для сервера результатом будет таблица значений, для клиента - массив структур
ОписанияТипов = Новый Соответствие;
ОписанияТипов.Вставить("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"));
ОписанияТипов.Вставить("Цена", Новый ОписаниеТипов("Число"));
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
ОписанияТипов.Вставить("Сумма", Новый ОписаниеТипов("Число"));
ТаблицаТоваров = ЮТест.Данные().ЗагрузитьИзМакета("ОбщийМакет.ЮТ_МакетТестовыхДанных", ОписанияТипов);
ЮТест.ОжидаетЧто(ТаблицаТоваров)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(5)
.Свойство("[0].Товар.Наименование").Равно("Товар 1")
.Свойство("[0].Товар.Поставщик.Наименование").Равно("Поставщик")
.Свойство("[0].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
.Свойство("[0].Количество").Равно(1)
.Свойство("[0].Цена").Равно(100)
.Свойство("[0].Сумма").Равно(100)
.Свойство("[1].Товар").Равно(ТаблицаТоваров[0].То вар)
.Свойство("[1].Количество").Равно(2)
.Свойство("[1].Цена").Равно(100)
.Свойство("[1].Сумма").Равно(200)
.Свойство("[2].Товар").Равно(ТаблицаТоваров[0].Товар)
.Свойство("[2].Количество").Равно(3)
.Свойство("[2].Цена").Равно(100)
.Свойство("[2].Сумма").Равно(300)
.Свойство("[3].Товар.Наименование").Равно("Товар 2")
.Свойство("[3].Товар.Поставщик.Наименование").Равно("Поставщик")
.Свойство("[3].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
.Свойство("[3].Количество").Равно(1)
.Свойство("[3].Цена").Равно(2000)
.Свойство("[3].Сумма").Равно(2000)
.Свойство("[4].Товар.Наименование").Равно("Услуга")
.Свойство("[4].Товар.Поставщик").НеЗаполнено()
.Свойство("[4].Товар.Вид").Равно(Перечисления.ВидыТоваров.Услуга)
.Свойство("[4].Количество").Равно(1)
.Свойство("[4].Цена").Равно(300.5)
.Свойство("[4].Сумма").Равно(300.5);