Каталог решений - Добавление факсимиле/логотипа в готовую печатную форму (УТ 11)

Добавление факсимиле/логотипа в готовую печатную форму (УТ 11)

Добавление факсимиле/логотипа в готовую печатную форму (УТ 11)

В наличии

Как вставить в любую уже сформированную форму логотип или факсимиле.

Категория:

Описание

В общем, встала как-то задача, что надо "сделать ТОРГ-12 с факсимиле". Вопрос "зачем" не рассматривался, а, сами понимаете, изменить имеющуюся стандартную форму, чтобы туда можно было вставлять факсимиле нужной организации — дело крайне неблагодарное. Ну и решил я зайти с другой стороны.

Речь идет об Управлении торговлей 11, но, в целом это применимо с небольшими доработками и на бухгалтерию, и на унф и т.д. 

Есть общая форма "ПечатьДокументов", туда в конечном итоге отправляются все печатные формы, сформированные через стандартный механизм печати, значит там и будем и мучать. Я добавил ее в расширение, чтобы не снимать ее с поддержки.

Сам ТабличныйДокумент лежи в переменной "ТекущаяПечатнаяФорма".

Первое — надо получить список имеющихся в системе логотипов и факсимиле:

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

Таким образом получили список с имеющимися факсимиле/логотипами. Далее добавляем кнопку на форму, называем ее, скажем "Факсимиле" и вешаем обработчик, в котором просим пользователя выбрать, что он хочет вставить:

  &НаКлиенте
  Процедура _факсимилеВместо(Команда)
  	врСписокФайлов 	= ФайлыОрганизаций();
  	врОповещение = Новый ОписаниеОповещения("_ПослеВыбораРисунка", ЭтотОбъект);
  	врСписокФайлов.ПоказатьВыборЭлемента(врОповещение,"Выберите изображение");	
  КонецПроцедуры
  
  &НаКлиенте
  Процедура _ВыбораРисунка(Элемент, Параметры) Экспорт
      Если Элемент <> Неопределено Тогда
          врФайл = Элемент.Значение;
  		врКартинка = новый Картинка(врФайл.Данные);
  		врРисунок = ТекущаяПечатнаяФорма.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
  		врРисунок.Картинка = врКартинка;
  		врРисунок.Высота = 40; 
  		врРисунок.Ширина = 40;
  		врРисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
  		врРисунок.ГраницаСверху = Ложь;
  		врРисунок.ГраницаСлева = Ложь;
  		врРисунок.ГраницаСправа = Ложь;
  		врРисунок.ГраницаСнизу = Ложь;
  		//__ чтобы прозрачный рисунок остался прозрачным
  		врРисунок.ЦветФона = новый Цвет(); 
      КонецЕсли;
  КонецПроцедуры

Тестировалось все это на 

1С:Предприятие 8.3 (8.3.17.1549)

Управление торговлей, редакция 11 (11.4.13.51) 

has been added to your cart:
Оформление заказа