Типизация колонок таблицы значений в 1С позволяет задать тип данных, которые будут храниться в каждой колонке. Это важно для обеспечения корректности данных, повышения производительности и использования различных функций платформы 1С.
Существует несколько способов типизации колонок таблицы значений в 1С:
1. При создании таблицы значений “вручную” (в коде):
Этот способ используется, когда таблица значений создается и заполняется данными программно.
// Создание таблицы значений
ТаблицаЗначений = Новый ТаблицаЗначений;
// Определение колонок
ТаблицаЗначений. Колонки. Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка. Номенклатура"));
ТаблицаЗначений. Колонки. Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак. Неотрицательный)));
ТаблицаЗначений. Колонки. Добавить("Цена", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак. Любой)));
ТаблицаЗначений. Колонки. Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак. Любой)));
// Заполнение таблицы значениями (пример)
НоваяСтрока = ТаблицаЗначений. Добавить();
НоваяСтрока. Номенклатура = Справочники. Номенклатура. НайтиПоНаименованию("Товар 1");
НоваяСтрока. Количество = 10;
НоваяСтрока. Цена = 100;
НоваяСтрока. Сумма = НоваяСтрока. Количество * НоваяСтрока. Цена;
ТаблицаЗначений = Новый ТаблицаЗначений; — Создает новый экземпляр таблицы значений.
ТаблицаЗначений. Колонки. Добавить(ИмяКолонки, ОписаниеТипов); — Добавляет колонку в таблицу значений.
ИмяКолонки — Строка, имя колонки.
ОписаниеТипов — Объект типа “ОписаниеТипов”, определяющий тип данных колонки.
Новый ОписаниеТипов(ТипДанных, Квалификаторы); — Создает объект “ОписаниеТипов”.
ТипДанных — Строка, указывающая тип данных колонки. Может быть:
"Строка"
"Число"
"Дата"
"Булево"
"СправочникСсылка. ИмяСправочника" (например, "СправочникСсылка. Номенклатура") — Ссылка на элемент справочника.
"ДокументСсылка. ИмяДокумента" (например, "ДокументСсылка. РеализацияТоваровУслуг") — Ссылка на документ.
И другие типы данных 1С.
Квалификаторы (необязательный параметр) — Объект, определяющий квалификаторы типа данных (например, для чисел — точность и разрядность).
Новый КвалификаторыЧисла(Длина, Точность, ДопустимыйЗнак); — Создает объект “КвалификаторыЧисла” для числовых типов данных.
Длина — Общая длина числа (включая целую и дробную часть).
Точность — Количество знаков после запятой.
ДопустимыйЗнак — Определяет допустимый знак числа. Может быть:
ДопустимыйЗнак. Любой
ДопустимыйЗнак. Неотрицательный
ДопустимыйЗнак. Положительный
Новый ОписаниеТипов("ТипЗнч",,,,,); Можно указать несколько типов в колонке:
«`1c
Новый ОписаниеТипов("Число, Строка");
«`
При этом, если у колонки несколько типов, то при чтении значения нужно делать проверку на тип.
2. Использование конструкции “Тип” при создании таблицы значений:
Более компактный вариант создания типизированных колонок:
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений. Колонки. Добавить("Номенклатура", Новый ОписаниеТипов(Тип("СправочникСсылка. Номенклатура")));
ТаблицаЗначений. Колонки. Добавить("Количество", Новый ОписаниеТипов(Тип("Число"), Новый КвалификаторыЧисла(10, 2)));
3. Типизация колонок таблицы значений, полученной из результата запроса:
Когда таблица значений формируется на основе результата запроса, типы данных колонок определяются автоматически на основе типов данных полей в запросе. Но если нужно изменить тип, можно сделать так:
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| Номенклатура. Ссылка КАК Номенклатура,
| СУММА(ПродажиОбороты. КоличествоОборот) КАК Количество
|ИЗ
| Справочник. Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления. Продажи. Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ПродажиОбороты
| ПО Номенклатура. Ссылка = ПродажиОбороты. Номенклатура
|
|СГРУППИРОВАТЬ ПО
| Номенклатура. Ссылка";
Запрос. УстановитьПараметр("ДатаНачала", НачалоМесяца(ТекущаяДата()));
Запрос. УстановитьПараметр("ДатаОкончания", КонецМесяца(ТекущаяДата()));
РезультатЗапроса = Запрос. Выполнить();
ТаблицаЗначений = РезультатЗапроса. Выгрузить();
// Изменение типа колонки "Количество"
ТаблицаЗначений. Колонки["Количество"].ТипЗначения = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак. Любой, Ложь));
4. Типизация колонки после создания (изменение типа уже существующей колонки):
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений. Колонки. Добавить("Код");
// … (заполнение таблицы значениями в строковом виде)
// После заполнения таблицы
ТаблицаЗначений. Колонки["Код"].ТипЗначения = Новый ОписаниеТипов("Число");
5. Использование таблицы значений как типа для реквизита объекта:
Можно создать реквизит объекта (например, документа) с типом “ТаблицаЗначений”. При этом структуру (колонки и их типы) таблицы значений нужно описывать в метаданных.
В конфигураторе:
Добавьте реквизит к объекту (например, к документу “РеализацияТоваровУслуг”).
Укажите тип реквизита “ТаблицаЗначений”.
Перейдите на закладку “Типы” реквизита и добавьте описание структуры таблицы значений (колонки и их типы).
Важные моменты:
Совместимость типов данных: Убедитесь, что тип данных, который вы задаете для колонки, совместим с данными, которые вы планируете хранить в этой колонке.
Квалификаторы для числовых типов: При использовании числовых типов данных обязательно указывайте квалификаторы (длина, точность, допустимый знак), чтобы избежать ошибок округления и переполнения.
Использование “Тип” вместо строки: Использование конструкции “Тип” (Тип(“СправочникСсылка. Номенклатура”)) предпочтительнее, чем использование строки (“СправочникСсылка. Номенклатура”), так как это позволяет избежать опечаток и ошибок.
Внимательно относитесь к типу значений: Неправильный тип колонки может привести к ошибкам во время выполнения.
Используйте отладчик: Используйте отладчик для проверки правильности установки типов колонок и значений.
Следуя этим рекомендациям, вы сможете правильно типизировать колонки таблицы значений в 1С и обеспечить корректность данных в вашей системе.