Табличные части существуют у многих объектов в 1С:
- Справочники
- Документы
- Отчеты и обработки
- Планы счетов
- Планы видов характеристик
- Планы видов расчета
- Бизнес-процессы и задачи
Табличные части позволяют хранить неограниченное количество структурированной информации, принадлежащей одному объекту.
Рассмотрим некоторые приемы работы с табличными частями.
Как обойти табличную часть
Для обхода табличной части можно использовать цикл Для каждого
Для каждого Строка из ТабличнаяЧасть Цикл
Сообщить(Строка. РеквизитТабличнойЧасти) ;
КонецЦикла ;
На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита .
Как получить и обойти выделенные строки табличной части
Для вывода информации из табличной части объекта служит элемент формы Табличное поле . Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения .
Для получения перечня выделенных строк используется следующий код:
Для того чтобы обойти выделенные строки используется цикл Для каждого :
ВыделенныеСтроки= ЭлементыФормы. ИмяТабличногоПоля. ВыделенныеСтроки;
Для каждого Строка из ВыделенныеСтроки Цикл
//содержимое цикла
КонецЦикла ;
Как программно выделить строки табличной части (табличного поля) и снять выделение
Чтобы программно снять выделение строк табличного поля:
ЭлементыФормы. ИмяТабличногоПоля. ВыделенныйСтроки. Очистить() ;
Чтобы программно выделить все строки табличного поля:
Для
каждого ТекущаяСтрока Из
ТабличнаяЧасть Цикл
ЭлементыФормы.
ИмяТабличногоПоля.
ВыделенныеСтроки.
Добавить(ТекущаяСтрока)
;
КонецЦикла
;
Как очистить табличную часть
ТабличнаяЧасть. Очистить() ;
Как получить текущую строку табличной части
Текущая строка — это срока, в которой у пользователя в данный момент находится курсор. Чтобы ее получить, нужно обратиться к элементу управления на форме, который связан с табличной частью.
Для обычных форм код будет выглядеть так:
ЭлементыФормы. ИмяТабличногоПоля. ТекущиеДанные;
Для управляемых форм:
Элементы. ИмяТабличногоПоля. ТекущиеДанные;
Как добавить новую строку в табличную часть
Добавление новой строки в конец табличной части:
НоваяСтрока=
ТабличнаяЧасть.
Добавить()
;
Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):
НоваяСтрока=
ТабличнаяЧасть.
Вставить(Индекс)
//Индекс - номер добавляемой строки. Нумерация строк начинается с нуля.
НоваяСтрока. Реквизит1 = "Значение" ;
Как программно заполнить реквизиты строки табличной части
Если нужно программно заполнить реквизиты строки табличной части, которую добавляет пользователь, необходимо использовать обработчик события табличной части ПриНачалеРедактирования .
Создаваемая обработчиком процедура имеет три параметра:
- Элемент — содержит элемент управления ТабличноеПоле .
- НоваяСтрока — булево. Содержит значение Истина , если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
- Копирование — булево. Содержит значение Истина , если пользователь копирует строку, и Ложь в остальных случаях.
Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета , в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.
Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
//Если пользователь редактирует существующую строку, то ничего не делаем
Если
НЕ НоваяСтрока Тогда
Возврат;
КонецЕсли
;
//Если же строка новая, устанавливаем счет учета
ТекСтрока =
Элемент.
ТекущиеДанные;
//Получили текущую строку табличной части
ТекСтрока.
СчетУчета =
ПланыСчетов.
Хозрасчетый.
НужныйСчетУчета;
КонецПроцедуры
Для того, чтобы учитывать деньги и товары, в бизнесе широко используют разные таблицы. Почти каждый документ – это таблица.
В одной таблице перечислены товары к отгрузке со склада. В другой таблице – обязательства по оплате этих товаров.
Поэтому в 1С видное место занимает работа с таблицами.
Таблицы в 1С также называют «табличные части». Они есть у справочников, документов и других .
Запрос в результате своего выполнения возвращает таблицу, доступ к которой возможно получить двумя разными способами.
Первый – более быстрый – выборка, получение строк из нее возможен только по порядку. Второй – выгрузка результата запроса в таблицу значений и далее произвольный доступ к ней.
//Вариант 1 – последовательный доступ к результатам запроса
//получение таблицы
Выборка = Запрос.Выполнить().Выбрать();
//по порядку обходим все строки результата запроса
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
//Вариант 2 – выгрузка в таблицу значений
Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»);
//получение таблицы
Таблица = Запрос.Выполнить().Выгрузить().
//далее можем также обойти все строки
Для каждого Строка из Таблица Цикл
Сообщить(Строка.Наименование);
КонецЦикла;
//или произвольно обращаться к строкам
Строка = Таблица.Найти(«Лопата», «Наименование»);
Важная особенность – в таблице, которая получена из результата запроса, все колонки будут строго типизированы. Это значит, что запросив поле Наименование из справочника Номенклатура, Вы получите колонку вида Строка с допустимой длиной не более N символов.
Таблица на форме (толстый клиент)
Пользователь работает с таблицей, когда она размещена на форме.
Базовые принципы работы с формами мы с Вами обсуждали в уроке по и в уроке по
Итак, разместим таблицу на форме. Для этого можно перетащить таблицу с панели элементов управления. Аналогично можно выбрать в меню Форма/Вставить элемент управления.
Данные могут храниться в конфигурации – тогда нужно выбрать существующую (ранее добавленную) табличную часть того объекта конфигурации, форму которого Вы редактируете.
Нажмите кнопку «…» в свойстве Данные. Для того, чтобы увидеть список табличных частей, нужно раскрыть ветку Объект.
При выборе табличной части 1С сама добавит колонки у таблицы на форме. Строки введенные пользователем в такую таблицу будут сохраняться автоматически вместе со справочником/документом.
В этом же свойстве Данные Вы можете ввести произвольное имя и выбрать тип ТаблицаЗначений.
Это значит, что выбрана произвольная таблица значений. Она не добавит автоматически колонки, не будет автоматически сохраняться, но и делать с ней можно все, что угодно.
Нажав правой кнопкой на таблице Вы можете добавить колонку. В свойствах колонки можно указать его имя (для обращения в коде 1С), заголовок колонки на форме, связь с реквизитом табличной части (последнее – если выбрана не произвольная таблица, а табличная часть).
В свойствах таблицы на форме Вы можете указать – доступно ли пользователю добавлять/удалять строки. Более продвинутая форма – галочка ТолькоПросмотр. Эти свойства удобно использовать для организации таблиц предназначенных для вывода информации, но не редактирования.
Чтобы управлять таблицей, нужно вывести на форму командную панель. Выберите пункт меню Форма/Вставить элемент управления/Командная панель.
В свойствах командной панели выберите галочку Автозаполнение, чтобы кнопки на панели появились автоматически.
Таблица на форме (тонкий/управляемый клиент)
На управляемой форме указанные действия выглядят немного по другому. Если Вам нужно разместить на форме табличную часть – раскройте ветку Объект и перетащите одну из табличных частей влево. И все!
Если нужно разместить таблицу значений, добавьте новый реквизит формы и в его свойствах укажите тип – таблица значений.
Чтобы добавить колонки, используйте меню по правой кнопке мыши на этом реквизите формы, пункт Добавить колонку реквизита.
После чего также перетащите таблицу влево.
Чтобы у таблицы появилась командная панель, в свойствах таблицы выберите значения в секции Использование – Положение командной панели.
Выгрузка таблицы в Excel
Любую таблицу 1С, расположенную на форме, можно распечатать или выгрузить в Excel.
Для этого щелкните правой кнопкой мыши на свободном месте в таблице и выберите пункт Вывести список.
В управляемом (тонком) клиент аналогичные действия можно выполнить с помощью пункта меню Все действия/Вывести список.
Главная Для начинающих разработчиков Учимся программироватьКак получить данные из табличной части документов?
Для примера, рассмотрим ситуацию, когда требуется получить все номенклатурные позиции, указанные в табличной части Товары документов РеализацияТоваровУслуг .
Для этого можно воспользоваться запросом со следующим текстом:
ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
В качестве источника указываем табличную часть документов - таблицу Документ.РеализацияТоваровУслуг.Товары . Выходным полем объявляем поле Номенклатура , входящее в состав таблицы источника. Кроме этого, поскольку одна и та же товарная позиция, естественно, могла присутствовать и не один раз в документах, применяем РАЗЛИЧНЫЕ для получения только различных строк в выходной таблице запроса.
Для примера создадим обработку СписокТоваров , где выбирается документ РеализацияТоваровУслуг , и нажатием на соответствующую кнопку в окно сообщений выводится список неповторяющихся позиций номенклатуры, содержащейся в табличной части этого документа.
Для того, чтобы ограничить выборку номеклатуры только номенклатурой из табличной части конкретного документа используем параметр Ссылка в условии в запросе (ГДЕ... ):
ВЫБРАТЬ РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Ссылка