Внешняя обработка табличной части 1с.

Табличные части существуют у многих объектов в 1С:

  • Справочники
  • Документы
  • Отчеты и обработки
  • Планы счетов
  • Планы видов характеристик
  • Планы видов расчета
  • Бизнес-процессы и задачи

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

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

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

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

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

Сообщить(Строка. РеквизитТабличнойЧасти) ;

КонецЦикла ;

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

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

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

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

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

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

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

//содержимое цикла

КонецЦикла ;

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

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

ЭлементыФормы. ИмяТабличногоПоля. ВыделенныйСтроки. Очистить() ;

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

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

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

ТабличнаяЧасть. Очистить() ;

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

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

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

ЭлементыФормы. ИмяТабличногоПоля. ТекущиеДанные;

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

Элементы. ИмяТабличногоПоля. ТекущиеДанные;

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

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

НоваяСтрока= ТабличнаяЧасть. Добавить() ;

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

НоваяСтрока= ТабличнаяЧасть. Вставить(Индекс)
//Индекс - номер добавляемой строки. Нумерация строк начинается с нуля.

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

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

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

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

  • Элемент — содержит элемент управления ТабличноеПоле .
  • НоваяСтрока — булево. Содержит значение Истина , если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
  • Копирование — булево. Содержит значение Истина , если пользователь копирует строку, и Ложь в остальных случаях.

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

Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

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

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

В этой статье рассмотрим процесс написания простейшей внешней обработки заполнения табличной части в 1С 8 для конфигураций, использующих обычное приложение. Для примера возьмем такую задачу: “В конфигурации 1С:Бухгалтерия 2.0 создать внешнюю обработку заполнения табличной части Товары документа Реализация товаров и услуг , данные для заполнения взять из табличной части Товары документаПоступление товаров и услуг ”. Таким образом нам необходимо заполнить товары реализации на основании товаров поступления, такая задача довольно часто встречается в реальной практике программиста 1С.

2. Создание внешней обработки

Зайдем в 1С 8 в режиме Конфигуратор . При помощи меню Файл -> Новый или пиктограммы Новый документ создадим новую внешнюю обработку .

В поле Имя укажем: “ПростейшееЗаполнениеТабличнойЧасти” и сохраним внешнюю обработку на жесткий диск используя меню Файл -> Сохранить или пиктограмму Сохранить или сочетание клавиш Ctrl + S .

Выделив ветку Реквизиты в дереве метаданных обработки и нажав кнопку Добавить (кнопка с зеленым плюсом) создадим новый реквизит внешней обработки - ДокументПоступления , выберем для него типДокументСсылка.ПоступлениеТоваровУслуг , этот реквизит нужен нам для выбора документа Поступление товаров и услуг , на основании которого будет заполняться реализация.

Для выбора документа поступления нам понадобится отдельная форма. Выделив ветку Формы и используя ту же кнопку - Добавить создадим форму внешней обработки. Откроется окно конструктора формы, на первой странице конструктора никаких изменений делать не нужно, поэтому просто нажмем кнопку Далее .

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

После этого откроется созданная форма, нам необходимо что бы на ней пользователь выбирал документ поступления, и закрывал ее. Поэтому при нажатии кнопки Выполнить форма должна просто закрываться. Для того что бы реализовать это, выделим кнопку Выполнить , кликнем по ней правой кнопкой мыши и выберем пункт Свойства . В свойствах кнопки, в строке Действие выберем действие - Закрыть . На этом работа с формой завершена, закроем ее.

3. Программирование

Приступим к программированию обработки заполнения табличной части. Перейдем в Модуль объекта внешней обработки(на нижней панели обработки кнопка Действия -> Открыть модуль объекта ).

В нем нам необходимо создать экспортную процедуру Инициализировать .

Процедура Инициализировать Экспорт КонецПроцедуры

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

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

ТабличнаяЧасть = Объект[ИмяТабличнойЧасти];

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

Нам необходимо что бы пользователь выбрал документ Поступление товаров и услуг , поэтому напишем код открытия формы выбора документа. Для начала получим эту форму в переменную, используя метод внешней обработки ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>) . Нам достаточно заполнить только первый параметр этого метода, передав туда строку с именем нашей формы.

ФормаВыбораПоступления = ПолучитьФорму("Форма" );

Теперь откроем полученную форму, используя модальное открытие(пока форма открыта все остальные окна 1С недоступны), потому что при таком способе открытия дальнейший наш код в процедуреИнициализировать выполняться не будет, пока пользователь не закроет форму.

ФормаВыбораПоступления.ОткрытьМодально();

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

Если НЕ ЗначениеЗаполнено(ДокументПоступления) Тогда Сообщить (); Возврат ; КонецЕсли ;

Для проверки заполненности реквизита здесь используется функция глобального контекстаЗначениеЗаполнено(<Значение>) , она проверяет отличатся ли значение переданное в параметре от значения по умолчанию того же типа. Процедура Сообщить выводит указанный текст в окно сообщений 1С 8. Ключевое слово Возврат прерывает выполнение процедуры.

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

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("ДокументПоступления" ,ДокументПоступления);

Напишем текст запроса, будем делать это при помощи Конструктора запроса . Писать текст запроса вручную не рекомендуется, это не эффективно и отнимает кучу времени. Для начала напишем строку:

Запрос.Текст = "" ;

Поставим курсор между символами кавычек, нажмем правую кнопку мыши и выберем пунк Конструктор запроса… . После этого появится предложение создать новый запрос, нажмем кнопку “ОК”. Откроется окно конструктора, в левой его части расположены все доступные таблицы базы данных, нам необходим документ ПоступлениеТоваровУслуг . Найдем его и раскроем при помощи символа “+”, выберем табличную часть Товары и перетащим ее во вторую часть экрана конструктора, которая называется Таблицы (Также переместить нужную таблицу можно при помощи кнопки “>”).

Теперь раскроем по “+” выбранную нами таблицу(ПоступлениеТоваровУслугТовары ) и перетащим необходимые для нашего заполнения табчасти поля в третью часть экрана конструктора, которая так и называется - Поля . Все доступные поля выбирать не будем, ограничимся таким набором: Номенклатура, Количество, Цена, Сумма, СтавкаНДС, СуммаНДС .

Так как нам нужны данные только одного документа поступления(который мы выбрали перед началом заполнения), то в на закладке “Условия” наложим условие на ссылку документа при помощи переданного нами параметра.

Создание текста запроса в конструкторе на этом завершено, нажмем кнопку “ОК”. В итоге у нас получился следующий текст запроса:

Запрос.Текст = "ВЫБРАТЬ |ИЗ |ГДЕ ;

Созданный запрос осталось только выполнить и выгрузить в переменную:

Результат = Запрос.Выполнить().Выгрузить();

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

ТабличнаяЧасть.Очистить();

При помощи цикла Для каждого обойдем таблицу значений с результатами запроса.

Для Каждого ЭлементРезультата из Результат Цикл КонецЦикла ;

В этом цикле создадим и заполним строки табличной части документа Реализация товаров и услуг . Создать новую строку мы можем при помощи переменной ТабличнаяЧасть , через которую можно совершать с ней любые действия.

НоваяСтрокаТЧ = ТабличнаяЧасть.Добавить();

Заполним созданную строку таб. части данными из строки результата запроса используя процедуруГлобального контекста - ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>) .

ЗаполнитьЗначенияСвойств(НоваяСтрокаТЧ,ЭлементРезультата);

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

процедурой ЗаполнитьСчетаУчетаВСтрокеТабЧасти из модуля объекта документа Реализация товаров и услуг . Вызовем ее при помощи параметра Объект (следует заметить,

что мы можем вызывать только экспортные процедуры из модуля объекта документа).

Объект.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(НоваяСтрокаТЧ, ИмяТабличнойЧасти, Истина);

На этом программирование заполнения табличной части для 1С 8 завершено. Обработку можно использовать. Полный текст процедуры Инициализировать , выглядит так:

Процедура Инициализировать(Объект, ИмяТабличнойЧасти = Неопределено, ТабличноеПолеОбъекта = Неопределено) Экспорт ТабличнаяЧасть = Объект[ИмяТабличнойЧасти]; ФормаВыбораПоступления = ПолучитьФорму("Форма" ); ФормаВыбораПоступления.ОткрытьМодально(); Если НЕ ЗначениеЗаполнено(ДокументПоступления) Тогда Сообщить ("Не выбран документ поступления" ); Возврат ; КонецЕсли ; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДокументПоступления" ,ДокументПоступления); Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслугТовары.Номенклатура, | ПоступлениеТоваровУслугТовары.Количество, | ПоступлениеТоваровУслугТовары.СтавкаНДС, | ПоступлениеТоваровУслугТовары.Сумма, | ПоступлениеТоваровУслугТовары.СуммаНДС, | ПоступлениеТоваровУслугТовары.Цена |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары |ГДЕ | ПоступлениеТоваровУслугТовары.Ссылка = &ДокументПоступления" ; Результат = Запрос.Выполнить().Выгрузить(); ТабличнаяЧасть.Очистить(); Для Каждого ЭлементРезультата из Результат Цикл НоваяСтрокаТЧ = ТабличнаяЧасть.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрокаТЧ,ЭлементРезультата); Объект.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(НоваяСтрокаТЧ, ИмяТабличнойЧасти, Истина); КонецЦикла ; КонецПроцедуры

В следующей части стать будет рассказано, как отладить обработку заполнения табличной части и как подключить ее к документу.

4. Отладка

Довольно часто требуется отлаживать код, который вы пишите. Для того что бы отладить обработку заполнения табличной части в 1С 8 создадим у нее реквизит СсылкаНаОбъект типаДокументСсылка.РеализацияТоваровУслуг

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

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

Процедура КнопкаВыполнитьНажатие(Кнопка) Инициализировать(СсылкаНаОбъект.ПолучитьОбъект(), "Товары" ); КонецПроцедуры

Теперь необходимо сделать созданную форму основной формой обработки. Для этого выберем ее в поле “Форма обработки”.

Теперь вы можете ставить точку останова в нужном месте процедуры Инициализировать или процедурыКнопкаВыполнитьНажатие формы отладки, и запускать обработку заполнения табличной части в режиме отладки 1С:Предприятия .

5. Подключение к документу

После того как обработка заполнения написана и отлажена следует подключить ее к документу из которого она будет выполняться. Для этого зайдем в 1С 8 в режиме Предприятие , перейдем в меню Сервис -> Дополнительные отчеты и обработки -> Дополнительные внешние обработки табличных частей и добавим новый элемент справочника. При помощи кнопки Заменить файл внешней обработки добавим файл созданной нами обработки заполнения табличной части.

Заполним принадлежность обработки, для этого воспользовавшись кнопкой Подбор выберем документРеализация товаров и услуг

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

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

Блог компании 1С GOODWILL

Здесь мы научимся создавать внешнюю обработку заполнения табличной части документа в 1С 8.3 (для управляемых форм) с нуля. Рассмотренный пример обработки можно скачать по ссылке.

Возьмем самой простой пример: в табличной части «Материалы» документа «Требование-накладная» присвоим во всех строках количеству значение равное 100.

Подготовка внешней обработки в 1С 8.3

Итак, создаем внешнюю обработку. Сохраняем ее на диск.

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

По кнопке «Действия» переходим в модель объекта, где и создаем функцию:

Функция СведенияОВнешнейОбработке() Экспорт Назначения = Новый Массив; Назначения.Добавить("Документ.ТребованиеНакладная") ; ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Вид" , "ЗаполнениеОбъекта") ; ПараметрыРегистрации.Вставить("Назначение" ,Назначения) ; ПараметрыРегистрации.Вставить("Наименование" , "Заполнить Документ") ; ПараметрыРегистрации.Вставить("Версия" , "1.0") ; ПараметрыРегистрации.Вставить("Информация" , "Дополнительная обработка табличной части требования") ; ПараметрыРегистрации.Вставить("БезопасныйРежим" , Истина) ; Команды = ПолучитьТаблицуКоманд() ; ДобавитьКоманду(Команды, "Заполнить документ" , "ЗаполнитьДокумент" , "ВызовКлиентскогоМетода" , Ложь,) ; ПараметрыРегистрации.Вставить("Команды" ,Команды) ; Возврат ПараметрыРегистрации; КонецФункции

Поговорим немного о значении полей.

Вид - в зависимости то предназначения обработки может принимать значения:

Отчет ЗаполнениеОбъекта Печатная форма Дополнительная обработка СозданиеСвязанныхОбъектов Дополнительный отчет

В нашем случае, для обработки заполнения табличной части, нам необходим вид обработки «ЗаполнениеОбъекта»

Назначение - в этом поле перечисляются документы, для которых эта обработка предназначена (в которых она появится после регистрации в информационной базе). Для перечисления этих документов создадим массив «Назначения» и добавим в него документ «ТребованиеНакладная».

Наименование - это наименование будет отображаться в списке дополнительных обработок.

Версия - версия нашего нового программного продукта.

Информация - этот ключ нашей структуры содержит дополнительную информацию о нашей обработке.

Безопасный режим - принимает значение Истина/Ложь. Мы будем использовать безопасный режим.

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

Немного подробнее остановимся на полях таблицы значений команд.

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

Идентификатор - это внутренний идентификатор команды в пределах нашей обработки

Использование - в зависимости от использования команды может принимать значения:

ВызовСерверногоМетода - из модуля обработки вызывается серверная процедура ОткрытиеФормы - используется для открытия формы обработки ВызовКлиентского метода - для вызова клиентской процедуры из модуля обработки СценарийвБезопасномРежиме - серверная процедура в безопасном режиме

В нашем случае мы работаем с формой объекта 1С 8.3, поэтому нам необходимо использовать ВызовКлиентскогоМетода для вызова команды внешней обработки.

ПоказыватьОповещение - имеет одно из двух значений: Истина/Ложь

Модификатор - дополнительный модификатор команды. Итоговый листинг нашей обработки в модуле объекта приобретает следующий вид:

Функция СведенияОВнешнейОбработке() Экспорт Назначения = Новый Массив; Назначения.Добавить("Документ.ТребованиеНакладная") ; ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Вид" , "ЗаполнениеОбъекта") ; ПараметрыРегистрации.Вставить("Назначение" ,Назначения) ; ПараметрыРегистрации.Вставить("Наименование" , "Заполнить Документ") ; ПараметрыРегистрации.Вставить("Версия" , "1.0") ; ПараметрыРегистрации.Вставить("Информация" , "Дополнительная обработка табличной части требования") ; ПараметрыРегистрации.Вставить("БезопасныйРежим" , Истина) ; Команды = ПолучитьТаблицуКоманд() ; ДобавитьКоманду(Команды, "Заполнить документ" , "ЗаполнитьДокумент" , "ВызовКлиентскогоМетода" , Ложь,) ; ПараметрыРегистрации.Вставить("Команды" ,Команды) ; Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление" , Новый ОписаниеТипов("Строка")) ; Команды.Колонки.Добавить("Идентификатор" , Новый ОписаниеТипов("Строка")) ; Команды.Колонки.Добавить("Использование" , Новый ОписаниеТипов("Строка")) ; Команды.Колонки.Добавить("ПоказыватьОповещение" , Новый ОписаниеТипов("Булево")) ; Команды.Колонки.Добавить("Модификатор" , Новый ОписаниеТипов("Строка")) ; Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить() ; НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры Создание команды для заполнения табличной части

В поле Форма обработки нажмем линзу, чтобы создать форму:

В форме добавим команду ВыполнитьКоманду

В теле обработки заполнение команды обратимся к данным формы через ВладелецФормы и изменим значение количества в табличной части материалов:

&НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт Для каждого ТекущаяСтрока из ВладелецФормы.Объект.Материалы Цикл ТекущаяСтрока.Количество = 100 ; Сообщить(ТекущаяСтрока.Количество) ; КонецЦикла; КонецПроцедуры Регистрация внешней обработки в 1С 8.3 и её проверка

Теперь в режиме предприятия 1С зарегистрируем нашу внешнюю обработку для заполнения табличной части:

В списке внешних обработок нажмем кнопку Создать:

В открывшемся бланке новой внешней обработки загрузим из файла внешнюю обработку и впоследствии запишем новую обработку:

Теперь в документе «Требование-накладная» мы можем наблюдать результат регистрации нашей обработки в информационной базе. А по нажатию кнопки «Заполнить документ» можем наблюдать работу нашей обработки по заполнению табличной части.

Запись Обработка заполнения табличной части 1С 8.3 управляемые формы на примере впервые появилась Блог компании 1С GOODWILL.

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

В одной таблице перечислены товары к отгрузке со склада. В другой таблице – обязательства по оплате этих товаров.

Поэтому в 1С видное место занимает работа с таблицами.

Таблицы в 1С также называют «табличные части». Они есть у справочников, документов и других .

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

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

//Вариант 1 – последовательный доступ к результатам запроса

//получение таблицы
Выборка = Запрос.Выполнить().Выбрать();
//по порядку обходим все строки результата запроса
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;

//Вариант 2 – выгрузка в таблицу значений
Запрос = Новый Запрос(«ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура»);
//получение таблицы
Таблица = Запрос.Выполнить().Выгрузить().
//далее можем также обойти все строки
Для каждого Строка из Таблица Цикл
Сообщить(Строка.Наименование);
КонецЦикла;
//или произвольно обращаться к строкам
Строка = Таблица.Найти(«Лопата», «Наименование»);

Важная особенность – в таблице, которая получена из результата запроса, все колонки будут строго типизированы. Это значит, что запросив поле Наименование из справочника Номенклатура, Вы получите колонку вида Строка с допустимой длиной не более N символов.

Таблица на форме (толстый клиент)

Пользователь работает с таблицей, когда она размещена на форме.

Базовые принципы работы с формами мы с Вами обсуждали в уроке по и в уроке по

Итак, разместим таблицу на форме. Для этого можно перетащить таблицу с панели элементов управления. Аналогично можно выбрать в меню Форма/Вставить элемент управления.

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

Нажмите кнопку «…» в свойстве Данные. Для того, чтобы увидеть список табличных частей, нужно раскрыть ветку Объект.

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

В этом же свойстве Данные Вы можете ввести произвольное имя и выбрать тип ТаблицаЗначений.

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

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

В свойствах таблицы на форме Вы можете указать – доступно ли пользователю добавлять/удалять строки. Более продвинутая форма – галочка ТолькоПросмотр. Эти свойства удобно использовать для организации таблиц предназначенных для вывода информации, но не редактирования.

Чтобы управлять таблицей, нужно вывести на форму командную панель. Выберите пункт меню Форма/Вставить элемент управления/Командная панель.

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

Таблица на форме (тонкий/управляемый клиент)

На управляемой форме указанные действия выглядят немного по другому. Если Вам нужно разместить на форме табличную часть – раскройте ветку Объект и перетащите одну из табличных частей влево. И все!

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

Чтобы добавить колонки, используйте меню по правой кнопке мыши на этом реквизите формы, пункт Добавить колонку реквизита.

После чего также перетащите таблицу влево.

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

Выгрузка таблицы в Excel

Любую таблицу 1С, расположенную на форме, можно распечатать или выгрузить в Excel.

Для этого щелкните правой кнопкой мыши на свободном месте в таблице и выберите пункт Вывести список.

В управляемом (тонком) клиент аналогичные действия можно выполнить с помощью пункта меню Все действия/Вывести список.

В рамках данной статьи мы напишем обработку заполнения табличной части в 1С 8.3 для типовой конфигурации 1С:ERP 2.1. Предположим, что целью поставленной задачи стоит установка ручной скидки в размере 5% для всех номенклатурных позиций данного документа. Пример из статьи можно скачать по или другой аналогичной обработки по .

Данная инструкция предназначена для управляемых форм (8.2 и 8.3). Для обычных форм (8.1, 8.2) можно воспользоваться .

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

Откройте модуль объекта и пропишите код, приведенный ниже (его также можно взять из данной выше обработки). В целом, структура не будет меняться в зависимости от ситуации. Редактируются только некоторые параметры настроек, а так же при необходимости имена переменных.

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

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

Создадим новую форму обработки.

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

В рамках нашего примера будет произведена обработка уже существующей табличной части «Товары». Для каждой строки будет установлена ручная скидка в размере 5%. Так же, мы рассчитаем саму сумму данной скидки, равную сумме товаров в строке, умноженных на 0,05.

&НаСервере Процедура ВыполнитьКоманду(Команда, ОбъектыНазначения) Для каждого ЗаказКлиента из ОбъектыНазначения Цикл ЗаказКлиентаОбъект = ЗаказКлиента. ПолучитьОбъект() ; Для каждого СтрокаТЗ из ЗаказКлиентаОбъект. Товары Цикл СтрокаТЗ. ПроцентРучнойСкидки = 5 ; СтрокаТЗ. СуммаРучнойСкидки = СтрокаТЗ. Сумма * 0 . 05 ; КонецЦикла ; ЗаказКлиентаОбъект. Записать() ; КонецЦикла ; КонецПроцедуры

Регистрация внешней обработки

Запустите 1С в режиме «Предприятие» и откройте справочник «Дополнительные отчеты и обработки». Найдем его через меню «Все функции».

Создайте новый элемент в открывшемся справочнике и по одноименной кнопке загрузите из файла свою обработку. Разместим ее одновременно и на форме списка и на форме самой карточки документа.

Теперь в форме списка документов «Заказ клиента» появится кнопку «Заполнение…», которая позволит произвести изменить ручные скидки товаров сразу у нескольких документов.

Так же данная кнопка будет доступна и в карточке самого документа.