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