Имя: Пароль:
1C
1С v8
Запрос в печатной форме
0 Александр056
 
05.08.14
06:32
Делаю внешнюю печатную форму, ссылканаобъект и прочее, все поправил но вот загвоздка, при выполнении обработки(внешняя печ форма) происходит ошибка деление на 0, в запросе:

Запрос       = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка",                СсылкаНаОбъект);
    Запрос.УстановитьПараметр("ТекущийДокумент",      СсылкаНаОбъект.Ссылка);
    Запрос.УстановитьПараметр("Курс",                 Параметры.Курс);
    Запрос.УстановитьПараметр("Кратность",            Параметры.Кратность);
    Запрос.УстановитьПараметр("ВидСкладаНТТ",         Перечисления.ВидыСкладов.НТТ);
    Запрос.УстановитьПараметр("БезФактическихДанных", БезФактическихДанных);

    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номер КАК НомерДокумента,
    |    Дата  КАК ДатаДокумента,
    |    Дата  КАК ДатаСнятияОстатков,
    |    Организация,
    |    Склад.Представление КАК ПредставлениеСклада,
    |    Товары.(
    |        НомерСтроки                     КАК Номер,
    |        Номенклатура,
    |        Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    |        Номенклатура." + ТоварКод + "   КАК ТоварКод,
    |        ЕдиницаИзмерения.Представление  КАК ЕдиницаИзмеренияНаименование,
    |        ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
    |        ВЫБОР
    |            КОГДА &БезФактическихДанных ТОГДА 0
    |            ИНАЧЕ Количество
    |        КОНЕЦ КАК ФактКоличество,
    |        КоличествоУчет КАК БухКоличество,
    |        ВЫБОР
    |            КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице
    |            ИНАЧЕ Цена * &Курс / &Кратность
    |        КОНЕЦ КАК Цена,
    |        ВЫБОР
    |            КОГДА &БезФактическихДанных ТОГДА 0
    |            ИНАЧЕ ВЫБОР КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице ИНАЧЕ Сумма * &Курс / &Кратность КОНЕЦ
    |        КОНЕЦ КАК ФактСумма,
    |        ВЫБОР
    |            КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице
    |            ИНАЧЕ СуммаУчет * &Курс / &Кратность
    |        КОНЕЦ КАК БухСумма,
    |        ХарактеристикаНоменклатуры КАК Характеристика,
    |        СерияНоменклатуры КАК Серия
    |    )
    |ИЗ
    |    Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
    |
    |ГДЕ
    |    ИнвентаризацияТоваровНаСкладе.Ссылка = &ссылка
    |УПОРЯДОЧИТЬ ПО
    |    Товары.НомерСтроки";


в строке установки параметров прописано курс... параметры.курс,тоже самое с кратностью, именно там поселились 0 значения, что значит ПАРАМЕТР.курс, как поправить?
1 Cube
 
05.08.14
06:45
(0) Что за "Параметры"? Откуда они взялись - там и копай.
2 Wobland
 
05.08.14
06:51
Параметр.Курс=80
3 Александр056
 
05.08.14
06:57
(1) вот и меня интересует откуда взялись параметры...
вот полностью код обработки:
Перем мВалютаРегламентированногоУчета Экспорт;
Перем мВалютаУпрУчета Экспорт;

Функция Печать(БезФактическихДанных = Ложь) Экспорт;

    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
        ТоварКод = "Артикул";
    Иначе
        ТоварКод = "Код";
    КонецЕсли;

    Если СсылкаНаОбъект.Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
        ВалютаПересчета = мВалютаРегламентированногоУчета;
    Иначе
        ВалютаПересчета = мВалютаУпрУчета;
    КонецЕсли;

    ВалютаПечати = мВалютаРегламентированногоУчета;
    Параметры    = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, СсылкаНаОбъект.Дата);
    
    Запрос       = Новый Запрос;
    Запрос.УстановитьПараметр("Ссылка",                СсылкаНаОбъект);
    Запрос.УстановитьПараметр("ТекущийДокумент",      СсылкаНаОбъект.Ссылка);
    Запрос.УстановитьПараметр("Курс",                 Параметры.Курс);
    Запрос.УстановитьПараметр("Кратность",            Параметры.Кратность);
    Запрос.УстановитьПараметр("ВидСкладаНТТ",         Перечисления.ВидыСкладов.НТТ);
    Запрос.УстановитьПараметр("БезФактическихДанных", БезФактическихДанных);

    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номер КАК НомерДокумента,
    |    Дата  КАК ДатаДокумента,
    |    Дата  КАК ДатаСнятияОстатков,
    |    Организация,
    |    Склад.Представление КАК ПредставлениеСклада,
    |    Товары.(
    |        НомерСтроки                     КАК Номер,
    |        Номенклатура,
    |        Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    |        Номенклатура." + ТоварКод + "   КАК ТоварКод,
    |        ЕдиницаИзмерения.Представление  КАК ЕдиницаИзмеренияНаименование,
    |        ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
    |        ВЫБОР
    |            КОГДА &БезФактическихДанных ТОГДА 0
    |            ИНАЧЕ Количество
    |        КОНЕЦ КАК ФактКоличество,
    |        КоличествоУчет КАК БухКоличество,
    |        ВЫБОР
    |            КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице
    |            ИНАЧЕ Цена * &Курс / &Кратность
    |        КОНЕЦ КАК Цена,
    |        ВЫБОР
    |            КОГДА &БезФактическихДанных ТОГДА 0
    |            ИНАЧЕ ВЫБОР КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице ИНАЧЕ Сумма * &Курс / &Кратность КОНЕЦ
    |        КОНЕЦ КАК ФактСумма,
    |        ВЫБОР
    |            КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице
    |            ИНАЧЕ СуммаУчет * &Курс / &Кратность
    |        КОНЕЦ КАК БухСумма,
    |        ХарактеристикаНоменклатуры КАК Характеристика,
    |        СерияНоменклатуры КАК Серия
    |    )
    |ИЗ
    |    Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
    |
    |ГДЕ
    |    ИнвентаризацияТоваровНаСкладе.Ссылка = &ссылка
    |УПОРЯДОЧИТЬ ПО
    |    Товары.НомерСтроки";

    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    ВыборкаСтрокТовары = Шапка.Товары.Выбрать();

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ3";
    Макет       = ПолучитьОбщийМакет("ИНВ3");

    // Выводим шапку накладной
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
    ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации);
    ОбластьМакета.Параметры.ОрганизацияПоОКПО        = СведенияОбОрганизации.КодПоОКПО;
    ОбластьМакета.Параметры.ДатаДокумента            = Шапка.ДатаДокумента;
    ОбластьМакета.Параметры.ДатаСнятияОстатков       = Шапка.ДатаСнятияОстатков;
    ОбластьМакета.Параметры.НомерДокумента           = ОбщегоНазначения.ПолучитьНомерНаПечать(ЭтотОбъект);
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

    СтрокНаСтранице = 19;
    СтрокШапки      = 5;
    СтрокПодвала    = 5;
    НомерСтраницы   = 2;
    Ном             = 0;

    ИтогФактКоличество = 0;
    ИтогФактСумма      = 0;
    ИтогБухКоличество  = 0;
    ИтогБухСумма       = 0;

    КолвоСтрокПоСтранице = 0;
    КолвоПостранице      = 0;
    СуммаЛиста           = 0;
    ИтогоКолво           = 0;
    ИтогоСумма           = 0;

    // Выводим заголовок таблицы
    ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
    ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
    ТабДокумент.Вывести(ЗаголовокТаблицы);

    КоличествоСтрок = ВыборкаСтрокТовары.Количество();

    Если КоличествоСтрок = 1 Тогда
        ПереноситьПоследнююСтроку = 0;
    Иначе
        ЦелыхСтраницСПодвалом     = Цел((СтрокШапки + КоличествоСтрок + СтрокПодвала) / СтрокНаСтранице);
        ЦелыхСтраницБезПодвала    = Цел((СтрокШапки + КоличествоСтрок - 1) / СтрокНаСтранице);
        ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала;
    КонецЕсли;

    // Выводим многострочную часть докмента
    ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
    ОбластьМакета = Макет.ПолучитьОбласть("Строка");
    Пока ВыборкаСтрокТовары.Следующий() Цикл

        Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
            Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
            Продолжить;
        КонецЕсли;

        Ном = Ном + 1;
        //Начинаем новую страницу, если предыдущая строка была последней на странице
        //или пора переносить последнюю строку на последнюю страницу с подвалом.
        ЦелаяСтраница = (СтрокШапки + Ном - 1) / СтрокНаСтранице;

        Если (ЦелаяСтраница = Цел(ЦелаяСтраница))
         или ((ПереноситьПоследнююСтроку = 1) и (Ном = КоличествоСтрок)) Тогда

            ОбластьИтоговПоСтранице                               = Макет.ПолучитьОбласть("ПодвалСтраницы");
            ОбластьИтоговПоСтранице.Параметры.ИтогоФактКоличество = ИтогФактКоличество;
            ОбластьИтоговПоСтранице.Параметры.ИтогоФактСумма      = ИтогФактСумма;
            ОбластьИтоговПоСтранице.Параметры.ИтогоБухКоличество  = ИтогБухКоличество;
            ОбластьИтоговПоСтранице.Параметры.ИтогоБухСумма       = ИтогБухСумма;

            ОбластьИтоговПоСтранице.Параметры.КоличествоПорядковыхНомеровНаСтраницеПрописью = ЧислоПрописью(КолвоСтрокПоСтранице, ,",,,,,,,,0");
            Если НЕ БезФактическихДанных Тогда
                ОбластьИтоговПоСтранице.Параметры.ОбщееКоличествоЕдиницФактическиНаСтраницеПрописью = ФормированиеПечатныхФорм.КоличествоПрописью(КолвоПостранице);
                ОбластьИтоговПоСтранице.Параметры.СуммаФактическиНаСтраницеПрописью                 = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаЛиста, ВалютаПечати);
            КонецЕсли;
            ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
            
            НомерСтраницы = НомерСтраницы + 1;
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

            ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
            ТабДокумент.Вывести(ЗаголовокТаблицы);

            ИтогФактКоличество = 0;
            ИтогФактСумма      = 0;
            ИтогБухКоличество  = 0;
            ИтогБухСумма       = 0;

            КолвоСтрокПоСтранице = 0;
            КолвоПостранице      = 0;
            СуммаЛиста           = 0;

        КонецЕсли;

        ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
        ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
        ОбластьМакета.Параметры.Номер             = Ном;

        ТабДокумент.Вывести(ОбластьМакета);

        ИтогФактКоличество = ИтогФактКоличество + ВыборкаСтрокТовары.ФактКоличество;
        ИтогФактСумма      = ИтогФактСумма      + ВыборкаСтрокТовары.ФактСумма;
        ИтогБухКоличество  = ИтогБухКоличество  + ВыборкаСтрокТовары.БухКоличество;
        ИтогБухСумма       = ИтогБухСумма       + ВыборкаСтрокТовары.БухСумма;
        ИтогоКолво         = ИтогоКолво         + ВыборкаСтрокТовары.ФактКоличество;
        ИтогоСумма         = ИтогоСумма         + ВыборкаСтрокТовары.ФактСумма;

        КолвоСтрокПоСтранице = КолвоСтрокПоСтранице + 1;
        КолвоПостранице      = КолвоПостранице      + ВыборкаСтрокТовары.ФактКоличество;
        СуммаЛиста           = СуммаЛиста           + ВыборкаСтрокТовары.ФактСумма;

    КонецЦикла;

    // Выводим итоги по последней странице
    ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ПодвалСтраницы");
    ОбластьИтоговПоСтранице.Параметры.ИтогоФактКоличество  = ИтогФактКоличество;
    ОбластьИтоговПоСтранице.Параметры.ИтогоФактСумма       = ИтогФактСумма;
    ОбластьИтоговПоСтранице.Параметры.ИтогоБухКоличество   = ИтогБухКоличество;
    ОбластьИтоговПоСтранице.Параметры.ИтогоБухСумма        = ИтогБухСумма;
    ОбластьИтоговПоСтранице.Параметры.КоличествоПорядковыхНомеровНаСтраницеПрописью = ЧислоПрописью(КолвоСтрокПоСтранице, ,",,,,,,,,0");
    Если НЕ БезФактическихДанных Тогда
        ОбластьИтоговПоСтранице.Параметры.ОбщееКоличествоЕдиницФактическиНаСтраницеПрописью = ФормированиеПечатныхФорм.КоличествоПрописью(КолвоПостранице);
        ОбластьИтоговПоСтранице.Параметры.СуммаФактическиНаСтраницеПрописью                 = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаЛиста, ВалютаПечати);
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьИтоговПоСтранице);

    // Выводим подвал документа
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ОбластьМакета = Макет.ПолучитьОбласть("ПодвалОписи");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    ОбластьМакета.Параметры.НачальныйНомерПоПорядку = 1;
    ОбластьМакета.Параметры.НомерКонца              = ВыборкаСтрокТовары.Количество();
    ОбластьМакета.Параметры.КоличествоПорядковыхНомеровНаСтраницеПрописью = ЧислоПрописью(ВыборкаСтрокТовары.Количество(), ,",,,,,,,,0");
    Если НЕ БезФактическихДанных Тогда
        ОбластьМакета.Параметры.ОбщееКоличествоЕдиницФактическиНаСтраницеПрописью = ФормированиеПечатныхФорм.КоличествоПрописью(ИтогоКолво);
        ОбластьМакета.Параметры.СуммаФактическиНаСтраницеПрописью                 = ОбщегоНазначения.СформироватьСуммуПрописью(ИтогоСумма, ВалютаПечати);
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьМакета);

    // Зададим параметры макета
    ТабДокумент.ПолеСверху = 0;
    ТабДокумент.ПолеСлева  = 0;
    ТабДокумент.ПолеСнизу  = 0;
    ТабДокумент.ПолеСправа = 0;
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

    Возврат ТабДокумент;

КонецФункции // ПечатьИНВ3()


мВалютаРегламентированногоУчета   = глЗначениеПеременной("ВалютаРегламентированногоУчета");
мВалютаУпрУчета    = глЗначениеПеременной("ВалютаУправленческогоУчета");
4 Cube
 
05.08.14
06:58
(3) "Параметры    = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, СсылкаНаОбъект.Дата);"

Действительно... Совсем не понятно, откуда ж они взялись-то...
5 Александр056
 
05.08.14
07:02
(4) ой...)
6 ДенисЧ
 
05.08.14
07:03
А я вот так и не понял, что такое Параметры и откуда они берутся....
7 Александр056
 
05.08.14
07:14
(6) МодульВалютногоУчета --- вот это вот что такое..)
8 Александр056
 
05.08.14
07:17
да и нафиг она вообще нужна эта валюта, ток рубли используем...
9 Godofsin
 
05.08.14
07:26
прально! валютп нахер не нужна!
10 Александр056
 
05.08.14
07:42
ребят помогите разрулиться суть в общем создать внешнюю печатную форму инв 3, весь код обработки привел, подскажите ошибки, как допилить
11 Godofsin
 
05.08.14
07:44
Запрос.УстановитьПараметр("Кратность",            1);
12 Godofsin
 
05.08.14
07:44
Запрос.УстановитьПараметр("Курс",                 1);
13 Godofsin
 
05.08.14
07:45
и будь что будет! (с)
14 Cube
 
05.08.14
07:45
(10) После строки

Параметры    = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, СсылкаНаОбъект.Дата);

Добавь код:

Сообщить("Валюта: """ + ВалютаПересчета + """");
Сообщить("Дата: " + СсылкаНаОбъект.Дата);

Ну а результат покажи нам.
15 Cube
 
05.08.14
07:46
(14) И проверь, есть ли для этой валюты записи в РС "КурсыВалют".
16 Godofsin
 
05.08.14
07:47
(15) По-моему, ты его сильно нагрузил....
17 Cube
 
05.08.14
07:48
(16) Нечего филонить! :)
18 Александр056
 
05.08.14
07:49
щас после планерки попробую, отпишусь, спасибо)
19 vqwy
 
05.08.14
07:50
Приезжай в Орск, научим...
20 Александр056
 
05.08.14
07:55
(19) был 2 раза не понравился город....
21 Godofsin
 
05.08.14
07:56
(20) Орки проходу не дают? =)
22 Александр056
 
05.08.14
07:58
(21) на турнире было весело пару раз, страшные ток с виду, все фигня, все планерка)
23 Cube
 
05.08.14
08:00
(19) Продолжите фразу:

Москва: москвич, москвичка.
Орск: ???, ??? =))
24 Wobland
 
05.08.14
08:04
(23) Этнохороним     
орчанин, орчанка, орчане
25 Александр056
 
05.08.14
08:31
(14)
Валюта: "руб"
Дата: 20.05.2014 0:00:00
дату показал выбранного документа
26 Cube
 
05.08.14
08:42
(25) Значит (15).
И проверь, сколько у тебя валют с наименованием "руб" в справочнике "Валюты"...
27 Александр056
 
05.08.14
09:00
поправил на деление на 0 не ругается, теперь новая песня
{ОбщийМодуль.ОбщегоНазначения.Модуль(8196)}: Поле объекта не обнаружено (Номер)
    Номер   = СокрЛП(Документ.Номер);
28 ДенисЧ
 
05.08.14
09:01
(27) Ну вот и смотри, что ты передаешь в параметр Документ
29 Cube
 
05.08.14
09:02
(27) Ну дык у твоей обработки нет номера, епта))

строку

ОбластьМакета.Параметры.НомерДокумента           = ОбщегоНазначения.ПолучитьНомерНаПечать(ЭтотОбъект);


Замени на

ОбластьМакета.Параметры.НомерДокумента           = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
30 Александр056
 
05.08.14
09:05
да епт, надо больше спать, все в глазах плывет, спасибО) урааа епть работает) спасибо ребят, всем респект)!
31 Александр056
 
05.08.14
09:10
кому надо скинуть внешнюю печатную форму(не измененную) ИНВ-3 для документа инвентаризация товаров на складе пишите, поделюсь)
32 Cube
 
05.08.14
09:13
(31) Спасибо, обойдемся =)))
33 Godofsin
 
05.08.14
09:18
(31) Ты это... не рассбрасывался бы своим интеллектуальным трудом... продай кому-нибудь )))))
34 Александр056
 
05.08.14
09:23
(33) ну вопрос мелкий, просто я не опытный)) вы мне за так подсказывали че я буду продавать, тут не только мои "интеллектуальный труд"))))
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший