Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Внешняя печатная форма РасходныйКассовыйОрдер          
1c_lam Подменю пользователя
сообщение 14.02.19, 9:32
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

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 - 14.02.19, 9:55

Vofka Подменю пользователя
сообщение 14.02.19, 9:56
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата(1c_lam @ 14.02.19, 9:32) *
Но и ТабДокумент не возвращает!!

А что возвращает?

1c_lam Подменю пользователя
сообщение 14.02.19, 10:07
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 9:56 * ,
Вернее возвращает, но не выводит на экран/печать ничего 09000000.gif




 ! 

Правила: 8
 


Сообщение отредактировал Vofka - 14.02.19, 10:18

VXIIIZ Подменю пользователя
сообщение 14.02.19, 10:10
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 32
Спасибо сказали: 6 раз
Рейтинг: 0

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


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

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

ОбластьМакета.Параметры.ДатаДокумента = "" + Шапка.ДатаДокумента + "року";

Спасибо сказали: 1c_lam,

1c_lam Подменю пользователя
сообщение 14.02.19, 10:19
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

VXIIIZ @ Сегодня, 10:10 * ,
Действительно, помогло 56000000.gif
тОлько что то я с суммой напутал:



 ! 

Правила: 8
 


Сообщение отредактировал Vofka - 14.02.19, 10:20

Vofka Подменю пользователя
сообщение 14.02.19, 10:20
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата(1c_lam @ 14.02.19, 10:07) *
Вернее возвращает, но не выводит на экран/печать ничего

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

ТабДокумент = МояОбработка.Печать(...);
ТабДокумент.Показать();

Спасибо сказали: 1c_lam,

1c_lam Подменю пользователя
сообщение 14.02.19, 10:26
Сообщение #7

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 10:20 * ,
Точно, спасибо.

VXIIIZ Подменю пользователя
сообщение 14.02.19, 10:28
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 32
Спасибо сказали: 6 раз
Рейтинг: 0

Цитата(1c_lam @ 14.02.19, 10:19) *
тОлько что то я с суммой напутал:


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

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


1c_lam Подменю пользователя
сообщение 14.02.19, 10:44
Сообщение #9

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

VXIIIZ @ Сегодня, 10:28 * ,
Мое признание, искренне благодарен agree.gif

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


 ! 

Правила: 8
 


Буду благодарен если подскажете как прикрутить назад 51000000.gif 51000000.gif

Сообщение отредактировал Vofka - 14.02.19, 14:20

VXIIIZ Подменю пользователя
сообщение 14.02.19, 10:46
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 32
Спасибо сказали: 6 раз
Рейтинг: 0

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

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 9:55
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!