Заполнение табличных частей документов в восьмерке (внешние обработки)

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

Статья является продолжением цикла статей и разработок:
Внешние печатные формы в восьмерке http://infostart.ru/blogs/157/
Обработка для тестирования внешних печатных форм в восьмерке http://infostart.ru/projects/833/
Использование встроенного почтового клиента — http://infostart.ru/blogs/161/
Документ с печатью и подписью — http://infostart.ru/blogs/162/
Внешние печатные формы в восьмерке II — http://infostart.ru/blogs/324/
Заполнение табличных частей документов в восьмерке (внешние обработки) http://infostart.ru/blogs/345/
Обработка для тестирования внешних обработок заполнения табличных частей http://infostart.ru/projects/1749/
Использование свойств объектов при доработке типовых конфигураций http://infostart.ru/blogs/692/
Примеры обработок:
Закрытие регистров накопления (обработка заполнения табличных частей) http://infostart.ru/projects/3280/
Объединение одинаковых строк табличной части документа http://infostart.ru/projects/4355/

Требования к внешней обработке достаточно просты. В модуле обработки должна быть процедура Инициализировать() с тремя параметрами и ключевым словом «Экспорт». Например, для заполнения табличной части документа номенклатуры из определенной группы достаточно написать процедуру:

Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПоле) Экспорт;

Форма = Справочники.Номенклатура.ПолучитьФормуВыбораГруппы();
Группа = Форма.ОткрытьМодально();
Если Группа = Неопределено Тогда Возврат;
КонецЕсли;

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

Выборка = Справочники.Номенклатура.Выбрать(Группа);
Пока Выборка.Следующий() Цикл Если Выборка.ЭтоГруппа Тогда Продолжить;
КонецЕсли;

СтрокаТабличнойЧасти = Объект[ИмяТабличнойЧасти].Добавить();
СтрокаТабличнойЧасти.Номенклатура = Выборка.Ссылка;
КонецЦикла;

КонецПроцедуры 

Для подключения обработки необходимо добавить новый элемент в справочник «Внешние обработки». МенюСервисОткрыть список внешних обработок заполнения табличных частей. Пример заполнения справочника представлен на рисунке.

Подключение обработки
В результате, в документе появится новый пункт меню у кнопки «Заполнить».
Вызов обработки
Описанный механизм поддерживает передачу во внешнюю обработку параметров. Подробнее здесь //infostart.ru/blogs/324/
В обработке может быть макет с идентификатором «Параметры_Авторегистрации». В первом столбце которого в каждой строчке можно указать объекты, для которых предназначена печатная форма. Например, «Документы.ЗаказПокупателя». Во втором столце — идентификаторы табличных частей.
В качестве бонуса предлагаю обработку //infostart.ru/projects/1749/?ref=4246 , с помощью которой можно облегчить процесс тестирования кода. Обработку подключаем через справочник «Внешние обработки». Запускаем обработку через кнопку «Заполнить». В обработке указываем имя файла тестируемой внешней обработки. После чего, тестируем код как обычный модуль.

49 Comments

  1. Шёпот теней

    Великая poppy! спасибо за оперативность и актуальность материала! В очередной раз позвольте высказать своё восхищение вашими трудами и глубиной познания методологии 1С. Удачи!

    Reply ↓
  2. Шёпот теней

    опятья… посидел… попробовал… разобрался… да! отличная идея и возможность и главное простота реализации.

    спасибо poppy!

    Удачи!

    Reply ↓
  3. Шёпот теней

    …и… опять я…

    …poppy, не могли бы вы ответить на один вопрос, что является источником таких знаний об 1С 8… вопрос, о заполнении табличных частей документа меня задел… просмотрел сайты, форумы, книги… и нигде нет подобного решения, нигде такое не описывается… даже в талмуде-библии «Профессиональная разработка в системе 1С:Предприятие 8» господ Габец, Гончаров +++ Радченко о такой возможности говорится мельком, описывается на четверть листа, а уж говорить о возможности это понять и говорить не приходится…

    Поэтому хочется узнать, где этот источник…? Куда надо смотреть, что посещать…?

    Откуда такая методическая правильность и доходчивость…?

    Ответьте если не затруднит… вам поклоняющийся … ШТ…

    Во-о-о-от такой вопрос?

    Удачи всем и во всём…

    Reply ↓
  4. O-Planet

    Шёпот теней

    Мдя… Ты бы в 1С еще позвонил, а потом и Биллу Гейтсу 🙂 А посмотреть Справочную информацию по спрвочнику «Внешние обработки» — не судьба была? 🙂

    Reply ↓
  5. Шёпот теней

    Спасибо O-Planet! конечно, сам виноват… кто же спорит… но вот вопрос… кто читает эти хелпы в справочниках, да ещё в таком как «Внешние обработки»…

    я тоже силён «последним умом»… но если честно… давайте вместе прочитаем этот хелп и спросим себя » ты, что-нибудь понял?»… я, не такой умный, это точно… да и к тому же как это сделала poppy наглядно и доходчиво… и если она всё это смогла сделать только на основании информации из хелпа «»Внешние обработки» … то… я восхищён… и poppy и хелпом…

    во-о-от… хочется дождаться и мнения и poppy… а то так недалеко и до комплекса полной неполноценности…

    Reply ↓
  6. poppy

    Извини, Шепот, но хелп не читала. Наверно, зря.

    Основа статьи взята из типовой конфигурации УПП 1.2.7.1. Общий модуль — «УниверсальныеМеханизмы». Процедура — ОбработатьНажатиеНаДополнительнуюКнопкуЗаполненияТЧ(), строка #377

    Обработка.Инициализировать(ЭтотОбъект, СтрокаКнопки.Родитель.Имя, СтрокаКнопки.Родитель.Расшифровка);

    Остальное, как говорится, дело техники.

    Ты спрашиваешь, откуда сила, брат (сестра)? Имхо, неплохо об этом написал Александр здесь http://infostart.ru/blogs/139/#comm24

    Reply ↓
  7. das

    По моему мнению отзвук силы и вдохновения звучит и здесь (пардон за каламбур):

    http://infostart.ru/blogs/179/

    Reply ↓
  8. Abadonna

    >Великая poppy!

    О, Poppy, Великая и Ужасная! Дай мне сердце, а кое-кому мозгов.

    И Элли с Тотошкой вернутся с Арканзас :)))

    Reply ↓
  9. Шёпот теней

    спасибо и Великому Abadonne…

    …и… привет и Элли с Тотошкой…

    Reply ↓
  10. O-Planet

    (5) во-о-от… хочется дождаться и мнения и poppy… а то так недалеко и до комплекса полной неполноценности

    Ты эт о чем вообще? 🙂

    Reply ↓
  11. Abadonna

    >ОбработатьНажатиеНаДополнительнуюКнопкуЗаполненияТЧ()

    Коротковатое название 😉

    Лучше: ОбработатьНажатиеНаДополнительнуюКнопкуЗаполненияТЧ_и_Выполн­итьНеобходимыеДействияКорректно() :)))))))))

    Reply ↓
  12. natachka

    Спасибо большое! Нужно было быстро разобраться, очень помогло!!!

    Reply ↓
  13. vitbel

    Не плохо бы дописать в ней и запролнение на основании

    Reply ↓
  14. poppy

    (13)

    «заполнение на основании» чего? Как это относится к теме обсуждаемой статьи?

    Reply ↓
  15. Sverkalov

    Использовать

    http://infostart.ru/profile/6612/projects/893/

    (не моя)

    Reply ↓
  16. some21

    Как сделать отбор всех подгрупп этой группы. Так как здесь идет отбор только

    элементов указаного уровня?

    Reply ↓
  17. ErshKUS

    Надо бы еще добавить про «Параметры_Авторегистрации»

    Reply ↓
  18. poppy

    (17)

    Спасибо за замечание…

    Reply ↓
  19. dimg

    Кстати, в этой хорошей идее, как всегда у 1С, не обошлось без ложки дегтя. При вызове форма имеет модифицированность всегда. Т.е. если даже в обработке ничего не меняли, и, следовательно документ не изменен, то значок * ставится все равно и предлагает сохранятся.

    Reply ↓
  20. poppy

    (19) Есть такая фича в типовых конфигурациях. Кроме БП.

    Reply ↓
  21. poppy

    (19) Спасибо за дополнение.

    Reply ↓
  22. MAntaNA

    poppy, нет ли планов развить тему? В частности, что-то непонятно, как работать, если в параметре ТабличноеПоле типовая конфигурация передаёт не ТабличноеПоле, связанное с табличной частью документа, а ТабличноеПоле, связанное с генерируемой в контексте формы документа временной ТаблицейЗначений (например, документ УстановкаЦенНоменклатуры в Рознице). Бьюсь-бьюсь, никак что-то не получается редактировать это ТабличноеПоле…

    Reply ↓
  23. MAntaNA

    Тьфу-ты, вот вроде и докопался! По крайней мере, вроде получается редактировать саму ТЗ через ТабличноеПоле.Значение… Сейчас вроде допинаю… stay tuned %)

    Reply ↓
  24. 1CBars

    У меня вопрос: а что можно сделать, чтобы вызвать эту обработку ТЧ в документе, у которого нет кнопочки «Заполнить»? (к примеру документ «Ввод начальных остатков в Бух 8»)

    Reply ↓
  25. ShurikOff

    Под 8.2 не работает… 👿

    Reply ↓
  26. MAntaNA

    Ну да, как я и сказал, всё работает через ТабличноеПоле.Значение (для документа УстановкаЦенНоменклатуры в Рознице).

    Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт

    Для каждого СТП Из ТабличноеПолеОбъекта.Значение Цикл

    СТП[«цена1»] = 10;

    КонецЦикла;

    КонецПроцедуры

    (я не тормоз, мне просто чессно некогда Инфостарт читать %( )

    Reply ↓
  27. powar

    А как мона передать полностью ссылку на документ обработке? Что бы получать данные с документа и записывать на него. ❓

    Reply ↓
  28. anig99

    (27) Объект — это и есть ссылка на документ

    Reply ↓
  29. mir2

    Здравствуйте!

    Подскажите новичку ( с 1с познакомился совсем недавно).

    У меня возникла проблема подключения этой обработки.

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

    Затем подключаю ее как указано выше. Но в окне «принадлежность обработки по заполнению табличных частей » у меня пусто.И программа ничего не дает туда внести.

    Что нужно еще сделать ,чтобы у меня по вышеуказанным рекомендациям все заработало?

    Заранее спасибо.

    Reply ↓
  30. mir2

    (29) Извините за беспокойствие .Все получилось.

    Для обработки в конфигураторе надо было указать в реквизитах ссылку на объект.

    Reply ↓
  31. Nadezhda09

    to poppy

    Очень полезная тема и доходчиво написано. Спасибо! Все работает! 🙂

    (27) to powar

    Не знаю, актуален ли еще ваш вопрос, но отвечаю на всякий случай:

    МОЖНО ❗

    1. Добавила в реквизиты обработки реквизит «ДокументОбъект» с типом значения ДокументОбъект.<НаименованиеДокумента>

    2. В проц. Инициализировать() добавила:

    ДокументОбъект=Объект;

    3. Потом обращалась к документу через реквизит ДокументОбъект.

    Может это и не оптимально, но работает. 🙂

    Изменения в форме документа отображаются тут же.

    Reply ↓
  32. powar

    Спасибо Nadezhda09’сан!

    Reply ↓
  33. IP43

    Ученье трудно нам давалось. Писал для 7-ки писал, и тут на тебе, клиенты повально начали переходить на 8-ку, если бы не подобные статьи, то все мозги бы вывихнул на старости лет изучая оную. А так со скрипом, но дело движеться вперед.

    Reply ↓
  34. figznaika

    как скачать?

    Reply ↓
  35. Lyolik
    ShurikOff пишет:

    Под 8.2 не работает…

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

    Reply ↓
  36. h_vitya

    Спасибо за статью! Оч. полезная информация.

    Reply ↓
  37. KliMich

    Содержательная статья!

    Добавил бы еще в шапку (как дополнение) «Как создать внешнюю печатную форму на основе готовой»

    ПечФормаНаОсновеГотовой

    Reply ↓
  38. MYRZILKA123

    обогатил свои знание спс

    Reply ↓
  39. musatov1c.ru

    Спасибо большое. Мгновенное применение. Сразу в жизнь.

    Reply ↓
  40. Olejkee

    подобным образом организовал простой обмен через csv файл с сайтом на viart.

    теперь обновления на сайте не занимают больше 5 минут при оооочень малом бюджете 🙂

    Reply ↓
  41. al_ban

    Спасибо за статью! Сейчас решаю задачу корректировки проводок документа «Списание с расчетного счета » с помощью обработки заполнения табличных частей, не знаю, получится ли…

    Reply ↓
  42. Dwiss

    (19) dimg, Блин что делать с модифицированностью? как от нее избавиться всю голову сломал, сохранять объект не подходит, вышли как нибудь из положения?

    Reply ↓
  43. krechet5

    Спасибо, полезно для новичка. Работает!

    Reply ↓
  44. andpal

    Как отладчиком забраться в процедуру «Инициализировать» ?

    Reply ↓
  45. ЛохНесс

    [44]

    andpal, используй обработку http://infostart.ru/public/15601/

    Reply ↓
  46. RG84

    все кратко и понятно написано. спасибо за информацию, то что надо!!!

    Reply ↓
  47. AnryMc

    (47) Vladisa, Здесь пишеться — скачал/нескачал… Нехорошо обманывать… Млдераторы вычислят как вы $m зарабатываете — забанят…

    Reply ↓
  48. chmv

    Полезная вещь

    Reply ↓
  49. user960149

    В этой обработке ярлык «настройка» есть события. Если программно изменить «После добавления строки», то обработка эти изменения не видит, но стоит просто их открыть и закрыть начинает обрабатывать. Изменения вносятся через процедуру КоманднаяПанельЗагружаемыеРеквизитыСобытия. На пример ПослеДобавленияСтроки = «» + Строка(«Сообщить(«»Загружено»»);»)+ Символы.ПС + Строка(«Сообщить(«»Тест»»);») . Что ей не хватает? Мне необходимо дополнительно осуществлять поиск данных.

    Reply ↓

Leave a Comment

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