Подскажите печать уходит в цикл вот код.
Перем СсылкаНаОбъект;
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
//Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УведомлениеОбОтпуске") Тогда
//для каждого стр из МассивОбъектовНазначения цикл
ТабличныйДокумент = ПечатьВнешнейПечатнойФормы(МассивОбъектов[0], ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "УведомлениеОбОтпуске", "Уведомление об отпуске", ТабличныйДокумент);
//КонецЦИкла;
//КонецЕсли;
КонецПроцедуры
Функция ПечатьВнешнейПечатнойФормы(МассивОбъектовНазначения, ОбъектыПечати) Экспорт
//ФормаДокумента = СсылкаНаОбъект.ПолучитьФорму();
//Если ФормаДокумента.Модифицированность Тогда
// Предупреждение("Сначала нужно записать документ", 10, "Формирование печатной формы невозможно");
// Возврат Неопределено;
//ИначеЕсли НЕ ЗначениеЗаполнено(СсылкаНаОбъект.Организация) Тогда
// Предупреждение("Укажите организацию", 10, "Формирование печатной формы невозможно");
// Возврат Неопределено;
//КонецЕсли;
//для каждого стр из МассивОбъектовНазначения цикл
СсылкаНаОбъект =МассивОбъектовНазначения;
Организация = СсылкаНаОбъект.Организация;
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ДополнительноеСоглашение";
ТабДокумент.ОтображатьГруппировки = Ложь;
ТабДокумент.ОтображатьЗаголовки = Ложь;
ТабДокумент.ОтображатьСетку = Ложь;
// получаем данные для печати
РезультатЗарпоса = СформироватьЗапросДляПечатиДоговора();
Выборка = РезультатЗарпоса.Выбрать();
// получаем макет
Макет = ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтр = Макет.ПолучитьОбласть("Стр1");
ОбластьТело = Макет.ПолучитьОбласть("Тело");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
// выводим данные
Пока Выборка.Следующий() Цикл
ФИОРаботникаИм = ПросклонятьФИОПоВозможности(Выборка.ФизЛицо, Выборка.ФамилияСотр, Выборка.ИмяСотр, Выборка.ОтчествоСотр, Выборка.ПолСотр , Ложь, 3);
ФИОСотрудникаКратко = ПросклонятьФИОПоВозможности(Выборка.ФизЛицо, Выборка.ФамилияСотр, Выборка.ИмяСотр, Выборка.ОтчествоСотр, Выборка.ПолСотр , Истина, 1);
//Если ЗначениеЗаполнено(Выборка.ФИОКадры) Тогда
// ФИОКадры = ВРег(ПросклонятьФИОПоВозможности(Выборка.ФИОКадры, Выборка.ФамилияКадры, Выборка.ИмяКадры, Выборка.ОтчествоКадры, Выборка.ПолКадры , Ложь, 2));
// ФИОКадрыСокр = ПросклонятьФИОПоВозможности(Выборка.ФИОКадры, Выборка.ФамилияКадры, Выборка.ИмяКадры, Выборка.ОтчествоКадры, Выборка.ПолКадры , Истина, 1);
//Иначе
// #Если Клиент Тогда
// Сообщить("Не указан руководитель организации", СтатусСообщения.Внимание);
// #КонецЕсли
//КонецЕсли;
ОбластьСтр.Параметры.ФИОСотрудника = ФИОРаботникаИм;
ОбластьСтр.Параметры.ДолжностьСотрудника = Выборка.Должность;
ОбластьТело.Параметры.ДатаНачалаОтпуска = Формат(Выборка.ДатаНачала, "ДЛФ=Д");
ОбластьТело.Параметры.ДатаОкончанияОтпуска = Формат(Выборка.ДатаОкончания + 24*60*60, "ДЛФ=Д");
ОбластьПодвал.Параметры.ФИОКадры = "";//ФИОКадрыСокр;
ОбластьПодвал.Параметры.ДатаДоОтпуска = Формат( Выборка.ДатаНачала - 14*24*60*60,"ДЛФ=Д");
ОбластьПодвал.Параметры.ФИОСотрудникаСокр = ФИОСотрудникаКратко;
ТабДокумент.Вывести(ОбластьШапка);
ТабДокумент.Вывести(ОбластьСтр);
ТабДокумент.Вывести(ОбластьТело);
ТабДокумент.Вывести(ОбластьПодвал);
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;
//КонецЦикла;
Возврат ТабДокумент;
КонецФункции
Функция СформироватьЗапросДляПечатиДоговора()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
Запрос.УстановитьПараметр("Организация", СсылкаНаОбъект.Организация);
Запрос.УстановитьПараметр("Должность",Справочники.Должности.НайтиПоКоду("000000054"));
Запрос.Текст = "ВЫБРАТЬ
| ФИОСотрудника.Фамилия КАК ФамилияСотр,
| ФИОСотрудника.Имя КАК ИмяСотр,
| ФИОСотрудника.Отчество КАК ОтчествоСотр,
| ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность КАК Должность,
| Отпуск.ФизическоеЛицо КАК ФизЛицо,
| Отпуск.Сотрудник КАК Сотрудник,
| Отпуск.ФизическоеЛицо.Пол КАК ПолСотр,
| Отпуск.ДатаНачалаПериодаОтсутствия КАК ДатаНачала,
| Отпуск.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончания
|ИЗ
| Документ.Отпуск КАК Отпуск,
| РегистрСведений.ФИОФизическихЛиц.СрезПоследних КАК ФИОСотрудника,
| РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
|ГДЕ
| Отпуск.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ФИОСотрудника.Фамилия,
| ФИОСотрудника.Имя,
| ФИОСотрудника.Отчество,
| ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность,
| ОтпускБезСохраненияОплаты.ФизическоеЛицо,
| ОтпускБезСохраненияОплаты.Сотрудник,
| ОтпускБезСохраненияОплаты.ФизическоеЛицо.Пол,
| ОтпускБезСохраненияОплаты.ДатаНачала,
| ОтпускБезСохраненияОплаты.ДатаОкончания
|ИЗ
| Документ.ОтпускБезСохраненияОплаты КАК ОтпускБезСохраненияОплаты,
| РегистрСведений.ФИОФизическихЛиц.СрезПоследних КАК ФИОСотрудника,
| РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
|ГДЕ
| ОтпускБезСохраненияОплаты.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ФИОСотрудника.Фамилия,
| ФИОСотрудника.Имя,
| ФИОСотрудника.Отчество,
| ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность,
| ОтпускБезСохраненияОплатыСпискомСотрудники.ФизическоеЛицо,
| ОтпускБезСохраненияОплатыСпискомСотрудники.Сотрудник,
| ОтпускБезСохраненияОплатыСпискомСотрудники.ФизическоеЛицо.Пол,
| ОтпускБезСохраненияОплатыСпискомСотрудники.ДатаНачала,
| ОтпускБезСохраненияОплатыСпискомСотрудники.ДатаОкончания
|ИЗ
| Документ.ОтпускБезСохраненияОплатыСписком.Сотрудники КАК ОтпускБезСохраненияОплатыСпискомСотрудники,
| РегистрСведений.ФИОФизическихЛиц.СрезПоследних КАК ФИОСотрудника,
| РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
|ГДЕ
| ОтпускБезСохраненияОплатыСпискомСотрудники.Ссылка = &Ссылка";
// | И ОтветственныеЛицаОрганизацийСрезПоследних.Должность = &Должность";
Возврат Запрос.Выполнить();
КонецФункции
Функция ПросклонятьФИОПоВозможности(Знач ФИО, Фамилия="", Имя="", Отчество="", Пол, ТолькоФамилию = Ложь, Падеж)
Инициалы = " " + Врег(Лев(Имя, 1)) + "." + Врег(Лев(Отчество, 1)) + ".";
ФиоПросклонять = Фамилия + Имя + Отчество;
РезультатСклонения = "";
//ФизическиеЛицаЗарплатаКадры.Просклонять(
Если ФизическиеЛицаЗарплатаКадры.Просклонять(ФиоПросклонять, Падеж, РезультатСклонения,Пол) Тогда
ФИО = РезультатСклонения + ?(ТолькоФамилию, Инициалы, "");
Иначе
ФИО = Фамилия + ?(ТолькоФамилию, Инициалы, "");
КонецЕсли;
Возврат СокрЛП(ФИО);
КонецФункции
#Область СведенияОВнешнейОбработке
// Сервисная экспортная функция. Вызывается в основной программе при регистрации обработки в информационной базе
// Возвращает структуру с параметрами регистрации
//
// Возвращаемое значение:
// Структура с полями:
// Вид - строка, вид обработки, один из возможных: "ДополнительнаяОбработка", "ДополнительныйОтчет",
// "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов"
// Назначение - Массив строк имен объектов метаданных в формате:
// <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>].
// Например, "Документ.СчетЗаказ" или "Справочник.*". Параметр имеет смысл только для назначаемых обработок, для глобальных может не задаваться.
// Наименование - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
// Информация - строка - Краткая информация или описание по обработке.
// Версия - строка - Версия обработки в формате “<старший номер>.<младший номер>” используется при загрузке обработок в информационную базу.
// БезопасныйРежим - булево - Принимает значение Истина или Ложь, в зависимости от того, требуется ли устанавливать или отключать безопасный режим
// исполнения обработок. Если истина, обработка будет запущена в безопасном режиме.
//
Функция СведенияОВнешнейОбработке() Экспорт
//Инициализируем структуру с параметрами регистрации
ПараметрыРегистрации = Новый Структура;
// Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
// Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
МассивНазначений = Новый Массив;
// Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
// Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
// которые поддерживают механизм ВПФ
МассивНазначений.Добавить("Документ.Отпуск");
МассивНазначений.Добавить("Документ.ОтпускБезСохраненияОплаты");
МассивНазначений.Добавить("Документ.ОтпускБезСохраненияОплатыСписком");//Указываем документ к которому делаем внешнюю печ. форму
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Уведомление об отпуске"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ); // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
ПараметрыРегистрации.Вставить("Версия", "1.0"); // эти два параметра играют больше информационную роль,
ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма"); // т.е. это то, что будет видеть пользователь в информации к обработке
// Создадим таблицу команд (подробнее смотрим ниже)
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Уведомление об отпуске", "УведомлениеОбОтпуске", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
//ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ (Иванов)", "АКТПечатьВнешняяИван", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
//ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ (Петров)", "АКТПечатьВнешняяПетр", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
#КонецОбласти
#Область Вспомогательное
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ РЕГИСТРАЦИИ ОБРАБОТКИ
// Формирует структуру с параметрами регистрации регистрации обработки в информационной базе
//
// Параметры:
// ОбъектыНазначенияФормы - Массив - Массив строк имен объектов метаданных в формате:
// <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>].
// или строка с именем объекта метаданных
// НаименованиеОбработки - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
// Необязательно, по умолчанию синоним или представление объекта
// Информация - строка - Краткая информация или описание обработки.
// Необязательно, по умолчанию комментарий объекта
// Версия - строка - Версия обработки в формате “<старший номер>.<младший номер>” используется при загрузке обработок в информационную базу.
//
//
// Возвращаемое значение:
// Структура
//
Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "", Информация = "", Версия = "1.0")
Если ТипЗнч(ОбъектыНазначенияФормы) = Тип("Строка") Тогда
ОбъектНазначенияФормы = ОбъектыНазначенияФормы;
ОбъектыНазначенияФормы = Новый Массив;
ОбъектыНазначенияФормы.Добавить(ОбъектНазначенияФормы);
КонецЕсли;
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Назначение", ОбъектыНазначенияФормы);
Если Не ЗначениеЗаполнено(НаименованиеОбработки) Тогда
НаименованиеОбработки = ЭтотОбъект.Метаданные().Представление();
КонецЕсли;
ПараметрыРегистрации.Вставить("Наименование", НаименованиеОбработки);
Если Не ЗначениеЗаполнено(Информация) Тогда
Информация = ЭтотОбъект.Метаданные().Комментарий;
КонецЕсли;
ПараметрыРегистрации.Вставить("Информация", Информация);
ПараметрыРегистрации.Вставить("Версия", Версия);
Возврат ПараметрыРегистрации;
КонецФункции
// Формирует таблицу значений с командами печати
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
//Представление команды в пользовательском интерфейсе
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
//Уникальный идентификатор команды или имя макета печати
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
//Способ вызова команды: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"
// "ОткрытиеФормы" - применяется только для отчетов и дополнительных отчетов
// "ВызовКлиентскогоМетода" - вызов процедуры Печать(), определённой в модуле формы обработки
// "ВызовСерверногоМетода" - вызов процедуры Печать(), определённой в модуле объекта обработки
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
//Показывать оповещение.
//Если Истина, требуется показать оповещение при начале и при завершении работы обработки.
//Имеет смысл только при запуске обработки без открытия формы
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
//Дополнительный модификатор команды.
//Используется для дополнительных обработок печатных форм на основе табличных макетов.
//Для таких команд должен содержать строку ПечатьMXL
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
// Вспомогательная процедура.
//
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
#КонецОбласти
ПоказатьПо теме из базы знаний
- Универсальный передаточный документ (типовая печать, из внешней обработки, факсимиле + печать) (внешняя печатная форма)
- Программная печать внешних печатных форм для УТ 11 (управляемые формы) двумя методами, с выводом шаблона на экран и печатью напрямую на принтер
- [БСП] Внешняя печатная форма: как перед печатью выводить форму настроек
- Групповая печать печатных форм справочника Сотрудники организаций и кадровых документов (с отбором) (КА 1.1, УПП 1.3)
- Внешняя печатная форма с выводом формы настроек перед печатью (выбор подписантов). Работает на БСП 3.1.9, имеет 1 форму настроек, есть режим отладки, управляемые формы 8.3
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот