Обработка заполнения табличной части 1С 8.3 управляемые формы на примере
Здесь мы научимся создавать внешнюю обработку заполнения табличной части документа в 1С 8.3 (для управляемых форм) с нуля. Рассмотренный пример обработки можно скачать по ссылке.
Возьмем самой простой пример: в табличной части «Материалы» документа «Требование-накладная» присвоим во всех строках количеству значение равное 100.
Подготовка внешней обработки в 1С 8.3
Итак, создаем внешнюю обработку. Сохраняем ее на диск.
Внешнюю обработку или отчет в базе 1С необходимо зарегистрировать. Делается это с помощью структуры, которая содержится в экспортной функции СведенияОВнешнейОбработке.
По кнопке «Действия» переходим в модель объекта, где и создаем функцию:
Поговорим немного о значении полей.
Вид — в зависимости от предназначения обработки может принимать значения:
В нашем случае для обработки заполнения табличной части нам необходим вид обработки «ЗаполнениеОбъекта»
Назначение — в этом поле перечисляются документы, для которых эта обработка предназначена (в которых она появится после регистрации в информационной базе). Для перечисления этих документов создадим массив «Назначения» и добавим в него документ «ТребованиеНакладная».
Наименование — это наименование будет отображаться в списке дополнительных обработок.
Версия — версия нашего нового программного продукта.
Информация — этот ключ нашей структуры содержит дополнительную информацию о нашей обработке.
Безопасный режим — принимает значение Истина/Ложь. Мы будем использовать безопасный режим.
Команды — этот ключ структуры содержит перечень поставляемых нашей обработкой команд. Для команд мы создадим функцию ПолучитьТаблицуКоманд() и процедуру ДобавитьКоманду().
Немного подробнее остановимся на полях таблицы значений команд.
Представление — это представление команды для пользователя: какое название для него будет представлено в интерфейсе.
Идентификатор — это внутренний идентификатор команды в пределах нашей обработки
Использование — в зависимости от использования команды может принимать значения:
В нашем случае мы работаем с формой объекта 1С 8.3, поэтому нам необходимо использовать ВызовКлиентскогоМетода для вызова команды внешней обработки.
ПоказыватьОповещение — имеет одно из двух значений: Истина/Ложь.
Модификатор — дополнительный модификатор команды. Итоговый листинг нашей обработки в модуле объекта приобретает следующий вид:
Создание команды для заполнения табличной части
В поле Форма обработки нажмем линзу, чтобы создать форму:
В форме добавим команду ВыполнитьКоманду.
В теле обработки заполнение команды обратимся к данным формы через ВладелецФормы и изменим значение количества в табличной части материалов:
Регистрация внешней обработки в 1С 8.3 и её проверка
Теперь в режиме предприятия 1С зарегистрируем нашу внешнюю обработку для заполнения табличной части:
В списке внешних обработок нажмем кнопку Создать:
В открывшемся бланке новой внешней обработки загрузим из файла внешнюю обработку и впоследствии запишем новую обработку:
Теперь в документе «Требование-накладная» мы можем наблюдать результат регистрации нашей обработки в информационной базе. А по нажатию кнопки «Заполнить документ» увидим работу нашей обработки по заполнению табличной части.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Внешние обработки табличных частей в 1С 8.2 и 8.3
Табличные части в документах и справочниках часто бывают достаточно большими — сотни и тысячи строк. Почти также часто требуется выполнять какую-либо обработку этих самых строк и разумеется очень желательно автоматизировать эту обработку. Изменять конфигурацию в каждом подобном случае было бы очень непрактично, поэтому компания «1С» создала механизм внешних обработок табличных частей.
Внешняя обработка табличных частей — это обычная внешняя обработка, соответствующая определенным требованиям. Такую обработку можно подключить к какой-либо типовой конфигурации и привязать к нужным документам и справочникам.
Кроме этого, нужно отметить, что создание внешних обработок табличных частей различается для обычного приложения (Бухгалтерия 2.0.*, ЗиУП 2.5.*, УТ 10.3.*) и управляемого приложения (Бухгалтерия 3.0.*, ЗиУП 3.*, УТ 11.*). В статье будут рассмотрены оба варианта.
Также нужно сказать, что вопросы отладки внешних обработок табличных частей для управляемого и для обычного приложения рассматриваются в отдельной статье.
Внешняя обработка табличных частей в управляемом приложении
Начнем с управляемого приложения. Тут нужно сказать, что в управляемом приложении обработки табличных частей заменены на более общие обработки заполнение объекта. В тексте ниже будет приведен пример создания и подключения обработки заполнения объекта на примере документа «Реализация товаров и услуг» (Бухгалтерия предприятия, редакция 3.0).
Создание
Итак, для начала нам нужно создать новую внешнюю обработку и в модуле объекта этой обработки размещаем такой код:
В коде реализована экспортная функция СведенияОВнешнейОбработке(), она является обязательной и служит для описания внешнего обработки. Обязательными для заполнения являются параметры «Вид» (в нашем случае — «ЗаполнениеОбъекта»), «Версия» и «Команды». Необязательные параметры также очень желательно заполнять — это облегчает подключение и помогает избежать путаницы в дальнейшем.
Параметр «БезопасныйРежим» в значении «Истина» накладывает некоторые ограничения:
При этом имеется возможность запросить исключения из безопасного режима (приме в коже выше).
В примере выше добавляются три команды разного типа. Команды типов «ВызовСерверногоМетода» и «ЗаполнениеФормы» должны быть реализованы в том же самом модуле объекта обработки — экспортная процедура ВыполнитьКоманду(). При этом команды типа «ЗаполнениеФормы» могут выполняться для новых (не записанных) объектов. Пример реализации:
Сделать обработку заполнения табличной части для управляемого приложения
Для изменения данных табличных частей, в типовых конфигурациях есть возможность подключать специальные внешние обработки. В управляемом приложении обработки заполнения табличных частей имеют определенную структуру данных. Обработки ТЧ для обычного и управляемого приложений отличаются.
Обработка табличной части для управляемого приложения содержит экспортную функцию СведенияОВнешнейОбработке() и процедуру ВыполнитьКоманду().
Экспортная функция «СведенияОВнешнейОбработке()»
Функцию обязательная. Определяется в модуле обработки и выполняется на сервере.
Экспортная процедура «ВыполнитьКоманду()»
Процедура обязательная. Если параметр «Использование» установлен в значение «ВызовСерверногоМетода», то обязательная экспортная функция ВыполнитьКоманду() должна располагаться в модуле обработки и выполняться на стороне сервера. Если установлено значение «ВызовКлиентскогоМетода», то обязательная экспортная функция ВыполнитьКоманду() должна располагаться в модуле основной формы обработки и выполняться на стороне клиента.
В информационной базе типовой конфигурации, внешние обработки и отчеты хранятся в специальном справочнике. Добавить внешнюю обработку заполнения табличной части для управляемого приложения в информационную базу типовой конфигурации, можно в режиме 1С:Предприятие.
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться
S-Студия
Блог о внедрении и технологиях 1С
Пример разработки внешней обработки 1С вида «Заполнение объекта»
Задача. К примеру, нам необходимо сделать загрузчик данных в табличную часть «Расшифровка платежа» документа «Поступление безналичных денежных средств», а данные для загрузки находятся в файле Excel, который интерактивно выбирает пользователь. Конечно, менять конфигурацию нельзя, расширения добавлять нельзя. В конфигурации используется БСП версии (2++). Такая вот задача.
Среди видов внешних обработок есть такой вид — «Заполнение объекта». С помощью данной обработки можно заполнить справочник или документ исходя из собственных требований. Хорошим примером может являться разноска выписки по договорам или счетам.
Итак, что можно сделать с помощью дополнительной внешней обработки вида » Заполнение объекта»?
Можно, например, из формы документа (или справочника) открыть форму обработки, передав в нее контекст вызвавшей ее формы документа, провести некие манипуляции с данными. Звучит непонятно? — Давайте разберем пример.
Решение данной задачи с помощью внешней обработки вида «Заполнение объекта» следующее:
Тут ключевой параметр: ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта()
В этом случае, после регистрации внешней обработки, в форме назначенного документа появится кнопка с вашей командой
Далее, при открытии основной формы обработки, при создании на сервере, получаем входящий контекст:
Тут важно сохранить ссылку на открытый ранее документ, которая придет в виде первого элемента массива: Параметры.ОбъектыНазначения[0]
Далее, в форме разрабатываем интерфейс работы с файлом и обработчик загрузки. Например, вот такой интерфейс: выбираем файл Excel, читаем его файл в Табличный документ (с COM-объектом при этом не работаем!), далее обрабатываем открытое содержимое и подготавливаем данные для переноса в соответствии с бизнес-требованиями.
Но далее, есть небольшой нюанс. Мы открыли нашу форму «обработку загрузки» из формы исходного документа с передачей лишь ссылки на него, соответственно, нам нужно:
Если в форме нашего «обрабатываемого» объекта есть обработчик оповещения (процедура формы документа «ОбработкаОповещения»), дело упрощается — мы подключаемся к нему и этот обработчик и обновит данные формы в соответствии с данными объекта (выполнит команду Прочитать() с формы документа). Для этого используем команду Оповестить(«ОбновитьДокументИБПослеЗаполнения», Массив, ЭтаФорма)
Если же обработчика нет — тогда хоть и кривенько, но вполне подойдет закрытие исходной формы документа и открытие уже новой формы документа.
Вот собственно и все решение. В принципе, несложное, но пару нюансов содержит
Скачать разбираемую обработку можно здесь Скачать
Позднее появилось и другое решение данной задачи. РЕШЕНИЕ №2
Внешняя обработка для заполнения табличных частей в 1С 8.3
В рамках данной статьи мы напишем обработку заполнения табличной части в 1С 8.3 для типовой конфигурации 1С:ERP 2.1. Предположим, что целью поставленной задачи стоит установка ручной скидки в размере 5% для всех номенклатурных позиций данного документа. Пример из статьи можно скачать по ссылке или другой аналогичной обработки по ссылке.
Данная инструкция предназначена для управляемых форм (8.2 и 8.3). Для обычных форм (8.1, 8.2) можно воспользоваться следующей инструкцией.
Создание внешней обработки
Создайте и сохраните на ваш компьютер новую обработку. Сначала необходимо произвести некоторые регистрационные действия.
Откройте модуль объекта и пропишите код, приведенный ниже (его также можно взять из данной выше обработки). В целом, структура не будет меняться в зависимости от ситуации. Редактируются только некоторые параметры настроек, а так же при необходимости имена переменных.
В рамках данной статьи мы не будем подробно останавливаться на регистрации внешних обработок и печатных форм в 1С. Вся эта информация есть в других наших статьях.
Заполнение табличной части документа
Создадим новую форму обработки.
Теперь нам необходимо добавить на созданной форме новую команду. Предполагается, что она будет автоматически менять данные в табличной части как одного, так и нескольких документов (их формы списка) одновременно, записывая их впоследствии.
Получите понятные самоучители по 1С бесплатно:
В рамках нашего примера будет произведена обработка уже существующей табличной части «Товары». Для каждой строки будет установлена ручная скидка в размере 5%. Так же, мы рассчитаем саму сумму данной скидки, равную сумме товаров в строке, умноженных на 0,05.
Далее сохраним нашу обработку и перейдем к ее регистрации в 1С.
Регистрация внешней обработки
Запустите 1С в режиме «Предприятие» и откройте справочник «Дополнительные отчеты и обработки». Найдем его через меню «Все функции».
Создайте новый элемент в открывшемся справочнике и по одноименной кнопке загрузите из файла свою обработку. Разместим ее одновременно и на форме списка и на форме самой карточки документа.
Теперь в форме списка документов «Заказ клиента» появится кнопку «Заполнение…», которая позволит произвести изменить ручные скидки товаров сразу у нескольких документов.
Так же данная кнопка будет доступна и в карточке самого документа.