Обработка заполнения табличной части 1С 8.3 управляемые формы на примере
Здесь мы научимся создавать внешнюю обработку заполнения табличной части документа в 1С 8.3 (для управляемых форм) с нуля. Рассмотренный пример обработки можно скачать по ссылке.
Возьмем самой простой пример: в табличной части «Материалы» документа «Требование-накладная» присвоим во всех строках количеству значение равное 100.
Содержание
Подготовка внешней обработки в 1С 8.3
Итак, создаем внешнюю обработку. Сохраняем ее на диск.
Внешнюю обработку или отчет в базе 1С необходимо зарегистрировать. Делается это с помощью структуры, которая содержится в экспортной функции СведенияОВнешнейОбработке.
По кнопке «Действия» переходим в модель объекта, где и создаем функцию:
Функция СведенияОВнешнейОбработке() Экспорт Назначения = Новый Массив ; Назначения.Добавить("Документ.ТребованиеНакладная") ; ПараметрыРегистрации = Новый Структура ; ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта"); ПараметрыРегистрации.Вставить("Назначение",Назначения); ПараметрыРегистрации.Вставить("Наименование","Заполнить Документ"); ПараметрыРегистрации.Вставить("Версия","1.0"); ПараметрыРегистрации.Вставить("Информация","Дополнительная обработка табличной части требования"); ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина); Команды = ПолучитьТаблицуКоманд() ; ДобавитьКоманду(Команды, "Заполнить документ","ЗаполнитьДокумент","ВызовКлиентскогоМетода",Ложь,) ; ПараметрыРегистрации.Вставить("Команды",Команды) ; Возврат ПараметрыРегистрации; КонецФункции
Поговорим немного о значении полей.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Вид — в зависимости от предназначения обработки может принимать значения:
- Отчет.
- ЗаполнениеОбъекта.
- Печатная форма.
- Дополнительная обработка.
- СозданиеСвязанныхОбъектов.
- Дополнительный отчет.
В нашем случае для обработки заполнения табличной части нам необходим вид обработки «ЗаполнениеОбъекта»
Назначение — в этом поле перечисляются документы, для которых эта обработка предназначена (в которых она появится после регистрации в информационной базе). Для перечисления этих документов создадим массив «Назначения» и добавим в него документ «ТребованиеНакладная».
Наименование — это наименование будет отображаться в списке дополнительных обработок.
Версия — версия нашего нового программного продукта.
Информация — этот ключ нашей структуры содержит дополнительную информацию о нашей обработке.
Безопасный режим — принимает значение Истина/Ложь. Мы будем использовать безопасный режим.
Команды — этот ключ структуры содержит перечень поставляемых нашей обработкой команд. Для команд мы создадим функцию ПолучитьТаблицуКоманд() и процедуру ДобавитьКоманду().
Немного подробнее остановимся на полях таблицы значений команд.
Представление — это представление команды для пользователя: какое название для него будет представлено в интерфейсе.
Идентификатор — это внутренний идентификатор команды в пределах нашей обработки
Использование — в зависимости от использования команды может принимать значения:
- ВызовСерверногоМетода — из модуля обработки вызывается серверная процедура.
- ОткрытиеФормы — используется для открытия формы обработки.
- ВызовКлиентского метода — для вызова клиентской процедуры из модуля обработки.
- СценарийвБезопасномРежиме — серверная процедура в безопасном режиме.
В нашем случае мы работаем с формой объекта 1С 8.3, поэтому нам необходимо использовать ВызовКлиентскогоМетода для вызова команды внешней обработки.
ПоказыватьОповещение — имеет одно из двух значений: Истина/Ложь.
Модификатор — дополнительный модификатор команды. Итоговый листинг нашей обработки в модуле объекта приобретает следующий вид:
Функция СведенияОВнешнейОбработке() Экспорт Назначения = Новый Массив ; Назначения.Добавить("Документ.ТребованиеНакладная") ; ПараметрыРегистрации = Новый Структура ; ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта"); ПараметрыРегистрации.Вставить("Назначение",Назначения); ПараметрыРегистрации.Вставить("Наименование","Заполнить Документ"); ПараметрыРегистрации.Вставить("Версия","1.0"); ПараметрыРегистрации.Вставить("Информация","Дополнительная обработка табличной части требования"); ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина); Команды = ПолучитьТаблицуКоманд() ; ДобавитьКоманду(Команды, "Заполнить документ","ЗаполнитьДокумент","ВызовКлиентскогоМетода",Ложь,) ; ПараметрыРегистрации.Вставить("Команды",Команды) ; Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений ; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")) ; Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")) ; Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")) ; Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")) ; Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")) ; Возврат Команды ; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить() ; НоваяКоманда.Представление = Представление ; НоваяКоманда.Идентификатор = Идентификатор ; НоваяКоманда.Использование = Использование ; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение ; НоваяКоманда.Модификатор = Модификатор ; КонецПроцедуры
Создание команды для заполнения табличной части
В поле Форма обработки нажмем линзу, чтобы создать форму:
В форме добавим команду ВыполнитьКоманду.
В теле обработки заполнение команды обратимся к данным формы через ВладелецФормы и изменим значение количества в табличной части материалов:
&НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт Для каждого ТекущаяСтрока из ВладелецФормы.Объект.Материалы Цикл ТекущаяСтрока.Количество = 100 ; Сообщить(ТекущаяСтрока.Количество) ; КонецЦикла ; КонецПроцедуры
Регистрация внешней обработки в 1С 8.3 и её проверка
Теперь в режиме предприятия 1С зарегистрируем нашу внешнюю обработку для заполнения табличной части:
В списке внешних обработок нажмем кнопку Создать:
В открывшемся бланке новой внешней обработки загрузим из файла внешнюю обработку и впоследствии запишем новую обработку:
Теперь в документе «Требование-накладная» мы можем наблюдать результат регистрации нашей обработки в информационной базе. А по нажатию кнопки «Заполнить документ» увидим работу нашей обработки по заполнению табличной части.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Владимир:
Спасибо автору статьи. Разобрался сам. Если использовать команду «ОткрытиеФормы», доступно обращение к документу из которого произведен вызов «ВладелецФормы.Объект» что я и искал.
Влад:
Необязательно. Если использовать команду «ВызовКлиентскогоМетода», то также доступно обращение к документу из которого произведен вызов «ВладелецФормы.Объект».
Единственный нюанс — свойство «ВладелецФормы» доступно только в процедурах и функциях исполняемых на клиенте.
Адель:
Хорошо, изменили допустим количество. Дальше возникает вопрос по обработке строки, как вызвать штатную процедуру модуля формы ПриИзмененииКоличество(Элемент)…? Что бы воспользоваться штатными средствами пересчета скидок, НДС, сумм и итогов?
Артур:
Хороший и актуальный вопрос.
Автор, подскажите пожалуйста
RAVe:
Я б даже сказал это камень преткновения… и его никак не обойти.. ИМХО
Кирилл:
Штатная процедура «ПриИзмененииКоличество(Элемент)» использует универсальные процедуры/функции — можно вызвать их
Эльвира:
Спасибо большое, очень помогло в решении задачи
Кирилл:
Все коротко и по делу. Спасибо огромное автору.
Robodog:
Не работает вызов заполнения из формы списка документов. ВладелецФормы.Объект поле объекта не обнаружено. И как отлаживать такие обработки?
iStan:
«И как отлаживать такие обработки?»
— как правило, проще это делать через форму обработки, открыв ее через меню Файл и указав ссылку на заполняемый объект.
Данила:
Доброго дня! Скажите, возможно как-то проанализировать, из какой ТЧ произведено открытие обработки заполнения ТЧ ? «…Для каждого ТекущаяСтрока из ВладелецФормы.Объект.Материалы…» вместо материалы аналогично 8.2 Объект[ИмяТабличнойЧасти]. На данный момент анализирую по условию Метаданные().Имя. но это тупо. А если в документе две ТЧ?
RAVe:
А как вы прикрепляете команду к таб части? по-моему в бух она выходит в строке общих команд документа..
Аноним:
Сделал всё по иструкции, в документе команда не появилась, куда копать?
Роман:
БСП ДополнительныеОтчетыИОбработки в документе внедрены?
Уаса:
Если требуется для заполнения ТЧ документа сначала открыть форму дополнительной обработки, сформировать в форме обработки по нужному алгоритму список для ТЧ документа и потом перенести сформированные данные в ТЧ документа, требуется добавить ДВЕ команды для открытия формы и для переноса данных? Как осуществить перенос данных в ТЧ документа, если команду переноса данных надо вызвать из формы обработки?
Антон:
Здравствуйте. Подскажите, при подключении внешней обработки по заполнению объектов есть параметр «Показывать», который позволяет отображать команды в форме объектов и/или в форме списков (2 галочки). Можно ли управлять этими галочками программно при формировании параметров регистрации в функции «СведенияОВнешнейОбработке()»? Или они всегда по умолчанию устанавливаются в Истина?
Андрей:
Добрый день, есть возможность подключить обработку в командную панель табличной части документа?
Аноним:
Добрый день! Под ограниченными правами не видна команда в форме обработки, в чем может быть причина?