Статья является продолжением цикла статей и разработок:
Внешние печатные формы в восьмерке 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/
Попробуем решить задачу другим способом. Для начала необходимо организовать место, где будут храниться образцы печатей и подписей.
Для этого создадим новый регистр сведений «Изображения» с измерением «Объект» типа «СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица» и ресурсом «Изображение» типа «ХранилищеЗначения». Сформируем основную форму записи. Устанавим на ней поле картинки, поле для выбора объекта и кнопку «Загрузить». В модуле формы пишем код:
Процедура ДействияФормыЗагрузить(Кнопка) Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Выберите файл с изображением"; Диалог.ПолноеИмяФайла = ""; Диалог.ПредварительныйПросмотр = Истина; Диалог.Фильтр = "Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf|" + "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|" + "Формат JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" + "Формат TIFF (*.tif)|*.tif|" + "Формат GIF (*.gif)|*.gif|" + "Формат PNG (*.png)|*.png|" + "Формат icon (*.ico)|*.ico|" + "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|"; // картинки Если Диалог.Выбрать() Тогда ВыбранноеФото = Новый Картинка(Диалог.ПолноеИмяФайла,Ложь); ЭлементыФормы.Картинка.Картинка = ВыбранноеФото; РегистрСведенийМенеджерЗаписи.Изображение = Новый ХранилищеЗначения(ВыбранноеФото); КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() Картинка = РегистрСведенийМенеджерЗаписи.Изображение.Получить(); Если Картинка <> Неопределено Тогда ЭлементыФормы.Картинка = Картинка; КонецЕсли; КонецПроцедуры
В макете добавляем рисунки, называем их «Печать», «РуководительПодпись», «БухгалтерПодпись». В модуле формирования печатной формы добавляем код:
ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета"); // Здесь может быть еще какой-нибудь код РегИзображения = РегистрыСведений.Изображения.СоздатьМенеджерЗаписи(); РегИзображения.Объект = Шапка.Организация; РегИзображения.Прочитать(); Картинка = РегИзображения.Изображение.Получить(); Если ТипЗнч(Картинка) = Тип("Картинка") Тогда ОбластьМакета.Рисунки.Печать.Картинка = Новый Картинка(Картинка.ПолучитьДвоичныеДанные(), Истина); КонецЕсли; СписокПоказателей = Новый СписокЗначений; СписокПоказателей.Добавить("","ФИОРук"); СписокПоказателей.Добавить("","ФИОБух"); мСведенияОбОрганизации = ПолучитьСведенияОбОрганизации(Шапка.Организация, Шапка.Дата, СписокПоказателей); РегИзображения.Объект = мСведенияОбОрганизации.ФИОРук; РегИзображения.Прочитать(); Картинка = РегИзображения.Изображение.Получить(); Если ТипЗнч(Картинка) = Тип("Картинка") Тогда ОбластьМакета.Рисунки.РуководительПодпись.Картинка = Новый Картинка(Картинка.ПолучитьДвоичныеДанные(), Истина); КонецЕсли; РегИзображения.Объект = мСведенияОбОрганизации.ФИОБух; РегИзображения.Прочитать(); Картинка = РегИзображения.Изображение.Получить(); Если ТипЗнч(Картинка) = Тип("Картинка") Тогда ОбластьМакета.Рисунки.БухгалтерПодпись.Картинка = Новый Картинка(Картинка.ПолучитьДвоичныеДанные(), Истина); КонецЕсли; ТабДокумент.Вывести(ОбластьМакета);
Если у нас нет возможности изменить макет табличного документа, тогда добавляем рисунки сразу в табличный документ:
РегИзображения = РегистрыСведений.Изображения.СоздатьМенеджерЗаписи(); РегИзображения.Объект = Шапка.Организация; РегИзображения.Прочитать(); Картинка = РегИзображения.Изображение.Получить(); Если ТипЗнч(Картинка) = Тип("Картинка") Тогда Рисунок = ТабДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); Рисунок.Картинка = Новый Картинка(Картинка.ПолучитьДвоичныеДанные(), Истина); Рисунок.Имя = "Печать"; Рисунок.Высота = 30; Рисунок.Ширина = 30; Рисунок.Верх = 110 + 4 * ТабДокумент.ВысотаТаблицы; Рисунок.Лево = 7; Рисунок.ГраницаСверху = Ложь; Рисунок.ГраницаСнизу = Ложь; Рисунок.ГраницаСправа = Ложь; Рисунок.ГраницаСлева = Ложь; Рисунок.Узор = ТипУзораТабличногоДокумента.БезУзора; КонецЕсли;
Н-дя… а пользы от этого?
М.б. ЭЦП подписывать письмо?
> Н-дя… а пользы от этого?
Это замена передачи документов по факсу. ЭЦП здесь точно не при чем…
>Для этого создадим новый регистр сведений «Изображения» с измерением «Объект» >типа «СправочникСсылка.Организации, СправочникСсылка.ФизическиеЛица» и >ресурсом «Изображение» типа «ХранилищеЗначения». Сформируем основную форму записи. >Устанавим на ней поле картинки, поле для выбора объекта и кнопку «Загрузить». В модуле формы >пишем код:
А если не секрет чем нас не устраивает справочник «ХранилищеДополнительнойИнформации» ? Вроде он есть во всех типовых конфигурациях, и ненадо лишний раз тормошить метаданные.
> А если не секрет чем нас не устраивает справочник «ХранилищеДополнительнойИнформации» ?
> Вроде он есть во всех типовых конфигурациях, и ненадо лишний раз тормошить метаданные.
Всем устраивает. С точки зрения «тормошения метаданных» — использование справочника «ХранилищеДополнительнойИнформации» решение более грамотное. Для такого решения придется немного подправить мой код.
С помощью регистра сведений обеспечивается уникальность «изображения» для каждого объекта.
>С помощью регистра сведений обеспечивается уникальность «изображения» для каждого объекта.
Хм ?)
мда на самом деле ЭЦП — как более лучший вариант
Ваша ЭЦП Ваших партнеров мало инетресует 😉 Работаем по старинке 🙁
Давно и я такое задумал, да все как-то не довелось. Довольно изящно реализовано. Респект!
в свое время написал конфу — «Создание левых сертефикатов качества».
С базой данных сертификационных центров, засветившихся в реальных сертах работников, сканами печатей и т.п.
очень помагает в работе… 🙂
жаль, что такие вещи выкладывать нельзя…
Такая проблемка. При выводе на принтер катинка с печатью теряет прозрачность и выводится в белом прямоугольнике. Что я делаю не так? :'(
(10)
У тебя на экране картинка прозрачная?
(11) Да. прозрачная.
(12) Не знаю чем помочь. Вероятно, платформа неправильно взаимодействует с драйвером принтера.
Можно попоровать мою html2image 😉 Как бы работает у ряда клиентов..
Подскажите! У меня что-то не работает. Ошибок никаких нет, вот только печать и подпись остается одна и таже, которую я ввел на макет. Или я как-то по-другому должен был вводить рисунки?
(15) Присылай свою обработку. Посмотрю.
Спасибо, разобрался уже. Только теперь другая проблема. На экран все выводится прекрасно. Только когда я сохраняю документ в формате PDF, то все картинки gif становятся с черной заливкой. Если же беру jpg, то из прозрачных они превращаются в непрозрачные. Был бы благодарен за интересную подсказку.
(17) Может проблема в программе, которая сохраняет в формате PDF?
(17) У меня была та же проблема. Как оказалось, виновна не платформа, а драйвер принтера. Методом перебора установили, что на ХП лазерджет 1100 и на каком-то Коника печатает нормально, а вот на Ксероксе — черная заливка.
спасибо большое!
(18) Подскажите, почему такая ошибка вылезает ..
{РегистрСведений.Изображения.Форма.ФормаСписка(20,3)}: Переменная не определена (РегистрСведенийМенеджерЗаписи)
<<?>>РегистрСведенийМенеджерЗаписи.Изображение = Новый ХранилищеЗначения(ВыбранноеФото);
{РегистрСведений.Изображения.Форма.ФормаСписка(27,13)}: Переменная не определена (РегистрСведенийМенеджерЗаписи)
Картинка = <<?>>РегистрСведенийМенеджерЗаписи.Изображение.Получить();
(21) РегистрСведенийМенеджерЗаписи — это реквизит формы типа РегистрСведенийМенеджерЗаписи.Изображения.
У тебя такого реквизита нет, либо он имеет другой идентификатор.
(22) А можно по подробнее, а то у меня такая же ошибка. Помгите, напишите подробнее что мне делать.
(22) А под 8.2 для БУХ 2.0 данная статья будет адаптирована?
Подскажите уважаемый poppy, почему после отправки счета с вставленной подписью и печатью из УТ 10.3 она приходит получателю с «невозможно отобразить рисунок» Подпись и печать вставлены в формате .jpeg ❓
Добрый день!
Помогите разобраться новичку…
Выдает следующую ошибку
{Документ.СчетНаОплатуПокупателю(525,33)}: Переменная не определена (Шапка)
РегИзображения.Объект = <<?>>Шапка.Организация; (Проверка: Толстый клиент (обычное приложение))
{Документ.СчетНаОплатуПокупателю(535,64)}: Переменная не определена (Шапка)
мСведенияОбОрганизации = ПолучитьСведенияОбОрганизации(<<?>>Шапка.Организация, Шапка.Дата, СписокПоказателей); (Проверка: Толстый клиент (обычное приложение))
{Документ.СчетНаОплатуПокупателю(535,83)}: Переменная не определена (Шапка)
мСведенияОбОрганизации = ПолучитьСведенияОбОрганизации(Шапка.Организация, <<?>>Шапка.Дата, СписокПоказателей); (Проверка: Толстый клиент (обычное приложение))
{Документ.СчетНаОплатуПокупателю(535,34)}: Процедура или функция с указанным именем не определена (ПолучитьСведенияОбОрганизации)
мСведенияОбОрганизации = <<?>>ПолучитьСведенияОбОрганизации(Шапка.Организация, Шапка.Дата, СписокПоказателей); (Проверка: Толстый клиент (обычное приложение))
Конфигурация торговля 10.3.
что не так?
(26) Черным по белому написано — шапка не определенна, скорее всего это результат запроса, он у тебя есть?
Есть такая утилита.
http://docland.ru/node/34
Конвертирует доки (счета) в PDF;
По ИНН-у организации подбирает соответствующее изображение подписи печати, которую надо шлепнуть в счет;
Автоматом создает е-mail, куда вставляет адрес клиента, полученный PDF со счетом подписанного документа, типовое обращение.
Работает как внешняя утилита при печати счета на виртуальный принтер.
Соответственно, работает хоть с 1С8, 7.7, SAP или Word.
странная и стремная необходимость печатать печати и подписей бухгалтеров…
ладно бы логотип фирмы и шапку исходящего документа…
и почему не используются стандартная для всех конфигураций схема со справочником «Хранилище дополнительной информации» — был создан подобный регистр?!
реально пригодится при формировании актов сверок с 1000 контрагентов:)
Очень нужная статья! спасибо!
Да на данный момент тема актуальна, т.к. сверки надо делать.
Хотя лучше мень вмешиваться в конфу, а то потом замучаешься обновлять, есть печальный опыт.
Хотелось сделать как лучше бухам, а теперь куча проблемм в итоге.
Спасибо.
Очень нужная в данный момент статья! спасибо большое!
Если использовать справочник «ХранилищеДополнительнойИнформации», который присутствует в типовых конфигурациях, тогда и снимать с поддержки конфигурацию нет необходимости.
Показать