gifts2017

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

Опубликовал roma n (roma n) в раздел Программирование - Практика программирования

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

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

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

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

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



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

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

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



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



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


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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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