|
|
|
1С ДО, Внешняя обработка maxab72, Страждущий, Масянька, sergey198, 2S, Gucci76, Hawk_1c, Wern, reg0303, Волшебник, denk32, d4rkmesa, phabeZ, ДобрыйПутник, PuhUfa, soldierboy, PLUT, Garykom, formista2000, Timon1405, Хряк, JohnGilbert, zippygrill, Homer, lEvGl, laeg, DimR_71, Eiffil123
| ☑ | ||
|---|---|---|---|---|
|
0
soldierboy
27.06.25
✎
09:18
|
Всем привет, написал код для внешней печатной формы, загрузил внешнюю обработку в "Дополнительные отчеты и обработки" и при печати документа выдает ошибку печатная форма недоступна. Уже перепроверил название макета указанного в коде, но результат ноль. Версия Документооборота КОРП ред 3.0.
Вот код обработки#Область СведенияОВнешнейОбработке
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Справочник.ДокументПредприятия");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Шаблон договора с внешним экспертом");
ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Внешняя печатная форма ""Шаблон договора с внешним экспертом");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Шаблон договора с внешним экспертом", "ДоговорСВнешнимЭкспертом", "ВызовСерверногоМетода");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
#КонецОбласти
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыПечати) Экспорт
ПараметрыПечати = Новый Структура;
//Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Спецификация") Тогда
// СформироватьПечатнуюФорму(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, "Спецификация", "Спецификация",
// ОбъектыПечати, ПараметрыВывода);
//КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ДоговорСВнешнимЭкспертом") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ДоговорСВнешнимЭкспертом",
////////////**********************Понять для чего нужна эта строка
НСтр("ru = 'Договор с экспертами'"),
СформироватьПечатнуюФорму(МассивОбъектов,ОбъектыПечати, ПараметрыПечати),
,
"ПФ_ДоговорСВнешнимЭкспертом"
);
КонецЕсли;
КонецПроцедуры
Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) Экспорт
// Объявление переменных
Перем ТабличныйДокумент, Макет, Договор, РезультатЗапроса;
Перем ВыборкаДетальныеЗаписи, ОбластьМакета;
// Инициализация табличного документа
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
// Получаем макет печатной формы
Макет = ПолучитьМакет("ПФ_ДоговорСВнешнимЭкспертом");
// Проверяем входные данные
Если МассивОбъектов.Количество() = 0 Тогда
Возврат ТабличныйДокумент;
КонецЕсли;
// Обрабатываем каждый документ в массиве
Для Каждого Договор Из МассивОбъектов Цикл
// Запрос данных контрагента
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.ИНН КАК ИНН,
| Контрагенты.ОсновнойБанковскийСчет КАК ОсновнойБанковскийСчет,
| Контрагенты.ОсновнойБанковскийСчет.Банк.Код КАК ОсновнойБанковскийСчетБанкКод,
| Контрагенты.ОсновнойБанковскийСчет.Банк.КоррСчет КАК ОсновнойБанковскийСчетБанкКоррСчет,
| Контрагенты.ОсновнойБанковскийСчет.НомерСчета КАК ОсновнойБанковскийСчетНомерСчета,
| Контрагенты.КонтактнаяИнформация.АдресЭП КАК АдресЭП,
| Контрагенты.ОсновнойБанковскийСчет.Банк КАК ОсновнойБанковскийСчетБанк
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Ссылка = &Контрагенты";
Запрос.УстановитьПараметр("Контрагенты", Договор);
Попытка
РезультатЗапроса = Запрос.Выполнить();
Исключение
// Логирование ошибки запроса
ЗаписьЖурналаРегистрации("ОшибкаПечатнойФормы", УровеньЖурналаРегистрации.Ошибка, ,
"Ошибка выполнения запроса: " + ОписаниеОшибки());
Продолжить;
КонецПопытки;
// Проверка результатов запроса
Если РезультатЗапроса = Неопределено ИЛИ РезультатЗапроса.Пустой() Тогда
Продолжить;
КонецЕсли;
// Получаем данные контрагента
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если Не ВыборкаДетальныеЗаписи.Следующий() Тогда
Продолжить;
КонецЕсли;
// Выводим основные области документа
Попытка
// Шапка договора
ОбластьМакета = Макет.ПолучитьОбласть("ШапкаДоговор");
ТабличныйДокумент.Вывести(ОбластьМакета);
// Основные разделы договора
ВывестиОбластьМакета(Макет, ТабличныйДокумент, "Шапка");
ВывестиОбластьМакета(Макет, ТабличныйДокумент, "ПредметДоговора");
ВывестиОбластьМакета(Макет, ТабличныйДокумент, "ОбязательстваСторон");
ВывестиОбластьМакета(Макет, ТабличныйДокумент, "ЦенаРаботИПорядокОплаты");
ВывестиОбластьМакета(Макет, ТабличныйДокумент, "СрокиИУсловияВыполненияРабот");
ВывестиОбластьМакета(Макет, ТабличныйДокумент, "ОтветственностьСторон");
ВывестиОбластьМакета(Макет, ТабличныйДокумент, "КонфиденциальнаяИнформация");
ВывестиОбластьМакета(Макет, ТабличныйДокумент, "СрокДействияДоговора");
ВывестиОбластьМакета(Макет, ТабличныйДокумент, "ЗаключительноеПоложение");
// Реквизиты и подписи сторон
ОбластьМакета = Макет.ПолучитьОбласть("РеквизитыИПодписиСторон");
ОбластьМакета.Параметры.Почта = ВыборкаДетальныеЗаписи.АдресЭП;
ОбластьМакета.Параметры.ИНН = ВыборкаДетальныеЗаписи.ИНН;
ОбластьМакета.Параметры.БИК = ВыборкаДетальныеЗаписи.ОсновнойБанковскийСчетБанкКод;
ОбластьМакета.Параметры.КоррСчет = ВыборкаДетальныеЗаписи.ОсновнойБанковскийСчетБанкКоррСчет;
ОбластьМакета.Параметры.НомерСчета = ВыборкаДетальныеЗаписи.ОсновнойБанковскийСчетНомерСчета;
ОбластьМакета.Параметры.Банк = ВыборкаДетальныеЗаписи.ОсновнойБанковскийСчетБанк;
// Дополнительные реквизиты
ЗаполнитьДополнительныеРеквизиты(ОбластьМакета, Договор);
ТабличныйДокумент.Вывести(ОбластьМакета);
// Акт работ
ОбластьМакета = Макет.ПолучитьОбласть("АктРабот");
ЗаполнитьПараметрыАкта(ОбластьМакета, Договор);
ТабличныйДокумент.Вывести(ОбластьМакета);
Исключение
// Логирование ошибки формирования печатной формы
ЗаписьЖурналаРегистрации("ОшибкаПечатнойФормы", УровеньЖурналаРегистрации.Ошибка, ,
"Ошибка формирования печатной формы: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
// Вспомогательная процедура для вывода области макета
Процедура ВывестиОбластьМакета(Макет, ТабличныйДокумент, ИмяОбласти)
Область = Макет.ПолучитьОбласть(ИмяОбласти);
ТабличныйДокумент.Вывести(Область);
КонецПроцедуры
// Вспомогательная процедура для заполнения дополнительных реквизитов
Процедура ЗаполнитьДополнительныеРеквизиты(ОбластьМакета, Договор)
Перем Значение;
// СНИЛС
Значение = ПолучитьЗначениеРеквизита(Договор, "СНИЛС");
ОбластьМакета.Параметры.СНИЛС = Значение;
// Паспортные данные
Значение = ПолучитьЗначениеРеквизита(Договор, "Дата Рождения");
ОбластьМакета.Параметры.ДатаРождения = Значение;
Значение = ПолучитьЗначениеРеквизита(Договор, "Серия Паспорта");
ОбластьМакета.Параметры.СерияПаспорта = Значение;
Значение = ПолучитьЗначениеРеквизита(Договор, "Номер паспорта");
ОбластьМакета.Параметры.НомерПаспорта = Значение;
Значение = ПолучитьЗначениеРеквизита(Договор, "Кем Выдан");
ОбластьМакета.Параметры.КемВыданПаспорт = Значение;
Значение = ПолучитьЗначениеРеквизита(Договор, "ДатаВыдачи");
ОбластьМакета.Параметры.ДатаВыдачиПаспорта = Значение;
// Адрес
Значение = ПолучитьЗначениеРеквизита(Договор, "Адрес Регистрации");
ОбластьМакета.Параметры.АдресРегистрации = Значение;
// ФИО
Значение = ПолучитьЗначениеРеквизита(Договор, "ФИО");
ОбластьМакета.Параметры.ФИО = Значение;
КонецПроцедуры
// Вспомогательная процедура для заполнения параметров акта
Процедура ЗаполнитьПараметрыАкта(ОбластьМакета, Договор)
Перем Значение;
// Дата акта
Значение = ПолучитьЗначениеРеквизита(Договор, "Дата");
Если Значение = Неопределено Тогда
Значение = ТекущаяДата();
КонецЕсли;
ОбластьМакета.Параметры.Дата = Значение;
// Номер договора
Значение = ПолучитьЗначениеРеквизита(Договор, "НомерДоговора2");
ОбластьМакета.Параметры.НомерДоговора = Значение;
// Дата договора
Значение = ПолучитьЗначениеРеквизита(Договор, "ДатаДоговора2");
Если Значение = Неопределено Тогда
Значение = ТекущаяДата();
КонецЕсли;
ОбластьМакета.Параметры.ДатаДоговора = Значение;
КонецПроцедуры
// Вспомогательная функция для получения значения реквизита
Функция ПолучитьЗначениеРеквизита(Договор, ИмяРеквизита)
Реквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);
Если Реквизит = Неопределено Тогда
Возврат "";
КонецЕсли;
Возврат УправлениеСвойствами.ЗначениеСвойства(Договор, Реквизит);
КонецФункции |
|||
|
1
Волшебник
27.06.25
✎
11:23
|
Какой полный текст ошибки?
|
|||
|
2
soldierboy
27.06.25
✎
11:41
|
При печати документа выводит "Печатная форма недоступна"
|
|||
|
3
Волшебник
27.06.25
✎
11:43
|
(2) Найдите это сообщение в программном коде и проверьте условия его выдачи
|
|||
|
4
reg0303
27.06.25
✎
11:50
|
ТабличныйДокумент = Неопределено?
|
|||
|
5
Gucci76
27.06.25
✎
12:25
|
(0) Поищите как отлаживать ВПФ. А дальше дело техники.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |