Ошибка при вызове метода контекста выполнить не задано значение параметра

   reznik911

91 — 29.07.14 — 10:42

Функция ПечатьДокумента()

Запрос = Новый Запрос;

    Запрос.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект);

    Запрос.УстановитьПараметр(«Дата»,СсылкаНаОбъект.Дата);

    Запрос.Текст =

    «ВЫБРАТЬ РАЗРЕШЕННЫЕ

    |    РеализацияТоваровУслуг.Номер,

    |    РеализацияТоваровУслуг.Дата,

    |    РеализацияТоваровУслуг.ДоговорКонтрагента,

    |    РеализацияТоваровУслуг.Контрагент КАК Получатель,

    |    РеализацияТоваровУслуг.Организация,

    |    РеализацияТоваровУслуг.Организация КАК Поставщик,

    |    РеализацияТоваровУслуг.СтруктурноеПодразделение,

    |    РеализацияТоваровУслуг.СуммаДокумента,

    |    РеализацияТоваровУслуг.ВалютаДокумента,

    |    РеализацияТоваровУслуг.УчитыватьНДС,

    |    РеализацияТоваровУслуг.СуммаВключаетНДС,

    |    РеализацияТоваровУслуг.УчитыватьАкциз,

    |    РеализацияТоваровУслуг.СуммаВключаетАкциз,

    |    РеализацияТоваровУслуг.КурсВзаиморасчетов,

    |    РеализацияТоваровУслуг.КратностьВзаиморасчетов,

    |    РеализацияТоваровУслуг.Грузополучатель,

    |    РеализацияТоваровУслуг.Доверенность,

    |    РеализацияТоваровУслуг.Склад,

    |    РеализацияТоваровУслуг.ОтпускПроизвел,

    |    РеализацияТоваровУслуг.ОтпускРазрешил,

    |    ОтветственныеЛицаСклад.ФизическоеЛицо КАК ОтпустилМОЛ ,

    |    РеализацияТоваровУслуг.ДоверенностьЧерезКого    

    |ИЗ

    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица.СрезПоследних(&Дата, ) КАК ОтветственныеЛицаСклад

    |        ПО РеализацияТоваровУслуг.Склад = ОтветственныеЛицаСклад.СтруктурнаяЕдиница

    |ГДЕ

    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент»;

    Шапка = Запрос.Выполнить().Выбрать();

    Шапка.Следующий();

    ТекстКурс = «»;

    СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания(«РеализацияТоваровУслуг»);

Запрос = Новый Запрос;

    Запрос.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект);

    Запрос.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект);

    Запрос.Текст =

    «ВЫБРАТЬ РАЗРЕШЕННЫЕ

    |    ВложенныйЗапросПоТоварам.Номенклатура,

    |    ВЫРАЗИТЬ(ВложенныйЗапросПоТоварам.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК Товар,

    |    ВложенныйЗапросПоТоварам.Номенклатура.Код КАК Код,

    |    ВложенныйЗапросПоТоварам.Номенклатура.Артикул КАК Артикул,

    |    ВложенныйЗапросПоТоварам.Количество,

    |    ВложенныйЗапросПоТоварам.КоличествоМест,

    |    ВложенныйЗапросПоТоварам.ЕдиницаИзмерения.Представление КАК ЕдиницаЦены,

    |    ВложенныйЗапросПоТоварам.ЕдиницаИзмеренияМест.Представление КАК ЕдиницаМест,

    |    ВложенныйЗапросПоТоварам.Номенклатура.БазоваяЕдиницаИзмерения КАК БазЕд,

    |    ВложенныйЗапросПоТоварам.Коэффициент,

    |    ВложенныйЗапросПоТоварам.Цена,

    |    ВложенныйЗапросПоТоварам.Сумма,

    |    ВложенныйЗапросПоТоварам.СуммаНДС,

    |    ВложенныйЗапросПоТоварам.СуммаАкциза,

    |    ВложенныйЗапросПоТоварам.ПроцентСкидкиНаценки КАК Скидка,

    |    ВложенныйЗапросПоТоварам.ПроцентАвтоматическихСкидок КАК АвтоматическаяСкидка,

    |    ВложенныйЗапросПоТоварам.ХарактеристикаНоменклатуры КАК Характеристика,

    |    ВложенныйЗапросПоТоварам.СтранаПроисхождения КАК СтранаПроисхождения,

    |    ВложенныйЗапросПоТоварам.НомерГТД КАК НомерГТД,

    |    ВложенныйЗапросПоТоварам.СерияНоменклатуры КАК Серия,

    |    ВложенныйЗапросПоТоварам.НомерСтроки КАК НомерСтроки,

    |    ВложенныйЗапросПоТоварам.Метка КАК Метка

    |ИЗ

    |    (ВЫБРАТЬ

    |        РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,

    |        РеализацияТоваровУслуг.ЕдиницаИзмерения КАК ЕдиницаИзмерения,

    |        РеализацияТоваровУслуг.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест,

    |        РеализацияТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения КАК БазЕд,

    |        РеализацияТоваровУслуг.Коэффициент,

    |        РеализацияТоваровУслуг.Цена КАК Цена,

    |        РеализацияТоваровУслуг.СтавкаНДС КАК СтавкаНДС,

    |        РеализацияТоваровУслуг.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,

    |        РеализацияТоваровУслуг.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,

    |        РеализацияТоваровУслуг.СерияНоменклатуры.НомерГТД КАК НомерГТД,

    |        РеализацияТоваровУслуг.СерияНоменклатуры.СтранаПроисхождения КАК СтранаПроисхождения,

    |        РеализацияТоваровУслуг.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

    |        РеализацияТоваровУслуг.СерияНоменклатуры КАК СерияНоменклатуры,

    |        СУММА(РеализацияТоваровУслуг.Количество) КАК Количество,

    |        СУММА(РеализацияТоваровУслуг.КоличествоМест) КАК КоличествоМест,

    |        СУММА(РеализацияТоваровУслуг.Сумма) КАК Сумма,

    |        СУММА(РеализацияТоваровУслуг.СуммаНДС) КАК СуммаНДС,

    |        СУММА(РеализацияТоваровУслуг.СуммаАкциза) КАК СуммаАкциза,

    |        МИНИМУМ(РеализацияТоваровУслуг.НомерСтроки) КАК НомерСтроки,

    |        0 КАК Метка

    |    ИЗ

    |        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг

    |    ГДЕ

    |        РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент

    |    

    |    СГРУППИРОВАТЬ ПО

    |        РеализацияТоваровУслуг.Номенклатура,

    |        РеализацияТоваровУслуг.ЕдиницаИзмерения,

    |        РеализацияТоваровУслуг.ЕдиницаИзмеренияМест,

    |        РеализацияТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения,

    |        РеализацияТоваровУслуг.Коэффициент,

    |        РеализацияТоваровУслуг.Цена,

    |        РеализацияТоваровУслуг.СтавкаНДС,

    |        РеализацияТоваровУслуг.ПроцентСкидкиНаценки,

    |        РеализацияТоваровУслуг.ПроцентАвтоматическихСкидок,

    |        РеализацияТоваровУслуг.СерияНоменклатуры,

    |        РеализацияТоваровУслуг.ХарактеристикаНоменклатуры,

    |        РеализацияТоваровУслуг.СерияНоменклатуры.НомерГТД,

    |        РеализацияТоваровУслуг.СерияНоменклатуры.СтранаПроисхождения) КАК ВложенныйЗапросПоТоварам

    |

    |ОБЪЕДИНИТЬ ВСЕ

    |

    |ВЫБРАТЬ

    |    РеализацияТоваровУслуг.Номенклатура,

    |   » + СтрокаВыборкиПоляСодержания + «,

    |    РеализацияТоваровУслуг.Номенклатура.Код,

    |    РеализацияТоваровУслуг.Номенклатура.Артикул,

    |    РеализацияТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения КАК БазЕд,

    |    Null,

    |    РеализацияТоваровУслуг.Количество,

    |    NULL,

    |    РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.Представление,

    |    NULL,

    |    РеализацияТоваровУслуг.Цена,

    |    РеализацияТоваровУслуг.Сумма,

    |    РеализацияТоваровУслуг.СуммаНДС,

    |    0,

    |    РеализацияТоваровУслуг.ПроцентСкидкиНаценки,

    |    РеализацияТоваровУслуг.ПроцентАвтоматическихСкидок КАК АвтоматическаяСкидка,

    |    NULL,

    |    NULL,

    |    NULL,

    |    NULL,

    |    РеализацияТоваровУслуг.НомерСтроки,

    |    1

    |ИЗ

    |    Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслуг

    |ГДЕ

    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент

    |

    |ОБЪЕДИНИТЬ ВСЕ

    |

    |ВЫБРАТЬ

    |    РеализацияТоваровУслуг.Номенклатура,

    |    ВЫРАЗИТЬ(РеализацияТоваровУслуг.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)),

    |    РеализацияТоваровУслуг.Номенклатура.Код,

    |    РеализацияТоваровУслуг.Номенклатура.Артикул,

    |    РеализацияТоваровУслуг.Количество,

    |    РеализацияТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения КАК БазЕд,

    |    Null,

    |    NULL,

    |    РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.Представление,

    |    NULL,

    |    РеализацияТоваровУслуг.Цена,

    |    РеализацияТоваровУслуг.Сумма,

    |    0,

    |    0,

    |    0,

    |    NULL,

    |    NULL,

    |    NULL,

    |    NULL,

    |    NULL,

    |    РеализацияТоваровУслуг.НомерСтроки,

    |    2

    |ИЗ

    |    Документ.РеализацияТоваровУслуг.ВозвратнаяТара КАК РеализацияТоваровУслуг

    |ГДЕ

    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент

    |

    |УПОРЯДОЧИТЬ ПО

    |    Метка,

    |    НомерСтроки»;

    ЗапросТовары = Запрос.Выполнить().Выгрузить();

    
    СтруктурнаяЕдиницаОрганизация = ОбщегоНазначения.ПолучитьСтруктурнуюЕдиницу(Шапка.Организация, Шапка.СтруктурноеПодразделение);

    ТабДокумент = Новый ТабличныйДокумент;

    ТабДокумент.ИмяПараметровПечати = «ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_Накладная»;

    
    Макет = ПолучитьМакет(«Накладная»);

    // Выводим шапку накладной

    ОбластьМакета = Макет.ПолучитьОбласть(«Заголовок»);

    ОбластьМакета.Параметры.ТекстЗаголовка = РаботаСДиалогами.СформироватьЗаголовокДокумента(ЭтотОбъект, «Расходная накладная»);

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

    ОбластьМакета = Макет.ПолучитьОбласть(«Поставщик»);

    ПредставлениеПоставщика = ОбщегоНазначения.ОписаниеОрганизации(ОбщегоНазначения.СведенияОЮрФизЛице(СтруктурнаяЕдиницаОрганизация, Шапка.Дата), «ПолноеНаименование,», Ложь);

    ОбластьМакета.Параметры.ПредставлениеПоставщика = ПредставлениеПоставщика;

    ОбластьМакета.Параметры.Поставщик = СтруктурнаяЕдиницаОрганизация;

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

    ОбластьМакета = Макет.ПолучитьОбласть(«Покупатель»);

    ПредставлениеПолучателя = ОбщегоНазначения.ОписаниеОрганизации(ОбщегоНазначения.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата), «ПолноеНаименование,», Ложь);

    ОбластьМакета.Параметры.ПредставлениеПолучателя = СокрЛП(ПредставлениеПолучателя);

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

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

    Если (Шапка.Получатель <> Шапка.Грузополучатель) И ЗначениеЗаполнено(Шапка.Грузополучатель) Тогда

        ОбластьМакета = Макет.ПолучитьОбласть(«Грузополучатель»);

        ПредставлениеГрузополучателя = ОбщегоНазначения.ОписаниеОрганизации(ОбщегоНазначения.СведенияОЮрФизЛице(Шапка.Грузополучатель, Шапка.Дата), «ПолноеНаименование,», Ложь);

        ОбластьМакета.Параметры.ПредставлениеГрузополучателя = СокрЛП(ПредставлениеГрузополучателя);

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

    КонецЕсли;

    
    Если ЗначениеЗаполнено(Шапка.Доверенность) Тогда

        ОбластьМакета = Макет.ПолучитьОбласть(«Доверенность»);

        ДанныеДляДоверенности = СокрЛП(Шапка.Доверенность);

        Если ЗначениеЗаполнено(Шапка.ДоверенностьЧерезКого) Тогда

            ДанныеДляДоверенности = ДанныеДляДоверенности + » выданной, »  + СокрЛП(Шапка.ДоверенностьЧерезКого);

        КонецЕсли;    

        ОбластьМакета.Параметры.Доверенность = ДанныеДляДоверенности;

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

    КонецЕсли;

    
    Если ЗначениеЗаполнено(Шапка.ДоговорКонтрагента) Тогда

        ОбластьМакета = Макет.ПолучитьОбласть(«Основание»);

        ОбластьМакета.Параметры.Основание = Шапка.ДоговорКонтрагента;

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

    КонецЕсли;

    
    Если СсылкаНаОбъект.Товары.Количество() + СсылкаНаОбъект.ВозвратнаяТара.Количество()<> 0 Тогда

        ОбластьМакета = Макет.ПолучитьОбласть(«Склад»);

        ОбластьМакета.Параметры.Склад = Шапка.Склад;

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

    КонецЕсли;    

    
    ЕстьСкидки = ЗапросТовары.Итог(«Скидка») + ЗапросТовары.Итог(«АвтоматическаяСкидка») <> 0;

    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();

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

        ВыводитьКоды = Истина;

        Колонка = «Артикул»;

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

        ВыводитьКоды = Истина;

        Колонка = «Код»;

    Иначе

        ВыводитьКоды = Ложь;

    КонецЕсли;

    
    ВыводитьГТД = Ложь;

    //Проверим нужно ли выводить страну происхождения и ГТД

    Для Каждого Товар ИЗ ЗапросТовары Цикл

        Если ЗначениеЗаполнено(Товар.НомерГТД) Или ЗначениеЗаполнено(Товар.СтранаПроисхождения) Тогда

            ВыводитьГТД = Истина;

            Прервать;

        КонецЕсли;        

    КонецЦикла;

                      
    ОбластьНомера = Макет.ПолучитьОбласть(«ШапкаТаблицы|НомерСтроки»);

    ОбластьКодов  = Макет.ПолучитьОбласть(«ШапкаТаблицы|КолонкаКодов»);

    ОбластьТовар   = Макет.ПолучитьОбласть(«ШапкаТаблицы|Товар»);

    ОбластьДанных = Макет.ПолучитьОбласть(«ШапкаТаблицы|КоличествоЦена»);

    ОбластьСкидок = Макет.ПолучитьОбласть(«ШапкаТаблицы|Скидка»);

    ОбластьСуммы  = Макет.ПолучитьОбласть(«ШапкаТаблицы|Сумма»);

    ОбластьГТД  = Макет.ПолучитьОбласть(«ШапкаТаблицы|ГТД»);

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

    Если ВыводитьКоды Тогда

        ОбластьКодов.Параметры.ИмяКолонкиКодов = Колонка;

        ТабДокумент.Присоединить(ОбластьКодов);

    КонецЕсли;

    ТабДокумент.Присоединить(ОбластьТовар);

    
    ТабДокумент.Присоединить(ОбластьДанных);

    Если ЕстьСкидки Тогда

        ТабДокумент.Присоединить(ОбластьСкидок);

    КонецЕсли;

    
    ТабДокумент.Присоединить(ОбластьСуммы);

    
    Если ВыводитьГТД Тогда

        ТабДокумент.Присоединить(ОбластьГТД);

    КонецЕсли;

    
    ОбластьКолонкаТовар = Макет.Область(«Товар»);

    Если Не ВыводитьКоды Тогда

        ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки +

        Макет.Область(«КолонкаКодов»).ШиринаКолонки;

    КонецЕсли;

    Если НЕ ЕстьСкидки Тогда

        ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки +

        Макет.Область(«СуммаБезСкидки»).ШиринаКолонки +

        Макет.Область(«СуммаСкидки»).ШиринаКолонки;

    КонецЕсли;

    
    Если НЕ ВыводитьГТД Тогда

        ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки +

        Макет.Область(«ГТД»).ШиринаКолонки;

    КонецЕсли;

    ОбластьНомера = Макет.ПолучитьОбласть(«Строка|НомерСтроки»);

    ОбластьКодов  = Макет.ПолучитьОбласть(«Строка|КолонкаКодов»);

    ОбластьТовар  = Макет.ПолучитьОбласть(«Строка|Товар»);

    ОбластьДанных = Макет.ПолучитьОбласть(«Строка|КоличествоЦена»);

    ОбластьСкидок = Макет.ПолучитьОбласть(«Строка|Скидка»);

    ОбластьСуммы  = Макет.ПолучитьОбласть(«Строка|Сумма»);

    ОбластьГТД  = Макет.ПолучитьОбласть(«Строка|ГТД»);

    Сумма    = 0;

    СуммаНДС = 0;

    ВсегоСкидок    = 0;

    ВсегоБезСкидок = 0;

    
    Для каждого ВыборкаСтрокТовары из ЗапросТовары Цикл

        Если Не ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда

            Сообщить(«В одной из строк не заполнено значение номенклатуры — строка при печати пропущена.», СтатусСообщения.Важное);

            Продолжить;

        КонецЕсли;

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

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

        
        Если ВыводитьКоды Тогда

            Если Колонка = «Артикул» Тогда

                ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Артикул;

            Иначе

                ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Код;

            КонецЕсли;

            ТабДокумент.Присоединить(ОбластьКодов);

        КонецЕсли;

        ОбластьТовар.Параметры.Заполнить(ВыборкаСтрокТовары);

        ОбластьТовар.Параметры.Товар = СокрЛП(ВыборкаСтрокТовары.Товар)

        + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары)

        + ?(ВыборкаСтрокТовары.Метка = 2, » (возвратная тара)», «»);        

        ТабДокумент.Присоединить(ОбластьТовар);

        ОбластьДанных.Параметры.БазЕд=ВыборкаСтрокТовары.БазЕд;

        ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);

        //Сухраб от

        Если ВыборкаСтрокТовары.Коэффициент > 1 Тогда

        ОбластьДанных.Параметры.ЦенаЕд=ВыборкаСтрокТовары.Цена/ВыборкаСтрокТовары.Коэффциент;

        ОбластьДанных.Параметры.КоличествоБазЕд=ВыборкаСтрокТовары.ЦенаЕд*ВыборкаСтрокТовары.Количество;

    Иначе

        ОбластьДанных.Параметры.ЦенаЕд=ВыборкаСтрокТовары.Цена;

        ОбластьДанных.Параметры.КоличествоБазЕд=ВыборкаСтрокТовары.Количество;

        //Сухраб до

        ТабДокумент.Присоединить(ОбластьДанных);

        КонецЕсли;

        // Скидка может быть NULL

        ПроцентСкидки = ?(ЗначениеЗаполнено(ВыборкаСтрокТовары.Скидка),ВыборкаСтрокТовары.Скидка,0)

        + ?(ЗначениеЗаполнено(ВыборкаСтрокТовары.АвтоматическаяСкидка),ВыборкаСтрокТовары.АвтоматическаяСкидка,0);

        Если ПроцентСкидки = 100 Тогда

            СуммаДляСкидки = Окр(ВыборкаСтрокТовары.Цена * ВыборкаСтрокТовары.Количество,2,1);

        Иначе

            СуммаДляСкидки = ВыборкаСтрокТовары.Сумма;

        КонецЕсли;

        
        Скидка = УправлениеЦенообразованием.ПолучитьСуммуСкидки(СуммаДляСкидки, ПроцентСкидки);    

        Если ЕстьСкидки Тогда

            ОбластьСкидок.Параметры.Скидка         = Скидка;

            ОбластьСкидок.Параметры.СуммаБезСкидки =  ВыборкаСтрокТовары.Сумма + Скидка;

            ТабДокумент.Присоединить(ОбластьСкидок);

        КонецЕсли;

        ОбластьСуммы.Параметры.Заполнить(ВыборкаСтрокТовары);

        
        ТабДокумент.Присоединить(ОбластьСуммы);

        Если ВыводитьГТД Тогда

            ОбластьГТД.Параметры.НомерГТДСтранаПроисхождения = ?(ЗначениеЗаполнено(ВыборкаСтрокТовары.НомерГТД),

            СокрЛП(ВыборкаСтрокТовары.НомерГТД.Код)+»,», «») + Символы.ПС + ВыборкаСтрокТовары.СтранаПроисхождения;        

            
            ТабДокумент.Присоединить(ОбластьГТД);

            
        КонецЕсли;

        
        Сумма          = Сумма       + ВыборкаСтрокТовары.Сумма +  ?((Шапка.УчитыватьАкциз И НЕ Шапка.СуммаВключаетАкциз), ВыборкаСтрокТовары.СуммаАкциза, 0);

        СуммаНДС       = СуммаНДС    + ВыборкаСтрокТовары.СуммаНДС;

        
        ВсегоСкидок    = ВсегоСкидок + Скидка;

        ВсегоБезСкидок = Сумма       + ВсегоСкидок;

        
        //прибавим к сумме акциз, если он не включен в стоимость

        ВсегоБезСкидок = ВсегоБезСкидок + ?((Шапка.УчитыватьАкциз И НЕ Шапка.СуммаВключаетАкциз), ВыборкаСтрокТовары.СуммаАкциза, 0);        

    КонецЦикла;

    // Вывести Итого

    ОбластьНомера = Макет.ПолучитьОбласть(«Итого|НомерСтроки»);

    ОбластьКодов  = Макет.ПолучитьОбласть(«Итого|КолонкаКодов»);

    ОбластьТовар  = Макет.ПолучитьОбласть(«Итого|Товар»);

    ОбластьДанных = Макет.ПолучитьОбласть(«Итого|КоличествоЦена»);

    ОбластьСкидок = Макет.ПолучитьОбласть(«Итого|Скидка»);

    ОбластьСуммы  = Макет.ПолучитьОбласть(«Итого|Сумма»);

    ОбластьГТД    = Макет.ПолучитьОбласть(«Итого|ГТД»);

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

    Если ВыводитьКоды Тогда

        ТабДокумент.Присоединить(ОбластьКодов);

    КонецЕсли;

    ТабДокумент.Присоединить(ОбластьТовар);

    
    ТабДокумент.Присоединить(ОбластьДанных);

    Если ЕстьСкидки Тогда

        ОбластьСкидок.Параметры.ВсегоСкидок    = ВсегоСкидок;

        ОбластьСкидок.Параметры.ВсегоБезСкидок = ВсегоБезСкидок;

        ТабДокумент.Присоединить(ОбластьСкидок);

    КонецЕсли;

    ОбластьСуммы.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Сумма);

    ТабДокумент.Присоединить(ОбластьСуммы);

    Если ВыводитьГТД Тогда

        ТабДокумент.Присоединить(ОбластьГТД);

    КонецЕсли;

    
    // Вывести ИтогоНДС

    Если Шапка.УчитыватьНДС Тогда

        ОбластьНомера = Макет.ПолучитьОбласть(«ИтогоНДС|НомерСтроки»);

        ОбластьКодов  = Макет.ПолучитьОбласть(«ИтогоНДС|КолонкаКодов»);

        ОбластьТовар  = Макет.ПолучитьОбласть(«ИтогоНДС|Товар»);

        ОбластьДанных = Макет.ПолучитьОбласть(«ИтогоНДС|КоличествоЦена»);

        ОбластьСкидок = Макет.ПолучитьОбласть(«ИтогоНДС|Скидка»);

        ОбластьСуммы  = Макет.ПолучитьОбласть(«ИтогоНДС|Сумма»);

        ОбластьГТД    = Макет.ПолучитьОбласть(«ИтогоНДС|ГТД»);

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

        Если ВыводитьКоды Тогда

            ТабДокумент.Присоединить(ОбластьКодов);

        КонецЕсли;

        ТабДокумент.Присоединить(ОбластьТовар);

        
        ОбластьДанных.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, «В том числе НДС:», «Сумма НДС:»);

        ТабДокумент.Присоединить(ОбластьДанных);

        Если ЕстьСкидки Тогда

            ТабДокумент.Присоединить(ОбластьСкидок);

        КонецЕсли;

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

        ТабДокумент.Присоединить(ОбластьСуммы);

        
        Если ВыводитьГТД Тогда

            ТабДокумент.Присоединить(ОбластьГТД);

        КонецЕсли;

        
        Если НЕ Шапка.СуммаВключаетНДС ТОгда

        ОбластьНомера = Макет.ПолучитьОбласть(«ИтогоСНДС|НомерСтроки»);

        ОбластьКодов  = Макет.ПолучитьОбласть(«ИтогоСНДС|КолонкаКодов»);

        ОбластьТовар  = Макет.ПолучитьОбласть(«ИтогоСНДС|Товар»);

        ОбластьДанных = Макет.ПолучитьОбласть(«ИтогоСНДС|КоличествоЦена»);

        ОбластьСкидок = Макет.ПолучитьОбласть(«ИтогоСНДС|Скидка»);

        ОбластьСуммы  = Макет.ПолучитьОбласть(«ИтогоСНДС|Сумма»);

        ОбластьГТД    = Макет.ПолучитьОбласть(«ИтогоСНДС|ГТД»);

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

        Если ВыводитьКоды Тогда

            ТабДокумент.Присоединить(ОбластьКодов);

        КонецЕсли;

        ТабДокумент.Присоединить(ОбластьТовар);

        ТабДокумент.Присоединить(ОбластьДанных);

        Если ЕстьСкидки Тогда

            ТабДокумент.Присоединить(ОбластьСкидок);

        КонецЕсли;

        ОбластьСуммы.Параметры.ВсегоСНДС = Сумма+СуммаНДС;

        ТабДокумент.Присоединить(ОбластьСуммы);

        
        Если ВыводитьГТД Тогда

            ТабДокумент.Присоединить(ОбластьГТД);

        КонецЕсли;

        
        КонецЕсли;

    КонецЕсли;

    // Вывести Сумму прописью

    ОбластьМакета = Макет.ПолучитьОбласть(«СуммаПрописью»);

    СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);

    ОбластьМакета.Параметры.ИтоговаяСтрока =»Всего наименований » + ЗапросТовары.Количество()

        + «, на сумму » + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента);

        ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента);

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

    // Вывести подписи

    ОбластьМакета = Макет.ПолучитьОбласть(«Подписи»);

    // Отпуск товара произвел

    Если ЗначениеЗаполнено(Шапка.ОтпускПроизвел) Тогда

        ФамилияИмяОтчествоФизЛица        = ФормированиеПечатныхФорм.ФамилияИмяОтчество(Шапка.ОтпускПроизвел, Шапка.Дата);

        ФамилияИмяОтчествоОтпускПроизвел = ФамилияИмяОтчествоФизЛица.Фамилия + » » + ФамилияИмяОтчествоФизЛица.Имя + » » + ФамилияИмяОтчествоФизЛица.Отчество;

        ФИООтпускПроизвел                = ОбщегоНазначения.ФамилияИнициалыФизЛица(ФамилияИмяОтчествоОтпускПроизвел);

        ОбластьМакета.Параметры.ОтветственныйПредставление = ФИООтпускПроизвел;

    Иначе//берем из ответственного по складу

        ОбластьМакета.Параметры.ОтветственныйПредставление = ОбщегоНазначения.ФамилияИнициалыФизЛица(Шапка.ОтпустилМОЛ);

    КонецЕсли;

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

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

    

КонецФункции // ПечатьДокумента()

Функция ПечатьДокумента()

Запрос = Новый Запрос;

    Запрос.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект);

    Запрос.УстановитьПараметр(«Дата»,СсылкаНаОбъект.Дата);

    Запрос.Текст =

    «ВЫБРАТЬ РАЗРЕШЕННЫЕ

    |    РеализацияТоваровУслуг.Номер,

    |    РеализацияТоваровУслуг.Дата,

    |    РеализацияТоваровУслуг.ДоговорКонтрагента,

    |    РеализацияТоваровУслуг.Контрагент КАК Получатель,

    |    РеализацияТоваровУслуг.Организация,

    |    РеализацияТоваровУслуг.Организация КАК Поставщик,

    |    РеализацияТоваровУслуг.СтруктурноеПодразделение,

    |    РеализацияТоваровУслуг.СуммаДокумента,

    |    РеализацияТоваровУслуг.ВалютаДокумента,

    |    РеализацияТоваровУслуг.УчитыватьНДС,

    |    РеализацияТоваровУслуг.СуммаВключаетНДС,

    |    РеализацияТоваровУслуг.УчитыватьАкциз,

    |    РеализацияТоваровУслуг.СуммаВключаетАкциз,

    |    РеализацияТоваровУслуг.КурсВзаиморасчетов,

    |    РеализацияТоваровУслуг.КратностьВзаиморасчетов,

    |    РеализацияТоваровУслуг.Грузополучатель,

    |    РеализацияТоваровУслуг.Доверенность,

    |    РеализацияТоваровУслуг.Склад,

    |    РеализацияТоваровУслуг.ОтпускПроизвел,

    |    РеализацияТоваровУслуг.ОтпускРазрешил,

    |    ОтветственныеЛицаСклад.ФизическоеЛицо КАК ОтпустилМОЛ ,

    |    РеализацияТоваровУслуг.ДоверенностьЧерезКого    

    |ИЗ

    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица.СрезПоследних(&Дата, ) КАК ОтветственныеЛицаСклад

    |        ПО РеализацияТоваровУслуг.Склад = ОтветственныеЛицаСклад.СтруктурнаяЕдиница

    |ГДЕ

    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент»;

    Шапка = Запрос.Выполнить().Выбрать();

    Шапка.Следующий();

    ТекстКурс = «»;

    СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания(«РеализацияТоваровУслуг»);

Запрос = Новый Запрос;

    Запрос.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект);

    Запрос.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект);

    Запрос.Текст =

    «ВЫБРАТЬ РАЗРЕШЕННЫЕ

    |    ВложенныйЗапросПоТоварам.Номенклатура,

    |    ВЫРАЗИТЬ(ВложенныйЗапросПоТоварам.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК Товар,

    |    ВложенныйЗапросПоТоварам.Номенклатура.Код КАК Код,

    |    ВложенныйЗапросПоТоварам.Номенклатура.Артикул КАК Артикул,

    |    ВложенныйЗапросПоТоварам.Количество,

    |    ВложенныйЗапросПоТоварам.КоличествоМест,

    |    ВложенныйЗапросПоТоварам.ЕдиницаИзмерения.Представление КАК ЕдиницаЦены,

    |    ВложенныйЗапросПоТоварам.ЕдиницаИзмеренияМест.Представление КАК ЕдиницаМест,

    |    ВложенныйЗапросПоТоварам.Номенклатура.БазоваяЕдиницаИзмерения КАК БазЕд,

    |    ВложенныйЗапросПоТоварам.Коэффициент,

    |    ВложенныйЗапросПоТоварам.Цена,

    |    ВложенныйЗапросПоТоварам.Сумма,

    |    ВложенныйЗапросПоТоварам.СуммаНДС,

    |    ВложенныйЗапросПоТоварам.СуммаАкциза,

    |    ВложенныйЗапросПоТоварам.ПроцентСкидкиНаценки КАК Скидка,

    |    ВложенныйЗапросПоТоварам.ПроцентАвтоматическихСкидок КАК АвтоматическаяСкидка,

    |    ВложенныйЗапросПоТоварам.ХарактеристикаНоменклатуры КАК Характеристика,

    |    ВложенныйЗапросПоТоварам.СтранаПроисхождения КАК СтранаПроисхождения,

    |    ВложенныйЗапросПоТоварам.НомерГТД КАК НомерГТД,

    |    ВложенныйЗапросПоТоварам.СерияНоменклатуры КАК Серия,

    |    ВложенныйЗапросПоТоварам.НомерСтроки КАК НомерСтроки,

    |    ВложенныйЗапросПоТоварам.Метка КАК Метка

    |ИЗ

    |    (ВЫБРАТЬ

    |        РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,

    |        РеализацияТоваровУслуг.ЕдиницаИзмерения КАК ЕдиницаИзмерения,

    |        РеализацияТоваровУслуг.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест,

    |        РеализацияТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения КАК БазЕд,

    |        РеализацияТоваровУслуг.Коэффициент,

    |        РеализацияТоваровУслуг.Цена КАК Цена,

    |        РеализацияТоваровУслуг.СтавкаНДС КАК СтавкаНДС,

    |        РеализацияТоваровУслуг.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,

    |        РеализацияТоваровУслуг.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,

    |        РеализацияТоваровУслуг.СерияНоменклатуры.НомерГТД КАК НомерГТД,

    |        РеализацияТоваровУслуг.СерияНоменклатуры.СтранаПроисхождения КАК СтранаПроисхождения,

    |        РеализацияТоваровУслуг.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

    |        РеализацияТоваровУслуг.СерияНоменклатуры КАК СерияНоменклатуры,

    |        СУММА(РеализацияТоваровУслуг.Количество) КАК Количество,

    |        СУММА(РеализацияТоваровУслуг.КоличествоМест) КАК КоличествоМест,

    |        СУММА(РеализацияТоваровУслуг.Сумма) КАК Сумма,

    |        СУММА(РеализацияТоваровУслуг.СуммаНДС) КАК СуммаНДС,

    |        СУММА(РеализацияТоваровУслуг.СуммаАкциза) КАК СуммаАкциза,

    |        МИНИМУМ(РеализацияТоваровУслуг.НомерСтроки) КАК НомерСтроки,

    |        0 КАК Метка

    |    ИЗ

    |        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг

    |    ГДЕ

    |        РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент

    |    

    |    СГРУППИРОВАТЬ ПО

    |        РеализацияТоваровУслуг.Номенклатура,

    |        РеализацияТоваровУслуг.ЕдиницаИзмерения,

    |        РеализацияТоваровУслуг.ЕдиницаИзмеренияМест,

    |        РеализацияТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения,

    |        РеализацияТоваровУслуг.Коэффициент,

    |        РеализацияТоваровУслуг.Цена,

    |        РеализацияТоваровУслуг.СтавкаНДС,

    |        РеализацияТоваровУслуг.ПроцентСкидкиНаценки,

    |        РеализацияТоваровУслуг.ПроцентАвтоматическихСкидок,

    |        РеализацияТоваровУслуг.СерияНоменклатуры,

    |        РеализацияТоваровУслуг.ХарактеристикаНоменклатуры,

    |        РеализацияТоваровУслуг.СерияНоменклатуры.НомерГТД,

    |        РеализацияТоваровУслуг.СерияНоменклатуры.СтранаПроисхождения) КАК ВложенныйЗапросПоТоварам

    |

    |ОБЪЕДИНИТЬ ВСЕ

    |

    |ВЫБРАТЬ

    |    РеализацияТоваровУслуг.Номенклатура,

    |   » + СтрокаВыборкиПоляСодержания + «,

    |    РеализацияТоваровУслуг.Номенклатура.Код,

    |    РеализацияТоваровУслуг.Номенклатура.Артикул,

    |    РеализацияТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения КАК БазЕд,

    |    Null,

    |    РеализацияТоваровУслуг.Количество,

    |    NULL,

    |    РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.Представление,

    |    NULL,

    |    РеализацияТоваровУслуг.Цена,

    |    РеализацияТоваровУслуг.Сумма,

    |    РеализацияТоваровУслуг.СуммаНДС,

    |    0,

    |    РеализацияТоваровУслуг.ПроцентСкидкиНаценки,

    |    РеализацияТоваровУслуг.ПроцентАвтоматическихСкидок КАК АвтоматическаяСкидка,

    |    NULL,

    |    NULL,

    |    NULL,

    |    NULL,

    |    РеализацияТоваровУслуг.НомерСтроки,

    |    1

    |ИЗ

    |    Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслуг

    |ГДЕ

    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент

    |

    |ОБЪЕДИНИТЬ ВСЕ

    |

    |ВЫБРАТЬ

    |    РеализацияТоваровУслуг.Номенклатура,

    |    ВЫРАЗИТЬ(РеализацияТоваровУслуг.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)),

    |    РеализацияТоваровУслуг.Номенклатура.Код,

    |    РеализацияТоваровУслуг.Номенклатура.Артикул,

    |    РеализацияТоваровУслуг.Количество,

    |    РеализацияТоваровУслуг.Номенклатура.БазоваяЕдиницаИзмерения КАК БазЕд,

    |    Null,

    |    NULL,

    |    РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.Представление,

    |    NULL,

    |    РеализацияТоваровУслуг.Цена,

    |    РеализацияТоваровУслуг.Сумма,

    |    0,

    |    0,

    |    0,

    |    NULL,

    |    NULL,

    |    NULL,

    |    NULL,

    |    NULL,

    |    РеализацияТоваровУслуг.НомерСтроки,

    |    2

    |ИЗ

    |    Документ.РеализацияТоваровУслуг.ВозвратнаяТара КАК РеализацияТоваровУслуг

    |ГДЕ

    |    РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент

    |

    |УПОРЯДОЧИТЬ ПО

    |    Метка,

    |    НомерСтроки»;

    ЗапросТовары = Запрос.Выполнить().Выгрузить();

    
    СтруктурнаяЕдиницаОрганизация = ОбщегоНазначения.ПолучитьСтруктурнуюЕдиницу(Шапка.Организация, Шапка.СтруктурноеПодразделение);

    ТабДокумент = Новый ТабличныйДокумент;

    ТабДокумент.ИмяПараметровПечати = «ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_Накладная»;

    
    Макет = ПолучитьМакет(«Накладная»);

    // Выводим шапку накладной

    ОбластьМакета = Макет.ПолучитьОбласть(«Заголовок»);

    ОбластьМакета.Параметры.ТекстЗаголовка = РаботаСДиалогами.СформироватьЗаголовокДокумента(ЭтотОбъект, «Расходная накладная»);

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

    ОбластьМакета = Макет.ПолучитьОбласть(«Поставщик»);

    ПредставлениеПоставщика = ОбщегоНазначения.ОписаниеОрганизации(ОбщегоНазначения.СведенияОЮрФизЛице(СтруктурнаяЕдиницаОрганизация, Шапка.Дата), «ПолноеНаименование,», Ложь);

    ОбластьМакета.Параметры.ПредставлениеПоставщика = ПредставлениеПоставщика;

    ОбластьМакета.Параметры.Поставщик = СтруктурнаяЕдиницаОрганизация;

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

    ОбластьМакета = Макет.ПолучитьОбласть(«Покупатель»);

    ПредставлениеПолучателя = ОбщегоНазначения.ОписаниеОрганизации(ОбщегоНазначения.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата), «ПолноеНаименование,», Ложь);

    ОбластьМакета.Параметры.ПредставлениеПолучателя = СокрЛП(ПредставлениеПолучателя);

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

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

    Если (Шапка.Получатель <> Шапка.Грузополучатель) И ЗначениеЗаполнено(Шапка.Грузополучатель) Тогда

        ОбластьМакета = Макет.ПолучитьОбласть(«Грузополучатель»);

        ПредставлениеГрузополучателя = ОбщегоНазначения.ОписаниеОрганизации(ОбщегоНазначения.СведенияОЮрФизЛице(Шапка.Грузополучатель, Шапка.Дата), «ПолноеНаименование,», Ложь);

        ОбластьМакета.Параметры.ПредставлениеГрузополучателя = СокрЛП(ПредставлениеГрузополучателя);

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

    КонецЕсли;

    

    Если ЗначениеЗаполнено(Шапка.Доверенность) Тогда

        ОбластьМакета = Макет.ПолучитьОбласть(«Доверенность»);

        ДанныеДляДоверенности = СокрЛП(Шапка.Доверенность);

        Если ЗначениеЗаполнено(Шапка.ДоверенностьЧерезКого) Тогда

            ДанныеДляДоверенности = ДанныеДляДоверенности + » выданной, »  + СокрЛП(Шапка.ДоверенностьЧерезКого);

        КонецЕсли;    

        ОбластьМакета.Параметры.Доверенность = ДанныеДляДоверенности;

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

    КонецЕсли;

    

    Если ЗначениеЗаполнено(Шапка.ДоговорКонтрагента) Тогда

        ОбластьМакета = Макет.ПолучитьОбласть(«Основание»);

        ОбластьМакета.Параметры.Основание = Шапка.ДоговорКонтрагента;

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

    КонецЕсли;

    

    Если СсылкаНаОбъект.Товары.Количество() + СсылкаНаОбъект.ВозвратнаяТара.Количество()<> 0 Тогда

        ОбластьМакета = Макет.ПолучитьОбласть(«Склад»);

        ОбластьМакета.Параметры.Склад = Шапка.Склад;

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

    КонецЕсли;    

    
    ЕстьСкидки = ЗапросТовары.Итог(«Скидка») + ЗапросТовары.Итог(«АвтоматическаяСкидка») <> 0;

    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();

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

        ВыводитьКоды = Истина;

        Колонка = «Артикул»;

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

        ВыводитьКоды = Истина;

        Колонка = «Код»;

    Иначе

        ВыводитьКоды = Ложь;

    КонецЕсли;

    
    ВыводитьГТД = Ложь;

    //Проверим нужно ли выводить страну происхождения и ГТД

    Для Каждого Товар ИЗ ЗапросТовары Цикл

        Если ЗначениеЗаполнено(Товар.НомерГТД) Или ЗначениеЗаполнено(Товар.СтранаПроисхождения) Тогда

            ВыводитьГТД = Истина;

            Прервать;

        КонецЕсли;        

    КонецЦикла;

                      

    ОбластьНомера = Макет.ПолучитьОбласть(«ШапкаТаблицы|НомерСтроки»);

    ОбластьКодов  = Макет.ПолучитьОбласть(«ШапкаТаблицы|КолонкаКодов»);

    ОбластьТовар   = Макет.ПолучитьОбласть(«ШапкаТаблицы|Товар»);

    ОбластьДанных = Макет.ПолучитьОбласть(«ШапкаТаблицы|КоличествоЦена»);

    ОбластьСкидок = Макет.ПолучитьОбласть(«ШапкаТаблицы|Скидка»);

    ОбластьСуммы  = Макет.ПолучитьОбласть(«ШапкаТаблицы|Сумма»);

    ОбластьГТД  = Макет.ПолучитьОбласть(«ШапкаТаблицы|ГТД»);

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

    Если ВыводитьКоды Тогда

        ОбластьКодов.Параметры.ИмяКолонкиКодов = Колонка;

        ТабДокумент.Присоединить(ОбластьКодов);

    КонецЕсли;

    ТабДокумент.Присоединить(ОбластьТовар);

    

    ТабДокумент.Присоединить(ОбластьДанных);

    Если ЕстьСкидки Тогда

        ТабДокумент.Присоединить(ОбластьСкидок);

    КонецЕсли;

    
    ТабДокумент.Присоединить(ОбластьСуммы);

    

    Если ВыводитьГТД Тогда

        ТабДокумент.Присоединить(ОбластьГТД);

    КонецЕсли;

    

    ОбластьКолонкаТовар = Макет.Область(«Товар»);

    Если Не ВыводитьКоды Тогда

        ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки +

        Макет.Область(«КолонкаКодов»).ШиринаКолонки;

    КонецЕсли;

    Если НЕ ЕстьСкидки Тогда

        ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки +

        Макет.Область(«СуммаБезСкидки»).ШиринаКолонки +

        Макет.Область(«СуммаСкидки»).ШиринаКолонки;

    КонецЕсли;

    

    Если НЕ ВыводитьГТД Тогда

        ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки +

        Макет.Область(«ГТД»).ШиринаКолонки;

    КонецЕсли;

    ОбластьНомера = Макет.ПолучитьОбласть(«Строка|НомерСтроки»);

    ОбластьКодов  = Макет.ПолучитьОбласть(«Строка|КолонкаКодов»);

    ОбластьТовар  = Макет.ПолучитьОбласть(«Строка|Товар»);

    ОбластьДанных = Макет.ПолучитьОбласть(«Строка|КоличествоЦена»);

    ОбластьСкидок = Макет.ПолучитьОбласть(«Строка|Скидка»);

    ОбластьСуммы  = Макет.ПолучитьОбласть(«Строка|Сумма»);

    ОбластьГТД  = Макет.ПолучитьОбласть(«Строка|ГТД»);

    Сумма    = 0;

    СуммаНДС = 0;

    ВсегоСкидок    = 0;

    ВсегоБезСкидок = 0;

    
    Для каждого ВыборкаСтрокТовары из ЗапросТовары Цикл

        Если Не ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда

            Сообщить(«В одной из строк не заполнено значение номенклатуры — строка при печати пропущена.», СтатусСообщения.Важное);

            Продолжить;

        КонецЕсли;

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

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

        

        Если ВыводитьКоды Тогда

            Если Колонка = «Артикул» Тогда

                ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Артикул;

            Иначе

                ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Код;

            КонецЕсли;

            ТабДокумент.Присоединить(ОбластьКодов);

        КонецЕсли;

        ОбластьТовар.Параметры.Заполнить(ВыборкаСтрокТовары);

        ОбластьТовар.Параметры.Товар = СокрЛП(ВыборкаСтрокТовары.Товар)

        + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары)

        + ?(ВыборкаСтрокТовары.Метка = 2, » (возвратная тара)», «»);        

        ТабДокумент.Присоединить(ОбластьТовар);

        ОбластьДанных.Параметры.БазЕд=ВыборкаСтрокТовары.БазЕд;

        ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);

        //Сухраб от

        Если ВыборкаСтрокТовары.Коэффициент > 1 Тогда

        ОбластьДанных.Параметры.ЦенаЕд=ВыборкаСтрокТовары.Цена/ВыборкаСтрокТовары.Коэффциент;

        ОбластьДанных.Параметры.КоличествоБазЕд=ВыборкаСтрокТовары.ЦенаЕд*ВыборкаСтрокТовары.Количество;

    Иначе

        ОбластьДанных.Параметры.ЦенаЕд=ВыборкаСтрокТовары.Цена;

        ОбластьДанных.Параметры.КоличествоБазЕд=ВыборкаСтрокТовары.Количество;

        //Сухраб до

        ТабДокумент.Присоединить(ОбластьДанных);

        КонецЕсли;

        // Скидка может быть NULL

        ПроцентСкидки = ?(ЗначениеЗаполнено(ВыборкаСтрокТовары.Скидка),ВыборкаСтрокТовары.Скидка,0)

        + ?(ЗначениеЗаполнено(ВыборкаСтрокТовары.АвтоматическаяСкидка),ВыборкаСтрокТовары.АвтоматическаяСкидка,0);

        Если ПроцентСкидки = 100 Тогда

            СуммаДляСкидки = Окр(ВыборкаСтрокТовары.Цена * ВыборкаСтрокТовары.Количество,2,1);

        Иначе

            СуммаДляСкидки = ВыборкаСтрокТовары.Сумма;

        КонецЕсли;

        
        Скидка = УправлениеЦенообразованием.ПолучитьСуммуСкидки(СуммаДляСкидки, ПроцентСкидки);    

        Если ЕстьСкидки Тогда

            ОбластьСкидок.Параметры.Скидка         = Скидка;

            ОбластьСкидок.Параметры.СуммаБезСкидки =  ВыборкаСтрокТовары.Сумма + Скидка;

            ТабДокумент.Присоединить(ОбластьСкидок);

        КонецЕсли;

        ОбластьСуммы.Параметры.Заполнить(ВыборкаСтрокТовары);

        
        ТабДокумент.Присоединить(ОбластьСуммы);

        Если ВыводитьГТД Тогда

            ОбластьГТД.Параметры.НомерГТДСтранаПроисхождения = ?(ЗначениеЗаполнено(ВыборкаСтрокТовары.НомерГТД),

            СокрЛП(ВыборкаСтрокТовары.НомерГТД.Код)+»,», «») + Символы.ПС + ВыборкаСтрокТовары.СтранаПроисхождения;        

            
            ТабДокумент.Присоединить(ОбластьГТД);

            
        КонецЕсли;

        

        Сумма          = Сумма       + ВыборкаСтрокТовары.Сумма +  ?((Шапка.УчитыватьАкциз И НЕ Шапка.СуммаВключаетАкциз), ВыборкаСтрокТовары.СуммаАкциза, 0);

        СуммаНДС       = СуммаНДС    + ВыборкаСтрокТовары.СуммаНДС;

        

        ВсегоСкидок    = ВсегоСкидок + Скидка;

        ВсегоБезСкидок = Сумма       + ВсегоСкидок;

        

        //прибавим к сумме акциз, если он не включен в стоимость

        ВсегоБезСкидок = ВсегоБезСкидок + ?((Шапка.УчитыватьАкциз И НЕ Шапка.СуммаВключаетАкциз), ВыборкаСтрокТовары.СуммаАкциза, 0);        

    КонецЦикла;

    // Вывести Итого

    ОбластьНомера = Макет.ПолучитьОбласть(«Итого|НомерСтроки»);

    ОбластьКодов  = Макет.ПолучитьОбласть(«Итого|КолонкаКодов»);

    ОбластьТовар  = Макет.ПолучитьОбласть(«Итого|Товар»);

    ОбластьДанных = Макет.ПолучитьОбласть(«Итого|КоличествоЦена»);

    ОбластьСкидок = Макет.ПолучитьОбласть(«Итого|Скидка»);

    ОбластьСуммы  = Макет.ПолучитьОбласть(«Итого|Сумма»);

    ОбластьГТД    = Макет.ПолучитьОбласть(«Итого|ГТД»);

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

    Если ВыводитьКоды Тогда

        ТабДокумент.Присоединить(ОбластьКодов);

    КонецЕсли;

    ТабДокумент.Присоединить(ОбластьТовар);

    

    ТабДокумент.Присоединить(ОбластьДанных);

    Если ЕстьСкидки Тогда

        ОбластьСкидок.Параметры.ВсегоСкидок    = ВсегоСкидок;

        ОбластьСкидок.Параметры.ВсегоБезСкидок = ВсегоБезСкидок;

        ТабДокумент.Присоединить(ОбластьСкидок);

    КонецЕсли;

    ОбластьСуммы.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Сумма);

    ТабДокумент.Присоединить(ОбластьСуммы);

    Если ВыводитьГТД Тогда

        ТабДокумент.Присоединить(ОбластьГТД);

    КонецЕсли;

    

    // Вывести ИтогоНДС

    Если Шапка.УчитыватьНДС Тогда

        ОбластьНомера = Макет.ПолучитьОбласть(«ИтогоНДС|НомерСтроки»);

        ОбластьКодов  = Макет.ПолучитьОбласть(«ИтогоНДС|КолонкаКодов»);

        ОбластьТовар  = Макет.ПолучитьОбласть(«ИтогоНДС|Товар»);

        ОбластьДанных = Макет.ПолучитьОбласть(«ИтогоНДС|КоличествоЦена»);

        ОбластьСкидок = Макет.ПолучитьОбласть(«ИтогоНДС|Скидка»);

        ОбластьСуммы  = Макет.ПолучитьОбласть(«ИтогоНДС|Сумма»);

        ОбластьГТД    = Макет.ПолучитьОбласть(«ИтогоНДС|ГТД»);

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

        Если ВыводитьКоды Тогда

            ТабДокумент.Присоединить(ОбластьКодов);

        КонецЕсли;

        ТабДокумент.Присоединить(ОбластьТовар);

        

        ОбластьДанных.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, «В том числе НДС:», «Сумма НДС:»);

        ТабДокумент.Присоединить(ОбластьДанных);

        Если ЕстьСкидки Тогда

            ТабДокумент.Присоединить(ОбластьСкидок);

        КонецЕсли;

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

        ТабДокумент.Присоединить(ОбластьСуммы);

        

        Если ВыводитьГТД Тогда

            ТабДокумент.Присоединить(ОбластьГТД);

        КонецЕсли;

        

        Если НЕ Шапка.СуммаВключаетНДС ТОгда

        ОбластьНомера = Макет.ПолучитьОбласть(«ИтогоСНДС|НомерСтроки»);

        ОбластьКодов  = Макет.ПолучитьОбласть(«ИтогоСНДС|КолонкаКодов»);

        ОбластьТовар  = Макет.ПолучитьОбласть(«ИтогоСНДС|Товар»);

        ОбластьДанных = Макет.ПолучитьОбласть(«ИтогоСНДС|КоличествоЦена»);

        ОбластьСкидок = Макет.ПолучитьОбласть(«ИтогоСНДС|Скидка»);

        ОбластьСуммы  = Макет.ПолучитьОбласть(«ИтогоСНДС|Сумма»);

        ОбластьГТД    = Макет.ПолучитьОбласть(«ИтогоСНДС|ГТД»);

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

        Если ВыводитьКоды Тогда

            ТабДокумент.Присоединить(ОбластьКодов);

        КонецЕсли;

        ТабДокумент.Присоединить(ОбластьТовар);

        ТабДокумент.Присоединить(ОбластьДанных);

        Если ЕстьСкидки Тогда

            ТабДокумент.Присоединить(ОбластьСкидок);

        КонецЕсли;

        ОбластьСуммы.Параметры.ВсегоСНДС = Сумма+СуммаНДС;

        ТабДокумент.Присоединить(ОбластьСуммы);

        

        Если ВыводитьГТД Тогда

            ТабДокумент.Присоединить(ОбластьГТД);

        КонецЕсли;

        
        КонецЕсли;

    КонецЕсли;

    // Вывести Сумму прописью

    ОбластьМакета = Макет.ПолучитьОбласть(«СуммаПрописью»);

    СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);

    ОбластьМакета.Параметры.ИтоговаяСтрока =»Всего наименований » + ЗапросТовары.Количество()

        + «, на сумму » + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента);

        ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента);

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

    // Вывести подписи

    ОбластьМакета = Макет.ПолучитьОбласть(«Подписи»);

    // Отпуск товара произвел

    Если ЗначениеЗаполнено(Шапка.ОтпускПроизвел) Тогда

        ФамилияИмяОтчествоФизЛица        = ФормированиеПечатныхФорм.ФамилияИмяОтчество(Шапка.ОтпускПроизвел, Шапка.Дата);

        ФамилияИмяОтчествоОтпускПроизвел = ФамилияИмяОтчествоФизЛица.Фамилия + » » + ФамилияИмяОтчествоФизЛица.Имя + » » + ФамилияИмяОтчествоФизЛица.Отчество;

        ФИООтпускПроизвел                = ОбщегоНазначения.ФамилияИнициалыФизЛица(ФамилияИмяОтчествоОтпускПроизвел);

        ОбластьМакета.Параметры.ОтветственныйПредставление = ФИООтпускПроизвел;

    Иначе//берем из ответственного по складу

        ОбластьМакета.Параметры.ОтветственныйПредставление = ОбщегоНазначения.ФамилияИнициалыФизЛица(Шапка.ОтпустилМОЛ);

    КонецЕсли;

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

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

КонецФункции // ПечатьДокумента()

Татьяна77777

0 / 0 / 0

Регистрация: 10.02.2013

Сообщений: 4

1

1C 8.x

Не задано значение параметра

10.02.2013, 01:26. Показов 10221. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Пытаюсь при изменении количества поставить последнюю цену из регистра свединий, выдает вот такую ошибку((
Может кто поможет разобраться, а то я уже не знаю, что с этим делать…
Делаю в 8.2, приложение управляемое.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
&НаСервере
Функция ПолучитьЦену (Знач а)
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", Объект);
    Запрос.УстановитьПараметр("ТекущаяНоменклатура", а);
    Запрос.Текст =
    "ВЫБРАТЬ
    |ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |Документ.Приход.Товар Как ПриходТовар
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    |ПО ПриходТовар.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |ГДЕ (ПриходТовар.Ссылка В (&ТекущийДокумент) И ПриходТовар.ТипЦены = ЦеныНоменклатурыСрезПоследних.ТипЦены И ПриходТовар.Номенклатура В (&а))";
    Результат = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Возврат ВыборкаДетальныеЗаписи.Цена;
КонецФункции
 
&НаКлиенте
Процедура ТоварКоличествоПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Товар.ТекущиеДанные;
    СтрокаТЧ.Цена =  ПолучитьЦену(СтрокаТЧ.Номенклатура);
    СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
КонецПроцедуры

{Документ.Приход.Форма.ФормаДокумента.Форма(16)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
{(7, 138)}: Не задано значение параметра «а»
ГДЕ (ПриходТовар.Ссылка В (&ТекущийДокумент) И ПриходТовар.ТипЦены = ЦеныНоменклатурыСрезПоследних.ТипЦены И ПриходТовар.Номенклатура В (<<?>>&а))



0



Dethmontt

Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

10.02.2013, 01:38

2

1C
1
Запрос.УстановитьПараметр("а", а);

Добавлено через 44 секунды
Т.к.

Цитата
Сообщение от Татьяна77777
Посмотреть сообщение

= ЦеныНоменклатурыСрезПоследних.ТипЦены И ПриходТовар.Номенклатура В (&а))»;

Добавлено через 1 минуту
И вообще запрос кривой какойто. Зачем вы в запросе еще и документы выбираете?



1



0 / 0 / 0

Регистрация: 10.02.2013

Сообщений: 4

10.02.2013, 01:46

 [ТС]

3

Блиин) с параметром ступила, мозг не работает уже…

Мой запрос выводит всю номенклатуру, что есть в документе Приход и ее цену последнюю. По крайней мере так в консоли запросов выходит.

А мне-то нужна конкретная номенклатура, к каждой строке своя или я чего-то не понимаю??

Теперь кстати выдает, что неверный параметр(



0



Dethmontt

Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

10.02.2013, 02:15

4

А документ зачем в запросе???? Вы же из него ничего не выбираете?

Добавлено через 4 минуты
Достаточна

1C
1
2
3
4
5
6
Запрос.УстановитьПараметр("МойТипЦены", Объект.ТипЦены);
    Запрос.УстановитьПараметр("Номенклатура", а);
"ВЫБРАТЬ
    |ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,Номенклатура=&Номенклатура И ТипЦены = &МойТипЦены) КАК ЦеныНоменклатурыСрезПоследних";

Добавлено через 10 минут
Лучше простовлять цену при изменении номенклатуры, а не количества!

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
&НаСервереБезКонтекста
Функция ПолучитьЦену (Номенклатура,ТипЦены)
 
Цена = 0;
Запрос = Новый Запрос("ВЫБРАТЬ
    |ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,Номенклатура=&Номенклатура И ТипЦены = &МойТипЦены) КАК ЦеныНоменклатурыСрезПоследних");
    Запрос.УстановитьПараметр("МойТипЦены", ТипЦены);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Результат = Запрос.Выполнить().Выбрать();
    Если Результат.Следующий() Тогда
       Цена = Результат.Цена;
    КонецЕсли;
    Возврат Цена;
КонецФункции
 
&НаКлиенте
Процедура ТоварНоменклатураПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Товар.ТекущиеДанные;
    СтрокаТЧ.Цена =  ПолучитьЦену(СтрокаТЧ.Номенклатура,Объект.ТипЦены);
    СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
КонецПроцедуры



0



Татьяна77777

0 / 0 / 0

Регистрация: 10.02.2013

Сообщений: 4

10.02.2013, 02:19

 [ТС]

5

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&НаСервере
Функция ПолучитьЦену (Знач а, Знач в)
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Номенклатура", а);
    Запрос.УстановитьПараметр("МойТипЦены", в);
 
Запрос.Текст =
"ВЫБРАТЬ
    |ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    |РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,Номенклатура=&Номенклатура И ТипЦены = &МойТипЦены) КАК ЦеныНоменклатурыСрезПоследних";
    Результат = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Возврат ВыборкаДетальныеЗаписи.Цена;
КонецФункции
 
&НаКлиенте
Процедура ТоварКоличествоПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Товар.ТекущиеДанные;
    СтрокаТЧ.Цена =  ПолучитьЦену(СтрокаТЧ.Номенклатура, СтрокаТЧ.ТипЦены);
    СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
КонецПроцедуры

Теперь так… у меня ТипЦены тоже в табличной части. Ошибок теперь нет, но при изменении количества цена все равно не меняется(



0



Dethmontt

Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

10.02.2013, 02:24

6

Скопируйте мой код! Замените Объект.ТипЦены на СтрокаТЧ.ТипЦены и найдите 10 отличий!

Добавлено через 1 минуту
Добавляете еще одно событие ТоварКоличествоПриИзменении(Элемент)
В нем достаточно будет написать

1C
1
2
СтрокаТЧ = Элементы.Товар.ТекущиеДанные;
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;



0



0 / 0 / 0

Регистрация: 10.02.2013

Сообщений: 4

10.02.2013, 02:25

 [ТС]

7

ААААААА!!! Спасибо огромное))) Заработало )



0



С подобной ошибкой любой разработчик встречался хотя бы один раз. Ее непосредственная причина – попытка запроса использовать параметр, который в запрос не был помещен.

Почему так происходит? Код постоянно меняется, текст запросов, параметры могут переименовываться, добавляться, удаляться, но в ходе работы формируются различные приемы и методики, позволяющие данную проблему нивелировать.

При инициализации запроса, параметры необходимо указывать до текста запроса. Таким образом, еще до чтения текста, вы объявляете параметры, с которым необходимо работать. Также это позволяет улучшить самоконтроль – сначала определяем параметр, а потом его используем.

Бывают ситуации, когда параметры в зависимости от различных условий не нужны.

Самое простое решение – это использовать дополнительный параметр с типом Булево, определяющий необходимость использования основного параметра.

	Функция ЗапросОстатковПоСкладу(Дата, Организация = Неопределено)			
		Запрос = Новый Запрос;
			Запрос.УстановитьПараметр("ДатаОстатков", Дата);
			Запрос.УстановитьПараметр("Организация", Организация);
			Запрос.УстановитьПараметр("ОтборПоОрганизации", Организация              Неопределено);
			Запрос.Текст =
			"ВЫБРАТЬ
			|       	Остатки.Организация,
			|       	Остатки.Номенклатура,
			|       	Остатки.КоличествоОстаток
			|ИЗ
			|       	РегистрНакопления.ТоварыНаСкладе.Остатки(
			|                              	&ДатаОстатков,
			|                              	НЕ &ОтборПоОрганизации
			|                                          	ИЛИ Организация = &Организация) КАК 
                                                            Остатки"
			;
		
		РезультатЗапроса = Запрос.Выполнить();				
		Возврат РезультатЗапроса;				
	КонецФункции

Такой запрос не вполне оптимален с точки зрения быстродействия (из-за конструкции ИЛИ в условии отбора), но если потери быстродействия терпимы, то ими можно пренебречь.

Более технологичным решением может быть использование возможностей компоновщика. Для простых случаев подойдет построитель запроса. Вы можете инициализировать запрос построителем, а параметры добавлять динамически.

 Функция ЗапросОстатковПоСкладу(Дата, Организация = Неопределено)
	ТекстЗапроса =
	 "ВЫБРАТЬ"
	 | 	Остатки.Организация,
	 | 	Остатки.Номенклатура,
	 | 	Остатки.КоличествоОстаток
	 |ИЗ
	 | 	РегистрНакопления.ТоварыНаСкладе.Остатки(&ДатаОстатков, ) КАК 
              Остатки"
	 Построитель = Новый ПостроительЗапроса(пТекстЗапроса);
	 Построитель.ЗаполнитьНастройки();
	 Если Организация <> Неопределено Тогда
		ЭлементОтбора = Построитель.Отбор.Добавить("Организация", "Организация");
		ЭлементОтбора.Использование = Истина;
		ЭлементОтбора.Значение =     Организация;
		ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
		Запрос = Построитель.ПолучитьЗапрос();
	 Иначе
		Запрос = Новый Запрос;
		Запрос.Текст = ТекстЗапроса;
	 КонецЕсли;
	 Запрос.УстановитьПараметр("ДатаОстатков", Дата); 
	 РезультатЗапроса = Запрос.Выполнить();
	 Возврат РезультатЗапроса;
 КонецФункции

Данный код приведен в качестве примера и скомпонован с целью повышения наглядности. Рекомендуется не использовать его в чистом виде, а реализовать в виде полноценного инструмента по динамической работе с отборами в запросе.

  1. ТЕСТ

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

    ошибка:
    Ошибка при выполнении обработчика — ‘{Документ.Реализация(55)}: Ошибка при вызове метода контекста (Выполнить): {(9, 98)}: Не задано значение параметра «СписокНоменклатурыДокумента»
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатура.Остатки(&МоментВремени, Номенклатура В (<<?>>&СписокНоменклатурыДокумента)) КАК ОстаткиНоменклатураОстатки’
    по причине:
    {Документ.Реализация(55)}: Ошибка при вызове метода контекста (Выполнить): {(9, 98)}: Не задано значение параметра «СписокНоменклатурыДокумента»
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатура.Остатки(&МоментВремени, Номенклатура В (<<?>>&СписокНоменклатурыДокумента)) КАК ОстаткиНоменклатураОстатки

    по причине:
    {(9, 98)}: Не задано значение параметра «СписокНоменклатурыДокумента»
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатура.Остатки(&МоментВремени, Номенклатура В (<<?>>&СписокНоменклатурыДокумента)) КАК ОстаткиНоменклатураОстатки

    З.Ы.: замучались искать в чем причина, выкладываю на всякий случай базу
    ОЧЕНЬ ПРОСИМ) ПЖАЛУЙСТА!

    Вложения:


  2. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Лень самим проверить?

    Запрос.УстановитьПараметр("[b]СпислкНоменклатурыДокумента[/b]",ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));
    
  3. Спасиб, замучались проверять, ет уже не по глазам было, но возникла другая проблема:

    Ошибка при выполнении обработчика — ‘{Документ.Реализация(70)}: Поле объекта не обнаружено (Номенклатура)’
    по причине:
    {Документ.Реализация(70)}: Поле объекта не обнаружено (Номенклатура)


  4. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Количество ошибок в коде просто огромное.
    1.

      Если ВыборкаРезультатаЗапроса.Номенклатура=Перечисления.Номенклатура Тогда
    

    Это вообще как синтаксис контроль прошло?
    2. Есть такая строка:

    Движение.Номенклатура=ВыборкаРезультатаЗапроса.Номенклатура;
    

    А есть такая:

    Движение.Номенклатуры = ВыборкаРезультатаЗапроса.Номенклатуры;
    

    Вы банально код проверьте — кто же так пишет?

  5. ну прошло, а кто так пишет? так самоучки, никто не объяснял, так по поводу последней проблемы в этом дело? то что подобные строки с «=» напортачили?


  6. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Да, действительно пройдет :)
    Так а что там должно быть? Какой тип может быть в Номенклатуре?
    Код вообще странный какой-то…

    Если тип там один — то условие вообще не нужно, если тип Справочник, то тогда уж надо писать так:

     Если ТипЗнч(ВыборкаРезультатаЗапроса.Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда
    


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

  • Ошибка при вызове метода контекста выполнить задачу
  • Ошибка при вызове метода контекста save as
  • Ошибка при вызове метода контекста выполнить выборка запрос выполнить выбрать
  • Ошибка при вызове метода контекста range произошла исключительная ситуация 0x800a03ec
  • Ошибка при вызове метода контекста вызватьhttpметод