Skip to content

Commit

Permalink
Фиксация коллекций, создание элементов.
Browse files Browse the repository at this point in the history
  • Loading branch information
Nivanchenko committed Mar 23, 2023
1 parent 39eeb8d commit 9d35fc8
Show file tree
Hide file tree
Showing 11 changed files with 295 additions and 60 deletions.
91 changes: 91 additions & 0 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,68 @@

## Поддерживаемые типы

### Массив

```&Массив(Размер)``` - В поле внедряется новый массив. Параметр ```Размер``` необязательный, позволяет задать размер массива.

Допускается добавление элементов аннотацией ```Элемент(ЗначениеЭлемента)```

Добавление аннотации ```&Фиксированный``` превращает коллекцию в фиксированную

```bsl
&Фиксированный
&Массив
&Элемент("Элемент массива")
Перем ФиксированныйМассив Экспорт;
```

### Соответствие

```&Соответствие``` - В поле внедряется новое соответствие.

Допускается вставка элементов через аннотацию ```&КлючИЗначение("ИмяКлюча", Значение)```

Добавление аннотации ```&Фиксированный``` превращает коллекцию в фиксированную

```bsl
&Соответствие
&Фиксированный
&КлючИЗначение("Ключ", 1)
Перем ФиксированноеСоответствие Экспорт;
```

### Структура

```&Структура(Ключи)``` - В поле внедряется новая структура. Параметр ```Ключи``` необязательный. Строка, содержащая список ключей структуры, разделенные запятой "```,```"

Допускается вставка элементов через аннотацию ```&КлючИЗначение("ИмяКлюча", Значение)```

Добавление аннотации ```&Фиксированный``` превращает коллекцию в фиксированную

```bsl
&Структура
&Фиксированный
&КлючИЗначение("Ключ", 1)
Перем ФиксированнаяСтруктура Экспорт;
```

### ТаблицаЗначений

```&ТаблицаЗначений(Колонки)``` - В поле внедряется новая таблица значений. Параметр ```Колонки``` необязательный. Строка, содержащая список имен колонок, разделенных запятой "```,```"

Альтернативный способ добавления колонки, через аннотацию ```&Колонка("ИмяКолонки")```.

Есть возможность добавить строки таблицы через аннотацию ```&СтрокаТаблицы(ИмяКолонки1 = "Значение 1", ИмяКолонки2 = "Еще значение")```.

```bsl
&ТаблицаЗначений
&Колонка("ДеньНедели")
&Колонка("НомерДня")
&СтрокаТаблицы(ДеньНедели = "Понедельник", НомерДня = 1)
&СтрокаТаблицы(ДеньНедели = "Вторник", НомерДня = 2)
Перем ЗаполненнаяТаблица Экспорт;
```

## Подключение и использование

В точке входа вашего приложения подключить библиотеку
Expand All @@ -50,26 +104,63 @@
Пример внедрения типов в поля желудя:

```bsl
&Массив
Перем ПустойМассив Экспорт;
&ТаблицаЗначений("Колонка1, Колонка2")
&Колонка("Колонка2")
&Колонка("Колонка3")
Перем ТЗ Экспорт;
&ТаблицаЗначений
&Колонка("ДеньНедели")
&Колонка("НомерДня")
&СтрокаТаблицы(ДеньНедели = "Понедельник", НомерДня = 1)
&СтрокаТаблицы(ДеньНедели = "Вторник", НомерДня = 2)
Перем ЗаполненнаяТаблица Экспорт;
&ТаблицаЗначений
Перем ТЗБезКолонок Экспорт;
&Соответствие
Перем Соответствие Экспорт;
&Соответствие
&КлючИЗначение("Ключ1", 1)
&КлючИЗначение("Ключ2", "2")
Перем ЗаполненноеСоответствие Экспорт;
&Структура("Ключ1, Ключ2")
&КлючИЗначение("Ключ2", 2)
&КлючИЗначение("Ключ3", "3")
Перем СтруктураСКлючами Экспорт;
&Структура
Перем ПустаяСтруктура Экспорт;
Перем МассивСРазмером1 Экспорт;
&Массив(1)
&Элемент("а")
&Элемент(1)
Перем ЗаполненныйМассив Экспорт;
&Фиксированный
&Массив
&Элемент(1)
Перем ФиксированныйМассив Экспорт;
&Структура
&Фиксированный
&КлючИЗначение("Ключ", 1)
Перем ФиксированнаяСтруктура Экспорт;
&Соответствие
&Фиксированный
&КлючИЗначение("Ключ", 1)
Перем ФиксированноеСоответствие Экспорт;
&Желудь
Процедура ПриСозданииОбъекта(&Массив(1) _Массив)
МассивСРазмером1 = _Массив;
Expand Down
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@


Описание.Имя("autumn-annotation-types")
.Версия("1.0.0")
.Версия("1.0.1")
.Автор("nikita ivanchenko")
.АдресАвтора("https://github.com/Nivanchenko")
.Описание("Набор аннотаций ОСени, для удобной инициализации стандартных типов")
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

Аннотация = РаботаСАннотациями.НайтиАннотацию(ПодчиненныеАннотации, "Пластилин");
Аннотация.Параметры[1].Значение = Размер;
Аннотация.Параметры[2].Значение = РаботаСАннотациями.НайтиАннотации(Свойство.Аннотации, "Элемент");
Аннотация.Параметры[3].Значение = НЕ РаботаСАннотациями.НайтиАннотацию(Свойство.Аннотации, "Фиксированный") = Неопределено;

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

&Аннотация("Массив")
&Пластилин(Значение = "Массив", Блестяшка = 0)
&Пластилин(Значение = "Массив", Блестяшка = 0, Блестяшка = Неопределено, Блестяшка = Ложь)
Процедура ПриСозданииОбъекта(Значение = 0)
Размер = Значение;
КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

Процедура ПриРазворачиванииАннотации(ОпределениеАннотации, ПодчиненныеАннотации, ТипВладельцаСвойств, Свойство) Экспорт

Аннотация = РаботаСАннотациями.НайтиАннотацию(ПодчиненныеАннотации, "Пластилин");
Аннотация.Параметры[1].Значение = РаботаСАннотациями.НайтиАннотации(Свойство.Аннотации, "КлючИЗначение");
Аннотация.Параметры[2].Значение = НЕ РаботаСАннотациями.НайтиАннотацию(Свойство.Аннотации, "Фиксированный") = Неопределено;

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

&Аннотация("Соответствие")
&Пластилин(Значение = "Соответствие", Блестяшка = "", Блестяшка = "",)
Процедура ПриСозданииОбъекта(Значение = "")

КонецПроцедуры
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

Аннотация = РаботаСАннотациями.НайтиАннотацию(ПодчиненныеАннотации, "Пластилин");
Аннотация.Параметры[1].Значение = Ключи;
Аннотация.Параметры[2].Значение = РаботаСАннотациями.НайтиАннотации(Свойство.Аннотации, "КлючИЗначение");
Аннотация.Параметры[3].Значение = НЕ РаботаСАннотациями.НайтиАннотацию(Свойство.Аннотации, "Фиксированный") = Неопределено;

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

&Аннотация("Структура")
&Пластилин(Значение = "Структура", Блестяшка = "")
&Пластилин(Значение = "Структура", Блестяшка = "", Блестяшка = "", Блестяшка = "")
Процедура ПриСозданииОбъекта(Значение = "")
Ключи = Значение;
КонецПроцедуры
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

Аннотация = РаботаСАннотациями.НайтиАннотацию(ПодчиненныеАннотации, "Пластилин");
Аннотация.Параметры[1].Значение = Колонки;
Аннотация.Параметры[2].Значение = РаботаСАннотациями.НайтиАннотации(Свойство.Аннотации, "Колонка");
Аннотация.Параметры[3].Значение = РаботаСАннотациями.НайтиАннотации(Свойство.Аннотации, "СтрокаТаблицы");

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

&Аннотация("ТаблицаЗначений")
&Пластилин(Значение = "ТаблицаЗначений", Блестяшка = "")
&Пластилин(Значение = "ТаблицаЗначений", Блестяшка = "", Блестяшка = "", Блестяшка = "")
Процедура ПриСозданииОбъекта(Значение = "")
Колонки = Значение;
КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@

&Дуб
Процедура ПриСозданииОбъекта()

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

&Завязь
&Характер("Компанейский")
Функция Массив(&Блестяшка Размер, &Блестяшка Элементы, &Блестяшка Фиксированный) Экспорт
Если Размер > 0 Тогда
Массив = Новый Массив(Размер);
Иначе
Массив = Новый Массив();
КонецЕсли;

Счетчик = 0;
Для Каждого ТекЭлемент из Элементы Цикл
Значение = ТекЭлемент.Параметры[0].Значение;
Если Размер > 0 и Счетчик <= Размер - 1 Тогда
Массив[Счетчик] = Значение;
Иначе
Массив.Добавить(Значение);
КонецЕсли;
Счетчик = Счетчик + 1;
КонецЦикла;

Если Фиксированный = Истина Тогда
Массив = Новый ФиксированныйМассив(Массив);
КонецЕсли;

Возврат Массив;
КонецФункции

&Завязь
&Характер("Компанейский")
Функция Структура(&Блестяшка Ключи, &Блестяшка КлючиИЗначения, &Блестяшка Фиксированный) Экспорт
Структура = Новый Структура(Ключи);

Для Каждого КлючИЗначение из КлючиИЗначения Цикл
Если КлючИЗначение.Параметры.Количество() = 1 Тогда
Структура.Вставить(КлючИЗначение.Параметры[0].Значение);
ИначеЕсли КлючИЗначение.Параметры.Количество() > 1 Тогда
Структура.Вставить(КлючИЗначение.Параметры[0].Значение, КлючИЗначение.Параметры[1].Значение);
Иначе
// Ничего
КонецЕсли;
КонецЦикла;

Если Фиксированный = Истина Тогда
Структура = Новый ФиксированнаяСтруктура(Структура);
КонецЕсли;

Возврат Структура;
КонецФункции

&Завязь
&Характер("Компанейский")
Функция Соответствие(&Блестяшка КлючиИЗначения, &Блестяшка Фиксированный) Экспорт
Соответствие = Новый Соответствие();

Для Каждого КлючИЗначение из КлючиИЗначения Цикл
Если КлючИЗначение.Параметры.Количество() = 1 Тогда
Соответствие.Вставить(КлючИЗначение.Параметры[0].Значение);
ИначеЕсли КлючИЗначение.Параметры.Количество() > 1 Тогда
Соответствие.Вставить(КлючИЗначение.Параметры[0].Значение, КлючИЗначение.Параметры[1].Значение);
Иначе
// Ничего
КонецЕсли;
КонецЦикла;

Если Фиксированный = Истина Тогда
Соответствие = Новый ФиксированноеСоответствие(Соответствие);
КонецЕсли;

Возврат Соответствие;
КонецФункции

&Завязь
&Характер("Компанейский")
Функция ТаблицаЗначений(&Блестяшка КолонкиСтрокой, &Блестяшка Колонки, &Блестяшка Строки) Экспорт
ТаблицаЗначений = Новый ТаблицаЗначений();

Если НЕ ПустаяСтрока(КолонкиСтрокой) Тогда
Для каждого ИмяКолонки Из СтрРазделить(КолонкиСтрокой, ",") Цикл
ТаблицаЗначений.Колонки.Добавить(СокрЛП(ИмяКолонки));
КонецЦикла;
КонецЕсли;

Для Каждого ТекКолонка из Колонки Цикл
ИмяКолонки = ТекКолонка.Параметры[0].Значение;
Если ТаблицаЗначений.Колонки.Найти(ИмяКолонки) = Неопределено Тогда
ТаблицаЗначений.Колонки.Добавить(СокрЛП(ИмяКолонки));
КонецЕсли
КонецЦикла;

Для Каждого ТекСтрока из Строки Цикл
НоваяСтрока = ТаблицаЗначений.Добавить();
Для Каждого ТекПараметр из ТекСтрока.Параметры Цикл
НоваяСтрока[ТекПараметр.Имя] = ТекПараметр.Значение;
КонецЦикла;
КонецЦикла;

Возврат ТаблицаЗначений;
КонецФункции

This file was deleted.

Loading

0 comments on commit 9d35fc8

Please sign in to comment.