Создание ячеек в 1С: макеты, табличные части и код
Содержание
Слово «ячейка» в 1С означает сразу три разные вещи, и от того, какую вы имеете в виду, зависит способ создания. Ячейка в табличном документе — это клетка макета печатной формы, как в Excel. Ячейка табличной части — пересечение строки и колонки в документе или справочнике. А ячейка таблицы значений живёт только в коде и в базе не хранится.
Чтобы создать ячейки для печатной формы, вы рисуете макет-«табличный документ» в конфигураторе и задаёте ячейкам заполнение. Чтобы хранить список строк в документе — добавляете табличную часть и её реквизиты-колонки. Чтобы собрать данные на лету в обработке или отчёте — создаёте таблицу значений прямо в коде.
Ниже разберём все три случая по шагам: где создавать, как настроить свойства ячейки, как заполнить её значением и какие ошибки встречаются чаще всего.
Что в 1С называют ячейкой и когда какой вариант нужен
Прежде чем что-то создавать, определитесь с задачей — от неё зависит весь дальнейший путь.
- 📄 Печатная форма, акт, счёт, ценник. Нужен табличный документ (макет). Ячейки в нём — это клетки с текстом или параметрами, которые заполняются при печати.
- 🗂️ Список товаров в накладной, строки начислений, состав комплекта. Нужна табличная часть объекта. Её колонки задаются в конфигураторе, строки добавляет пользователь или код.
- ⚙️ Промежуточная таблица в отчёте или обработке. Нужна таблица значений — она существует только в оперативной памяти во время работы кода.
Эти три объекта не взаимозаменяемы. Табличная часть сохраняется в базе вместе с документом, таблица значений исчезает после закрытия формы, а табличный документ служит для вывода на экран и печать.
Параметр, а значения подставьте из кода перед выводом.Добавить.Новый ТаблицаЗначений, колонки добавляются программно, ячейки доступны по имени колонки.Ячейки в табличном документе — основа печатных форм
Табличный документ — самый близкий к «настоящей» ячейке объект: он выглядит как лист Excel с клетками, границами и форматированием.
Чтобы создать его в конфигураторе:
- Откройте дерево конфигурации и найдите нужный объект — документ, справочник или обработку.
- Разверните ветку объекта, встаньте на пункт
Макеты, вызовите контекстное меню и выберитеДобавить. - В окне выбора типа макета укажите
Табличный документи задайте имя, напримерПечать. - Откроется редактор — табличное поле с колонками-буквами и строками-номерами. Это и есть ваши ячейки.
Дальше работайте как в табличном редакторе: выделяйте клетку, вводите текст, тяните границы колонок. Чтобы ввести значение, достаточно щёлкнуть по ячейке и начать печатать.
Группу ячеек почти всегда объединяют в именованную область (шапка, строка таблицы, подвал). Выделите нужные строки или столбцы и назначьте имени области через меню Таблица. Именно по имени области код потом обращается к макету.
Объединение ячеек. Чтобы сделать из нескольких клеток одну (например, под заголовок документа), выделите их и примените команду объединения в меню Таблица или на панели табличного документа. При объединении имя и параметр берутся из верхней левой ячейки — остальные теряются.
Как заполнять ячейки макета из кода — заполнение «Параметр»
Пустые клетки с текстом годятся только для статичных надписей. Чтобы в ячейку подставлялось значение из базы (номер документа, сумма, дата), ячейке задают тип заполнения.
Выделите ячейку и откройте палитру свойств клавишей F4. В свойстве Заполнение доступны три варианта:
| Заполнение | Что делает ячейка | Когда применять |
|---|---|---|
Текст | Выводит содержимое как есть | Постоянные надписи: «Счёт №», «Итого» |
Параметр | Всё содержимое трактуется как имя параметра | Подстановка одного значения в ячейку |
Шаблон | Текст с параметрами в квадратных скобках [Имя] | Фраза с подстановкой: Счёт № [Номер] от [Дата] |
Для подстановки одного значения впишите в ячейку имя параметра (например, Организация) и переключите Заполнение в режим Параметр.
После этого значение подставляется из кода перед выводом области:
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Организация = Организация;
ОбластьШапка.Параметры.Номер = Номер;
ОбластьШапка.Параметры.Дата = Дата;
ТабДок = Новый ТабличныйДокумент;
ТабДок.Вывести(ОбластьШапка);
ТабДок.Показать();
Обращение к параметру идёт через ОбластьМакета.Параметры.ИмяПараметра. Имя параметра — это текст, который вы вписали в ячейку, а не адрес клетки вроде R1C1.
Если имя параметра в ячейке не совпадает с тем, что вы задаёте в коде, 1С выведет в печатной форме пустое место или само имя параметра. Проверяйте регистр и опечатки.
Ячейки табличной части документа
В накладной, счёте или комплекте строки товаров хранятся в табличной части. Её «ячейка» — это пересечение строки (её добавляет пользователь) и колонки (её задаёт разработчик).
Чтобы создать колонки табличной части:
- В дереве конфигурации разверните объект (например, документ) и встаньте на ветку
Табличные части. - Через контекстное меню выберите
Добавитьи задайте имя табличной части, напримерТовары. - Разверните созданную табличную часть, встаньте на
Реквизитыи добавляйте реквизиты — каждый реквизит это колонка:Номенклатура,Количество,Цена,Сумма. - Для каждого реквизита в палитре свойств укажите
Тип: ссылку на справочник, число, строку.
Чтобы колонки появились в форме, откройте форму документа и перетащите табличную часть в дерево элементов (или создайте форму заново — конструктор добавит таблицу автоматически).
Как пользователь добавляет ячейки (строки). В готовой форме строка добавляется командой Добавить в командной панели таблицы или клавишей Ins. Ячейки одной строки заполняются по колонкам — пользователь вводит номенклатуру, количество, цену.
Как заполнить ячейки из кода:
НоваяСтрока = Товары.Добавить();
НоваяСтрока.Номенклатура = ВыбраннаяНоменклатура;
НоваяСтрока.Количество = 5;
НоваяСтрока.Цена = 100;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
Здесь Товары — имя табличной части, Добавить() создаёт новую строку, а обращение к ячейке идёт по имени колонки: НоваяСтрока.Количество.
Таблица значений — создаём колонки и ячейки программно
Когда таблица нужна только во время работы кода (в отчёте, обработке, при обмене данными), её не хранят в базе, а создают в памяти — это таблица значений.
Колонки добавляются вручную, до заполнения строк:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"), "Сумма, руб", 12);
Третий и четвёртый аргументы метода Добавить — это заголовок колонки и её ширина, оба необязательны.
Строка (с набором ячеек) создаётся методом Добавить(), а к отдельной ячейке можно обратиться тремя способами:
Строка = ТЗ.Добавить();
Строка.Товар = ВыбраннаяНоменклатура; // по имени колонки
Строка["Количество"] = 3; // по имени в кавычках
Строка[2] = 3 * 150; // по индексу колонки, с нуля
Обращение по индексу удобно в циклах, но менее читаемо: Строка[2] — это третья колонка, потому что отсчёт идёт с нуля.
Перебрать все ячейки по строкам можно циклом Для Каждого Строка Из ТЗ Цикл … КонецЦикла, а подвести итог по числовой колонке — методом ТЗ.Итог("Сумма"). Чтобы быстро наполнить таблицу данными запроса, пригодится Результат.Выгрузить() — он вернёт готовую таблицу значений с колонками по полям запроса.
Таблица значений не сохраняется после закрытия формы. Если данные нужно сберечь — выгрузите их в табличную часть методом ТабЧасть.Загрузить(ТЗ) (имена колонок должны совпадать) или запишите в регистр.
Настройка свойств ячеек: формат, границы, тип данных
У каждого из трёх объектов свои свойства ячейки, и настраиваются они в разных местах.
Ячейка табличного документа (макета). Выделите клетку, нажмите F4 и задавайте в палитре:
Формат— маска вывода числа или даты, напримерЧДЦ=2для двух знаков после запятой;ГоризонтальноеПоложениеиВертикальноеПоложение— выравнивание;Границы— тип и цвет линий клетки;ЦветФона,ЦветТекста, параметры шрифта;Защита— запрет редактирования при интерактивном просмотре.
Колонка табличной части на форме. Выделите колонку в редакторе формы и настройте Формат (как показывать число/дату), ТолькоПросмотр (запрет ручного ввода), ширину и подсказку. Сам тип данных меняется у реквизита табличной части в конфигураторе, а не в форме.
Колонка таблицы значений. Свойства задаются при добавлении или через объект колонки:
Колонка = ТЗ.Колонки.Сумма;
Колонка.Заголовок = "Сумма с НДС";
Колонка.Ширина = 15;
Тип значения ячейки задаёт ОписаниеТипов при создании колонки — именно он ограничивает, что можно записать в ячейку.
Практический пример: таблица из повторяющихся строк
Отдельного разговора заслуживает ситуация, когда в печатной форме нужна таблица с переменным числом строк — например, список товаров накладной. Создавать по ячейке на каждую строку бессмысленно: строк заранее не известно.
Приём простой — в макете делают одну именованную область-строку с ячейками-параметрами, а в коде выводят её в цикле столько раз, сколько записей в табличной части.
- В макете нарисуйте одну строку будущей таблицы: ячейки
Номенклатура,Количество,Суммас заполнениемПараметр. - Выделите эту строку целиком и назначьте ей имя области, например
Строка. - В коде переберите табличную часть и выводите область на каждой итерации:
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ТабДок = Новый ТабличныйДокумент;
Для Каждого СтрокаТЧ Из Товары Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТЧ.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТЧ.Количество;
ОбластьСтрока.Параметры.Сумма = СтрокаТЧ.Сумма;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ТабДок.Показать();
Каждый вызов ТабДок.Вывести(ОбластьСтрока) дописывает одну строку ниже предыдущей. Так из одной области-шаблона получается таблица любой длины. Шапку и подвал выводят такими же отдельными областями до и после цикла.
Тот же принцип работает для ценников, этикеток и реестров: одна область с ячейками-параметрами выводится столько раз, сколько нужно.
Частые ошибки при работе с ячейками
Эти промахи встречаются чаще всего и дают либо пустую печатную форму, либо ошибку выполнения.
- ❌ Заполнение ячейки макета осталось
Текст. В печатной форме выводится имя параметра, а не значение. Переключите свойствоЗаполнениев режимПараметрилиШаблон. - ❌ Обращение к несуществующей колонке таблицы значений. Запись
Строка.Колличествос опечаткой даёт ошибку «Поле объекта не обнаружено». Проверьте, что колонка добавлена и имя написано верно. - ❌ Присвоение значения не того типа. Если колонка создана с типом
Число, а вы пишете в ячейку строку, 1С выдаст ошибку преобразования. Контролируйте тип приКолонки.Добавить. - ❌ Параметр в объединённой ячейке «потерялся». После объединения клеток значение берётся только из верхней левой — остальные параметры игнорируются.
- ❌ Путаница табличной части и таблицы значений. Данные, собранные в таблицу значений, не попадают в базу сами по себе. Чтобы они сохранились с документом, их нужно загрузить в табличную часть.
- ❌ Забыли вывести область. Параметры заполнены, а
ТабДок.Вывести(Область)не вызван — на экране пустой документ.
Частые вопросы
Чем ячейка табличной части отличается от ячейки табличного документа?
Можно ли объединить ячейки в табличной части документа?
Как обратиться к ячейке по номеру колонки, а не по имени?
Строка[0] — первая колонка, Строка[1] — вторая. Отсчёт идёт с нуля, поэтому третья колонка это Строка[2].Почему в печатной форме выводится имя параметра вместо значения?
Параметр, либо имя параметра в макете не совпадает с тем, что задаётся в коде. Сверьте написание и регистр.Сохранятся ли данные таблицы значений после закрытия формы?
Загрузить или запишите в регистр сведений.