Любой отчет и обработку можно подключить пользователям как дополнительные отчеты или обработки, вот например пункт в БП - Банк:
Добавление происходит через
далее Дополнительные отчеты и обработки , в списке нажмите Создать и Выберите Файл отчета/обработки:
Перед добавлением файл нужно подготовить, дописать в модуль объекта код подключения:
Для обработок код:
Код 1C v 8.3 Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
ПараметрыРегистрации. Вставить( "Назначение" , Новый СписокЗначений) ;
ПараметрыРегистрации. Вставить( "Наименование" , "Сравнение документов БУХ и УТ" ) ;
ПараметрыРегистрации. Вставить( "Версия" , "1.0" ) ;
ПараметрыРегистрации. Вставить( "БезопасныйРежим" , Истина ) ;
ПараметрыРегистрации. Вставить( "Информация" , "" ) ;
ПараметрыРегистрации. Вставить( "Команды" , Новый СписокЗначений) ;
ТаблицаКоманд = ПолучитьТаблицу_Команд( ) ;
ДобавитьКоманду( ТаблицаКоманд,
"Сравнение документов БУХ и УТ" ,
"Сравнение документов БУХ и УТ" ,
"ОткрытиеФормы" ,
Ложь ,
"" ) ;
ПараметрыРегистрации. Вставить( "Команды" , ТаблицаКоманд) ;
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицу_Команд()
Команды = Новый ТаблицаЗначений;
Команды. Колонки. Добавить( "Представление" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Идентификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Использование" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "ПоказыватьОповещение" , Новый ОписаниеТипов( "Булево" ) ) ;
Команды. Колонки. Добавить( "Модификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "" )
НоваяКоманда = ТаблицаКоманд. Добавить( ) ;
НоваяКоманда. Представление = Представление;
НоваяКоманда. Идентификатор = Идентификатор;
НоваяКоманда. Использование = Использование;
НоваяКоманда. ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда. Модификатор = Модификатор;
КонецПроцедуры
Для отчетов и печатных форм меняйте параметр Вид :
Код 1C v 8.3
ПараметрыРегистрации. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
Возможные значения этого поля приведу в виде таблицы
Значение поля "Вид" Расположение команды
Расширение
файла
ПечатнаяФорма В меню "Печать" на форме объекта или списка epf ЗаполнениеОбъекта В меню "Заполнить" на форме объекта или списка epf СозданиеСвязанныхОбъектов В меню "Создать на основании" - "Создание связанных объектов.." на форме объекта или списка epf Отчет В меню "Отчеты" на форме объекта или списка erf ДополнительнаяОбработка В списке соответствующих подсистем в меню "Сервис" - "Дополнительные обработки" epf ДополнительныйОтчет В списке соответствующих подсистем в меню "Сервис" - "Дополнительные отчеты" erf
Это поле может принимать одно из значений, возвращаемых функциями в типовых конфигурациях:
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<Вид>(). Например, для вида "ПечатнаяФорма" есть функция ВидОбработкиПечатнаяФорма().
Необходимо при печати, если происходит переход на следующую страницу таблицы, выводить шапку таблицы вверху на новой странице.
для печати шапки на каждой странице в языке программирования есть специальный метод - ПовторятьПриПечатиСтроки
Примеры его использования:
Код 1C v 8.х ТабДок. ПовторятьПриПечатиСтроки = ТабДок. Область( 1 , , 2 , ) ;
ЭлементыФормы. Поле_ТД. ПовторятьПриПечатиСтроки = Макет. Область( "Шапка_Спецификации" ) ;
ЭлементыФормы. Поле_ТД. ПовторятьПриПечатиСтроки = Макет. Область( "R777:R778" ) ;
Полный код вывода табличного документа с повторением шапки на каждой странице:
Код 1C v 8.х Функция ПечатьПриказаТ11а()
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент. ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПечатнаяФорма_МатериальнаяПомощь_Т11а" ;
ТабДокумент. ПовторятьПриПечатиСтроки = ТабДокумент. Область( "R21:R22" ) ;
Макет = ПолучитьМакет( "Т11а" ) ;
ОбластьМакетаШапкаДокумента = Макет. ПолучитьОбласть( "Шапка" ) ;
ОбластьПовторятьПриПечати = Макет. ПолучитьОбласть( "ПовторятьПриПечати" ) ;
ОбластьМакетаСтрока = Макет. ПолучитьОбласть( "Строка" ) ;
ОбластьМакетаПодвал = Макет. ПолучитьОбласть( "Подвал" ) ;
ВыборкаДляШапкиДокумента = СформироватьЗапросДляШапкиДокумента( ) . Выбрать( ) ;
ВыборкаРаботники = СформироватьЗапросДляТабличнойЧасти( 1 ) . Выбрать( ) ;
Если ВыборкаРаботники. Количество( ) = 0 Тогда
ВыборкаРаботники = СформироватьЗапросДляТабличнойЧасти( 2 ) . Выбрать( ) ;
КонецЕсли ;
ВыводимыеОбласти = Новый Массив( ) ;
ВыводимыеОбласти. Добавить( ОбластьМакетаСтрока) ;
Пока ВыборкаДляШапкиДокумента. Следующий( ) Цикл
ОбластьМакетаШапкаДокумента. Параметры. Заполнить( ВыборкаДляШапкиДокумента) ;
ОбластьМакетаШапкаДокумента. Параметры. НазваниеОрганизации = СокрЛП( ОбластьМакетаШапкаДокумента. Параметры. НазваниеОрганизации) ;
КонецЦикла ;
ТабДокумент. Вывести( ОбластьМакетаШапкаДокумента) ;
ном= 0 ;
Пока ВыборкаРаботники. Следующий( ) Цикл
ОбластьМакетаСтрока. Параметры. Заполнить( ВыборкаРаботники) ;
ном= ном+ 1 ;
ОбластьМакетаСтрока. Параметры. ПодразделениеОрганизации = ВыборкаРаботники. ПодразделениеОрганизации. ПолноеНаименование( ) ;
ОбластьМакетаСтрока. Параметры. ном= ном;
ТабДокумент. Вывести( ОбластьМакетаСтрока) ;
КонецЦикла ;
ОбластьМакетаПодвал. Параметры. Заполнить( ВыборкаДляШапкиДокумента) ;
ТабДокумент. Вывести( ОбластьМакетаПодвал) ;
Если ТабДокумент. ВысотаТаблицы > 0 Тогда
Возврат УниверсальныеМеханизмы. НапечататьДокумент( ТабДокумент, 1 , Ложь , ОбщегоНазначения. СформироватьЗаголовокДокумента( СсылкаНаОбъект, "Приказ о поощрении работника " ) ) ;
КонецЕсли ;
КонецФункции
Как настроить Универсальный отчет?
Все настройки
универсального отчета описываются в процедуре
УстановитьНачальныеНастройки :
Код 1C v 8.х Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
УниверсальныйОтчет. ВариантОформления = СтандартноеОформление. Песок;
УниверсальныйОтчет. мНазваниеОтчета = СокрЛП( ЭтотОбъект. Метаданные( ) . Синоним) ;
УниверсальныйОтчет. мВыбиратьИмяРегистра = Ложь ;
УниверсальныйОтчет. ИмяРегистра = "-" ;
УниверсальныйОтчет. ОтрицательноеКрасным = Истина ;
УниверсальныйОтчет. ВыводитьОбщиеИтоги = Истина ;
УниверсальныйОтчет. ВыводитьДетальныеЗаписи = Ложь ;
УниверсальныйОтчет. мВыбиратьИспользованиеСвойств = Истина ;
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| CRM_ПредложенияОбороты.Номенклатура КАК Номенклатура,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.Номенклатура) КАК НоменклатураПредставление,
| CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатурыПредставление,
| CRM_ПредложенияОбороты.Контрагент КАК Контрагент,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.Контрагент) КАК КонтрагентПредставление,
| CRM_ПредложенияОбороты.ДокументПредложения КАК Документ,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ДокументПредложения) КАК ДокументПредставление,
| CRM_ПредложенияОбороты.ДокументПредложения.Ответственный КАК Ответственный,
| ПРЕДСТАВЛЕНИЕ(CRM_ПредложенияОбороты.ДокументПредложения.Ответственный) КАК ОтветственныйПредставление,
| CRM_ПредложенияОбороты.КоличествоОборот КАК КоличествоОборот,
| CRM_ПредложенияОбороты.СтоимостьОборот КАК СтоимостьОборот,
| 0 КАК СкидкаОборот,
| 1 КАК Количество,
| CRM_ПредложенияОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот
| //ПОЛЯ_СВОЙСТВА
| //ПОЛЯ_КАТЕГОРИИ
|{ВЫБРАТЬ
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| КоличествоОборот,
| СтоимостьОборот,
| СкидкаОборот,
| Количество,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}
|ИЗ
| РегистрНакопления.CRM_Предложения.Обороты(&ДатаНач, &ДатаКон, , ) КАК CRM_ПредложенияОбороты
|{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсточникИнформацииПриОбращении.СрезПоследних(&ДатаКон) КАК ИсточникиИнформацииПриОбращении
|ПО CRM_ПредложенияОбороты.Контрагент = ИсточникиИнформацииПриОбращении.Контрагент}
|//СОЕДИНЕНИЯ
|{ГДЕ
| CRM_ПредложенияОбороты.Контрагент.* КАК Контрагент,
| CRM_ПредложенияОбороты.Номенклатура.* КАК Номенклатура,
| CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
| CRM_ПредложенияОбороты.ДокументПредложения.Ответственный.* КАК Ответственный,
| CRM_ПредложенияОбороты.ДокументПредложения.* КАК Документ,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //УСЛОВИЯ_СВОЙСТВА
| //УСЛОВИЯ_КАТЕГОРИИ
|}
|{УПОРЯДОЧИТЬ ПО
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}
|
|ИТОГИ
| СУММА(КоличествоОборот),
| СУММА(СтоимостьОборот),
| СУММА(СтоимостьБезСкидокОборот - СтоимостьОборот) КАК СкидкаОборот,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ(Документ)) КАК Количество
|ПО
| ОБЩИЕ
|{ИТОГИ ПО
| Контрагент.*,
| Номенклатура.*,
| ХарактеристикаНоменклатуры.*,
| Ответственный.*,
| Документ.*,
| (ЕСТЬNULL(ИсточникиИнформацииПриОбращении.ИсточникИнформации,ЗНАЧЕНИЕ(Справочник.ИсточникиИнформацииПриОбращенииПокупателей.ПустаяСсылка))).* КАК ИсточникИнформации,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, ДЕНЬ) КАК ПериодДень,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, НЕДЕЛЯ) КАК ПериодНеделя,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, МЕСЯЦ) КАК ПериодМесяц,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, КВАРТАЛ) КАК ПериодКвартал,
| НАЧАЛОПЕРИОДА(CRM_ПредложенияОбороты.ДокументПредложения.Дата, ГОД) КАК ПериодГод
| //ПСЕВДОНИМЫ_СВОЙСТВА
| //ПСЕВДОНИМЫ_КАТЕГОРИИ
|}" ;
Если УниверсальныйОтчет. ИспользоватьСвойстваИКатегории Тогда
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.Номенклатура" , "Номенклатура" , "Номенклатура" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Справочник_Номенклатура) ;
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры" , "Характеристика номенклатуры" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Справочник_Номенклатура) ;
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.Контрагент" , "Контрагент" , "Контрагент" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Справочник_Номенклатура) ;
УниверсальныйОтчет. ДобавитьСвойстваИКатегорииДляПоля( "CRM_ПредложенияОбороты.ДокументПредложения" , "Документ" , "Коммерческое предложение" , ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. Документ_CRM_КоммерческоеПредложение) ;
УниверсальныйОтчет. ДобавитьВТекстЗапросаСвойстваИКатегории( ТекстЗапроса) ;
КонецЕсли ;
УниверсальныйОтчет. ПостроительОтчета. Текст = ТекстЗапроса;
УниверсальныйОтчет. мСтруктураПредставлениеПолей. Вставить( "ХарактеристикаНоменклатуры" , "Характеристика номенклатуры" ) ;
УниверсальныйОтчет. мСтруктураПредставлениеПолей. Вставить( "Документ" , "Коммерческое предложение" ) ;
УниверсальныйОтчет. мСтруктураПредставлениеПолей. Вставить( "ИсточникИнформации" , "Источник информации при обращении покупателя" ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "Количество" , "Количество документов" , Истина , "ЧЦ = 15 ; ЧДЦ = 3" ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "КоличествоОборот" , "Количество номенклатуры" , Истина , "ЧЦ = 15 ; ЧДЦ = 3" , , ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "СтоимостьОборот" , "Сумма" , Истина , "ЧЦ = 15 ; ЧДЦ = 2" ) ;
УниверсальныйОтчет. ДобавитьПоказатель( "СкидкаОборот" , "Скидка" , Истина , "ЧЦ = 15 ; ЧДЦ = 2" , , ) ;
УниверсальныйОтчет. ДобавитьИзмерениеСтроки( "Контрагент" ) ;
УниверсальныйОтчет. ДобавитьИзмерениеСтроки( "Номенклатура" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Контрагент" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Номенклатура" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Ответственный" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Документ" ) ;
УниверсальныйОтчет. УстановитьПредставленияПолей( УниверсальныйОтчет. мСтруктураПредставлениеПолей, УниверсальныйОтчет. ПостроительОтчета) ;
УниверсальныйОтчет. УстановитьТипыЗначенийСвойствДляОтбора( ) ;
УниверсальныйОтчет. УстановитьНачальныеНастройки( Ложь ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Контрагент" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Номенклатура" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Ответственный" ) ;
УниверсальныйОтчет. ДобавитьОтбор( "Документ" ) ;
УниверсальныйОтчет. мСтруктураФорматаПолей. Вставить( "ДатаВыполнения" , "ДЛФ=DDT" ) ;
УниверсальныйОтчет. мСтруктураФорматаПолей. Вставить( "ДатаФактическогоВыполнения" , "ДЛФ=DDT" ) ;
УниверсальныйОтчет. мМинимальнаяШиринаКолонкиПоказатель = 10 ;
УниверсальныйОтчет. мМаксимальнаяШиринаКолонки = 80 ;
КонецПроцедуры
Как настроить условное оформление в Универсальном отчете?
Выравнивание значений влево :
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "Номенклатура" , "Номенклатура" ) ;
ЭлементОформления. Область. Добавить( "Номенклатура" , "Номенклатура" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Лево;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры" ) ;
ЭлементОформления. Область. Добавить( "ХарактеристикаНоменклатуры" , "ХарактеристикаНоменклатуры" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Лево;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
УниверсальныйОтчет. мМинимальнаяШиринаКолонкиПоказатель = 7 ;
УниверсальныйОтчет. мМаксимальнаяШиринаКолонки = 50 ;
Изменение цвета текста и т.д.
Код 1C v 8.х
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ТребуетсяЗаказать" , "Требуется заказать" ) ;
ЭлементОформления. Область. Добавить( "Состояние" , "Состояние" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "Состояние" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = 0 ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Красный;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "Требуется заказать" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "РекомендуетсяЗаказать" , "Рекомендуется заказать" ) ;
ЭлементОформления. Область. Добавить( "Состояние" , "Состояние" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "Состояние" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = 1 ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Коричневый;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "Рекомендуется заказать" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "НеТребуетсяЗаказывать" , "Не требуется заказывать" ) ;
ЭлементОформления. Область. Добавить( "Состояние" , "Состояние" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "Состояние" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = 2 ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Зеленый;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "Не требуется заказывать" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ЗонаПоСумме" , "Зона По Сумме" ) ;
ЭлементОформления. Область. Добавить( "ЗонаПоСумме" , "ЗонаПоСумме" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "ЗонаПоСумме" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = "крас" ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветФона. Значение = WebЦвета. Красный;
ЭлементОформления. Оформление. ЦветФона. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ЗонаПоСумме" , "Зона По Сумме" ) ;
ЭлементОформления. Область. Добавить( "ЗонаПоСумме" , "ЗонаПоСумме" , ТипОбластиОформления. Поле) ;
ЭлементОтбора = ЭлементОформления. Отбор. Добавить( "ЗонаПоСумме" ) ;
ЭлементОтбора. ВидСравнения = ВидСравнения. Равно;
ЭлементОтбора. Значение = "зелн" ;
ЭлементОтбора. Использование = Истина ;
ЭлементОформления. Оформление. ЦветТекста. Значение = WebЦвета. Зеленый;
ЭлементОформления. Оформление. ЦветТекста. Использование = Истина ;
ЭлементОформления. Оформление. Шрифт. Значение = Новый Шрифт( , , Истина ) ;
ЭлементОформления. Оформление. Шрифт. Использование = Истина ;
ЭлементОформления. Оформление. Текст. Значение = "|||||||||||||||||" ;
ЭлементОформления. Оформление. Текст. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
Для типа «Дата»:
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "ДатаЗаписи" , "Дата записи" ) ;
ЭлементОформления. Область. Добавить( "ДатаЗаписи" , "Дата записи" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. Формат. Значение = "ДФ=dd.MM.yyyy" ;
ЭлементОформления. Оформление. Формат. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
Для типа «Булево»:
Код 1C v 8.х ЭлементОформления = УниверсальныйОтчет. ПостроительОтчета. УсловноеОформление. Добавить( "Печать" , "Печать" ) ;
ЭлементОформления. Область. Добавить( "Печать" , "Печать" , ТипОбластиОформления. Поле) ;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Значение = ГоризонтальноеПоложение. Центр;
ЭлементОформления. Оформление. Формат. Значение = «БЛ= Нет; БИ= Напечатан»;
ЭлементОформления. Оформление. ГоризонтальноеПоложение. Использование = Истина ;
ЭлементОформления. Использование = Истина ;
ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ
_
Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа:
1. Путем замены шаблонного текста в макете Wordа.
2. Путем вставки текста с помощью закладок в Wordе,
В первом случае сразу скажу, что длина строки передаваемая в функцию замены, довольно небольшая 255 символов, да и расстановка шаблонных выражений в макете Word занимает довольно много времени. Через процедуру Content.Find.Execute.
Во втором случае длина, насколько мне известно неограниченна, также воськаться с закладками намного быстрее и удобнее, чем расставлять шаблонный текст. Используя Bookmarks().S_elect(). Поэтому давайте на коде рассмотрим второй пример.
И так, для начала необходимо добавить Word макет к документу. Добавляем макет с помощью конструктора макетов указав Active document и выбрав соответствующий макет.
Называем его Акт. Открываем макет в 1Ске, ставим курсор в нужном месте, переходим в меню Вставка закладка нажимаем добавить закладку к примеру у меня это НарушенияТекст
Теперь кидаем на форму документа кнопку Сформировать и по нажатию на нее пишем код который открывает наш макет Word ищем закладку по имени и вставляет туда текст:
Код 1C v 8.х
СсылкаМакет = ПолучитьМакет( Акт) ;
MSWord = СсылкаМакет. Получить( ) ;
Попытка
СсылкаМакет = MSWord. Application. Documents( 1 ) ;
СсылкаМакет. Activate( ) ;
str = Новый COMОбъект( ADODB. Stream) ;
str. Open( ) ;
СтрочкаТаблицы = ЭлементыФормы. Нарушения. ТекущиеДанные;
Для Каждого СтрочкаТаблицы Из Нарушения Цикл
str. WriteText( + СтрочкаТаблицы. Описание + Нарушены требования СНИПФЗГОСТ: + СтрочкаТаблицы. СНИПФЗГОСТ + Статья: + СтрочкаТаблицы. ЧастьСтатья + Символ( 13 ) , 0 ) ;
КонецЦикла ;
str. Position = 0 ;
НарушенияТекст = str. readText( ) ;
MSWord. Bookmarks( НарушенияТекст) . S_elect( ) ;
MSWord. Application. S_election. TypeText( НарушенияТекст) ;
СсылкаМакет. Application. Visible = Истина ;
СсылкаМакет. Activate( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
MSWord. Application. Quit( ) ;
КонецПопытки ;
Это пример вывода множества строчек из табличной части одной строкой, если нужно просто выгрузить какой-то реквизит то можно пропустить часть 2 и перейти к части 3.
Для выгрузки табличной части в форме таблицы можно использовать функцию автоформата, примеру код выгрузки табличной части документа Предписание:
Код 1C v 8.х Word = MSWord. Application;
Документ = Word. ActiveDocument( ) ;
Word. S_election. MoveDown( , 22 ) ;
Документ. Paragraphs. Add( ) ;
Rng = Word. S_election. Range;
Rng. I_nsertAfter( № п/ п* Установленные нарушения и меры по их устранению* Основания) ;
Rng. I_nsertParagraphAfter( ) ;
СтрочкаТаблицы = ЭлементыФормы. НарушенияПредписание. ТекущиеДанные;
Для Каждого СтрочкаТаблицы из НарушенияПредписание Цикл
Rng. I_nsertAfter( Строка( СтрочкаТаблицы. НомерСтроки) + * + СтрочкаТаблицы. Описание + ; + СтрочкаТаблицы. Предписание + * + СтрочкаТаблицы. СНИПФЗГОСТ + + СтрочкаТаблицы. ЧастьСтатья) ;
Rng. I_nsertParagraphAfter( ) ;
КонецЦикла ;
Rng. ConvertToTable( * ) ;
Документ. Tables( 1 ) . AutoFormat( 17 ) ;
Word. Visible = Истина ;
Ну вот и все =)
Автор: saylolpls
Еще способ Active document
В Конфигураторе Макеты - правый клик - Добавить
Тип макета: Active document
Создать новый - Документ Microsoft Word
Меню Вставка - Поле - Автоматизация - DocVariable
Написать имя поля в графе "Новое имя:" ДатаПриказа
В модуле формы документа создаем кнопку, и в ее обработчике пишем:
Код 1C v 8.х Процедура ОсновныеДействияФормыWord(Кнопка)
АктивныйДокумент = ПолучитьМакет( "Макет" ) ;
КомОбъект = АктивныйДокумент. Получить( ) ;
КомОбъект. Application. Visible= 1 ;
КомОбъект. Variables. Item( "ДатаПриказа" ) . Value= "24.01.2007" ;
КомОбъект. Fields. UpDate( ) ;
КомОбъект. PrintOut( ) ;
Пока objWord. Application. BackgroundPrintingStatus< > 0 Цикл
Предупреждение( "Ожидание" , 1 ) ;
КонецЦикла ;
КомОбъект. Application. Quit( ) ;
КомОбъект = 0 ;
КонецПроцедуры
2) добавляем не поле, а Закладку
Меню Вставка - Закладка и далее указываем ее имя ("ИмяЗакл")
Код 1C v 8.х Процедура ОсновныеДействияФормыWord(Кнопка)
АктивныйДокумент = ПолучитьМакет( "Макет" ) ;
КомОбъект = АктивныйДокумент. Получить( ) ;
КомОбъект. Application. Visible= 1 ;
КомОбъект. Bookmarks( СокрЛП( "ИмяЗакл" ) ) . S_elect( ) ;
КомОбъект. Application. S_election. TypeText( СокрЛП( "тест проверка" ) ) ;
КонецПроцедуры
Код 1C v 8.2 УП
Функция ПечатьДокумента() Экспорт
Договор = ПолучитьМакет( "ActiveDocument_ДоговорПоставки" ) ;
MSWord = Договор. Получить( ) ;
Попытка
Doc = MSWord. Application. Documents( 1 ) ;
Doc. Activate( ) ;
Replace = Doc. Content. Find;
FindText = "{НомерДоговора}" ;
MatchCase = Ложь ;
MatchWholeWord = Истина ;
MatchWildcards = Ложь ;
MatchSoundsLike = Неопределено ;
MatchAllWordForms = Неопределено ;
Forward = Истина ;
Wrap = Неопределено ;
Format_ = Ложь ;
ReplaceWith = "N777" ;
Replace. Execute(
FindText,
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
НомерДоговора) ;
MSWord. Application. Visible = Истина ;
MSWord. Activate( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
MSWord. Application. Quit( ) ;
КонецПопытки ;
возврат 0 ;
КонецФункции
Что означает % (процент) в языке программирования 1С? Например,
у = х % а
Берется остаток от деления «х» на «а». Результатом всегда будет значение между 0 и а-1
Выражение удобно использовать, например, для определения момента, когда пора переходить на другой лист при выводе таблицы на печать.
Примеры:
Код 1C v 8.х пример Тип
10 %5 = 0 Число
7 %10 = 7 Число
7 %4 = 3 Число
17 %33 = 17 Число
100 %1 = 0 Число
100 %50 = 0 Число
100 %95 = 5 Число
50 %100 = 50 Число
1 %100 = 1 Число
Пример кода быстрая Печать таблицы значений
Код 1C v 8.х
ПострПечать = Новый ПостроительОтчета;
ПострПечать. ИсточникДанных = Новый ОписаниеИсточникаДанных( ТПОтчета) ;
ПострПечать. МакетОформления = ПолучитьМакетОформления( СтандартноеОформление. Интерфейс) ;
ПострПечать. Выполнить( ) ;
Для каждого Колонка Из ПострПечать. ВыбранныеПоля Цикл
Колонка. Представление = ТПОтчета. Колонки[Колонка. Имя]. Заголовок;
КонецЦикла ;
ПострПечать. Вывести( ) ;
Пример функций Печать таблицы значений с использованием Макета
Код 1C v 8.х
Процедура УниверсальныйОтчетПоТЗ(ТЗ)
Табл= Новый ТабличныйДокумент;
Макет = ЭтотОбъект. ПолучитьМакет( "Макет" ) ;
ОбластьШапкаОсновной= Макет. ПолучитьОбласть( "Шапка|Основной" ) ;
ОбластьСтрокаОсновной= Макет. ПолучитьОбласть( "Строка|Основной" ) ;
ОбластьИтогОсновной= Макет. ПолучитьОбласть( "Итог|Основной" ) ;
ОбластьШапкаДОП= Макет. ПолучитьОбласть( "Шапка|Показатели" ) ;
ОбластьСтрокаДОП= Макет. ПолучитьОбласть( "Строка|Показатели" ) ;
ОбластьИтогДОП= Макет. ПолучитьОбласть( "Итог|Показатели" ) ;
Табл. Вывести( ОбластьШапкаОсновной) ;
Для Каждого Колонка из Тз. Колонки ЦИКЛ
ОбластьШапкаДОП. Параметры. ИмяПоказателя= Колонка. Имя;
Табл. Присоединить( ОбластьШапкаДОП) ;
КонецЦикла ;
счетчик= 0 ;
Для каждого стр из Тз Цикл
счетчик= счетчик+ 1 ;
ОбластьСтрокаОсновной. Параметры. счетчик= счетчик;
Табл. Вывести( ОбластьСтрокаОсновной) ;
Для Каждого Колонка из Тз. Колонки ЦИКЛ
ОбластьСтрокаДОП. Параметры. ЗначениеКолонки= стр[Колонка. Имя];
Табл. Присоединить( ОбластьСтрокаДОП) ;
КонецЦикла ;
КонецЦикла ;
Табл. Вывести( ОбластьИтогОсновной) ;
Для Каждого Колонка из Тз. Колонки ЦИКЛ
ОбластьИтогДОП. Параметры. Итог= Тз. Итог( Колонка. Имя) ;
Табл. Присоединить( ОбластьИтогДОП) ;
КонецЦикла ;
Табл. Показать( ) ;
КонецПроцедуры
Код 1C v 7.x
Процедура ПечатьТЗвТаб(ТЗ, Заголовок = "" ,КолонкиПоНазваниям = 0) Экспорт
Перем ТТЗ;
ТЗ. Выгрузить( ТТЗ) ;
МаксШирина = 50 ;
СпШирина = СоздатьОбъект( "СписокЗначений" ) ;
Для сч = 1 по ТТЗ. КоличествоКолонок( ) Цикл
Если КолонкиПоНазваниям = 0 Тогда
ИмяРек = ТТЗ. ПолучитьПараметрыКолонки( сч) ;
Иначе
ИмяРек = "" ;
ТТЗ. ПолучитьПараметрыКолонки( сч, , , , ИмяРек, ) ;
КонецЕсли ;
СпШирина. ДобавитьЗначение( СтрДлина( ИмяРек) * 1.2 ) ;
КонецЦикла ;
Таб= СоздатьОбъект( "Таблица" ) ;
Таб. ИсходнаяТаблица( "ПечатьТЗ" ) ;
Если СокрЛП( Заголовок) < > "" Тогда
Таб. ВывестиСекцию( "Шапка" ) ;
КонецЕсли ;
Таб. ВывестиСекцию( "Строка|Общая" ) ;
Для сч= 1 по ТТЗ. КоличествоКолонок( ) Цикл
Если КолонкиПоНазваниям = 0 Тогда
ИмяРек = ТТЗ. ПолучитьПараметрыКолонки( сч) ;
Иначе
ИмяРек = "" ;
Ном = "" ;
ТТЗ. ПолучитьПараметрыКолонки( сч, , , , ИмяРек, ) ;
КонецЕсли ;
Таб. ПрисоединитьСекцию( "Строка|Столбец" ) ;
КонецЦикла ;
ВысотаШапки = Таб. ВысотаТаблицы( ) ;
ТТЗ. ВыбратьСтроки( ) ;
Пока ТТЗ. ПолучитьСтроку( ) = 1 Цикл
Ном = ТТЗ. НомерСтроки;
Таб. ВывестиСекцию( "Строка|Общая" ) ;
Выс = Таб. ВысотаТаблицы( ) ;
Для сч= 1 по ТТЗ. КоличествоКолонок( ) Цикл
ИмяРек= ТТЗ. ПолучитьЗначение( Ном, сч) ;
Таб. ПрисоединитьСекцию( "Строка|Столбец" ) ;
Если ТипЗначения( ИмяРек) = 1 Тогда
Обл = Таб. Область( "R" + Выс+ "C" + ( Сч+ 1 ) ) ;
Обл. ГоризонтальноеПоложение( 2 ) ;
КонецЕсли ;
НачШирина = СпШирина. ПолучитьЗначение( Сч) ;
Ширина = СтрДлина( ИмяРек) ;
СпШирина. УстановитьЗначение( Сч, Макс( НачШирина, Ширина) ) ;
КонецЦикла ;
КонецЦикла ;
Для сч = 1 по СпШирина. РазмерСписка( ) Цикл
Обл = Таб. Область( "R" + ВысотаШапки+ "C" + ( Сч+ 1 ) ) ;
Ширина = Мин( МаксШирина, 2 + СпШирина. ПолучитьЗначение( Сч) ) ;
Обл. ШиринаСтолбца( Ширина) ;
Обл. Полужирный( 1 ) ;
КонецЦикла ;
Таб. Показать( Заголовок) ;
Таб. ТолькоПросмотр( 1 ) ;
КонецПроцедуры
ИЛИ
Код 1C v 7.x Процедура глВывестиТаблицуЗначений(ТаблицаЗначений, Заголовок = "" ) Экспорт
Перем Таб, ИИ, ЖЖ, НазваниеКолонки, ТипКолонки, Ширина, Значение, Сообщение;
Таб = СоздатьОбъект( "Таблица" ) ;
Если ТипЗначенияСтр( ТаблицаЗначений) < > "ТаблицаЗначений" Тогда
Сообщение = "В процедуру "" глВывестиТаблицуЗначений()"" передана переменная не типа "" ТаблицаЗначений"" , " +
"а типа "" " + СокрЛП( ТипЗначенияСтр( ТаблицаЗначений) ) + """ " ;
Таб. Область( 1 , 1 , 1 , 1 ) . Текст = Сообщение;
Таб. Область( 1 , 1 , 1 , 1 ) . ШиринаСтолбца( СтрДлина( Сообщение) ) ;
Таб. ТолькоПросмотр( 1 ) ;
Таб. Показать( "Не таблица значений: " + Заголовок) ;
Возврат ;
КонецЕсли ;
Для ЖЖ = 1 по ТаблицаЗначений. КоличествоКолонок( ) цикл
ТаблицаЗначений. ПолучитьПараметрыКолонки( ЖЖ, , , , НазваниеКолонки) ;
Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . Текст = СокрЛП( НазваниеКолонки) ;
Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . РамкаОбвести( 5 , 5 , 5 , 5 ) ;
Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . ВертикальноеПоложение( 3 ) ;
Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . ГоризонтальноеПоложение( 3 ) ;
Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . РазмерШрифта( 7 ) ;
Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . Полужирный( 1 ) ;
Ширина = Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . ШиринаСтолбца( ) ;
Ширина = Макс( Ширина, СтрДлина( СокрЛП( НазваниеКолонки) ) ) ;
Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . ШиринаСтолбца( Ширина) ;
КонецЦикла ;
Для ИИ = 1 по ТаблицаЗначений. КоличествоСтрок( ) цикл
Для ЖЖ = 1 по ТаблицаЗначений. КоличествоКолонок( ) цикл
Значение = ТаблицаЗначений. ПолучитьЗначение( ИИ, ЖЖ) ;
Таб. Область( ИИ+ 1 , ЖЖ, ИИ+ 1 , ЖЖ) . Текст = Значение;
Таб. Область( ИИ+ 1 , ЖЖ, ИИ+ 1 , ЖЖ) . Расшифровка( Значение, 0 ) ;
Таб. Область( ИИ+ 1 , ЖЖ, ИИ+ 1 , ЖЖ) . РамкаОбвести( 3 , 0 , 3 , 0 ) ;
Ширина = Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . ШиринаСтолбца( ) ;
Ширина = Макс( Ширина, СтрДлина( СокрЛП( Строка( Значение) ) ) ) ;
Таб. Область( 1 , ЖЖ, 1 , ЖЖ) . ШиринаСтолбца( Ширина) ;
ТаблицаЗначений. ПолучитьПараметрыКолонки( ЖЖ, ТипКолонки) ; ;
Если ТипКолонки = "Число" тогда
Таб. Область( ИИ+ 1 , ЖЖ, ИИ+ 1 , ЖЖ) . ГоризонтальноеПоложение( 2 ) ;
КонецЕсли ;
Если ИИ = ТаблицаЗначений. ТекущаяСтрока( ) тогда
Таб. Область( ИИ+ 1 , ЖЖ, ИИ+ 1 , ЖЖ) . ЦветФона( 255 , 0 , 0 ) ;
КонецЕсли ;
КонецЦикла ;
КонецЦикла ;
Таб. ТолькоПросмотр( 1 ) ;
Таб. Показать( "Таблица значений: " + Заголовок) ;
КонецПроцедуры