Программный вывод на печать документов с факсимиле в 1С:Бухгалтерии 3.0 на примере акта сверки взаиморасчетов

22.01.24

Разработка - Работа с интерфейсом

В новых программных продуктах 1С появился механизм прикрепления подписей и печатей, без необходимости изменения печатных форм. В новой БП 3.0, наряду с актами взаиморасчетов и счетами, появилась возможность ставить факсимиле и на других печатных формах. Однако, данный механизм не очевиден, когда речь заходит о программном формировании документов. Данная публикация поможет программисту написать обработку, получающую табличный документ с факсимиле без доработки конфигурации.

Всем доброго дня.

Поставили мне задачу массово напечатать/сохранить/разослать акты сверок.

Не думал, что данная задача когда-нибудь отнимет у меня столько времени, однако современные продукты от 1С умеют удивлять. Казалось бы, выведи печатную форму через менеджер и дело с концом. И там же, скорее всего, признак печати факсимиле "да/нет" ...

Однако, если с первой частью действительно особо хлопот не возникло, то вот понять замысел разработчиков с системой "факсимиле" мне так и не удалось.

После нескольких часов реверс инжиниринга отладки, алгоритм вырисовался такой: в печатной форме есть встроенные картинки с поименованными областями. Мы их все запомним, а потом... УДАЛИМ. А вместо этого добавим область с расшифровкой в виде временной ссылки на структуру, в которой будет информация о том, что здесь когда-то была такая-то область с ее геометрическими размерами и расположением. И если вы хотите вернуть все обратно, будьте добры  - восстановите из структуры картинки, их размещение, и тогда вы получите свои факсимиле и печати.

При этом, если честно, писать особо ничего не пришлось. Я просто скопировал одну функцию и одну процедуру из общего модуля УправлениеПечатьюБП и вызвал их.

Самое главное - это можно сделать во внешней обработке и никак не изменять бухгалтерскую конфу.

Возможно, кому-то сэкономит время.

Собственно код:


Функция МассивИменПоказателейФаксимиле()
	
	МассивИменПоказателей = Новый Массив;
	МассивИменПоказателей.Добавить("ФаксимилеПечать");
	МассивИменПоказателей.Добавить("ФаксимилеПечатьПредприниматель");
	МассивИменПоказателей.Добавить("ФаксимилеРуководитель");
	МассивИменПоказателей.Добавить("ФаксимилеРуководительНакладная");
	МассивИменПоказателей.Добавить("ФаксимилеПредприниматель");
	МассивИменПоказателей.Добавить("ФаксимилеГлавныйБухгалтер");
	МассивИменПоказателей.Добавить("ФаксимилеОтветственныйЗаОформление");
	МассивИменПоказателей.Добавить("ФаксимилеИсполнитель");
	МассивИменПоказателей.Добавить("ФаксимилеИсполнительНакладнаяУслуги");
	МассивИменПоказателей.Добавить("ФаксимилеИсполнительНакладнаяМатериалы");
	МассивИменПоказателей.Добавить("ФаксимилеКладовщик");
	МассивИменПоказателей.Добавить("ФаксимилеДоверенноеЛицо");
	// для совместимости - подвал Счета
	МассивИменПоказателей.Добавить("ФаксимильнаяПечать");
	МассивИменПоказателей.Добавить("ФаксимильнаяПечатьПредприниматель");
	
	Возврат МассивИменПоказателей;
	
КонецФункции

Процедура УправлениеКартинкойФаксимиле(РабочаяПечатнаяФорма, МассивИменПоказателей, Добавить = Истина)
	
	МассивИменОбластей = Новый Массив;
	Для Каждого ОбластьМакета ИЗ РабочаяПечатнаяФорма.Области Цикл
		Если СтрНайти(ОбластьМакета.Имя, "РасшифровкаФаксимилеМакета") <> 0 Тогда
			МассивИменОбластей.Добавить(ОбластьМакета.Имя);
		КонецЕсли;
	КонецЦикла;
	
	ЦветФонаБелый = Новый Цвет(255,255,255);
	ЦветФонаАвто  = Новый Цвет();
	
	Для Каждого ИмяОбластиМакета ИЗ МассивИменОбластей Цикл
		
		ОбластьМакета = РабочаяПечатнаяФорма.Области[ИмяОбластиМакета];
		Если НЕ ЭтоАдресВременногоХранилища(ОбластьМакета.Расшифровка) Тогда
			Продолжить;
		КонецЕсли;
		
		ДанныеФаксимиле = ПолучитьИзВременногоХранилища(ОбластьМакета.Расшифровка);
		Если ТипЗнч(ДанныеФаксимиле) <> Тип("Структура") Тогда
			Продолжить;
		КонецЕсли;
		
		Для Каждого ЗначениеПоказателя ИЗ МассивИменПоказателей Цикл
			
			Если НЕ ДанныеФаксимиле.Свойство(ЗначениеПоказателя) Тогда
				Продолжить;
			КонецЕсли;
			
			СтруктураЗначений = ДанныеФаксимиле[ЗначениеПоказателя];
			
			ИмяОбластиФаксимиле = ЗначениеПоказателя + "_" + СтруктураЗначений.ОбластьВладелец;
			
			АдресКартинки = СтруктураЗначений.ДанныеКартинки;
			
			Если Добавить И ЗначениеЗаполнено(АдресКартинки) Тогда
				
				ОбластьКартинки = РабочаяПечатнаяФорма.Области[СтруктураЗначений.ОбластьВладелец];
				
				РисунокТабличногоДокумента = РабочаяПечатнаяФорма.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
				РисунокТабличногоДокумента.Имя = ИмяОбластиФаксимиле;
				РисунокТабличногоДокумента.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
				РисунокТабличногоДокумента.РазмерКартинки = РазмерКартинки.Пропорционально;
				РабочаяПечатнаяФорма.Рисунки[РисунокТабличногоДокумента.Имя].Картинка = ПолучитьИзВременногоХранилища(АдресКартинки);
				РабочаяПечатнаяФорма.Рисунки[РисунокТабличногоДокумента.Имя].Расположить(ОбластьКартинки);
				РабочаяПечатнаяФорма.Рисунки[РисунокТабличногоДокумента.Имя].Верх           = СтруктураЗначений.Верх;
				РабочаяПечатнаяФорма.Рисунки[РисунокТабличногоДокумента.Имя].Лево           = СтруктураЗначений.Лево;
				РабочаяПечатнаяФорма.Рисунки[РисунокТабличногоДокумента.Имя].Высота         = СтруктураЗначений.Высота;
				РабочаяПечатнаяФорма.Рисунки[РисунокТабличногоДокумента.Имя].Ширина         = СтруктураЗначений.Ширина;
				Если СтрНайти(РисунокТабличногоДокумента.Имя, "ФаксимильнаяПечать") > 0 Тогда
					РабочаяПечатнаяФорма.Рисунки[РисунокТабличногоДокумента.Имя].ЦветФона   = ЦветФонаБелый;
				Иначе
					РабочаяПечатнаяФорма.Рисунки[РисунокТабличногоДокумента.Имя].ЦветФона   = ЦветФонаАвто;
				КонецЕсли;
			Иначе
				
				Если РабочаяПечатнаяФорма.Области.Найти(ИмяОбластиФаксимиле) <> Неопределено Тогда
					РабочаяПечатнаяФорма.Рисунки.Удалить(ИмяОбластиФаксимиле);
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЦикла
		
	КонецЦикла;
	
КонецПроцедуры

Получение табличного документа с факсимиле (СсылкаНаДокумент):

    ПечатьСПодписями = истина;

    МассивДокументов = Новый Массив();

    МассивДокументов.Добавить(СсылкаНаДокумент);

    ПараметрыПечати = Новый Структура();

    ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы("Документ.АктСверкиВзаиморасчетов", "АктСверки", МассивДокументов, ПараметрыПечати); 

    Коллекция = ПечатныеФормы.КоллекцияПечатныхФорм;

    Если Коллекция.Количество() тогда

        ТабличныйДокумент = Коллекция[0].ТабличныйДокумент;

		УправлениеКартинкойФаксимиле(ТабличныйДокумент,МассивИменПоказателейФаксимиле(),ПечатьСПодписями)

        возврат ТабличныйДокумент;

    КонецЕсли;
	

 

программная печать с факсимиле бух3.0

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62985    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18854    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10224    7    7    

10

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

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    16796    mrXoxot    43    

121

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

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    7349    smielka    37    

100

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    14787    913    elcoan    47    

117

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    11913    162    acces969    31    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. unknown181538 158 20.05.24 19:33 Сейчас в теме
Как я понимаю, потеряло актуальность?
2. imordik 01.07.24 15:59 Сейчас в теме
Хоть статья от 24 года, но походу не актуально. Мне сейчас клиент говорит сделай рассылку, я сделал, а потом, а нам с факсимиле надо. Казалось бы флажок поставил и всё - а его нет. Нашел в форме ПечатьДокументов процедуру ДобавитьПодписьИПечать() - но как связать результат пока без печатей с этим кодом, чтобы они были пока не знаю, найду отпишусь.
3. shiaju 25 01.07.24 20:12 Сейчас в теме
К сожалению, перестало работать после последних обновлений
4. imordik 04.07.24 08:29 Сейчас в теме
Сейчас отработало на Бухгалтерия предприятия, редакция 3.0 (3.0.150.33). Код формирует из общего модуля табличный документ (УправлениеПечатью.СформироватьПечатныеФормы()) + дополняет Факсимиле (код частично взят из формы ПечатьДокументов, процедура ДобавитьПодписьИПечать()):
ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, Новый Структура, Неопределено);
Для каждого СтрокаПф из ПечатныеФормы.КоллекцияПечатныхФорм цикл					
	Для Каждого Документ из ПечатныеФормы.ОбъектыПечати цикл
		ПараметрыВывода = Новый Структура;
		ОписаниеФормы 	 = Новый Структура;
		ОписаниеФормы.Вставить("Документ",         ПечататьДокумент.Документ); 
		ТБД = СтрокаПф .ТабличныйДокумент.ПолучитьОбласть(Документ.Представление); //<<<<--- Тут печатная форма без факсимиле (например, Счет или УПД) 

		//КОД ДОБАВЛЕНИЯ ФАКСИМИЛЕ В УЖЕ СФОРМИРОВАННЫЙ ТАБЛИЧНЫЙ ДОКУМЕНТ (ТБД)
		ПодписиИПечатиОбластей = УправлениеПечатью.ПодписиИПечатиОбластей(ПечатныеФормы.ОбъектыПечати, ПараметрыВывода);     
		ПодписиИПечати = Неопределено;   													
		ДанныеПечатиРисунковТабличногоДокумента = УправлениеПечатью.ПодписиИПечатиТабличногоДокумента(ПечатныеФормы.ОбъектыПечати, ТБД, "");
		Для Каждого ПодписиИПечатиОбласти Из ПодписиИПечатиОбластей Цикл
			ИмяОбласти = ПодписиИПечатиОбласти.Ключ;
			Если ДанныеПечатиРисунковТабличногоДокумента[ИмяОбласти] = Неопределено Тогда
				ДанныеПечатиРисунковТабличногоДокумента[ИмяОбласти] = Новый Соответствие();
			КонецЕсли;
		        Для Каждого Элемент Из ПодписиИПечатиОбласти.Значение Цикл
			         ДанныеПечатиРисунковТабличногоДокумента[ИмяОбласти][Элемент.Ключ] = Элемент.Значение;
		        КонецЦикла;
		КонецЦикла;	
		УправлениеПечатью.ДобавитьПодписьИПечать(ТБД, ДанныеПечатиРисунковТабличногоДокумента);      
			
                 // Далее уже что угодно можете делать с готовым табличным документом

Показать
5. rmarkovych 29 30.09.24 17:18 Сейчас в теме
(4) Спасибо тебе, мил-человек!!! Сэкономил кучу времени и полведра нервных окончаний ;-)
Оставьте свое сообщение