Автор: 1c_lam 14.02.19, 9:32
1С:Предприятие 8.3 (8.3.12.1616)
"Управление торговым предприятием для Украины", редакция 1.2. (1.2.48.1)
Доброго!
Вояю ВПФ для документа "РасходныйКассовыйОрдер", все по методике: процедурки и функции повыдергивал, себе в модуль вставил, проверил ошибки, переменные. ОК.
Прогоняю через отладчик с точкой останова, ошибок не дает. Но и ТабДокумент не возвращает!!
А когда прикручиваю к доку ч-з Серви/Внешние печатные формы, то при попытке печатнуть дает такую ошибку:
"Не удалось сформировать внешнюю печатную форму!
Преобразование значения к типу Число не может быть выполнено"
При отладке эту ошибку получить не могу.
Просьба, помочь/направить/подсказать. Вот код:
КодФункция ОпределитьКодЯзыкаДляФормат(КодЯзыка) Экспорт
Возврат ОпределитьКодЯзыкаДляФормат1(КодЯзыка);
КонецФункции // ОпределитьКодЯзыкаДляФормат()
Функция ОпределитьКодЯзыкаДляФормат1(КодЯзыка) Экспорт
Возврат ?(КодЯзыка = "uk","uk_UA","ru_RU");
КонецФункции // ОпределитьКодЯзыкаДляФормат()
Функция ФорматСумм(Сумма, Валюта = Неопределено, ЧН = "", ЧРГ = "") Экспорт
ФорматнаяСтрока = "ЧЦ=15;ЧДЦ=2" +
?(НЕ ЗначениеЗаполнено(ЧН), "", ";" + "ЧН=" + ЧН) +
?(НЕ ЗначениеЗаполнено(ЧРГ),"", ";" + "ЧРГ=" + ЧРГ);
РезультирующаяСтрока = СокрЛ(Формат(Сумма, ФорматнаяСтрока));
//Если ЗначениеЗаполнено(Валюта) Тогда
// РезультирующаяСтрока = РезультирующаяСтрока + " " + СокрП(Валюта);
//КонецЕсли;
Возврат РезультирующаяСтрока;
КонецФункции
Функция СформироватьСуммуПрописью(Сумма, Валюта, КодЯзыка = "ua") Экспорт
ПараметрыПрописи = ПараметрыПрописи(Валюта, КодЯзыка);
Если ПараметрыПрописи = "" Тогда
Возврат ФорматСумм(Сумма);
Иначе
Попытка
Возврат ЧислоПрописью(Сумма,"Л="+ОпределитьКодЯзыкаДляФормат(КодЯзыка),ПараметрыПрописи);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецФункции
Функция ПараметрыПрописи(Валюта, КодЯзыка) Экспорт
Рез = ("гривня, гривні, гривень, ж, копійка, копійки, копійок, ж, 2");
Если Рез = "" Тогда
ОбщегоНазначения.СообщитьСлужебнуюИнформацию("Для валюты " + Валюта + " не установлены параметры прописи для кода языка " + КодЯзыка);
КонецЕсли;
Возврат Рез;
КонецФункции // ПараметрыПрописи()
Функция Печать()Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Запрос.Текст =
"ВЫБРАТЬ
| Номер,
| Дата КАК ДатаДокумента,
| Организация,
| Касса.ОбособленноеПодразделение КАК ОбособленноеПодразделениеОрганизации,
| Касса.ОбособленноеПодразделение.НаименованиеПолное КАК ОбособленноеПодразделениеОрганизацииПредставление,
| СуммаДокумента КАК Сумма,
| Контрагент.Представление КАК ФИОПолучателя,
| ВалютаДокумента КАК Валюта,
| ВалютаДокумента.Представление КАК ВалютаПредставление,
| Выдать,
| Приложение,
| ПоДокументу,
| Основание,
| НомерОрдера
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
|
|ГДЕ
| РасходныйКассовыйОрдер.Ссылка = &ТекущийДокумент";
Шапка = Запрос.Выполнить().Выбрать();
Если Шапка.Сумма = неопределено
ИЛИ
Шапка.Сумма = NULL
Тогда
Сумма=0;
Иначе
Сумма = Шапка.Сумма;
КонецЕсли;
Шапка.Следующий();
ТабДокумент = Новый ТабличныйДокумент;
//ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РасходныйКассовыйОрдер_КО2";
Вариант2018 = Ложь;
Если СсылкаНаОбъект.Дата >= Дата('20180105') Тогда
Макет = ПолучитьМакет("КО2ф");
Вариант2018 = Истина;
ИначеЕсли СсылкаНаОбъект.Дата >= Дата('20090616') Тогда
Макет = ПолучитьМакет("КО2ф");
Иначе
Макет = ПолучитьМакет("КО2ф");
КонецЕсли;
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
КодЯзыкаПечать = "uk";
СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
Если Вариант2018 Тогда
ПредставлениеДаты = Формат(Шапка.ДатаДокумента, "Л=uk_UA; ДЛФ=ДД");
ПредставлениеДаты = Сред(ПредставлениеДаты, 1, СтрДлина(ПредставлениеДаты) - 2) + "року";
ОбластьМакета.Параметры.ДатаДокумента = Шапка.ДатаДокумента+ "року";
КонецЕсли;
// Выводим шапку ордера
ОбластьМакета.Параметры.Заполнить(Шапка);
Если НЕ ЗначениеЗаполнено(Шапка.ОбособленноеПодразделениеОрганизации) Тогда
ОбластьМакета.Параметры.ПолноеНаименование = СведенияОбОрганизации.ПолноеНаименование;
Иначе
ОбластьМакета.Параметры.ПолноеНаименование = Шапка.ОбособленноеПодразделениеОрганизацииПредставление;
КонецЕсли;
ОбластьМакета.Параметры.Сумма = ФорматСумм(Шапка.Сумма);//, Шапка.Валюта);
//Если Вариант2018
// И СсылкаНаОбъект.ВидОперации = Перечисления.ВидыОперацийРКО.ВзносНаличнымиВБанк
// ИЛИ СсылкаНаОбъект.ВидОперации = Перечисления.ВидыОперацийРКО.ИнкассацияДенежныхСредств
// Или СсылкаНаОбъект.ВидОперации = Перечисления.ВидыОперацийРКО.ВыплатаЗаработнойПлатыПоВедомостям Тогда
//ОбластьМакета.Параметры.СуммаПрописью = ?(Шапка.Валюта = мВалютаРегламентированногоУчета,"грн коп.","");
//Иначе
ОбластьМакета.Параметры.СуммаПрописью = СформироватьСуммуПрописью(Сумма, Шапка.Валюта, КодЯзыкаПечать);
//КонецЕсли;
Если СсылкаНаОбъект.ВидОперации = Перечисления.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику ИЛИ СсылкаНаОбъект.ВидОперации = Перечисления.ВидыОперацийРКО.ВыдачаДенежныхСредствПодотчетнику Тогда
КодПоДРФО = ?(СсылкаНаОбъект.ВидОперации = Перечисления.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику,СсылкаНаОбъект.Контрагент.Физлицо.КодПоДРФО,СсылкаНаОбъект.Контрагент.КодПоДРФО);
ОбластьМакета.Параметры.Выдать = Шапка.Выдать + ?(КодПоДРФО="",""," ("+КодПоДРФО+")");
КонецЕсли;
ОбластьМакета.Параметры.КодПоЕДРПОУ = УправлениеКонтактнойИнформацией.ПолучитьКодОрганизации(СведенияОбОрганизации);
Если НЕ ЗначениеЗаполнено(Шапка.ОбособленноеПодразделениеОрганизации) Тогда
Руководители = ОбщегоНазначения.ОтветственныеЛица(Шапка.Организация, Шапка.ДатаДокумента);
Иначе
Руководители = ОбщегоНазначения.ОтветственныеЛицаОбособленногоПодразделения(Шапка.ОбособленноеПодразделениеОрганизации, Шапка.ДатаДокумента);
КонецЕсли;
Если ЗначениеЗаполнено(Руководители.РуководительФИО) Тогда
Руководитель = ОбщегоНазначения.ПолучитьФамилиюИмяОтчество(Руководители.РуководительФИО.Фамилия, Руководители.РуководительФИО.Имя, Руководители.РуководительФИО.Отчество);
КонецЕсли;
Если ЗначениеЗаполнено(Руководители.ГлавныйБухгалтерФИО) Тогда
ГлавныйБухгалтер = ОбщегоНазначения.ПолучитьФамилиюИмяОтчество(Руководители.ГлавныйБухгалтерФИО.Фамилия, Руководители.ГлавныйБухгалтерФИО.Имя, Руководители.ГлавныйБухгалтерФИО.Отчество);
КонецЕсли;
Если ЗначениеЗаполнено(Руководители.КассирФИО) Тогда
Кассир = ОбщегоНазначения.ПолучитьФамилиюИмяОтчество(Руководители.КассирФИО.Фамилия, Руководители.КассирФИО.Имя, Руководители.КассирФИО.Отчество);
КонецЕсли;
ОбластьМакета.Параметры.ФИОРуководителя = Руководитель;
ОбластьМакета.Параметры.ФИОБухгалтера = ГлавныйБухгалтер;
ОбластьМакета.Параметры.ФИОКассира = "Узун Н.П.";
ТабДокумент.Вывести(ОбластьМакета);
Возврат ТабДокумент;
КонецФункции // ПечатьРКО()
Автор: Vofka 14.02.19, 9:56
Цитата(1c_lam @ 14.02.19, 9:32)
Но и ТабДокумент не возвращает!!
А что возвращает?
Автор: VXIIIZ 14.02.19, 10:10
Цитата(1c_lam @ 14.02.19, 9:32)
ОбластьМакета.Параметры.ДатаДокумента = Шапка.ДатаДокумента+ "року";
Отлаживать печатную форму нужно до того, как вставивлять во внешние.
Неявное преобразование некорректное. Либо через Формат(), либо вот так:
ОбластьМакета.Параметры.ДатаДокумента = "" + Шапка.ДатаДокумента + "року";
Автор: Vofka 14.02.19, 10:20
Цитата(1c_lam @ 14.02.19, 10:07)
Вернее возвращает, но не выводит на экран/печать ничего
Если вы отлаживаете это сейчас как внешнюю обработку (не внешнюю печатную форму, а обработку через файл/открыть), то для того, что бы что-то вывелось на экран, в вызывающем коде надо прописать показ:
ТабДокумент = МояОбработка.Печать(...);
ТабДокумент.Показать();
Автор: 1c_lam 14.02.19, 10:26
Vofka @ Сегодня, 10:20
,
Точно, спасибо.
Автор: VXIIIZ 14.02.19, 10:28
Цитата(1c_lam @ 14.02.19, 10:19)
тОлько что то я с суммой напутал:
Это невнимательность. Нужно получить элемент "Следующий()" до того как проверять условие.
Шапка = Запрос.Выполнить().Выбрать();
Если Шапка.Сумма = неопределено
ИЛИ
Шапка.Сумма = NULL
Тогда
Сумма=0;
Иначе
Сумма = Шапка.Сумма;
КонецЕсли;
Шапка.Следующий();
Автор: VXIIIZ 14.02.19, 10:46
1c_lam @ Сегодня, 10:35
,
Это, конечно, если не упоминать тот факт, что условие которые Вы используете, само по себе бессмысленное. Если у вас есть ссылка на документ до начала выполнения печати, то ни Неопределено ни NULL в качестве результата проверки быть не может в принципе.