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

22.01.24

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

    КонецЕсли;
	

 

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

См. также

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

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

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

2400 руб.

29.06.2020    17200    23    4    

37

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

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

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

27.12.2023    11691    776    elcoan    47    

108

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

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

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

2 стартмани

10.04.2023    10221    157    acces969    31    

120

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

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

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

1 стартмани

05.07.2022    4216    kalyaka    4    

31

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

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

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

6000 руб.

18.01.2022    9111    1    2    

6

Программный интерфейс для доработки форм

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

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    10020    AtamanovYS    19    

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