1с обработка заполнения табличной части (внешняя)

Всем привет, народ! Давно хотел сделать заметку о том, с чем очень давно не сталкивался. И вот момент подвернулся. Сегодня сделаем внешнюю обработку заполнения табличной части документа в 1с (или изменение строк) на платформе версии 8.3 (8.3.17.1386) в конфигурации Управление торговлей, редакция 11 (11.4.11.100).

Здесь на самом деле все очень просто. Для начала создаем новую обработку и в модуле объекта описываем интерфейс регистрации обработки:

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

  • СтрокаКоманды.Использование = “ВызовСерверногоМетода”. Будет вызван метод ‘ВыполнитьКоманду’ из модуля обработки этой обработки.
  • СтрокаКоманды.Использование = “ВызовКлиентскогоМетода”.Будет вызван клиентский метод ‘ВыполнитьКоманду’ из модуля формы этой обработки.
  • РегистрационныеДанные.Вставить(“Вид”    , “ЗаполнениеОбъекта”). Эти данные влияют на интерфейс элемента внешней обработки и на алгоритм, которые будет применяться при её вызове.

На самом деле, если вы что-то сделаете в описании не правильно и после подключения обработки попытаетесь ей воспользоваться, то платформа вам выдаст ошибку и вы легко сможете её исправить. К примеру: я в клиентском методе ‘ВыполнитьКоманду’ указал 3 параметра, вместо 2 – на что получил ошибку:

Ошибка работы внешней обработки.
Ошибка работы внешней обработки.

Посмотрел отладчиком: действительно параметров должно быть два:

Количество передаваемых параметров.
Количество передаваемых параметров.

Исправляем в модуле формы клиентскую процедуру ‘ВыполнитьКоманду’ – указываем 2 параметра и все работает:

Отлично. Как вы поняли в данном примере мы вызываем клиентский метод ‘ВыполнитьКоманду’ и просто перебирая товары выводим их количество. Важно понимать (все это можно посмотреть и узнать из отладчика):

  • ‘ВладелецФормы’ – это непосредственно сама форма документа, откуда была вызвана внешняя обработка.
  • ‘ОбъектыНазначения’ – в данном случае это массив с одним элементом и этот элемент наша ссылка. Так что при желании можем напрямую с ней работать.

Нам осталось только подключить данную внешнюю обработку через справочник дополнительные отчеты и обработки и протестировать механизм:

Добавление внешней обработки в справочник 'Дополнительные отчеты и обработки'.
Добавление внешней обработки в справочник ‘Дополнительные отчеты и обработки’.
Кнопка "Заполнить товары" внешней обработки.
Кнопка “Заполнить товары” внешней обработки.

Супер! Все работает. Давайте теперь придумаем что-нибудь посложнее:

Данный код меняет и записывает непосредственно сам объект – при этом на форме не произойдет новое отображение данных. Необходимо закрыть и открыть документ заново. Что крайне неудобно.

А теперь давайте перезаполним только данные формы и оставим пользователю возможность сохранения этих данных. Внимание! Смотрите что изменилось:

Изменяем только данные формы.
Изменяем только данные формы.
Результат работы внешней обработки.
Результат работы внешней обработки.

Благодаря коду ‘СтрокаКоманды.Использование = “ЗаполнениеФормы”;’ программа сама после изменения данных формы обновит её на клиенте! Все уже продумано в типовых конфигурациях:

Обновление формы после вызова серверного метода.
Обновление формы после вызова серверного метода.

Если во всем этом один раз разобраться, то никаких не будет проблем с формирование внешних обработок, которые изменяют данные и подключаются через дополнительные отчеты и обработки!

Для теста выкладываю вам свою обработку и плюс еще одну, благодаря которой я смог во всем этом разобраться (из ‘БСП’). Всем Удачи и пока!

Скачать файлыcraft1c_VneshnyayaObrabotkaZapolneniyaTablichnojChastiDokumentaIliDokumentNeVazhno.7z

7+

3 комментария

  1. Admin (Автор записи)

    Вот это да…

    2+
  2. Вадим

    Очень познавательно

    1+
    1. Admin (Автор записи)

      Да смотрел в интернете – везде однообразно и многое не понятно. Сам решил разобраться и заметку заодно сделал – как это работает. Теперь не забуду)

      2+

Оставить комментарий

Ваш адрес email не будет опубликован.