Найти в Дзене

1с как типизировать колонки таблицы значений

Типизация колонок таблицы значений в 1С позволяет задать тип данных, которые будут храниться в каждой колонке. Это важно для обеспечения корректности данных, повышения производительности и использования различных функций платформы 1С.

Существует несколько способов типизации колонок таблицы значений в 1С:

1. При создании таблицы значений “вручную” (в коде):

Этот способ используется, когда таблица значений создается и заполняется данными программно.

// Создание таблицы значений

ТаблицаЗначений = Новый ТаблицаЗначений;

// Определение колонок

ТаблицаЗначений. Колонки. Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка. Номенклатура"));

ТаблицаЗначений. Колонки. Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак. Неотрицательный)));

ТаблицаЗначений. Колонки. Добавить("Цена", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак. Любой)));

ТаблицаЗначений. Колонки. Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак. Любой)));

// Заполнение таблицы значениями (пример)

НоваяСтрока = ТаблицаЗначений. Добавить();

НоваяСтрока. Номенклатура = Справочники. Номенклатура. НайтиПоНаименованию("Товар 1");

НоваяСтрока. Количество = 10;

НоваяСтрока. Цена = 100;

НоваяСтрока. Сумма = НоваяСтрока. Количество * НоваяСтрока. Цена;

ТаблицаЗначений = Новый ТаблицаЗначений; — Создает новый экземпляр таблицы значений.

ТаблицаЗначений. Колонки. Добавить(ИмяКолонки, ОписаниеТипов); — Добавляет колонку в таблицу значений.

ИмяКолонки — Строка, имя колонки.

ОписаниеТипов — Объект типа “ОписаниеТипов”, определяющий тип данных колонки.

Новый ОписаниеТипов(ТипДанных, Квалификаторы); — Создает объект “ОписаниеТипов”.

ТипДанных — Строка, указывающая тип данных колонки. Может быть:

"Строка"

"Число"

"Дата"

"Булево"

"СправочникСсылка. ИмяСправочника" (например, "СправочникСсылка. Номенклатура") — Ссылка на элемент справочника.

"ДокументСсылка. ИмяДокумента" (например, "ДокументСсылка. РеализацияТоваровУслуг") — Ссылка на документ.

И другие типы данных 1С.

Квалификаторы (необязательный параметр) — Объект, определяющий квалификаторы типа данных (например, для чисел — точность и разрядность).

Новый КвалификаторыЧисла(Длина, Точность, ДопустимыйЗнак); — Создает объект “КвалификаторыЧисла” для числовых типов данных.

Длина — Общая длина числа (включая целую и дробную часть).

Точность — Количество знаков после запятой.

ДопустимыйЗнак — Определяет допустимый знак числа. Может быть:

ДопустимыйЗнак. Любой

ДопустимыйЗнак. Неотрицательный

ДопустимыйЗнак. Положительный

Новый ОписаниеТипов("ТипЗнч",,,,,); Можно указать несколько типов в колонке:

«`1c

Новый ОписаниеТипов("Число, Строка");

«`

При этом, если у колонки несколько типов, то при чтении значения нужно делать проверку на тип.

2. Использование конструкции “Тип” при создании таблицы значений:

Более компактный вариант создания типизированных колонок:

ТаблицаЗначений = Новый ТаблицаЗначений;

ТаблицаЗначений. Колонки. Добавить("Номенклатура", Новый ОписаниеТипов(Тип("СправочникСсылка. Номенклатура")));

ТаблицаЗначений. Колонки. Добавить("Количество", Новый ОписаниеТипов(Тип("Число"), Новый КвалификаторыЧисла(10, 2)));

3. Типизация колонок таблицы значений, полученной из результата запроса:

Когда таблица значений формируется на основе результата запроса, типы данных колонок определяются автоматически на основе типов данных полей в запросе. Но если нужно изменить тип, можно сделать так:

Запрос = Новый Запрос;

Запрос. Текст =

"ВЫБРАТЬ

| Номенклатура. Ссылка КАК Номенклатура,

| СУММА(ПродажиОбороты. КоличествоОборот) КАК Количество

|ИЗ

| Справочник. Номенклатура КАК Номенклатура

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления. Продажи. Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ПродажиОбороты

| ПО Номенклатура. Ссылка = ПродажиОбороты. Номенклатура

|

|СГРУППИРОВАТЬ ПО

| Номенклатура. Ссылка";

Запрос. УстановитьПараметр("ДатаНачала", НачалоМесяца(ТекущаяДата()));

Запрос. УстановитьПараметр("ДатаОкончания", КонецМесяца(ТекущаяДата()));

РезультатЗапроса = Запрос. Выполнить();

ТаблицаЗначений = РезультатЗапроса. Выгрузить();

// Изменение типа колонки "Количество"

ТаблицаЗначений. Колонки["Количество"].ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак. Любой, Ложь));

4. Типизация колонки после создания (изменение типа уже существующей колонки):

ТаблицаЗначений = Новый ТаблицаЗначений;

ТаблицаЗначений. Колонки. Добавить("Код");

// … (заполнение таблицы значениями в строковом виде)

// После заполнения таблицы

ТаблицаЗначений. Колонки["Код"].ТипЗначения = Новый ОписаниеТипов("Число");

5. Использование таблицы значений как типа для реквизита объекта:

Можно создать реквизит объекта (например, документа) с типом “ТаблицаЗначений”. При этом структуру (колонки и их типы) таблицы значений нужно описывать в метаданных.

В конфигураторе:

Добавьте реквизит к объекту (например, к документу “РеализацияТоваровУслуг”).

Укажите тип реквизита “ТаблицаЗначений”.

Перейдите на закладку “Типы” реквизита и добавьте описание структуры таблицы значений (колонки и их типы).

Важные моменты:

Совместимость типов данных: Убедитесь, что тип данных, который вы задаете для колонки, совместим с данными, которые вы планируете хранить в этой колонке.

Квалификаторы для числовых типов: При использовании числовых типов данных обязательно указывайте квалификаторы (длина, точность, допустимый знак), чтобы избежать ошибок округления и переполнения.

Использование “Тип” вместо строки: Использование конструкции “Тип” (Тип(“СправочникСсылка. Номенклатура”)) предпочтительнее, чем использование строки (“СправочникСсылка. Номенклатура”), так как это позволяет избежать опечаток и ошибок.

Внимательно относитесь к типу значений: Неправильный тип колонки может привести к ошибкам во время выполнения.

Используйте отладчик: Используйте отладчик для проверки правильности установки типов колонок и значений.

Следуя этим рекомендациям, вы сможете правильно типизировать колонки таблицы значений в 1С и обеспечить корректность данных в вашей системе.

  📷
📷