Создание ячеек в 1С: макеты, табличные части и код

· 9 мин

Содержание

Слово «ячейка» в 1С означает сразу три разные вещи, и от того, какую вы имеете в виду, зависит способ создания. Ячейка в табличном документе — это клетка макета печатной формы, как в Excel. Ячейка табличной части — пересечение строки и колонки в документе или справочнике. А ячейка таблицы значений живёт только в коде и в базе не хранится.

Чтобы создать ячейки для печатной формы, вы рисуете макет-«табличный документ» в конфигураторе и задаёте ячейкам заполнение. Чтобы хранить список строк в документе — добавляете табличную часть и её реквизиты-колонки. Чтобы собрать данные на лету в обработке или отчёте — создаёте таблицу значений прямо в коде.

Ниже разберём все три случая по шагам: где создавать, как настроить свойства ячейки, как заполнить её значением и какие ошибки встречаются чаще всего.

Что в 1С называют ячейкой и когда какой вариант нужен

Прежде чем что-то создавать, определитесь с задачей — от неё зависит весь дальнейший путь.

  • 📄 Печатная форма, акт, счёт, ценник. Нужен табличный документ (макет). Ячейки в нём — это клетки с текстом или параметрами, которые заполняются при печати.
  • 🗂️ Список товаров в накладной, строки начислений, состав комплекта. Нужна табличная часть объекта. Её колонки задаются в конфигураторе, строки добавляет пользователь или код.
  • ⚙️ Промежуточная таблица в отчёте или обработке. Нужна таблица значений — она существует только в оперативной памяти во время работы кода.

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

Что именно вам нужно сделать с ячейками?

Ячейки в табличном документе — основа печатных форм

Табличный документ — самый близкий к «настоящей» ячейке объект: он выглядит как лист Excel с клетками, границами и форматированием.

Чтобы создать его в конфигураторе:

  1. Откройте дерево конфигурации и найдите нужный объект — документ, справочник или обработку.
  2. Разверните ветку объекта, встаньте на пункт Макеты, вызовите контекстное меню и выберите Добавить.
  3. В окне выбора типа макета укажите Табличный документ и задайте имя, например Печать.
  4. Откроется редактор — табличное поле с колонками-буквами и строками-номерами. Это и есть ваши ячейки.

Дальше работайте как в табличном редакторе: выделяйте клетку, вводите текст, тяните границы колонок. Чтобы ввести значение, достаточно щёлкнуть по ячейке и начать печатать.

Группу ячеек почти всегда объединяют в именованную область (шапка, строка таблицы, подвал). Выделите нужные строки или столбцы и назначьте имени области через меню Таблица. Именно по имени области код потом обращается к макету.

Объединение ячеек. Чтобы сделать из нескольких клеток одну (например, под заголовок документа), выделите их и примените команду объединения в меню Таблица или на панели табличного документа. При объединении имя и параметр берутся из верхней левой ячейки — остальные теряются.

Как заполнять ячейки макета из кода — заполнение «Параметр»

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

Выделите ячейку и откройте палитру свойств клавишей F4. В свойстве Заполнение доступны три варианта:

ЗаполнениеЧто делает ячейкаКогда применять
ТекстВыводит содержимое как естьПостоянные надписи: «Счёт №», «Итого»
ПараметрВсё содержимое трактуется как имя параметраПодстановка одного значения в ячейку
ШаблонТекст с параметрами в квадратных скобках [Имя]Фраза с подстановкой: Счёт № [Номер] от [Дата]

Для подстановки одного значения впишите в ячейку имя параметра (например, Организация) и переключите Заполнение в режим Параметр.

После этого значение подставляется из кода перед выводом области:

Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ОбластьШапка.Параметры.Организация = Организация;
ОбластьШапка.Параметры.Номер = Номер;
ОбластьШапка.Параметры.Дата = Дата;

ТабДок = Новый ТабличныйДокумент;
ТабДок.Вывести(ОбластьШапка);
ТабДок.Показать();

Обращение к параметру идёт через ОбластьМакета.Параметры.ИмяПараметра. Имя параметра — это текст, который вы вписали в ячейку, а не адрес клетки вроде R1C1.

Если имя параметра в ячейке не совпадает с тем, что вы задаёте в коде, 1С выведет в печатной форме пустое место или само имя параметра. Проверяйте регистр и опечатки.

Ячейки табличной части документа

В накладной, счёте или комплекте строки товаров хранятся в табличной части. Её «ячейка» — это пересечение строки (её добавляет пользователь) и колонки (её задаёт разработчик).

Чтобы создать колонки табличной части:

  1. В дереве конфигурации разверните объект (например, документ) и встаньте на ветку Табличные части.
  2. Через контекстное меню выберите Добавить и задайте имя табличной части, например Товары.
  3. Разверните созданную табличную часть, встаньте на Реквизиты и добавляйте реквизиты — каждый реквизит это колонка: Номенклатура, Количество, Цена, Сумма.
  4. Для каждого реквизита в палитре свойств укажите Тип: ссылку на справочник, число, строку.

Чтобы колонки появились в форме, откройте форму документа и перетащите табличную часть в дерево элементов (или создайте форму заново — конструктор добавит таблицу автоматически).

Как пользователь добавляет ячейки (строки). В готовой форме строка добавляется командой Добавить в командной панели таблицы или клавишей Ins. Ячейки одной строки заполняются по колонкам — пользователь вводит номенклатуру, количество, цену.

Как заполнить ячейки из кода:

НоваяСтрока = Товары.Добавить();
НоваяСтрока.Номенклатура = ВыбраннаяНоменклатура;
НоваяСтрока.Количество = 5;
НоваяСтрока.Цена = 100;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;

Здесь Товары — имя табличной части, Добавить() создаёт новую строку, а обращение к ячейке идёт по имени колонки: НоваяСтрока.Количество.

Таблица значений — создаём колонки и ячейки программно

Когда таблица нужна только во время работы кода (в отчёте, обработке, при обмене данными), её не хранят в базе, а создают в памяти — это таблица значений.

Колонки добавляются вручную, до заполнения строк:

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

Третий и четвёртый аргументы метода Добавить — это заголовок колонки и её ширина, оба необязательны.

Строка (с набором ячеек) создаётся методом Добавить(), а к отдельной ячейке можно обратиться тремя способами:

Строка = ТЗ.Добавить();
Строка.Товар = ВыбраннаяНоменклатура;   // по имени колонки
Строка["Количество"] = 3;               // по имени в кавычках
Строка[2] = 3 * 150;                    // по индексу колонки, с нуля

Обращение по индексу удобно в циклах, но менее читаемо: Строка[2] — это третья колонка, потому что отсчёт идёт с нуля.

Перебрать все ячейки по строкам можно циклом Для Каждого Строка Из ТЗ Цикл … КонецЦикла, а подвести итог по числовой колонке — методом ТЗ.Итог("Сумма"). Чтобы быстро наполнить таблицу данными запроса, пригодится Результат.Выгрузить() — он вернёт готовую таблицу значений с колонками по полям запроса.

Таблица значений не сохраняется после закрытия формы. Если данные нужно сберечь — выгрузите их в табличную часть методом ТабЧасть.Загрузить(ТЗ) (имена колонок должны совпадать) или запишите в регистр.

Настройка свойств ячеек: формат, границы, тип данных

У каждого из трёх объектов свои свойства ячейки, и настраиваются они в разных местах.

Ячейка табличного документа (макета). Выделите клетку, нажмите F4 и задавайте в палитре:

  • Формат — маска вывода числа или даты, например ЧДЦ=2 для двух знаков после запятой;
  • ГоризонтальноеПоложение и ВертикальноеПоложение — выравнивание;
  • Границы — тип и цвет линий клетки;
  • ЦветФона, ЦветТекста, параметры шрифта;
  • Защита — запрет редактирования при интерактивном просмотре.

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

Колонка таблицы значений. Свойства задаются при добавлении или через объект колонки:

Колонка = ТЗ.Колонки.Сумма;
Колонка.Заголовок = "Сумма с НДС";
Колонка.Ширина = 15;

Тип значения ячейки задаёт ОписаниеТипов при создании колонки — именно он ограничивает, что можно записать в ячейку.

Практический пример: таблица из повторяющихся строк

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

Приём простой — в макете делают одну именованную область-строку с ячейками-параметрами, а в коде выводят её в цикле столько раз, сколько записей в табличной части.

  1. В макете нарисуйте одну строку будущей таблицы: ячейки Номенклатура, Количество, Сумма с заполнением Параметр.
  2. Выделите эту строку целиком и назначьте ей имя области, например Строка.
  3. В коде переберите табличную часть и выводите область на каждой итерации:
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

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

Каждый вызов ТабДок.Вывести(ОбластьСтрока) дописывает одну строку ниже предыдущей. Так из одной области-шаблона получается таблица любой длины. Шапку и подвал выводят такими же отдельными областями до и после цикла.

Тот же принцип работает для ценников, этикеток и реестров: одна область с ячейками-параметрами выводится столько раз, сколько нужно.

Частые ошибки при работе с ячейками

Эти промахи встречаются чаще всего и дают либо пустую печатную форму, либо ошибку выполнения.

  • ❌ Заполнение ячейки макета осталось Текст. В печатной форме выводится имя параметра, а не значение. Переключите свойство Заполнение в режим Параметр или Шаблон.
  • ❌ Обращение к несуществующей колонке таблицы значений. Запись Строка.Колличество с опечаткой даёт ошибку «Поле объекта не обнаружено». Проверьте, что колонка добавлена и имя написано верно.
  • ❌ Присвоение значения не того типа. Если колонка создана с типом Число, а вы пишете в ячейку строку, 1С выдаст ошибку преобразования. Контролируйте тип при Колонки.Добавить.
  • ❌ Параметр в объединённой ячейке «потерялся». После объединения клеток значение берётся только из верхней левой — остальные параметры игнорируются.
  • ❌ Путаница табличной части и таблицы значений. Данные, собранные в таблицу значений, не попадают в базу сами по себе. Чтобы они сохранились с документом, их нужно загрузить в табличную часть.
  • ❌ Забыли вывести область. Параметры заполнены, а ТабДок.Вывести(Область) не вызван — на экране пустой документ.

Частые вопросы

Чем ячейка табличной части отличается от ячейки табличного документа?
Ячейка табличной части хранится в базе вместе с документом и доступна для учёта. Ячейка табличного документа — это клетка макета печатной формы, она служит для вывода на экран и печать, в базе отдельно не хранится.
Можно ли объединить ячейки в табличной части документа?
Нет. Объединение доступно только в табличном документе (макете). Колонки табличной части фиксированы — объединять клетки строк, как в Excel, нельзя.
Как обратиться к ячейке по номеру колонки, а не по имени?
В таблице значений используйте индекс: Строка[0] — первая колонка, Строка[1] — вторая. Отсчёт идёт с нуля, поэтому третья колонка это Строка[2].
Почему в печатной форме выводится имя параметра вместо значения?
Две причины: у ячейки не выбрано заполнение Параметр, либо имя параметра в макете не совпадает с тем, что задаётся в коде. Сверьте написание и регистр.
Сохранятся ли данные таблицы значений после закрытия формы?
Нет, таблица значений живёт только в памяти. Чтобы сохранить данные, выгрузите их в табличную часть методом Загрузить или запишите в регистр сведений.