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

22.01.24

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

    КонецЕсли;
	

 

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

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

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

6000 руб.

16.01.2015    62114    43    59    

81

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54703    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16909    22    4    

36

Новогоднее оформление для 1С

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

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

27.12.2023    11185    762    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9895    153    acces969    31    

119

Модель состояния для MVC

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

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3946    kalyaka    4    

29

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12302    1    5    

10

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

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

6000 руб.

18.01.2022    8957    1    2    

6
Оставьте свое сообщение