|
Внешняя печатная при печати выдает ошибку "Печатная форма недоступна" | ☑ | ||
|---|---|---|---|---|
|
0
stalker300490
24.08.18
✎
15:42
|
Код обработки
Функция СведенияОВнешнейОбработке() экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг"); //Указываем документ к которому делаем внешнюю печ. форму ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов... ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Наименование", "РеализацияТоваровУслуг (внешняя)"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("Информация", "Эту ВПФ мы сделали для того что бы посмотреть возможности БСП "); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, "РеализацияТоваровУслуг (внешняя)", "РеализацияТоваровУслуг", "ВызовСерверногоМетода", Истина, "ПечатьMXL"); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));//как будет выглядеть описание печ.формы для пользователя Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //имя макета печ.формы Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПараметрыПечати = Новый Структура(); СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов); Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РеализацияТоваровУслуг") Тогда УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, "РеализацияТоваровУслуг", НСтр("ru='Реализация Товаров Услуг'"), СформироватьПечатнуюФормуМХ3(СтруктураТипов, ОбъектыПечати, ПараметрыПечати)); КонецЕсли; ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, СтруктураТипов, КоллекцияПечатныхФорм); КонецПроцедуры Функция СтруктураИтоговыеСуммы() Структура = Новый Структура; СтруктураРесурсовДляИтогов = СтруктураРесурсовДляИтогов(); Для Каждого Элемент Из СтруктураРесурсовДляИтогов Цикл Структура.Вставить("Итого"+Элемент.Ключ+"НаСтранице", 0); Структура.Вставить("Итого"+Элемент.Ключ, 0); КонецЦикла; Возврат Структура; КонецФункции Процедура ОбнулитьИтогиПоСтранице(ИтоговыеСуммы) СтруктураРесурсовДляИтогов = СтруктураРесурсовДляИтогов(); Для Каждого Элемент Из СтруктураРесурсовДляИтогов Цикл ИтоговыеСуммы.Вставить("Итого"+Элемент.Ключ+"НаСтранице", 0); КонецЦикла; КонецПроцедуры Процедура РассчитатьИтоговыеСуммы(ИтоговыеСуммы, СтрокаТовары) СтруктураСуммПоСтроке = СтруктураРесурсовДляИтогов(); ЗаполнитьЗначенияСвойств(СтруктураСуммПоСтроке, СтрокаТовары); ОкруглитьДоЦелого(СтруктураСуммПоСтроке.КоличествоМест); Для Каждого Элемент Из СтруктураСуммПоСтроке Цикл Если ЗначениеЗаполнено(Элемент.Значение) Тогда ИтоговыеСуммы["Итого"+Элемент.Ключ+"НаСтранице"] = ИтоговыеСуммы["Итого"+Элемент.Ключ+"НаСтранице"] + Элемент.Значение; ИтоговыеСуммы["Итого"+Элемент.Ключ] = ИтоговыеСуммы["Итого"+Элемент.Ключ] + Элемент.Значение; КонецЕсли; КонецЦикла; КонецПроцедуры Функция СформироватьПечатнуюФормуМХ3(СтруктураТипов, ОбъектыПечати, ПараметрыПечати) Экспорт УстановитьПривилегированныйРежим(Истина); ТабличныйДокумент = Новый ТабличныйДокумент; // Зададим параметры макета ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_МХ3"; НомерТипаДокумента = 0; Для Каждого СтруктураОбъектов Из СтруктураТипов Цикл НомерТипаДокумента = НомерТипаДокумента + 1; Если НомерТипаДокумента > 1 Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтруктураОбъектов.Ключ); Попытка ДанныеДляПечати = МенеджерОбъекта.ПолучитьДанныеДляПечатнойФормыМХ3(ПараметрыПечати, СтруктураОбъектов.Значение); ЗаполнитьТабличныйДокументМХ3(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; КонецЦикла; Возврат ТабличныйДокумент; КонецФункции Процедура ЗаполнитьРеквизитыШапкиМХ3(ДанныеПечати, ДанныеПоСкладу, Макет, ТабличныйДокумент) Макет = ПолучитьМакет("ПФ_MXL_СчетНаОплату"); // Выводим общие реквизиты шапки СведенияОПоклажедержателе = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПоСкладу.Поклажедержатель, ДанныеПечати.Дата); СведенияОПоклажедателе = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Организация, ДанныеПечати.Дата); ОбластьМакета = Макет.ПолучитьОбласть("Шапка"); ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент( ТабличныйДокумент, Макет, ОбластьМакета, ДанныеПечати.Ссылка); ОбластьМакета.Параметры.Заполнить(ДанныеПечати); ОбластьМакета.Параметры.Заполнить(ДанныеПоСкладу); СтруктураПараметров = Новый Структура; СписокПараметров = "ПолноеНаименование,ЮридическийАдрес,Телефоны"; СтруктураПараметров.Вставить("НомерДокумента", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеПечати.Номер)); СтруктураПараметров.Вставить("ПредставлениеПоклажедержателя", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоклажедержателе,СписокПараметров)); СтруктураПараметров.Вставить("ПредставлениеПоклажедателя", ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоклажедателе,СписокПараметров)); СтруктураПараметров.Вставить("ПоклажедержательПоОКПО", СведенияОПоклажедержателе.КодПоОКПО); СтруктураПараметров.Вставить("ВидДеятельностиПоОКДП", СведенияОПоклажедержателе.КодОКВЭД); СтруктураПараметров.Вставить("ПоклажедательПоОКПО", СведенияОПоклажедателе.КодПоОКПО); ОбластьМакета.Параметры.Заполнить(СтруктураПараметров); ТабличныйДокумент.Вывести(ОбластьМакета); КонецПроцедуры Процедура ЗаполнитьТабличныйДокументМХ3(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати) Макет = УправлениеПечатью.МакетПечатнойФормы("ПФ_MXL_МХ3"); ДанныеПечати = ДанныеДляПечати.РезультатПоШапке.Выбрать(); ВыборкаДанныеПоСкладу = ДанныеДляПечати.РезультатПоСкладам.Выбрать(); ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ПервыйДокумент = Истина; Пока ДанныеПечати.Следующий() Цикл СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка); ВыборкаПоДокументам.Сбросить(); Если НЕ ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска) Тогда Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В документе %1 отсутствуют товары. Печать акта не требуется'"), ДанныеПечати.Ссылка); ОбщегоНазначенияКлиентСервер.СообщитьПользователю( Текст, ДанныеПечати.Ссылка); Продолжить; КонецЕсли; НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1; ВыборкаПоСкладам = ВыборкаПоДокументам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоСкладам.Следующий() Цикл СтруктураПоиска = Новый Структура("Ссылка, Склад", ДанныеПечати.Ссылка, ВыборкаПоСкладам.Склад); ВыборкаДанныеПоСкладу.Сбросить(); Если НЕ ВыборкаДанныеПоСкладу.НайтиСледующий(СтруктураПоиска) Тогда Продолжить; КонецЕсли; Если ВыборкаДанныеПоСкладу.ИсточникИнформацииОЦенахДляПечати = Перечисления.ИсточникиИнформацииОЦенахДляПечати.ПоСебестоимости Тогда Если ВыборкаДанныеПоСкладу.ПредварительныйРасчет = Null Тогда ТекстСообщения = НСтр("ru = 'Не удалось получить цены по себестоимости для документа %Документ%: на %Период% не произведен расчет себестоимости.'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", ДанныеПечати.Ссылка); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Период%", Формат(НачалоМесяца(ДанныеПечати.ДатаДокумента),"ДЛФ=DD")); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); Продолжить; ИначеЕсли ВыборкаДанныеПоСкладу.ПредварительныйРасчет Тогда ТекстСообщения = НСтр("ru = 'При печати цен документа %Документ% использовались данные предварительного расчета себестоимости.'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Документ%", ДанныеПечати.Ссылка); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); КонецЕсли; КонецЕсли; Если Не ПервыйДокумент Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ПервыйДокумент = Ложь; // Выводим общие реквизиты шапки ЗаполнитьРеквизитыШапкиМХ3(ДанныеПечати, ВыборкаДанныеПоСкладу, Макет, ТабличныйДокумент); // Выводим заголовок таблицы ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы"); ТабличныйДокумент.Вывести(ЗаголовокТаблицы); НомерСтраницы = 1; // Инициализация итогов в документе ИтоговыеСуммы = СтруктураИтоговыеСуммы(); // Создаем массив для проверки вывода МассивВыводимыхОбластей = Новый Массив; // Выводим многострочную часть документа ОбластьМакета = Макет.ПолучитьОбласть("Строка"); ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоПоСтранице"); ОбластьВсего = Макет.ПолучитьОбласть("Всего"); ОбластьПодвала = Макет.ПолучитьОбласть("Подвал"); НомерСтроки = 0; СтрокаТовары = ВыборкаПоСкладам.Выбрать(); КоличествоСтрок = СтрокаТовары.Количество(); Пока СтрокаТовары.Следующий() Цикл НомерСтроки = НомерСтроки + 1; СтруктураПараметров = Новый Структура("НомерСтроки", НомерСтроки); ОбластьМакета.Параметры.Заполнить(СтруктураПараметров); ОбластьМакета.Параметры.Заполнить(СтрокаТовары); МассивВыводимыхОбластей.Очистить(); МассивВыводимыхОбластей.Добавить(ОбластьМакета); МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице); Если НомерСтроки = КоличествоСтрок Тогда МассивВыводимыхОбластей.Добавить(ОбластьВсего); МассивВыводимыхОбластей.Добавить(ОбластьПодвала); КонецЕсли; Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда ОбластьИтоговПоСтранице.Параметры.Заполнить(ИтоговыеСуммы); ТабличныйДокумент.Вывести(ОбластьИтоговПоСтранице); ОбнулитьИтогиПоСтранице(ИтоговыеСуммы); НомерСтраницы = НомерСтраницы + 1; ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); УстановитьПараметр(ЗаголовокТаблицы, "НомерСтраницы", "Страница " + НомерСтраницы); ТабличныйДокумент.Вывести(ЗаголовокТаблицы); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьМакета); РассчитатьИтоговыеСуммы(ИтоговыеСуммы, СтрокаТовары); КонецЦикла; // Выводим итоги по последней странице ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоПоСтранице"); ОбластьИтоговПоСтранице.Параметры.Заполнить(ИтоговыеСуммы); ТабличныйДокумент.Вывести(ОбластьИтоговПоСтранице); // Выводим итоги по документу в целом ОбластьВсего.Параметры.Заполнить(ИтоговыеСуммы); ТабличныйДокумент.Вывести(ОбластьВсего); // Выводим таблицу услуги ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаблицыУслуги"); ОбластьМакета.Параметры.Заполнить(ВыборкаДанныеПоСкладу); ТабличныйДокумент.Вывести(ОбластьМакета); ОбластьМакета = Макет.ПолучитьОбласть("СтрокаУслуги"); Для Сч=1 По 6 Цикл ТабличныйДокумент.Вывести(ОбластьМакета); КонецЦикла; ОбластьМакета = Макет.ПолучитьОбласть("ИтогоУслуги"); ТабличныйДокумент.Вывести(ОбластьМакета); ОбластьМакета = Макет.ПолучитьОбласть("СтоимостьРабот"); ТабличныйДокумент.Вывести(ОбластьМакета); Если ЗначениеЗаполнено(ВыборкаДанныеПоСкладу.ОсобыеОтметки) Тогда ОбластьМакета = Макет.ПолучитьОбласть("ОсобыеОтметки"); ОбластьМакета.Параметры.Заполнить(ВыборкаДанныеПоСкладу); ТабличныйДокумент.Вывести(ОбластьМакета); Иначе ОбластьМакета = Макет.ПолучитьОбласть("ОсобыеОтметкиПустые"); ТабличныйДокумент.Вывести(ОбластьМакета); КонецЕсли; // Выводим итоги по документу ОбластьПодвала.Параметры.Заполнить(ВыборкаДанныеПоСкладу); ТабличныйДокумент.Вывести(ОбластьПодвала); КонецЦикла; УправлениеПечатью.ЗадатьОбластьПечатиДокумента( ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка); КонецЦикла; КонецПроцедуры Процедура УстановитьПараметр(ОбластьМакета, ИмяПараметра, ЗначениеПараметра) ОбластьМакета.Параметры.Заполнить(Новый Структура(ИмяПараметра, ЗначениеПараметра)); КонецПроцедуры Функция СтруктураРесурсовДляИтогов() Структура = Новый Структура; Структура.Вставить("СуммаБезНДС", 0); Структура.Вставить("СуммаНДС", 0); Структура.Вставить("СуммаСНДС", 0); Структура.Вставить("Количество", 0); Структура.Вставить("КоличествоМест", 0); Структура.Вставить("КоличествоПринято", 0); Структура.Вставить("МассаБрутто", 0); Структура.Вставить("МассаНетто", 0); Структура.Вставить("Сумма", 0); Структура.Вставить("РазницаБезНДСУвеличение", 0); Структура.Вставить("РазницаБезНДСУменьшение", 0); Структура.Вставить("РазницаНДСУвеличение", 0); Структура.Вставить("РазницаНДСУменьшение", 0); Структура.Вставить("РазницаСНДСУвеличение", 0); Структура.Вставить("РазницаСНДСУменьшение", 0); Возврат Структура; КонецФункции Процедура ОкруглитьДоЦелого(ОкругляемоеЧисло) Если ЗначениеЗаполнено(ОкругляемоеЧисло) Тогда Если ОкругляемоеЧисло <> Цел(ОкругляемоеЧисло) Тогда ОкругляемоеЧисло = Цел(ОкругляемоеЧисло) + 1; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
|
1
Вафель
24.08.18
✎
16:23
|
у тебя где-то не возвращается табличный документ. может не те идентификаторы передаешь
|
|||
|
2
stalker300490
27.08.18
✎
15:17
|
Вафель, уже разобрался, именно так и было
|
|||
|
3
Вафель
27.08.18
✎
15:39
|
(2) сам на такое натывкался много раз
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |