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

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

Статья является продолжением цикла статей и разработок:
Внешние печатные формы в восьмерке 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 не будет опубликован. Обязательные поля помечены *