Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

120 / Конструктор движений #413

Merged
merged 12 commits into from
Sep 24, 2024
Merged
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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.
//
//©///////////////////////////////////////////////////////////////////////////©//

/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры и функции для служебного использования внутри подсистемы
/////////////////////////////////////////////////////////////////////////////////

#Область СлужебныйПрограммныйИнтерфейс

// Варианты.
//
// Параметры:
// Реквизиты - Строка - Реквизиты
//
// Возвращаемое значение:
// ОбщийМодуль
Функция Инициализировать(Реквизиты) Экспорт

ОписаниеКоллекции = ОписаниеКоллекции();

Ключи = Новый Структура(Реквизиты);

Для Каждого Элемент Из Ключи Цикл
ДобавитьКолонку(Элемент.Ключ);
КонецЦикла;

ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(КлючКонтекста(), ОписаниеКоллекции);

Возврат ЮТКонструкторКоллекцийСлужебныйКлиентСервер;

КонецФункции

Функция ДобавитьКолонку(Имя, ТипЗначения = Неопределено, ЗначениеПоУмолчанию = Неопределено) Экспорт

ОписаниеКоллекции = ОписаниеКоллекции();

ОписаниеКолонки = ОписаниеКолонки(Имя, ТипЗначения, ЗначениеПоУмолчанию);

ОписаниеКоллекции.Колонки.Добавить(ОписаниеКолонки);
ЮТОбщий.Инкремент(ОписаниеКоллекции.КоличествоРеквизитов);

Возврат ЮТКонструкторКоллекцийСлужебныйКлиентСервер;

КонецФункции

Функция Добавить(Значение,
Значение2 = Неопределено,
Значение3 = Неопределено,
Значение4 = Неопределено,
Значение5 = Неопределено,
Значение6 = Неопределено,
Значение7 = Неопределено,
Значение8 = Неопределено,
Значение9 = Неопределено,
Значение10 = Неопределено) Экспорт

ОписаниеКоллекции = ОписаниеКоллекции();

Запись = Новый Структура();
Значения = Новый Массив();

Если ОписаниеКоллекции.КоличествоРеквизитов > 0 Тогда
Значения.Добавить(Значение);
КонецЕсли;

Если ОписаниеКоллекции.КоличествоРеквизитов > 1 Тогда
Значения.Добавить(Значение2);
КонецЕсли;

Если ОписаниеКоллекции.КоличествоРеквизитов > 2 Тогда
Значения.Добавить(Значение3);
КонецЕсли;

Если ОписаниеКоллекции.КоличествоРеквизитов > 3 Тогда
Значения.Добавить(Значение4);
КонецЕсли;

Если ОписаниеКоллекции.КоличествоРеквизитов > 4 Тогда
Значения.Добавить(Значение5);
КонецЕсли;

Если ОписаниеКоллекции.КоличествоРеквизитов > 5 Тогда
Значения.Добавить(Значение6);
КонецЕсли;

Если ОписаниеКоллекции.КоличествоРеквизитов > 6 Тогда
Значения.Добавить(Значение7);
КонецЕсли;

Если ОписаниеКоллекции.КоличествоРеквизитов > 7 Тогда
Значения.Добавить(Значение8);
КонецЕсли;

Если ОписаниеКоллекции.КоличествоРеквизитов > 8 Тогда
Значения.Добавить(Значение9);
КонецЕсли;

Если ОписаниеКоллекции.КоличествоРеквизитов > 9 Тогда
Значения.Добавить(Значение10);
КонецЕсли;

Для Инд = 0 По ОписаниеКоллекции.Колонки.ВГраница() Цикл

ОписаниеКолонки = ОписаниеКоллекции.Колонки[Инд];
Значение = Значения[Инд];

Если Значение = Неопределено Тогда
Значение = ОписаниеКолонки.ЗначениеПоУмолчанию;
КонецЕсли;

Если ОписаниеКолонки.ТипЗначения <> Неопределено Тогда
Значение = ОписаниеКолонки.ТипЗначения.ПривестиЗначение(Значение);
КонецЕсли;

Запись.Вставить(ОписаниеКолонки.Имя, Значение);

КонецЦикла;

ОписаниеКоллекции.Данные.Добавить(Запись);

Возврат ЮТКонструкторКоллекцийСлужебныйКлиентСервер;

КонецФункции

// Возвращает данные коллекции
//
// Возвращаемое значение:
// Массив из Структура
Функция Данные() Экспорт

Возврат ОписаниеКоллекции().Данные;

КонецФункции

#КонецОбласти

/////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции, составляющие внутреннюю реализацию модуля
/////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции

// Описание коллекции.
//
// Возвращаемое значение:
// см. НовыйОписаниеКоллекции
Функция ОписаниеКоллекции()

Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(КлючКонтекста());

КонецФункции

// Новый описание коллекции.
//
// Возвращаемое значение:
// Структура - Новый описание коллекции:
// * Колонки - Массив из см. ОписаниеКолонки
// * Данные - Массив из Произвольный
// * КоличествоРеквизитов - Число
Функция НовыйОписаниеКоллекции()

Описание = Новый Структура;
Описание.Вставить("Колонки", Новый Массив);
Описание.Вставить("Данные", Новый Массив);
Описание.Вставить("КоличествоРеквизитов", 0);

Возврат Описание;

КонецФункции

Функция ОписаниеКолонки(Имя, ТипЗначения = Неопределено, ЗначениеПоУмолчанию = Неопределено)

Описание = Новый Структура("Имя, ТипЗначения, ЗначениеПоУмолчанию");
Описание.Имя = Имя;
Описание.ТипЗначения = ТипЗначения;
Описание.ЗначениеПоУмолчанию = ЗначениеПоУмолчанию;

Возврат Описание;

КонецФункции

Функция КлючКонтекста()

Возврат "ВариантыТеста";

КонецФункции

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="77eb74a9-f72f-4221-ae79-5ca4149f0e48">
<name>ЮТКонструкторКоллекцийСлужебныйКлиентСервер</name>
<synonym>
<key>ru</key>
<value>Конструктор коллекций</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@

КонецФункции

Функция ДанныеСтроки(Контекст) Экспорт
Функция ДанныеСтрокиТабличнойЧасти(Контекст) Экспорт

Если ПустаяСтрока(Контекст.ТекущаяТабличнаяЧасть) Тогда
Возврат Неопределено;
Expand All @@ -187,6 +187,16 @@

КонецФункции

Функция ДанныеСтрокиКоллекции(Контекст) Экспорт

Если ЗначениеЗаполнено(Контекст.Данные) Тогда
Возврат Контекст.Данные[Контекст.Данные.ВГраница()];
Иначе
ВызватьИсключение "Сначала необходимо добавить строку";
КонецЕсли;

КонецФункции

Функция ДанныеОбъекта(Контекст) Экспорт

Возврат Контекст.Данные;
Expand Down Expand Up @@ -216,6 +226,22 @@

КонецФункции

Функция ИнициализироватьКонструкторДвижений(Документ, ИмяРегистра) Экспорт

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Конструктор = Обработки.ЮТКонструкторДвижений.Создать();
#Иначе
//@skip-check use-non-recommended-method
Конструктор = ПолучитьФорму("Обработка.ЮТКонструкторДвижений.Форма.КлиентскийКонструктор"); // BSLLS:GetFormMethod-off
#КонецЕсли

//@skip-check unknown-method-property
Конструктор.Инициализировать(Документ, ИмяРегистра);

Возврат Конструктор;

КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции
Expand Down Expand Up @@ -249,6 +275,18 @@

КонецФункции

Функция НовыйКонтекстКонструктораДвижений(Документ, ИмяРегистра) Экспорт

Контекст = Новый Структура();
Контекст.Вставить("Данные", Новый Массив());
Контекст.Вставить("Метаданные", ЮТМетаданные.ОписаниеРегистраДвиженийДокумента(Документ, ИмяРегистра));
Контекст.Вставить("ДополнительныеСвойства", Новый Структура());

//@skip-check constructor-function-return-section
Возврат Контекст;

КонецФункции

Функция ДанныеТабличнойЧасти(Контекст)

Возврат Контекст.Данные[Контекст.ТекущаяТабличнаяЧасть];
Expand Down Expand Up @@ -292,7 +330,7 @@

Функция Реквизиты(Контекст)

Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда
Если ФокусНаТабличнойЧасти(Контекст) Тогда
Возврат Контекст.Метаданные.ТабличныеЧасти[Контекст.ТекущаяТабличнаяЧасть];
Иначе
Возврат Контекст.Метаданные.Реквизиты;
Expand All @@ -306,7 +344,7 @@

Если НЕ Реквизиты.Свойство(ИмяРеквизита) Тогда
ИмяОсновнойТаблицы = ЮТМетаданные.НормализованноеИмяТаблицы(Контекст.Метаданные);
Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда
Если ФокусНаТабличнойЧасти(Контекст) Тогда
Пояснение = СтрШаблон("Табличная часть `%1.%2` не содержит реквизит `%3`", ИмяОсновнойТаблицы, Контекст.ТекущаяТабличнаяЧасть, ИмяРеквизита);
Иначе
Пояснение = СтрШаблон("`%1` не содержит реквизит `%2`", ИмяОсновнойТаблицы, ИмяРеквизита);
Expand All @@ -321,8 +359,10 @@

Функция ТекущаяЗапись(Контекст)

Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда
Возврат ДанныеСтроки(Контекст);
Если ФокусНаТабличнойЧасти(Контекст) Тогда
Возврат ДанныеСтрокиТабличнойЧасти(Контекст);
ИначеЕсли ЭтоКонструкторКоллекции(Контекст) Тогда
Возврат ДанныеСтрокиКоллекции(Контекст);
Иначе
Возврат Контекст.Данные;
КонецЕсли;
Expand All @@ -336,4 +376,16 @@

КонецПроцедуры

Функция ФокусНаТабличнойЧасти(Контекст)

Возврат Контекст.Свойство("ТекущаяТабличнаяЧасть") И ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть);

КонецФункции

Функция ЭтоКонструкторКоллекции(Контекст)

Возврат ЮТТипыДанныхСлужебный.ЭтоМассива(ТипЗнч(Контекст.Данные));

КонецФункции

#КонецОбласти
12 changes: 12 additions & 0 deletions exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,18 @@

КонецФункции

Функция ОписаниеРегистраДвиженийДокумента(Документ, ИмяРегистра) Экспорт

ПолноеИмяРегистра = Неопределено;

Если НЕ РегистрыДвиженийДокумента(Документ).Свойство(ИмяРегистра, ПолноеИмяРегистра) Тогда
Возврат Неопределено;
КонецЕсли;

Возврат ОписаниеОбъектаМетаданных(ПолноеИмяРегистра);

КонецФункции

// Возвращает текущую версию тестового движка (YAxUnit)
//
// Возвращаемое значение:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -855,6 +855,12 @@

КонецФункции

Функция КонструкторДвижений(Документ, ИмяРегистра) Экспорт

Возврат ЮТКонструкторТестовыхДанныхСлужебный.ИнициализироватьКонструкторДвижений(Документ, ИмяРегистра);

КонецФункции

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
// Возвращает конструктор создания объекта XDTO.
//
Expand Down
2 changes: 2 additions & 0 deletions exts/yaxunit/src/Configuration/Configuration.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@
<commonModules>CommonModule.ЮТКомпонентыСлужебныйВызовСервера</commonModules>
<commonModules>CommonModule.ЮТКомпонентыСлужебныйКлиент</commonModules>
<commonModules>CommonModule.ЮТКонструкторВариантов</commonModules>
<commonModules>CommonModule.ЮТКонструкторКоллекцийСлужебныйКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТКонструкторТестовыхДанныхСлужебный</commonModules>
<commonModules>CommonModule.ЮТКонтекстИсполненияСлужебныйКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТКонтекстСлужебный</commonModules>
Expand Down Expand Up @@ -159,6 +160,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>
Expand Down
Loading
Loading