Код 1C v 8.х
&НаСервере
Функция ПолучитьДанныеМакета()
АдресХранилища = Новый УникальныйИдентификатор( ) ;
Макет = ПолучитьОбщийМакет( "Договор" ) ;
ВременныйФайл = ПолучитьИмяВременногоФайла( "doc" ) ;
Макет. Записать( ВременныйФайл) ;
Адрес = ПоместитьВоВременноеХранилище( Новый ДвоичныеДанные( ВременныйФайл) , АдресХранилища) ;
УдалитьФайлы( ВременныйФайл) ;
Возврат Адрес;
КонецФункции
&НаСервере
Функция КодПользователя(Пользователь)
Возврат СокрЛП( Пользователь. Сотрудник. Код) ;
КонецФункции
&НаКлиенте
Процедура ПечатьДоговора(Ссылка,РеквизитыДляПечати)
Пользователь = ОбщегоНазначения. ТекущийПользователь( ) ;
Каталог = КаталогВременныхФайлов( ) ;
Каталог = ? ( Прав( Каталог, 1 ) = "\" , Каталог, Каталог+ "\" ) ;
ПолноеИмяФайла = Каталог+ "Договор_" + КодПользователя( Пользователь) + ".doc" ;
Попытка
Индификатор = ПолучитьДанныеМакета( ) ;
МакетДоговора = ПолучитьИзВременногоХранилища( Индификатор) ;
МакетДоговора. Записать( ПолноеИмяФайла) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
КонецПопытки ;
Попытка
MSWord = Новый COMОбъект( "Word.Application" ) ;
Исключение
Сообщить( "Ошибка при попытке создать объект "" MS Word"" !" + Символы. ПС +
"Возможно приложение "" MS Word"" не установлено или установлено неправильно." , СтатусСообщения. Внимание) ;
КонецПопытки ;
MSWord. Documents. Open( ПолноеИмяФайла) ;
Попытка
Документ = MSWord. Application. Documents( 1 ) ;
Документ. Activate( ) ;
Исключение
Сообщение = Новый СообщениеПользователю( ) ;
Сообщение. Текст = ОписаниеОшибки( ) ;
Сообщение. Сообщить( ) ;
MSWord. Application. Quit( ) ;
Возврат ;
КонецПопытки ;
Попытка
Замена = Документ. Content. Find;
Замена. Execute( "{ЧтоМеняем}" , Ложь , Истина , Ложь , , , Истина , , Ложь , "На что меняем" ) ;
Исключение
КонецПопытки ;
MSWord. Application. Visible = Истина ;
MSWord. Activate( ) ;
КонецПроцедуры
Во многих организациях сформированные отчеты заверяют подписями.
В данном примере я покажу как можно вывести подписи для типового отчета ЗУП Свод начислений.
Для начала создадим макет в котором и разместим подписи, макет я создам общий, т.к. он будет использоваться и в других отчетах.
Макет такой:
Открываем Отчет СводНачисленнойЗарплатыОрганизаций, открываем Форму и ищем процедуру
ОбновитьОтчет()
После
Код 1C v 8.х СформироватьОтчет( ЭлементыФормы. Результат, ДанныеРасшифровки) ;
добавляем вывод подписей
Код 1C v 8.х Макет = ПолучитьОбщийМакет( "МакетПодписи" ) ;
ОбластьВывести = Макет. ПолучитьОбласть( "Подпись" ) ;
ЭлементыФормы. Результат. Вывести( ОбластьВывести) ;
Полный код процедуры ОбновитьОтчет()
Код 1C v 8.х Процедура ОбновитьОтчет() Экспорт
СостояниеМодифицированности = Модифицированность;
Если ПанельНастроекНарисована < > Истина Тогда
ОбновлениеОтображения( ) ;
КонецЕсли ;
ТиповыеОтчеты. ЗагрузитьВРеквизитЗначенияНастроекПанелиПользователя( ЭтотОбъект, ЭтаФорма) ;
ПараметрыПанели = ТиповыеОтчеты. ПолучитьПараметрыПанелиПользователяОбъекта( ОтчетОбъект) ;
ЗначенияНастроек = ТиповыеОтчеты. ПолучитьЗначенияНастроекПанелиПользователяОбъекта( ОтчетОбъект) ;
Отказ = ложь ;
ТиповыеОтчеты. ПроверитьЗначенияПараметров( ЗначенияНастроек, ПараметрыПанели, Отказ) ;
Если Отказ тогда
Возврат ;
КонецЕсли ;
РежимформированияОтчета = НЕ ЭтоОтработкаРасшифровки;
СформироватьОтчет( ЭлементыФормы. Результат, ДанныеРасшифровки) ;
Макет = ПолучитьОбщийМакет( "МакетПодписи" ) ;
ОбластьВывести = Макет. ПолучитьОбласть( "Подпись" ) ;
ЭлементыФормы. Результат. Вывести( ОбластьВывести) ;
УправлениеОтчетами. УстановитьКолонтитулыПоУмолчанию( ЭлементыФормы. Результат, Заголовок, Строка( ПараметрыСеанса. ТекущийПользователь) ) ;
Модифицированность = СостояниеМодифицированности;
КонецПроцедуры
Обработка
ПечатьЭтикеток использует компоненту "1С:Печать штрихкодов"(доступную на диске ИТС) для печати штрих-кодов(далее ШК). Эта компонента поддерживает следующие типы штрих-кодов: EAN8, EAN13, EAN128, Code39, Code128.
Что делать если на предприятии используется отличный ШК, например Interleave 2 of 5, для которго есть системный шрифт @IDAutomationSHI25M, используемый для вывода ШК на экран или на принтер.
Рассмотрим как проще всего добавить поддержку этого типа ШК в обработке
ПечатьЭтикеток .
Первым делом скопируем общий макет Этикетка в макет для вывода нашего штрих-кода ЭтикеткаInterleave. В этом макете надо удалить элемент управления, связанный с компонентой "1С:Печать штрихкодов". И оформить центральное поле как параметр табличного документа ШтрихКод, выводимый шрифтом @IDAutomationSHI25M.
Далее разрешаем запуск обработки даже с неустановленной компонентой т.к. для вывода нашего ШК компонента не нужна. Для этого комментируем строчку в модуле формы обработки:
Код 1C v 8.х Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Попытка
КомпонентШК = Новый COMОбъект( "V8.Barcod.1" ) ;
Макет = ПолучитьОбщийМакет( "Этикетка" ) ;
ЭтикеткаОбласть = Макет. ПолучитьОбласть( 1 , 1 , 4 , 2 ) ;
ЭтикеткаОбласть. Рисунки. Штрихкод. Объект. Сообщение = "1111111111116" ;
Исключение
Сообщить( "Компонента 1С:Печать штрихкодов не установлена на данном компьютере!
|Возможна печать только штрих-кодов Interleave!" , СтатусСообщения. Важное) ;
КонецПопытки ;
КонецПроцедуры
В общем модуле УправлениеРозничнойТорговлей также есть место проверки на компоненту
Код 1C v 8.х #Если Клиент Тогда
Процедура ПечатьЭтикеток(Товары = Неопределено) Экспорт
В обработке есть место, где выполняется проверка типа ШК. Наш ШК сейчас не пройдет проверку и печать выполнена не будет. Чтоб печать выполнялась необходимо исправить функцию в общем модуле УправлениеРозничнойТорговлей.
Код 1C v 8.х
Функция ПолучитьЗначениеТипаШтрихкодаДляЭУ(ТипКода) Экспорт
Перем Значение;
Если ТипКода = ПланыВидовХарактеристик. ТипыШтрихкодов. EAN8 Тогда
Значение = 0 ;
ИначеЕсли ТипКода = ПланыВидовХарактеристик. ТипыШтрихкодов. EAN13 Тогда
Значение = 1 ;
ИначеЕсли ТипКода = ПланыВидовХарактеристик. ТипыШтрихкодов. EAN128 Тогда
Значение = 2 ;
ИначеЕсли ТипКода = ПланыВидовХарактеристик. ТипыШтрихкодов. Code39 Тогда
Значение = 3 ;
ИначеЕсли ТипКода = ПланыВидовХарактеристик. ТипыШтрихкодов. Code128 Тогда
Значение = 4 ;
ИначеЕсли ТипКода = ПланыВидовХарактеристик. ТипыШтрихкодов. Interleave20FS Тогда
Значение = 100 ;
Иначе
Значение = - 1 ;
КонецЕсли ;
Возврат Значение;
КонецФункции
Мы на завершающем этапе, вносим изменения непосредственно в обработку.
Код 1C v 8.х Процедура Печать(ТаблицаТоваров) Экспорт
флВремЕстьInterleave = Ложь ;
флВремЕстьНеInterleave = Ложь ;
Для Каждого СтрокаИзСписка Из ТаблицаТоваров Цикл
Если СтрокаИзСписка. ТипШтрихкода = ПланыВидовХарактеристик. ТипыШтрихкодов. Interleave20FS Тогда
флВремЕстьInterleave = Истина ;
Иначе
флВремЕстьНеInterleave = Истина ;
КонецЕсли ;
Если флВремЕстьInterleave и флВремЕстьНеInterleave Тогда
Предупреждение( "В списке одновременно встречаются штрих-коды несовместимых типов,
|Штрих-коды Interleave необходимо печатать отдельно от остальных!" ) ;
Возврат ;
КонецЕсли ;
КонецЦикла ;
Таб = Новый ТабличныйДокумент;
Таб. ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка" + СокрЛП( ИмяКомпьютера( ) ) ;
Если флВремЕстьInterleave Тогда
Макет = ПолучитьОбщийМакет( "ЭтикеткаInterleave" ) ;
Иначе
Макет = ПолучитьОбщийМакет( "Этикетка" ) ;
КонецЕсли ;
Если Не флВремЕстьInterleave Тогда
РисунокШтрихкод = ЭтикеткаОбласть. Рисунки. Штрихкод;
КонецЕсли ;
Если Не флВремЕстьInterleave Тогда
РисунокШтрихкод. Расположить( ОбластьШтрихкод) ;
КонецЕсли ;
Если УправлениеРозничнойТорговлей. ПроверитьШтрихКод( СтрокаИзСписка. ШтрихКод,
СтрокаИзСписка. ТипШтрихкода) Тогда
Если флВремЕстьInterleave Тогда
ЭтикеткаОбласть. Параметры. Установить( 0 ,
СформироватьШтрихКодДляМакетаЭтикеткаInterleave( СтрокаИзСписка. ШтрихКод) ) ;
ЭтикеткаОбласть. Области. ОбластьШтрихкод. Шрифт =
Новый Шрифт( ЭтикеткаОбласть. Области. ОбластьШтрихкод. Шрифт, , РезмерШрифтаInterleave) ;
Иначе
Попытка
ЭтикеткаОбласть. Рисунки. Штрихкод. Объект. ТипКода = ТипКода;
ЭтикеткаОбласть. Рисунки. Штрихкод. Объект. Сообщение = СтрокаИзСписка. ШтрихКод;
Исключение
КонецПопытки ;
КонецЕсли ;
Последний штрих это добавить регулятор размера шрифта (в коде переменная РезмерШрифтаInterleave) на форму обработки:
источник