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

30.05.09

Разработка - Механизмы платформы 1С

А пробовали вы в типовых получить табличный документ, содержащий встроенную печатную форму объекта?
Рекомендую попытаться

Собственно задача с которой всё началось до безобразия проста: отправка произвольных печатных форм по e-mail. Вполне логичным в этом случае кажется использование встроенного универсального инструментария для получения печатных форм, сохранения их в виде файлов в temp-директории и последующей отправкой. Но не все так просто...

В типовых конфигурациях от 1С существует довольно мощный механизм внешних печатных форм. Зиждется он на внутреннем стандарте, подробно описанном на дисках ИТС в разделе «Система стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8»
Однако, если функция внешней обработки формирования печатных форм, созданной с соблюдением стандарта, возвращает сформированный табличный документ, то для встроенных печатных форм работает экспортная процедура модуля объекта Печать() которая не только формирует табличный документ (вызывая ту или иную неэкспортную функцию с нестандартизированным именем), но и сразу же открывает его окно (либо отсылает его на принтер). Нам же ни окно, ни, тем более, распечатанные бумажки не нужны. Нужно-то всего ничего: объект типа табличный документ… Что прикажете делать? Лопатить модули всех объектов, дописывая ключевое Экспорт и где-то хранить имена функций для каждого из объектов? Дублировать встроенные печатные формы внешними? Сомнительное удовольствие.
Но всё же выход есть. Кроется он в экспортной процедуре НапечататьДокумент(), вызываемой как для встроенных так и для внешних печатных форм.
Вот как выглядит девственно-нетронутое тело этой процедуры:

Если ПечДокумент = Неопределено тогда
Возврат;
КонецЕсли;

// Получить необходимое количество копий
Если КоличествоЭкземпляров > 0 Тогда
ПечДокумент.КоличествоЭкземпляров = КоличествоЭкземпляров;
КонецЕсли;



Вживим сюда небольшой имплант:

Если ПечДокумент = Неопределено тогда
Возврат;
КонецЕсли;

//+++++
Если КоличествоЭкземпляров = -1 Тогда
// Вызов процедуры печати из внешнего объекта
КоличествоЭкземпляров = ПечДокумент;
Возврат;
КонецЕсли;
//----- 



// Получить необходимое количество копий
Если КоличествоЭкземпляров > 0 Тогда
ПечДокумент.КоличествоЭкземпляров = КоличествоЭкземпляров;
КонецЕсли;



Теперь, если на вход процедуры вторым параметром передать переменную, содержащую значение –1, то после исполнения процедуры эта самая переменная (благодаря тому что переменные передаютя по ссылке) будет содержать требуемый табличный документ. Что, собственно и требовалось.
Таким образом, для получения произвольной имеющейся печатной формы объекта достаточно выполнить примерно такой код:


ТабДок = -1;
УниверсальныеМеханизмы.ПечатьПоДополнительнойКнопке(…, …, …, …, ТабДок);

А уж дальше с содержащимся в ТабДок объектом разработчик волен поступать как сочтет нужным.

PS примеры процедур и функций взяты из типовой БП 1.6.15.5.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Механизмы платформы 1С Программист Бесплатно (free)

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    27401    TitanLuchs    106    

147

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    15071    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    16977    user2122906    9    

60

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    27540    dsdred    79    

143

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    25213    bayselonarrend    22    

175

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    13795    dsdred    22    

85
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Свой 164 30.05.09 18:01 Сейчас в теме
укажите явно , в заголовке, что статья для 8ки и негодится для 7ки
2. roma n 8 30.05.09 18:24 Сейчас в теме
(1)
- тематические разделы определены, но и в названии упоминание не помешает
- пример взят из V8, однако, флот сработает и в 7.7,- механика передачи параметров та же
3. Душелов 4024 31.05.09 14:54 Сейчас в теме
А можно просто взять и сделать ПечДокумент экспортной переменной и все.
4. artbear 1586 31.05.09 15:48 Сейчас в теме
(3) Ага, попробуй-ка в общем модуле 8-ки сделать экспортную переменную.
А если перенести в модуль приложения, то глобальная переменная все равно не гуд. Может возникнуть куча проблем.
Подход автора, в принципе, неплох.
Я и сам аналог использую для своего тестирования печатных форм.
5. BabySG 17.06.09 20:08 Сейчас в теме
А зачем менять конфу для этого?
Чем не понравились ВПФ?
Для отправки сообщения требуется регистрация/авторизация