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

30.05.09

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

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

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

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

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

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



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

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

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



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



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


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

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

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

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

См. также

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

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

03.02.2025    8763    bayselonarrend    126    

62

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

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

14.01.2025    13229    dsdred    73    

117

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

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

23.06.2024    16380    bayselonarrend    21    

166

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

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

13.03.2024    9474    dsdred    18    

83

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

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

24.01.2024    35529    YA_418728146    35    

75
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 1568 31.05.09 15:48 Сейчас в теме
(3) Ага, попробуй-ка в общем модуле 8-ки сделать экспортную переменную.
А если перенести в модуль приложения, то глобальная переменная все равно не гуд. Может возникнуть куча проблем.
Подход автора, в принципе, неплох.
Я и сам аналог использую для своего тестирования печатных форм.
5. BabySG 17.06.09 20:08 Сейчас в теме
А зачем менять конфу для этого?
Чем не понравились ВПФ?
Оставьте свое сообщение