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

Merge pull request #303 from bia-technologies/feature/270

270 / Создание записей регистров через наборы записей
This commit is contained in:
Koryakin Aleksey 2024-03-24 04:26:24 +03:00 committed by GitHub
commit 253e0e822a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 164 additions and 52 deletions

View File

@ -46,13 +46,13 @@
// см. СтруктураОписанияОбъектаМетаданных
Функция ОписаниеОбъектаМетаданных(Знач Значение) Экспорт
ТипЗначения = ТипЗнч(Значение);
Если ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипЗначения) И ЭтоОписаниеОбъектаМетаданных(Значение) Тогда
Если ЮТМетаданныеСлужебный.ЭтоОписаниеОбъектаМетаданных(Значение) Тогда
//@skip-check constructor-function-return-section
Возврат Значение;
КонецЕсли;
ТипЗначения = ТипЗнч(Значение);
ТипТип = Тип("Тип");
#Если Сервер Тогда
Если ТипЗначения = Тип("ОбъектМетаданных") Тогда
@ -77,6 +77,17 @@
КонецФункции
// Возвращает нормализованное имя таблицы, то которое можно использовать в запросах
//
// Параметры:
// Значение - ОбъектМетаданных
// - Тип - Тип объекта информационной базы
// - Строка - Полное имя объекта метаданных
// - см. СтруктураОписанияОбъектаМетаданных
// - Произвольный - Объект информационной базы
//
// Возвращаемое значение:
// Строка - Нормализованное имя таблицы
Функция НормализованноеИмяТаблицы(Значение) Экспорт
Описание = ОписаниеОбъектаМетаданных(Значение);
@ -85,26 +96,46 @@
КонецФункции
Функция ЭтоОписаниеОбъектаМетаданных(Параметры) Экспорт
Возврат ЮТОбщий.ЭтаСтруктураИмеетТип(Параметры, "ОписаниеОбъектаМетаданных");
КонецФункции
Функция ТипыМетаданных() Экспорт
Возврат ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных();
КонецФункции
// Проверка, что переданное значение относится к перечислениям.
//
// Параметры:
// Значение - ОбъектМетаданных
// - Тип - Тип объекта информационной базы
// - Строка - Полное имя объекта метаданных
// - см. СтруктураОписанияОбъектаМетаданных
// - Произвольный - Объект информационной базы
//
// Возвращаемое значение:
// Булево - Это перечисление
Функция ЭтоПеречисление(Значение) Экспорт
Описание = ОписаниеОбъектаМетаданных(Значение);
Возврат Описание <> Неопределено И Описание.ОписаниеТипа.Имя = "Перечисление";
КонецФункции
// Проверка, что переданное значение относится к регистрам.
//
// Параметры:
// Значение - ОбъектМетаданных
// - Тип - Тип объекта информационной базы
// - Строка - Полное имя объекта метаданных
// - см. СтруктураОписанияОбъектаМетаданных
// - Произвольный - Объект информационной базы
//
// Возвращаемое значение:
// Булево - Это перечисление
Функция ЭтоРегистр(Значение) Экспорт
Описание = ОписаниеОбъектаМетаданных(Значение);
Возврат Описание <> Неопределено И СтрНачинаетсяС(Описание.ОписаниеТипа.Имя, "Регистр");
КонецФункции
// Разрешены ли синхронные вызовы в параметрах конфигурации.
//
// Возвращаемое значение:
// Булево - Разрешены синхронные вызовы
Функция РазрешеныСинхронныеВызовы() Экспорт
Возврат ЮТМетаданныеСлужебныйПовтИсп.РазрешеныСинхронныеВызовы();

View File

@ -0,0 +1,31 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="7e27abe5-a18c-4312-adbc-dad89e4fec00">
<name>ЮТМетаданныеСлужебный</name>
<synonym>
<key>ru</key>
<value>Метаданные служебный</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -178,7 +178,7 @@
ПолноеИмя = МетаданныеОбъекта.ПолноеИмя();
ЧастиИмени = СтрРазделить(ПолноеИмя, ".");
Типы = ЮТМетаданные.ТипыМетаданных();
Типы = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных();
Если НЕ Типы.Свойство(ЧастиИмени[0]) Тогда
Сообщение = СтрШаблон("Получение описания для '%1' не поддерживается, либо не реализовано", ЧастиИмени[0]);
@ -303,7 +303,7 @@
Если ЧастиСтроки.Количество() = 2 Тогда
ТипыМетаданных = ЮТМетаданные.ТипыМетаданных();
ТипыМетаданных = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных();
ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]];
Если ОписаниеТипа <> Неопределено Тогда
ОбъектМетаданных = Метаданные[ОписаниеТипа.ИмяКоллекции].Найти(ЧастиСтроки[1]);

View File

@ -20,7 +20,6 @@
Функция СоздатьЗапись(Знач Менеджер, Знач Данные, Знач ПараметрыЗаписи, Знач ВернутьОбъект) Экспорт
Менеджер = ЮТОбщий.Менеджер(Менеджер);
ПараметрыЗаписи = ПараметрыЗаписи(ПараметрыЗаписи);
Объект = НовыйОбъект(Менеджер, Данные, ПараметрыЗаписи.ДополнительныеСвойства);
@ -46,11 +45,23 @@
// Произвольный - Созданный объект
Функция НовыйОбъект(Знач Менеджер, Знач Данные, Знач ДополнительныеСвойства = Неопределено) Экспорт
Менеджер = ЮТОбщий.Менеджер(Менеджер);
ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер);
Менеджер = ЮТОбщий.Менеджер(ОписаниеОбъектаМетаданных);
ЭтоРегистр = ЮТМетаданные.ЭтоРегистр(ОписаниеОбъектаМетаданных);
Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа, Данные);
Если ДополнительныеСвойства <> Неопределено Тогда
ЮТКоллекции.ДополнитьСтруктуру(Объект.ДополнительныеСвойства, ДополнительныеСвойства);
КонецЕсли;
Если ЭтоРегистр Тогда
ЗаполнитьНаборРегистра(Объект, Данные);
Возврат Объект;
КонецЕсли;
ЗаполнитьЗначенияСвойств(Объект, Данные);
Если ОписаниеОбъектаМетаданных.ОписаниеТипа.ТабличныеЧасти Тогда
@ -73,10 +84,6 @@
ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных);
Если ОписаниеОбъектаМетаданных.ОписаниеТипа.Ссылочный И ДополнительныеСвойства <> Неопределено Тогда
ЮТКоллекции.ДополнитьСтруктуру(Объект.ДополнительныеСвойства, ДополнительныеСвойства);
КонецЕсли;
Возврат Объект;
КонецФункции
@ -140,16 +147,9 @@
КонецЕсли;
ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ОбъектМетаданных);
ОписаниеТипа = ОписаниеОбъектаМетаданных.ОписаниеТипа;
Менеджер = ЮТОбщий.Менеджер(ОбъектМетаданных);
Если ЮТОбщийСлужебныйВызовСервера.ЭтоАнглийскийВстроенныйЯзык() Тогда
ИмяТипаМенеджера = СтрШаблон("%1Manager.%2", ОписаниеТипа.Имя, ОбъектМетаданных.Имя);
Иначе
ИмяТипаМенеджера = СтрШаблон("%1Менеджер.%2", ОписаниеТипа.Имя, ОбъектМетаданных.Имя);
КонецЕсли;
Менеджер = Новый(ИмяТипаМенеджера);
Объект = СоздатьОбъект(Менеджер, ОписаниеТипа, РеквизитыЗаполнения);
Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа, РеквизитыЗаполнения);
Если ЗначениеЗаполнено(РеквизитыЗаполнения) Тогда
ЗаполнитьЗначенияСвойств(Объект, РеквизитыЗаполнения);
@ -298,10 +298,6 @@
Объект.ОбменДанными.Загрузка = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ПараметрыЗаписи.ДополнительныеСвойства) Тогда
ЮТКоллекции.ДополнитьСтруктуру(Объект.ДополнительныеСвойства, ПараметрыЗаписи.ДополнительныеСвойства);
КонецЕсли;
Попытка
Если ПараметрыЗаписи.РежимЗаписи <> Неопределено Тогда
@ -378,6 +374,17 @@
Менеджер = ЮТОбщий.Менеджер(Описание);
Возврат Менеджер.СоздатьКлючЗаписи(КлючевыеРеквизиты);
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипНабораЗаписей(ТипЗначения) Тогда
КлючевыеРеквизиты = Новый Структура();
Для Каждого ЭлементОтбора Из Объект.Отбор Цикл
КлючевыеРеквизиты.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение);
КонецЦикла;
Менеджер = ЮТОбщий.Менеджер(Объект);
Возврат Менеджер.СоздатьКлючЗаписи(КлючевыеРеквизиты);
Иначе
Сообщение = ЮТИсключения.НеподдерживаемыйПараметрМетода("ЮТТестовыеДанныеВызовСервера.КлючЗаписи", Объект);
@ -399,4 +406,15 @@
КонецФункции
Процедура ЗаполнитьНаборРегистра(Набор, ДанныеЗаписи)
Запись = Набор.Добавить();
ЗаполнитьЗначенияСвойств(Запись, ДанныеЗаписи);
Для Каждого ЭлементОтбора Из Набор.Отбор Цикл
ЭлементОтбора.Установить(Запись[ЭлементОтбора.Имя]);
КонецЦикла;
КонецПроцедуры
#КонецОбласти

View File

@ -8,7 +8,7 @@
| ПланСчетов | ПланыСчетов | СоздатьСчет | | + | + | | | | + | + |
| ПланВидовРасчета | ПланыВидовРасчета | СоздатьВидРасчета | | + | + | | | | + | + |
| ПланОбмена | ПланыОбмена | СоздатьУзел | | + | + | | | | + | + |
| РегистрСведений | РегистрыСведений | СоздатьМенеджерЗаписи | | | + | + | + | | | + |
| РегистрСведений | РегистрыСведений | СоздатьНаборЗаписей | | | + | + | + | | | + |
| РегистрНакопления | РегистрыНакопления | | | | + | + | + | | | + |
| РегистрБухгалтерии | РегистрыБухгалтерии | | | | + | + | + | | | + |
| РегистрРасчета | РегистрыРасчета | | | | + | + | + | | | + |
@ -23,7 +23,7 @@
| ChartOfAccounts | ChartsOfAccounts | СоздатьСчет | | + | + | | | | + | + |
| ChartOfCalculationTypes | ChartsOfCalculationTypes | СоздатьВидРасчета | | + | + | | | | + | + |
| ExchangePlan | ExchangePlans | СоздатьУзел | | + | + | | | | + | + |
| InformationRegister | InformationRegisters | СоздатьМенеджерЗаписи | | | + | + | + | | | + |
| InformationRegister | InformationRegisters | СоздатьНаборЗаписей | | | + | + | + | | | + |
| AccumulationRegister | AccumulationRegisters | | | | + | + | + | | | + |
| AccountingRegister | AccountingRegisters | | | | + | + | + | | | + |
| CalculationRegister | CalculationRegisters | | | | + | + | + | | | + |

View File

@ -81,6 +81,7 @@
<commonModules>CommonModule.ЮТЛогИсполненияТестаСлужебный</commonModules>
<commonModules>CommonModule.ЮТЛокальСлужебный</commonModules>
<commonModules>CommonModule.ЮТМетаданные</commonModules>
<commonModules>CommonModule.ЮТМетаданныеСлужебный</commonModules>
<commonModules>CommonModule.ЮТМетаданныеСлужебныйВызовСервера</commonModules>
<commonModules>CommonModule.ЮТМетаданныеСлужебныйПовтИсп</commonModules>
<commonModules>CommonModule.ЮТМетодыСлужебный</commonModules>

View File

@ -23,7 +23,7 @@
<name>Active</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -33,7 +33,7 @@
<name>LineNumber</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -43,7 +43,7 @@
<name>Recorder</name>
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -54,7 +54,7 @@
<comment></comment>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@ -96,7 +96,6 @@
<numberQualifiers>
<precision>10</precision>
<scale>2</scale>
<nonNegative>true</nonNegative>
</numberQualifiers>
</type>
<toolTip>
@ -106,13 +105,10 @@
<mask></mask>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<quickChoice>DontUse</quickChoice>
<createOnInput>Use</createOnInput>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:NumberValue">
<value>0</value>
</fillValue>
<fillValue xsi:type="core:UndefinedValue"/>
</resources>
<dimensions uuid="55a02ed2-75b4-4627-9b2d-1553d3d08eb8">
<name>Товар</name>
@ -133,7 +129,7 @@
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<denyIncompleteValues>true</denyIncompleteValues>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:ReferenceValue">
@ -156,7 +152,7 @@
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<fullTextSearch>DontUse</fullTextSearch>
<dataHistory>Use</dataHistory>
<fillValue xsi:type="core:ReferenceValue">
<value>Catalog.ВидыЦен.EmptyRef</value>

View File

@ -24,6 +24,7 @@
.ДобавитьТест("ЗаполнитьСправочник")
.ДобавитьТест("ЗаполнитьДокумент")
.ДобавитьТест("СоздатьЗаписьРегистраСведений")
.ДобавитьТест("СоздатьЗаписьРегистраСведений_ОбменДанными")
.ДобавитьТест("Фикция")
.ДобавитьТест("Фикция_Типизированная")
.ДобавитьТест("Фикция_ОбщийРеквизит")
@ -138,6 +139,29 @@
КонецПроцедуры
Процедура СоздатьЗаписьРегистраСведений_ОбменДанными() Экспорт
Конструктор = ЮТест.Данные().КонструкторОбъекта("РегистрСведений.ЦеныТоваров")
.Фикция("Период")
.Фикция("Товар")
.Фикция("ВидЦен")
.Установить("Цена", -1);
ДанныеОбъекта = Конструктор.ДанныеОбъекта();
ЮТест.ОжидаетЧто(Конструктор)
.Метод("Записать").Параметр(Ложь).Параметр(Истина)
.НеВыбрасываетИсключение();
ЮТест.ОжидаетЧтоТаблицаБазы("РегистрСведений.ЦеныТоваров")
.СодержитЗаписи(ЮТест.Предикат(ДанныеОбъекта));
ЮТест.ОжидаетЧто(Конструктор)
.Метод("Записать")
.ВыбрасываетИсключение("Цена товара не может быть отрицательной");
КонецПроцедуры
Процедура Фикция() Экспорт
Поставщик = Ютест.Данные().СоздатьЭлемент("Справочники.Контрагенты");