Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Внешняя печатная форма РасходныйКассовыйОрдер
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
1c_lam
1С:Предприятие 8.3 (8.3.12.1616)
"Управление торговым предприятием для Украины", редакция 1.2. (1.2.48.1)
Доброго!
Вояю ВПФ для документа "РасходныйКассовыйОрдер", все по методике: процедурки и функции повыдергивал, себе в модуль вставил, проверил ошибки, переменные. ОК.
Прогоняю через отладчик с точкой останова, ошибок не дает. Но и ТабДокумент не возвращает!!
А когда прикручиваю к доку ч-з Серви/Внешние печатные формы, то при попытке печатнуть дает такую ошибку:
"Не удалось сформировать внешнюю печатную форму!
Преобразование значения к типу Число не может быть выполнено"
При отладке эту ошибку получить не могу. 64000000.gif
Просьба, помочь/направить/подсказать. Вот код:

необходимо зарегистрироваться для просмотра ссылки
Функция ОпределитьКодЯзыкаДляФормат(КодЯзыка) Экспорт
    
    Возврат ОпределитьКодЯзыкаДляФормат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
Цитата(1c_lam @ 14.02.19, 9:32) необходимо зарегистрироваться для просмотра ссылки
Но и ТабДокумент не возвращает!!

А что возвращает?
1c_lam
Vofka @ Сегодня, 9:56 необходимо зарегистрироваться для просмотра ссылки ,
Вернее возвращает, но не выводит на экран/печать ничего 09000000.gif




 ! 

необходимо зарегистрироваться для просмотра ссылки: 8
 
VXIIIZ
Цитата(1c_lam @ 14.02.19, 9:32) необходимо зарегистрироваться для просмотра ссылки
ОбластьМакета.Параметры.ДатаДокумента = Шапка.ДатаДокумента+ "року";


Отлаживать печатную форму нужно до того, как вставивлять во внешние.

Неявное преобразование некорректное. Либо через Формат(), либо вот так:

ОбластьМакета.Параметры.ДатаДокумента = "" + Шапка.ДатаДокумента + "року";
1c_lam
VXIIIZ @ Сегодня, 10:10 необходимо зарегистрироваться для просмотра ссылки ,
Действительно, помогло 56000000.gif
тОлько что то я с суммой напутал:



 ! 

необходимо зарегистрироваться для просмотра ссылки: 8
 
Vofka
Цитата(1c_lam @ 14.02.19, 10:07) необходимо зарегистрироваться для просмотра ссылки
Вернее возвращает, но не выводит на экран/печать ничего

Если вы отлаживаете это сейчас как внешнюю обработку (не внешнюю печатную форму, а обработку через файл/открыть), то для того, что бы что-то вывелось на экран, в вызывающем коде надо прописать показ:

ТабДокумент = МояОбработка.Печать(...);
ТабДокумент.Показать();
1c_lam
Vofka @ Сегодня, 10:20 необходимо зарегистрироваться для просмотра ссылки ,
Точно, спасибо.
VXIIIZ
Цитата(1c_lam @ 14.02.19, 10:19) необходимо зарегистрироваться для просмотра ссылки
тОлько что то я с суммой напутал:


Это невнимательность. Нужно получить элемент "Следующий()" до того как проверять условие.

    Шапка = Запрос.Выполнить().Выбрать();
    Если   Шапка.Сумма = неопределено
        ИЛИ
        Шапка.Сумма = NULL
        Тогда
        Сумма=0;
    Иначе
        Сумма = Шапка.Сумма;
    КонецЕсли;
    Шапка.Следующий();

1c_lam
VXIIIZ @ Сегодня, 10:28 необходимо зарегистрироваться для просмотра ссылки ,
Мое признание, искренне благодарен agree.gif

Уважаемые господа, закоментил целый блок из обработки, который вываливал кучу ошибок и решал этот вопрос:


 ! 

необходимо зарегистрироваться для просмотра ссылки: 8
 


Буду благодарен если подскажете как прикрутить назад 51000000.gif 51000000.gif
VXIIIZ
1c_lam @ Сегодня, 10:35 необходимо зарегистрироваться для просмотра ссылки ,
Это, конечно, если не упоминать тот факт, что условие которые Вы используете, само по себе бессмысленное. Если у вас есть ссылка на документ до начала выполнения печати, то ни Неопределено ни NULL в качестве результата проверки быть не может в принципе.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.