Skip to content

Commit

Permalink
Конструктор коллекций
Browse files Browse the repository at this point in the history
  • Loading branch information
alkoleft committed Sep 19, 2024
1 parent 755cbf8 commit c970efe
Show file tree
Hide file tree
Showing 3 changed files with 212 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2022 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,9 @@
<?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>
<server>true</server>
</mdclass:CommonModule>
1 change: 1 addition & 0 deletions exts/yaxunit/src/Configuration/Configuration.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
<commonModules>CommonModule.ЮТКомпонентыСлужебныйКлиент</commonModules>
<commonModules>CommonModule.ЮТКонструкторВариантов</commonModules>
<commonModules>CommonModule.ЮТКонструкторТестовыхДанныхСлужебный</commonModules>
<commonModules>CommonModule.ЮТКонструкторКоллекций</commonModules>
<commonModules>CommonModule.ЮТКонтекстИсполненияСлужебныйКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТКонтекстСлужебный</commonModules>
<commonModules>CommonModule.ЮТКонтекстСлужебныйВызовСервера</commonModules>
Expand Down

0 comments on commit c970efe

Please sign in to comment.