0

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

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

Форма имеет вид:

Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ, код ее команды:

Второй вариант заполнения: Имеем ТЧ на форме, которую необходимо программно заполнить

SaschaL

Добрый день!
есть проблема , конфигурация самописная на 1С 8.2, интерфейс управляемый.
Есть документ который заполняется путем подбора из справочника товаров. Иногда возникает такая необходимость что нужно автоматически заполнить документ данными из некой группы справочника.

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

Навоял вот такой код:

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

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

1. Постановка задачи

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

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

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

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

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

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

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

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

Читайте также:  Бесплатные приложения для снятия видео

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

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

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

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

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

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

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

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

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

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

Читайте также:  Замена энергосберегающих ламп на светодиодные

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  В bluestacks не работает интернет

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

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

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

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

4. Отладка

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

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

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

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

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

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

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

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

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

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

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *