Имя: Пароль:
1C
1С v8
УТ 10.3 ТОРГ - 29 для НТТ с количественно суммовым учетом тары
0 ElidanPro
 
31.08.15
05:35
Добрый день товарищи. Суть проблемы в следующем. Взял отчет торг 29 из типовой ут.
Когда делаем поступление товаров и услуг в НТТ, он пишет в регистр Остатки товаров в НТТ, тара тоже попадает количество но без цены. Кладовщики хотят чтоб было видно стоимость и сумму тары по приходу и расходу.
Цену я думал можно взять из документа. Не получается.

Процедура ОбновитьОтчет() Экспорт

    Если Не ЗначениеЗаполнено(ДатаНач) ИлИ Не ЗначениеЗаполнено(ДатаКон) Тогда
        Предупреждение("Не выбран период!");
        Возврат;
    КонецЕсли;

    Если Не ЗначениеЗаполнено(Склад) Тогда
        Предупреждение("Не выбран склад!");
        Возврат;
    КонецЕсли;

    Если Склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый Тогда
        Предупреждение("Отчет можно формировать только по складам с видом ""Розничный"" или ""НТТ""!");
        Возврат;
    КонецЕсли;

    мТабДок = ЭлементыФормы.ДокументРезультат;

    мТабДок.Очистить();

    Макет = ЭтотОбъект.ПолучитьМакет("Макет");

    // Выведем заголовок.
    СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация, ДатаКон);

    ВыбМОЛ = РегистрыСведений.ОтветственныеЛица.ПолучитьПоследнее(КонецДня(ДатаКон), Новый Структура("СтруктурнаяЕдиница", Склад)).ФизическоеЛицо;

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

    ОбластьМакета.Параметры.Номер = НомерОтчета;
    ВысотаЗаголовка = ОбластьМакета.ВысотаТаблицы;

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

    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ПовторятьПриПечатиСтроки = мТабДок.Область(1 + ВысотаЗаголовка, ,2 + ВысотаЗаголовка);

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

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата1", НачалоДня(ДатаНач));
    Запрос.УстановитьПараметр("Дата2", КонецДня(ДатаКон));
    Запрос.УстановитьПараметр("Склад", Склад);
    
    //
    Запрос.УстановитьПараметр("Тара",Перечисления.ТоварТара.Тара);

    Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
        ТекстЗапроса = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
|    NULL КАК Док,
|    NULL КАК ДатаДок,
|    NULL КАК НомерДок,
|    СУММА(ОстаткиТоваров.КоличествоНачальныйОстаток * ОстаткиТоваров.ЦенаВРознице) КАК НачОст,
|    СУММА(ОстаткиТоваров.КоличествоКонечныйОстаток * ОстаткиТоваров.ЦенаВРознице) КАК КонОст,
|    
|    СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход > 0 ТОГДА
|            (ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход) * ОстаткиТоваров.ЦенаВРознице
|        ИНАЧЕ
|            0.00
|        КОНЕЦ
|    ) КАК Приход,
|    СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход > 0 ТОГДА
|            (ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход) * ОстаткиТоваров.ЦенаВРознице
|        ИНАЧЕ
|            0.00
|        КОНЕЦ
|    ) КАК Расход,
|    //-------------------------тара
|    СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.ТоварТара=&Тара ТОГДА
|            (ОстаткиТоваров.КоличествоНачальныйОстаток)
|        ИНАЧЕ
|            0.00
|        КОНЕЦ
|    ) КАК НачОстТара,
|    СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.ТоварТара=&Тара ТОГДА
|            (ОстаткиТоваров.КоличествоКонечныйОстаток)
|        ИНАЧЕ
|            0.00
|        КОНЕЦ
|    ) КАК КонОстТара,
|    СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.ТоварТара=&Тара ТОГДА
|            ВЫБОР КОГДА (ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход)>0 ТОГДА
|            (ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход)
|            ИНАЧЕ
|            0.00
|            КОНЕЦ
|        КОНЕЦ
|    ) КАК ПриходТара,
|
|    СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.ТоварТара=&Тара ТОГДА
|            ВЫБОР КОГДА (ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход)>0 ТОГДА
|            (ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход)
|            ИНАЧЕ
|            0.00
|            КОНЕЦ
|        КОНЕЦ
|    ) КАК РасходТара
|
|    
|ИЗ
|    РегистрНакопления.ТоварыВНТТ.ОстаткиИОбороты(&Дата1, &Дата2, , , Склад = &Склад) КАК ОстаткиТоваров
|ИМЕЮЩИЕ
|    СУММА(ОстаткиТоваров.КоличествоНачальныйОстаток * ОстаткиТоваров.ЦенаВРознице) <> 0.00
|    ИЛИ СУММА(ОстаткиТоваров.КоличествоКонечныйОстаток * ОстаткиТоваров.ЦенаВРознице) <> 0.00
|    ИЛИ СУММА(ВЫБОР КОГДА ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход > 0 ТОГДА
|                    (ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход) * ОстаткиТоваров.ЦенаВРознице
|                    ИНАЧЕ 0.00 КОНЕЦ) <> 0.00
|    ИЛИ СУММА(ВЫБОР КОГДА ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход > 0 ТОГДА
|                    (ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход) * ОстаткиТоваров.ЦенаВРознице
|                    ИНАЧЕ 0.00 КОНЕЦ) <> 0.00
|    ////-------------------------тара
|    ИЛИ СУММА(ОстаткиТоваров.КоличествоНачальныйОстаток) <> 0.00
|    ИЛИ СУММА(ОстаткиТоваров.КоличествоКонечныйОстаток)  <> 0.00
|    ИЛИ СУММА(ВЫБОР КОГДА ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход > 0 ТОГДА
|                    (ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход)
|                    ИНАЧЕ 0.00 КОНЕЦ) <> 0.00
|    ИЛИ СУММА(ВЫБОР КОГДА ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход > 0 ТОГДА
|                    (ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход)
|                    ИНАЧЕ 0.00 КОНЕЦ) <> 0.00
|
|                                    
|        
|        
|    
|
|
|;
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
|    ОстаткиТоваров.Регистратор КАК Док,
|    ОстаткиТоваров.Период КАК ДатаДок,
|    ОстаткиТоваров.Регистратор.Номер КАК НомерДок,
|    СУММА(ОстаткиТоваров.КоличествоНачальныйОстаток * ОстаткиТоваров.ЦенаВРознице) КАК НачОст,
|    СУММА(ОстаткиТоваров.КоличествоКонечныйОстаток * ОстаткиТоваров.ЦенаВРознице) КАК КонОст,
|    СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход > 0 ТОГДА
|            (ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход) * ОстаткиТоваров.ЦенаВРознице
|        ИНАЧЕ
|            0
|        КОНЕЦ
|    ) КАК Приход,
|    СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход > 0 ТОГДА
|            (ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход) * ОстаткиТоваров.ЦенаВРознице
|        ИНАЧЕ
|            0
|        КОНЕЦ
|    ) КАК Расход,
|    //-------------------------тара
|    ЕСТЬNULL(СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.ТоварТара=&Тара ТОГДА
|            (ОстаткиТоваров.КоличествоНачальныйОстаток)
|        КОНЕЦ
|    ),0) КАК НачОстТара,
|
|    ЕСТЬNULL(СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.ТоварТара=&Тара ТОГДА
|            (ОстаткиТоваров.КоличествоКонечныйОстаток)
|        КОНЕЦ
|    ),0) КАК КонОстТара,
|
|    ЕСТЬNULL(СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.ТоварТара=&Тара ТОГДА
|            ВЫБОР КОГДА (ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход)>0 ТОГДА
|            (ОстаткиТоваров.КоличествоПриход - ОстаткиТоваров.КоличествоРасход)
|            КОНЕЦ
|        КОНЕЦ
|    ),0) КАК ПриходТара,
|
|    ЕСТЬNULL(СУММА(
|        ВЫБОР КОГДА ОстаткиТоваров.ТоварТара=&Тара ТОГДА
|            ВЫБОР КОГДА (ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход)>0 ТОГДА
|            (ОстаткиТоваров.КоличествоРасход - ОстаткиТоваров.КоличествоПриход)
|            КОНЕЦ
|        КОНЕЦ
|    ),0) КАК РасходТара
|
|ИЗ
|    РегистрНакопления.ТоварыВНТТ.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , Склад = &Склад) КАК ОстаткиТоваров
|СГРУППИРОВАТЬ ПО
|    ОстаткиТоваров.Регистратор,
|    ОстаткиТоваров.Период,
|    ОстаткиТоваров.Регистратор.Номер
|УПОРЯДОЧИТЬ ПО
|    ДатаДок
|";
    КонецЕсли;

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

    МассивРезультатов = Запрос.ВыполнитьПакет();
    РезултатОстаков = МассивРезультатов[0];
    РезультатЗапроса = МассивРезультатов[1];

    Если РезултатОстаков.Пустой() Тогда
        НачОст = 0;
        КонОст = 0;
    Иначе
        ВыборкаСтрокаОстатков = РезултатОстаков.Выбрать();
        ВыборкаСтрокаОстатков.Следующий();
        НачОст = ВыборкаСтрокаОстатков.НачОст;
        КонОст = ВыборкаСтрокаОстатков.КонОст;
        НачОстТара = ВыборкаСтрокаОстатков.НачОстТара;
        КонОстТара = ВыборкаСтрокаОстатков.КонОстТара;
    КонецЕсли;

    ОбластьМакета = Макет.ПолучитьОбласть("ОстатокНачала");
    ОбластьМакета.Параметры.ДатаНачала = "Остаток на " + Формат(ДатаНач, "ДЛФ=Д");
    ОбластьМакета.Параметры.НачСтоимостьВсего = ОбщегоНазначения.ФорматСумм(НачОст);
    ОбластьМакета.Параметры.НачСтоимостьТара  = ОбщегоНазначения.ФорматСумм(НачОстТара);
    мТабДок.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("Приход");
    мТабДок.Вывести(ОбластьМакета);

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

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

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

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

    мТабДок.ВывестиГоризонтальныйРазделительСтраниц();

    ОбластьМакета = Макет.ПолучитьОбласть("Расход");
    мТабДок.Вывести(ОбластьМакета);

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

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

    ОбластьМакета = Макет.ПолучитьОбласть("ИтогоРасход");
    ОбластьМакета.Параметры.РасхСтоимостьВсего = ОбщегоНазначения.ФорматСумм(Расход);
    ОбластьМакета.Параметры.РасхСтоимостьТара  = ОбщегоНазначения.ФорматСумм(РасходТара);
    мТабДок.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("ОстатокКонец");
    ОбластьМакета.Параметры.ДатаКонца = "Остаток на " + Формат(ДатаКон, "ДЛФ=Д");
    ОбластьМакета.Параметры.КонСтоимостьВсего = ОбщегоНазначения.ФорматСумм(КонОст);
    ОбластьМакета.Параметры.КонСтоимостьТара  = ОбщегоНазначения.ФорматСумм(КонОстТара);
    мТабДок.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
    ОбластьМакета.Параметры.МОЛ = ?(ЗначениеЗаполнено(ВыбМОЛ), ВыбМОЛ, "");
    мТабДок.Вывести(ОбластьМакета);

    мТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиСтроки;

    НомерОтчета = НомерОтчета + 1;

КонецПроцедуры // ОбновитьОтчет()
1 ElidanPro
 
31.08.15
05:46
При выполнении запроса выводит только количество. Так как в регистре нет данных о цене.