1с как заполнить табличную часть программно

Обновлено: 04.07.2024

Основы формирования табличного документа на основе макета

Обычно табличный документ формируется на основе макета как из строительных блоков. Макет представляет собой шаблон для формирования печатной формы. Построение макета производится в конфигураторе в специальном табличном редакторе. Разработчик может создавать области, изменять высоту строк и ширину колонок, задавать форматирование ячеек и всего табличного документа, включать в макет рисунки, диаграммы и сводные таблицы.

Области макета предназначены для однократного или многократного вывода, например, ниже представлен макет для печати расходной накладной:

Некоторые ячейки содержат только текст, который должен быть выведен. Другие ячейки содержат имена параметров (в угловых скобках). Значения этих параметров должны указываться в программном модуле. В отличие от версии 7.7, в ячейку нельзя вписать выражение. В версии 8.0 весь программный код сосредоточен в программных модулях и при выводе секций нет связи с текущим контекстом программного модуля. Назначение параметров табличного документа должно производиться явно из программного модуля через коллекцию "Параметры" объекта "ТабличныйДокумент".

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

Общая схема

Общая схема формирования печатной формы на основе макета:

  1. Создание макета в табличном редакторе (определение областей, имен параметров, форматирования).
  2. Создание нового табличного документа (этот пункт не требуется, если отчет выводится в элемент управления ПолеТабличногоДокумента).
  3. Получение макета в переменную (метод ПолучитьМакет).
  4. Получение областей макета (метод ПолучитьОбласть).
  5. Заполнение параметров области (свойство Параметры).
  6. Вывод области в табличный документ (методы Вывести и Присоединить).
  7. Установка свойств отображения табличного документа (сетка, заголовки, только просмотр и т.д.).
  8. Отображение табличного документа на экране (а может быть отправка на принтер или сохранение).

Пример вывода табличного документа

Ниже приведен пример формирования печатной формы расходной накладной из модуля документа:

Процедура Печать(ТабДок) Экспорт

//создание нового табличного документа
ТабДок = Новый ТабличныйДокумент ;

//получение макета для печати расходной накладной
Макет = Документы.РасходнаяНакладная. ПолучитьМакет ("Основной");

//получим область "Заголовок" как новый табличный документ (!)
Область = Макет. ПолучитьОбласть ("Заголовок");

//укажем параметры области
Область. Параметры .НомерДокумента = Номер;
Область.Параметры.От = Дата;
Область.Параметры.Кому = Контрагент;

//выведем заполненную область "Заголовок" в табличный документ
ТабДок. Вывести (Область);

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

//получение области "Строка"
//обратите внимание, что это можно сделать до цикла по строкам
Область = Макет.ПолучитьОбласть("Строка");

//вывод строк документа в печатную форму
Для Каждого СтрСостава Из Состав Цикл

//заполнение параметров области из строки табличной части
Область.Параметры. Заполнить (СтрСостава);

//вывод сформированной области в табличный документ
ТабДок.Вывести(Область);

КонецЦикла;

//вывод области "Подвал"
Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");
Область.Параметры.ИтогоСумма = Состав.Итог("Сумма");
ТабДок.Вывести(Область);

//установим параметры отображения табличного документа
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьЗаголовки = Истина;
ТабДок.ОтображатьСетку = Ложь;

//покажем табличный документ на экране
ТабДок. Показать ();

Вываливается с ошибкой "Значение не является значением объектного типа" на строке "НоваяСтрока = Объектдок.ТабЧасть.Добавить();" Есть вопрос - почему?
Собственно хотел сделать кнопку на форме документа, при нажатии на которую добавлялась бы программно строка в таб. часть.

Все, спс разобрался.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

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

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

1C :УПП. Добавить на форму табличную часть
Добрый день,подскажите книгу,ссылку или пример вышлите пожалуйста,а лучше инструкцию.Мне надо в.

Добавить новую запись в табличную часть ОперацияБух
Здравствуйте, во внешней обработке создаю новый документ ОперацияБух, заполняю шапку документа.

А нельзя было просто:
Стр = ТабЧасть.Добавить();
Стр.СтрТабЧасть="5644564";

Программно заполнить Табличную часть документа
Написал процедуру, но она заполняет только теми данные что напишу в самом коде, то есть если пишу .


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


Создать программно табличную часть в форме документа как приставлено на последем скрине
Народ помогите мне пожалуйста создать программно табличную часть в форме документа как приставлено.


Как добавить табличную часть документа в условие отбора?
Всем доброго времени суток! Как добавить табличную часть документа в условие отбора? Есть один.

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

Рассмотрим некоторые приемы работы с табличными частями.

Как обойти табличную часть

Для обхода табличной части можно использовать цикл Для каждого

Для каждого Строка из ТабличнаяЧасть Цикл

На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.

Как получить и обойти выделенные строки табличной части

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

Работа с табличной частью объектов в 1С

Для получения перечня выделенных строк используется следующий код:

ВыделенныеСтроки = ЭлементыФормы . ИмяТабличногоПоля . ВыделенныеСтроки ;

Для того чтобы обойти выделенные строки используется цикл Для каждого:

ВыделенныеСтроки = ЭлементыФормы . ИмяТабличногоПоля . ВыделенныеСтроки ;

Для каждого Строка из ВыделенныеСтроки Цикл

Как программно выделить строки табличной части (табличного поля) и снять выделение

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

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

Как очистить табличную часть

Как получить текущую строку табличной части

Для обычных форм код будет выглядеть так:

Для управляемых форм:

Как добавить новую строку в табличную часть

Добавление новой строки в конец табличной части:

Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):

НоваяСтрока . Реквизит 1 = "Значение" ;

Как программно заполнить реквизиты строки табличной части

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

Создаваемая обработчиком процедура имеет три параметра:

Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.

//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат ;
КонецЕсли ;

//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент . ТекущиеДанные ; //Получили текущую строку табличной части
ТекСтрока . СчетУчета = ПланыСчетов . Хозрасчетый . НужныйСчетУчета ;
КонецПроцедуры

Работа с табличной частью объектов в 1С : 13 комментариев

Сделать это можно по-разному. Цикл Для каждого, на мой взгляд, не очень подходящий вариант, т.к. будет работать слишком долго. Да и надо еще где-то список документов брать.

Спасибо!
Буду пробовать.

А может это подойдет?

Табличная часть (Tabular section)
Итог (Total)
Синтаксис:

Тип: Число; Строка.
Индекс либо имя колонки, по которой подсчитывается итог.
Возвращаемое значение:

Тип: Число; Неопределено.

Суммирует значения всех строк в указанной колонке.
Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результатом будет значение Неопределено.

Сервер, толстый клиент, внешнее соединение.
Пример:

Это подошло бы, если бы нужно было суммировать колонку в одном документе. А Юрию нужно суммировать колонку Стоимость всех документов.

Добрый день!
Достаточно ли будет обратиться в модуле формы к текущей строке табличной части или в модуле менеджера тоже нужно будет что-то прописать?

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

Здравствуйте!
Опишу вкратце ситуацию:
Из документа вызывается команда печати штрихкодов и в обработку печати передается, как я понимаю, весь контекст документа и печатаются этикетки для всех строк документа. Возможно ли в обработке печати получить информацию только о выделенных строках из этого контекста ? Прилагаю код модуля команды ПечатьЭтикеток.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

&НаСервере
Функция Заполнялка(ДокСсылка) Экспорт
ТабДокумент = Новый ТабличныйДокумент;

ТабДокумент.АвтоМасштаб = истина ;
ТабДокумент.ОтображатьСетку = Ложь;
ТабДокумент.ТолькоПросмотр = Истина;
ТабДокумент.ОтображатьЗаголовки = Ложь;

ЧтоТо = Стр.СерийныйНомер;
ПервыйМодуль.ВывестиШтрихкодДокументаВОбластьМакета(ВнешняяКомпонента,ОбластьМакета,ЧтоТо) ;

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

Значит я на клиенте должен сформировать таблицу выделенных строк и уже ее передавать в обработку печати ?

Доброго времени суток!
Создаю обработку на обычных формах, в которой имеется несколько Табличных частей. Они в свою очередь находят отображение в Форме обработки. И если данные первых 3, меня после закрытия Формы, не интересуют, то данные последней хотелось-бы использовать в дальнейшем, пока открыта обработка. В настоящее время при закрытии Формы Табличные части очищаются. В дальнейшем, в новом сеансе работы с обработкой эти данные не нужны. Насколько я понимаю Функции сохранения Данных Табличной части обработки не существует. Табличную часть в обработке решил использовать из-за возможности сохранить структуру Данных. Как мне сохранить эти данные для использования в других окнах?
Может у Вас есть видео по данному вопросу?

Внешние обработки, печатные формы, обработки по заполнению табличных частей

В данном материале описываются особенности реализации механизма подключения "Внешние обработки, печатные формы, обработки по заполнению табличных частей" (далее ВПФО). Также перечисляются требования, предъявляемые к внешним обработкам, для возможности их использования данным механизмом.

Общее описание

Механизм предназначен для подключения (без изменения конфигурации):

  • Внешних обработок для произвольного выполнения
  • Внешних обработок в качестве дополнительных печатных форм объектов (справочников и документов)
  • Обработок для заполнения табличных частей объектов

Внешние печатные формы и обработки создаются разработчиком с соблюдением определенных условий. Условия обязательны для выполнения на этапе создания внешней обработки, для ее корректной работы в качестве подключаемой к конфигурации.

Для реализации механизма ВПФО используется справочник "Внешние обработки".

Для справочника предусмотрены специализированные реквизиты*:

  • "Вид обработки" - описывает, какого вида данная ВПФО
    1. Произвольная обработка
    2. Обработка для заполнения табличных частей объектов
    3. Внешняя печатная форма
    • "Хранилище внешней обработки" - хранит двоичные данные подключаемой внешней обработки. При использовании двоичные данные сохраняются на диск во временный файл, и обращение к файлу производится программно как к внешней обработке.

    ПРИМЕЧАНИЕ
    Полный перечень реквизитов будет описан ниже, в разделе Техническая реализация механизма "Внешние обработки, печатные формы, обработки по заполнению табличных частей"

    Для удобства, формы списков ВПФО вызываются раздельно, с предустановленным отбором по реквизиту "Вид обработки", из подменю "Сервис".

    Добавлять и изменять ВПФО в базе данных может пользователь, обладающий правом администрирования дополнительных форм и обработок. Это отдельная роль в конфигурации.

    Для остальных пользователей назначаются права на чтение(использование) и запись(изменение) по каждому элементу справочника ВПФО.

    Преимущества использования механизма ВПФО перед механизмом платформы открытия внешних обработок:

    • Возможность использования механизма пользователями, НЕ имеющими права на интерактивное открытие внешних обработок
    • Ограничение доступа к использованию и изменению обработок на уровне записей (RLS), т.е. к каждой обработке отдельно
    • Целостность БД и неизменность функционала в зависимости от внешних факторов (переноса БД, сетевой работы пользователей, создания архивных копий БД и пр.)

    Описание видов справочника ВПФО и требования к подключаемым внешним обработкам

    Рассмотрим каждый вид ВПФО по отдельности.

    Произвольная обработка

    Для включения произвольных обработок в базу данных, необходимо указывать только внешнюю обработку, которая находится на диске.

    Открытие произвольных обработок в форме списка производится при выборе элемента ВПФО с видом "Произвольная обработка". При этом, производится сохранение двоичных данных из реквизита "Хранилище внешней обработки" на диск во временный файл. После этого, у сохраненной внешней обработки открывается основная форма.

    Основная форма для произвольной обработки должна быть определена обязательно.

    Обработка для заполнения ТЧ объектов

    Для обработок заполнения ТЧ необходимо указывать внешнюю обработку (файл на диске, с расширением epf), список объектов и их ТЧ, для которых необходимо использовать данную обработку.

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

    Перед открытием формы объекта в командных панелях табличных полей (источником данных для которых является табличная часть объекта), которым соответствуют определенные строки в справочнике ВПФО, программно добавляются пункты в подменю "Заполнить" (если подменю "Заполнить" отсутствует на командной панели, оно создается).

    При нажатии на созданную перед открытием кнопку подменю "Заполнить" происходит сохранение соответствующей обработки на диск во временный файл, для сохраненной внешней обработки вызывается процедура:

    Инициализировать (Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта)

    • Объект – ДокументОбъект, СправочникОбъект. Откуда был произведен вызов процедуры заполнения внешней обработки;
    • ИмяТабличнойЧасти – Строка. Имя табличной части, для которой вызвана обработка;
    • ТабличноеПолеОбъекта – Элемент формы: Табличное поле. Табличное поле формы, для которого вызвана обработка.

    Наличие экспортной процедуры "Инициализировать()" в модуле объекта обработки с видом "Заполнение табличных частей" обязательно. В теле данной процедуры должен располагаться программный код, заполняющий табличную часть в соответствии с назначением обработки.

    Обработка так же может иметь в своем составе макет "Параметры_Авторегистрации", используемый для автоматического заполнения принадлежности печатной формы в справочнике "Внешние обработки". Макет должен состоять из 2-х колонок – "полное имя объекта" и "имя табличной части".

    Пример макета Параметры_Авторегистрации:


    Внешняя печатная форма

    Для подключаемых внешних печатных форм указывается:

    • внешняя обработка
    • список объектов, для которых данная печатная форма используется

    Для каждого типа объекта дополнительно можно указать:

    • Отбор. Печатная форма будет доступной только для объектов, удовлетворяющих установленному отбору.
    • Отдельную печатную форму. Следует учитывать, что в списках печатных форм в объектах будет всегда появляться одинаковый пункт подменю. Если отдельная печатная форма не указана, то будет использоваться печатная форма из шапки элемента ВПФО.
    • Встроенную печатную форму. При заполнении данного реквизита, указанная встроенная печатная форма будет заменена внешней.

    Вызов диалога настройка условий отбора осуществляется при начале выбора значения в колонке "отбор":


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


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

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

    Для сохраненной внешней обработки:

    • заполняется реквизит "СсылкаНаОбъект" - тип "Любая ссылки", в который передается ссылка на объект, для которого необходимо выполнить печать;
    • вызывается функция "Печать()" (должна располагаться в модуле обработки с признаком "Экспорт") без параметров, возвращающая табличный документ.

    Наличие реквизита "СсылкаНаОбъект" и экспортной функции "Печать()" в модуле объекта обработки с видом "Внешняя печатная форма" обязательно.

    В теле функции "Печать()" должен располагаться программный код, который формирует и возвращает табличный документ, в соответствии со значением реквизита "СсылкаНаОбъект".

    Обработка так же может иметь в своем составе макет "Параметры_Авторегистрации", используемый для автоматического заполнения принадлежности печатной формы в справочнике "Внешние обработки" состоящий из одной колонки – полное имя объекта для которого будет создаваться соответствующая кнопка печати.

    Пример макета Параметры_Авторегистрации:


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

    Техническая реализация механизма "Внешние обработки, печатные формы, обработки по заполнению табличных частей"

    В базе данных внешние обработки, печатные формы, обработки по заполнению табличных частей хранятся в справочнике "Внешние обработки". Справочник имеет следующую структуру:


    • ХранилищеВнешнейОбработки. Хранилище значения, хранятся двоичные данные обработки, определенной для всего элемента.
    • ВидОбработки. ПеречислениеСсылка. ВидыДополнительныхВнешнихОбработок, определяет вид ВПФО каждый вид (печатная форма, заполнение табличных частей, обработка) рассмотрен отдельно в разделе "Описание видов справочника ВПФО и требования к подключаемым внешним обработкам".
    • Комментарий. Строка неограниченной длинны.
    • КомментарийКФайлуИсточнику. Строка, неограниченной длинны, хранит параметры файла, дату создания и пр. Заполняется автоматически в момент интерактивного выбора файла внешней обработки. Пользователем не изменяется.

    ТабличнаяЧасть.Принадлежность. Хранит типы объектов, для которых задается ВПФО и прочие описанные ниже параметры. Табличная часть используется для элементов с видом обработки: "Печатная форма" или "Заполнение табличных частей".

    Реквизиты табличной части:

    • ПредставлениеОбъекта. Строка, неограниченной длинны, хранит строковое представление выбранного объекта, для отображения пользователю.
    • СсылкаОбъекта. СправочникСсылка, ДокументСсылка, содержит пустую ссылку на объект конфигурации. т.к. реквизит типа "Тип" для табличной части не может быть определен, то по пустой ссылке определяется тип объекта, для которого следует подключать внешнюю печатную форму или обработку по заполнению табличной части. Ссылку на пустое значение определенного типа удобно использовать в запросах.
    • ТабличнаяЧастьИмя**. Строка, 100. Содержит имя ТЧ объекта, для которого задается ВПФО.
    • ТабличнаяЧастьПредставление**. Строка, неограниченной длинны. Содержит синоним ТЧ объекта, используется для отображения пользователю представления табличной части объекта, для которого задается.
    • НастройкиПостроителяДляОтбора***. Хранилище значения, может содержать настройки построителя отчета, выгруженные из него отборы для выбранного объекта.
    • ХранилищеВнешнейОбработки***. ХранилищеЗначения, может содержит двоичные данные подключаемой внешней обработки., которая будет использоваться в первую очередь, вместо обработки расположенной в шапке.
    • ЗаменяемаяПечатнаяФорма***. Строка, 200. Имя печатной встроенной формы объекта, которую необходимо заменить подключаемой.
    • ИмяФайлаПечатнойФормы***. Строка, неограниченной длинны - имя файла подключенной печатной формы.
    • ПредставлениеОтбораПостроителя***. Строка, неограниченной длинны, хранит представление отбора построителя, используется для отображения представления отбора в табличной части формы элемента справочника "Внешние обработки".

    ** Используется только для элементов с видом обработки: "Заполнение табличных частей"
    *** Используется только для элементов с видом обработки: "печатная форма".

    Подключение дополнительных печатных форм к формам объектов конфигурации

    Механизм дополнительных печатных форм является расширением стандартного механизма печатных форм объекта. Добавление дополнительной формы в общий список форм выполняется в процедурах модуля формы объекта перед открытием, после записи и при нажатии на кнопку "Установить печать по умолчанию".
    Подменю "Печать" и кнопка "Печать по умолчанию" в форме объекта не должны присутствовать в обязательном порядке. Они формируются программно, в том случае, если есть хоть одна печатная форма и задана печать по умолчанию.

    Подключение обработок по заполнению табличных частей к формам объектов конфигурации

    Для обеспечения подключения механизма в форме объекта должны присутствовать следующие процедуры и функции:

    Читайте также: