Имя: Пароль:
1C
1С v8
Анализ заказа покупателя
0 ArikiteO
 
16.10.13
15:10
Почтеннейшие гуру!

Прошу помочь разобраться в следующей ситуации:

Конфигурация УТ 10.2 на 8.1
Документ Заказа покупателя.
У пользователя есть потребность оформлять документ наполняя его номенклатурой, разделяя одну позицию на несколько строк табл. части документа для того чтобы одной строкой зарезервировать товар имеющийся на складе в свободном остатке, второй строкой формируется заказ поставщику.

рис. 1 http://www.picshare.ru/view/3139481/

При формировании отчета Анализ заказа покупателя, который выведен в отдельную процедуру  и вызывается из формы документа Заказ покупателя получаем отчет
отраженный на рис. 2

рис. 2 http://www.picshare.ru/view/3139495/

Согласно данному рисунку видим что в резерве находится 2 позиции, хотя согласно штатному отчету (рис. 3) очевидно, что в резерве по данному заказу покупателя находится 1 шт. выделенной в рисунке позиции.

рис. 3 http://www.picshare.ru/view/3139509/

Как представляется отчет Анализа заказа покупателя (выведенный в отдельную процедуру и вызываемый из формы документа) при анализе резерва берет значение резерва по компании в целом, а необходимо, чтобы в данный отчет попадало значение резерва позиции по конкретному документу - иными словами сколько зарезервировано по документу - столько и нужно увидеть в данном отчете (повторюсь - сейчас выводится резерв в целом по компании).

Т.е. задача такова: в выведенном в отдельную процедуру отчете анализа заказа покупателя нужно получать значение резерва позиции сформированного по данному документу.

Почтеннейшие Гуру, помогите пжл. разобраться где беда.

Ниже код выведенного в отдельную процедуру отчета:

[code]
//Формирует текст запроса, исполняет запрос и выводит результат в табличный документ.
//
Процедура СформироватьОтчет(ДокументРезультат) Экспорт

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

    ТипЗначЗаказ = ТипЗнч(Заказ);
    ТипЗаказа = ?(ТипЗначЗаказ = Тип("ДокументСсылка.ЗаказПоставщику")
        ИЛИ ТипЗначЗаказ = Тип("ДокументСсылка.СчетНаОплатуПоставщика"), "Поставщику", "Покупателя");

    // Формируем текст запроса по номенклатуре анализируемого заказа.

    Запрос = Новый Запрос;
    Если ТипЗаказа = "Покупателя" Тогда
        // Начло запроса
        Запрос.Текст="ВЫБРАТЬ
                     // выбираем из документа Заказ покупателя
                     |    ЗаказПокупателяТовары.НомерСтроки КАК НомерСтроки,
                     |    ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
                     |    ЗаказПокупателяТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
                     |ПОМЕСТИТЬ ВТ_НоменклатураЗаказа
                     |ИЗ
                     |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
                     |ГДЕ
                     |    ЗаказПокупателяТовары.Ссылка = &Заказ
                     |
                     |ИНДЕКСИРОВАТЬ ПО
                     |    Номенклатура,
                     |    ХарактеристикаНоменклатуры
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     |    МИНИМУМ(КорректировкаЗаказаПокупателяТовары.НомерСтроки) КАК НомерСтроки,
                     |    КорректировкаЗаказаПокупателяТовары.Номенклатура,
                     |    КорректировкаЗаказаПокупателяТовары.ХарактеристикаНоменклатуры
                     |ПОМЕСТИТЬ ВТ_Номенклатура
                     |ИЗ
                     |    Документ.КорректировкаЗаказаПокупателя.Товары КАК КорректировкаЗаказаПокупателяТовары
                     |ГДЕ
                     |    КорректировкаЗаказаПокупателяТовары.Ссылка.ЗаказПокупателя = &Заказ
                     |    И (НЕ КорректировкаЗаказаПокупателяТовары.Номенклатура В
                     |                (ВЫБРАТЬ
                     |                    ВТ_НоменклатураЗаказа.Номенклатура
                     |                ИЗ
                     |                    ВТ_НоменклатураЗаказа))
                     |
                     |СГРУППИРОВАТЬ ПО
                     |    КорректировкаЗаказаПокупателяТовары.Номенклатура,
                     |    КорректировкаЗаказаПокупателяТовары.ХарактеристикаНоменклатуры
                     |
                     |ОБЪЕДИНИТЬ ВСЕ
                     |
                     |ВЫБРАТЬ
                     |    МИНИМУМ(ВТ_НоменклатураЗаказа.НомерСтроки),
                     |    ВТ_НоменклатураЗаказа.Номенклатура,
                     |    ВТ_НоменклатураЗаказа.ХарактеристикаНоменклатуры
                     |ИЗ
                     |    ВТ_НоменклатураЗаказа КАК ВТ_НоменклатураЗаказа
                     |
                     |СГРУППИРОВАТЬ ПО
                     |    ВТ_НоменклатураЗаказа.Номенклатура,
                     |    ВТ_НоменклатураЗаказа.ХарактеристикаНоменклатуры
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     // выборка резерва
                     |ВЫБРАТЬ
                     |    ТоварыНаСкладахОстатки.КоличествоОстаток,
                     |    ВТ_Номенклатура.Номенклатура КАК Номенклатура,
                     |    ВТ_Номенклатура.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                     |    ВТ_Номенклатура.НомерСтроки,
                     // по резерву смотреть можно здесь
                     |    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК Резерв,      
                     |    ВЫБОР
                     |        КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
                     |            ТОГДА 0
                     |        ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток
                     |    КОНЕЦ - ВЫБОР
                     |        КОГДА ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
                     |            ТОГДА 0
                     |        ИНАЧЕ ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
                     |    КОНЕЦ КАК СвободныйОстаток
                     |ПОМЕСТИТЬ ВТ_ОстаткиВосьмаяЛиния
                     |ИЗ
                     |    ВТ_Номенклатура КАК ВТ_Номенклатура
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                     |                &ДатаАнализа,
                     |                Склад = &ВосьмаяЛиния
                     |                    И Номенклатура В
                     |                        (ВЫБРАТЬ РАЗЛИЧНЫЕ
                     |                            ВТ_Номенклатура.Номенклатура
                     |                        ИЗ
                     |                            ВТ_Номенклатура)
                     |                    И ХарактеристикаНоменклатуры В
                     |                        (ВЫБРАТЬ РАЗЛИЧНЫЕ
                     |                            ВТ_Номенклатура.ХарактеристикаНоменклатуры
                     |                        ИЗ
                     |                            ВТ_Номенклатура)) КАК ТоварыНаСкладахОстатки
                     |        ПО ВТ_Номенклатура.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
                     |            И ВТ_Номенклатура.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                     |                &ДатаАнализа,
    //                 |                ДокументРезерва = &Заказ,
                     |                Склад = &ВосьмаяЛиния
                     |                    И Номенклатура В
                     |                        (ВЫБРАТЬ РАЗЛИЧНЫЕ
                     |                            ВТ_Номенклатура.Номенклатура
                     |                        ИЗ
                     |                            ВТ_Номенклатура)
                     |                    И ХарактеристикаНоменклатуры В
                     |                        (ВЫБРАТЬ РАЗЛИЧНЫЕ
                     |                            ВТ_Номенклатура.ХарактеристикаНоменклатуры
                     |                        ИЗ
                     |                            ВТ_Номенклатура)) КАК ТоварыВРезервеНаСкладахОстатки
                     |        ПО ВТ_Номенклатура.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
                     |            И ВТ_Номенклатура.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
                     |
                     |ИНДЕКСИРОВАТЬ ПО
                     |    Номенклатура,
                     |    ХарактеристикаНоменклатуры
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     // анализ резерва
                     |ВЫБРАТЬ
                     |    ВТ_ОстаткиВосьмаяЛиния.НомерСтроки,
                     |    ВТ_ОстаткиВосьмаяЛиния.Номенклатура КАК Номенклатура,
                     |    ВТ_ОстаткиВосьмаяЛиния.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                     |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокЛаборатория,
                     |    ВТ_ОстаткиВосьмаяЛиния.КоличествоОстаток КАК ОстатокЛиния,
                     |    ВТ_ОстаткиВосьмаяЛиния.СвободныйОстаток КАК СвободныйОстатокЛиния,
                     |    ВЫБОР
                     |        КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
                     |            ТОГДА 0
                     |        ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток
                     |    КОНЕЦ - ВЫБОР
                     |        КОГДА ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL
                     |            ТОГДА 0
                     |        ИНАЧЕ ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
                     |    КОНЕЦ КАК СвободныйОстатокЛаборатория,
                     |    ВТ_ОстаткиВосьмаяЛиния.Резерв КАК РезервЛиния,
                     |    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК РезервЛаборатория
                     |ПОМЕСТИТЬ ВТ_ОстаткиЛаборатория
                     |ИЗ
                     |    ВТ_ОстаткиВосьмаяЛиния КАК ВТ_ОстаткиВосьмаяЛиния
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                     |                &ДатаАнализа,
                     |                Склад = &Лаборатория
                     |                    И Номенклатура В
                     |                        (ВЫБРАТЬ
                     |                            ВТ_Номенклатура.Номенклатура
                     |                        ИЗ
                     |                            ВТ_Номенклатура)
                     |                    И ХарактеристикаНоменклатуры В
                     |                        (ВЫБРАТЬ
                     |                            ВТ_Номенклатура.ХарактеристикаНоменклатуры
                     |                        ИЗ
                     |                            ВТ_Номенклатура)) КАК ТоварыНаСкладахОстатки
                     |        ПО ВТ_ОстаткиВосьмаяЛиния.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
                     |            И ВТ_ОстаткиВосьмаяЛиния.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
                     |                &ДатаАнализа,
                     |                Склад = &Лаборатория
                     |                    И Номенклатура В
                     |                        (ВЫБРАТЬ
                     |                            ВТ_Номенклатура.Номенклатура
                     |                        ИЗ
                     |                            ВТ_Номенклатура)
                     |                    И ХарактеристикаНоменклатуры В
                     |                        (ВЫБРАТЬ
                     |                            ВТ_Номенклатура.ХарактеристикаНоменклатуры
                     |                        ИЗ
                     |                            ВТ_Номенклатура)) КАК ТоварыВРезервеНаСкладахОстатки
                     |        ПО ВТ_ОстаткиВосьмаяЛиния.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
                     |            И ВТ_ОстаткиВосьмаяЛиния.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
                     |
                     |ИНДЕКСИРОВАТЬ ПО
                     |    Номенклатура,
                     |    ХарактеристикаНоменклатуры
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     |    ЗаказыПокупателейОстаткиИОбороты.Номенклатура.Артикул КАК Артикул,
                     |    ЗаказыПокупателейОстаткиИОбороты.Номенклатура КАК Номенклатура,
                     |    ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХраненияОстатков,
                     |    ЗаказыПокупателейОстаткиИОбороты.Номенклатура.ВестиУчетПоХарактеристикам КАК НоменклатураВестиУчетПоХарактеристикам,
                     |    ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                     |    ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход КАК Запланировано,
                     |    ЗаказыПокупателейОстаткиИОбороты.КоличествоРасход КАК ОтгруженоОтменено,
                     |    ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток КАК ОсталосьОтгрузить,
                     |    РезервыКомпании.КоличествоОстаток КАК Резерв,
                     //мод начало
                     |  РезервыТоваровКомпании.КоличествоОстаток КАК РезервыВсего,
                     |    РазмещениеЗаказовПокупателей.КоличествоОстаток КАК Заказано,
                     |    РазмещениеЗаказовПокупателей.ЗаказПоставщику.ДатаПоступления КАК ДатаПоступления,
                     |    ВЫБОР
                     |        КОГДА ОстаткиТоваровКомпании.КоличествоОстаток ЕСТЬ NULL
                     |            ТОГДА 0
                     |        ИНАЧЕ ОстаткиТоваровКомпании.КоличествоОстаток
                     |    КОНЕЦ - ВЫБОР
                     |        КОГДА РезервыТоваровКомпании.КоличествоОстаток ЕСТЬ NULL
                     |            ТОГДА 0
                     |        ИНАЧЕ РезервыТоваровКомпании.КоличествоОстаток
                     |    КОНЕЦ КАК СвободныйОстаток,
                     |    ЗаказыПоставщикамОстатки.КоличествоОстаток КАК ВсегоЗаказано,
                     |    ВЫБОР
                     |        КОГДА ЗаказыПоставщикамОстатки.КоличествоОстаток ЕСТЬ NULL
                     |            ТОГДА 0
                     |        ИНАЧЕ ЗаказыПоставщикамОстатки.КоличествоОстаток
                     |    КОНЕЦ - ВЫБОР
                     |        КОГДА РазмещениеЗаказовПокупателейОстатки.КоличествоОстаток ЕСТЬ NULL
                     |            ТОГДА 0
                     |        ИНАЧЕ РазмещениеЗаказовПокупателейОстатки.КоличествоОстаток
                     |    КОНЕЦ КАК ПоступаетВСвободныйОстаток
                     |ПОМЕСТИТЬ ВТ_Данные
                     |ИЗ
                     |    РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, &ДатаАнализа, , , ЗаказПокупателя = &Заказ) КАК ЗаказыПокупателейОстаткиИОбороты
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаАнализа, ДокументРезерва = &Заказ) КАК РезервыКомпании
                     |        ПО ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = РезервыКомпании.ХарактеристикаНоменклатуры
                     |            И ЗаказыПокупателейОстаткиИОбороты.Номенклатура = РезервыКомпании.Номенклатура
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РазмещениеЗаказовПокупателей.Остатки(&ДатаАнализа, ЗаказПокупателя = &Заказ) КАК РазмещениеЗаказовПокупателей
                     |        ПО ЗаказыПокупателейОстаткиИОбороты.Номенклатура = РазмещениеЗаказовПокупателей.Номенклатура
                     |            И ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = РазмещениеЗаказовПокупателей.ХарактеристикаНоменклатуры
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаАнализа, ) КАК ОстаткиТоваровКомпании
                     |        ПО ЗаказыПокупателейОстаткиИОбороты.Номенклатура = ОстаткиТоваровКомпании.Номенклатура
                     |            И ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = ОстаткиТоваровКомпании.ХарактеристикаНоменклатуры
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаАнализа, ) КАК РезервыТоваровКомпании
                     |        ПО ЗаказыПокупателейОстаткиИОбороты.Номенклатура = РезервыТоваровКомпании.Номенклатура
                     |            И ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = РезервыТоваровКомпании.ХарактеристикаНоменклатуры
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РазмещениеЗаказовПокупателей.Остатки(&ДатаАнализа, ) КАК РазмещениеЗаказовПокупателейОстатки
                     |        ПО ЗаказыПокупателейОстаткиИОбороты.Номенклатура = РазмещениеЗаказовПокупателейОстатки.Номенклатура
                     |            И ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = РазмещениеЗаказовПокупателейОстатки.ХарактеристикаНоменклатуры
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Остатки(&ДатаАнализа, ) КАК ЗаказыПоставщикамОстатки
                     |        ПО ЗаказыПокупателейОстаткиИОбороты.Номенклатура = ЗаказыПоставщикамОстатки.Номенклатура
                     |            И ЗаказыПокупателейОстаткиИОбороты.ХарактеристикаНоменклатуры = ЗаказыПоставщикамОстатки.ХарактеристикаНоменклатуры
                     |
                     |ИНДЕКСИРОВАТЬ ПО
                     |    Номенклатура,
                     |    ХарактеристикаНоменклатуры
                     |;
                     |
                     |////////////////////////////////////////////////////////////////////////////////
                     |ВЫБРАТЬ
                     |    ВТ_ОстаткиЛаборатория.НомерСтроки КАК НомерСтроки,
                     |    ВТ_Данные.Артикул КАК Артикул,
                     |    ВТ_Данные.Номенклатура КАК Номенклатура,
                     |    ВТ_Данные.ЕдиницаХраненияОстатков,
                     |    ВТ_Данные.НоменклатураВестиУчетПоХарактеристикам,
                     |    ВТ_Данные.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                     |    ВТ_Данные.Запланировано КАК Запланировано,
                     |    ВТ_Данные.ОтгруженоОтменено КАК ОтгруженоОтменено,
                     |    ВТ_Данные.ОсталосьОтгруз
1 ArikiteO
 
16.10.13
15:18
[code]
|        ПО РегЗаказы.Номенклатура = РегРазмещение.Номенклатура
                       |            И РегЗаказы.ХарактеристикаНоменклатуры = РегРазмещение.ХарактеристикаНоменклатуры
                       |ИТОГИ
                       |    СУММА(Запланировано),
                       |    СУММА(ОтгруженоОтменено),
                       |    СУММА(ОсталосьОтгрузить),
                       |    СУММА(Резерв)
                       |ПО
                       |    Номенклатура,
                       |    ХарактеристикаНоменклатуры";
        
    КонецЕсли;

    Запрос.УстановитьПараметр("ДатаАнализа",  ?(ДатаАнализа='00010101000000','00010101000000',ДатаАнализа));
    Запрос.УстановитьПараметр("НачалоЗаказа", Заказ.Дата);
    Запрос.УстановитьПараметр("Заказ",        Заказ);
    Запрос.УстановитьПараметр("СкладЗаказа",  Заказ.Склад);
    Запрос.УстановитьПараметр("ПустойЗаказ",  Неопределено);
    Запрос.УстановитьПараметр("ВосьмаяЛиния",  ?(ЗначениеЗаполнено(Справочники.Склады.НайтиПоКоду("00003")),Справочники.Склады.НайтиПоКоду("00003"), Справочники.Склады.ПустаяСсылка()));
    Запрос.УстановитьПараметр("Лаборатория",  ?(ЗначениеЗаполнено(Справочники.Склады.НайтиПоНаименованию("Лаборатория")),Справочники.Склады.НайтиПоНаименованию("Лаборатория"), Справочники.Склады.ПустаяСсылка()));



    // Выполнение сформированного запроса
    Результат = Запрос.Выполнить();
    
    Макет = ПолучитьМакет( ?(ТипЗаказа = "Поставщику", "МакетЗаказПоставщику", "МакетЗаказПокупателя"));
    ДокументРезультат.Очистить();
    СтруктураПараметров = Новый Структура;

    СтруктураСдвигУровняГруппировок=Новый Структура;
    СтруктураСдвигУровняГруппировок.Вставить("Номенклатура", 0);
    СтруктураСдвигУровняГруппировок.Вставить("ХарактеристикаНоменклатуры", 1);

    // Области строки отчета - табличные документы из макета отчета
    СтруктураПараметров.Вставить("ОбщийОтступ", Макет.ПолучитьОбласть("ОбщийОтступ|Строка"));
    СтруктураПараметров.Вставить("ЗначениеГруппировки",   Макет.ПолучитьОбласть("Значение|Строка"));
    СтруктураПараметров.Вставить("ЗначенияПоказателя",    Макет.ПолучитьОбласть("Показатель|Строка"));
    СтруктураПараметров.Вставить("СтруктураСдвигУровняГруппировок",  СтруктураСдвигУровняГруппировок);
    СтруктураПараметров.Вставить("ВсегоГруппировок", 1);
    СтруктураПараметров.Вставить("ТипЗаказа", ТипЗаказа);

    // Табличный документ - результат отчета
    СтруктураПараметров.Вставить("ТабДок",    ДокументРезультат);
    
    // Наклонный шрифт для групп
    СтруктураПараметров.Вставить("ШрифтГрупп", Новый Шрифт(Макет.Область("Строка|Показатель").Шрифт,,,Истина));

    // Вывод шапки отчета
    ОбластьЗначение   = Макет.ПолучитьОбласть("ШапкаЗаголовок");

    ОбластьЗначение.Параметры.ЗаголовокОтчета = "Состояние заказа по документу "
            + Заказ+Символы.ПС+" на "
            + ?(ДатаАнализа='00010101000000',"момент последнего движения",Формат(ДатаАнализа,"ДФ=""дд ММММ гггг 'г.' ЧЧ:мм:сс'"""));

    ДокументРезультат.Присоединить(ОбластьЗначение);

    ОбластьЗначение   = Макет.ПолучитьОбласть("ШапкаКонтрагент");
    
    ОбластьЗначение.Параметры.Контрагент = "Контрагент:"+Заказ.Контрагент;
    ОбластьЗначение.Параметры.РасшифровкаКонтрагент=Заказ.Контрагент;
    ОбластьЗначение.Параметры.Договор = "Договор контрагента: "+Заказ.ДоговорКонтрагента;
    ОбластьЗначение.Параметры.РасшифровкаДоговор = Заказ.ДоговорКонтрагента;

    ДокументРезультат.Присоединить(ОбластьЗначение);

    ДокументРезультат.Присоединить(Макет.ПолучитьОбласть("ШапкаНоменклатура"));

    // Вывод строк отчета
    ДокументРезультат.НачатьАвтогруппировкуСтрок();

    СтруктураПараметров.Вставить("ЕстьНоменклатура", Истина);
    
    ВывестиВыборку(Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам), СтруктураПараметров, 0);

    ДокументРезультат.ЗакончитьАвтогруппировкуСтрок();

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

    Запрос=Новый Запрос;
    
    Если ТипЗаказа = "Покупателя" Тогда

        //Формируем текст запроса по состоянию взаиморасчетов по договору.

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

     // Выполнение сформированного запроса
    Результат = Запрос.Выполнить();

    СтруктураСдвигУровняГруппировок=Новый Структура;
    СтруктураСдвигУровняГруппировок.Вставить("ОБЩИЕ", 0);
    СтруктураСдвигУровняГруппировок.Вставить("Заказ", 1);

    СтруктураДанныхТекущегоЗаказа=Новый Структура;

    СтруктураДанных=Новый Структура;
    СтруктураДанных.Вставить("Запланировано",0);
    СтруктураДанных.Вставить("ЗапланированоПредоплата",0);
    СтруктураДанных.Вставить("Оплачено",0);
    СтруктураДанных.Вставить("ОплатитьВсего",0);
    СтруктураДанных.Вставить("ОплатитьВсегоПредоплата",0);

    СтруктураДанныхТекущегоЗаказа.Вставить("ДанныеЗаказа",СтруктураДанных);
    СтруктураДанныхТекущегоЗаказа.Вставить("Всего",СтруктураДанных);

    // Области строки отчета - табличные документы из макета отчета
    СтруктураПараметров.Вставить("ОбщийОтступ", Макет.ПолучитьОбласть("ОбщийОтступ|СтрокаДеньги"));
    СтруктураПараметров.Вставить("ЗначениеГруппировки",   Макет.ПолучитьОбласть("Значение|СтрокаДеньги"));
    СтруктураПараметров.Вставить("ЗначенияПоказателя",    Макет.ПолучитьОбласть("Показатель|СтрокаДеньги"));
    СтруктураПараметров.Вставить("СтруктураСдвигУровняГруппировок",  СтруктураСдвигУровняГруппировок);
    СтруктураПараметров.Вставить("СтруктураСдвигУровняГруппировок",  СтруктураСдвигУровняГруппировок);
    СтруктураПараметров.Вставить("СтруктураДанныхТекущегоЗаказа",  СтруктураДанныхТекущегоЗаказа);
    СтруктураПараметров.Вставить("ВсегоГруппировок",  1);
    СтруктураПараметров.Вставить("НомерОбхода",  1);
  
    ДокументРезультат.Вывести(Макет.ПолучитьОбласть("ОбщийОтступ|ШапкаДеньги"));

    // Вывод шапки таблицы по состоянию взаиморасчетов.
    ОбластьЗначение   = Макет.ПолучитьОбласть("Значение|ШапкаДеньги");

    ДокументРезультат.Присоединить(ОбластьЗначение);

    ОбластьПоказатель = Макет.ПолучитьОбласть("Показатель|ШапкаДеньги");
    ОбластьПоказатель.Параметры.ПредоплатаТекст = "Предоплата  "
                +    Формат(Заказ.ДоговорКонтрагента.ПроцентПредоплаты,"ЧЦ=5; ЧДЦ=2; ЧН=""0,00""")+"%";
    ОбластьПоказатель.Параметры.ВалютаВзаиморасчетов ="Валюта взаиморасчетов: "
                +     Заказ.ДоговорКонтрагента.ВалютаВзаиморасчетов;
    ДокументРезультат.Присоединить(ОбластьПоказатель);

    // Вывод строк таблицы по состоянию взаиморасчетов.
    ДокументРезультат.НачатьАвтогруппировкуСтрок();

    СтруктураПараметров.Вставить("ЕстьНоменклатура", Ложь);
    
    ВывестиВыборку(Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам), СтруктураПараметров, 0);
    СтруктураПараметров.Вставить("НомерОбхода",  2);
    ВывестиВыборку(Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам), СтруктураПараметров, 0);

    ДокументРезультат.ЗакончитьАвтогруппировкуСтрок();

    //Вывод итоговой строки таблицы по состоянию взаиморасчетов.

    ДокументРезультат.Вывести(СтруктураПараметров.ОбщийОтступ);

    СтруктураПараметров.ЗначениеГруппировки.Параметры.ЗначениеГруппировки = "Всего";

    ДокументРезультат.Присоединить(СтруктураПараметров.ЗначениеГруппировки);

    ФорматПоказателя = "ЧЦ = 15 ; ЧДЦ = 2 ; ЧН = ""0,00""";
    
    СтруктураОбщихДанных=СтруктураПараметров.СтруктураДанныхТекущегоЗаказа.Всего;
    
    ЗначениеЗапланировано                 = Формат(СтруктураОбщихДанных.Запланировано, ФорматПоказателя);
    ЗначениеЗапланированоПредоплата      = Формат(СтруктураОбщихДанных.ЗапланированоПредоплата, ФорматПоказателя);
    ЗначениеОплачено                      = Формат(СтруктураОбщихДанных.Оплачено, ФорматПоказателя);
    ЗначениеОплатитьВсего                = Формат(СтруктураОбщихДанных.ОплатитьВсего, ФорматПоказателя);
    ЗначениеОплатитьВсегоПредоплата        = Формат(СтруктураОбщихДанных.ОплатитьВсегоПредоплата, ФорматПоказателя);

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

    ДокументРезультат.Присоединить(СтруктураПараметров.ЗначенияПоказателя);
    ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы,  2, ДокументРезультат.ВысотаТаблицы, ДокументРезультат.ШиринаТаблицы).Шрифт=СтруктураПараметров.ШрифтГрупп;

    ДокументРезультат.Вывести(Макет.ПолучитьОбласть("ОбщийОтступ|ПодвалДеньги"));

    // Вывод подвала таблицы по состоянию взаиморасчетов.
    ОбластьЗначение = Макет.ПолучитьОбласть("Значение|ПодвалДеньги");
    
    ДокументРезультат.Присоединить(ОбластьЗначение);

    ДокументРезультат.Присоединить(Макет.ПолучитьОбласть("Показатель|ПодвалДеньги"));

    //Для договоров, по которым установлен контроль дебеторской задолженности, выводится текущее состояние задолженности.
    Если Заказ.ДоговорКонтрагента.КонтролироватьСуммуЗадолженности Тогда

        //Расчет текущей задолженности

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

        Запрос.УстановитьПараметр("ДатаАнализа",?(ДатаАнализа='00010101000000','00010101000000',ДатаАнализа));
        Запрос.УстановитьПараметр("ДоговорКонтрагента",Заказ.ДоговорКонтрагента);

        СуммаВзаиморасчетовВал=0;

        Результат = Запрос.Выполнить();
        Выборка=Результат.Выбрать();
        Если Выборка.Следующий() Тогда
            СуммаВзаиморасчетовВал=Выборка["СуммаВалОстаток"];
        КонецЕсли;

        ДопустимаяЗадолженность=Заказ.ДоговорКонтрагента.ДопустимаяСуммаЗадолженности;
        ТекущаяЗадолженность=?(ПустаяСтрока(СуммаВзаиморасчетовВал),0,СуммаВзаиморасчетовВал);
        ОбъемОтгрузки=?((ДопустимаяЗадолженность-ТекущаяЗадолженность)>0,(ДопустимаяЗадолженность-ТекущаяЗадолженность),0);

        ЗначениеДопустимаяЗадолженность        = Формат(ДопустимаяЗадолженность, ФорматПоказателя);
        ЗначениеТекущаяЗадолженность          = Формат(ТекущаяЗадолженность, ФорматПоказателя);
        ЗначениеОбъемОтгрузки                  = Формат(ОбъемОтгрузки, ФорматПоказателя);

        ДокументРезультат.Вывести(Макет.ПолучитьОбласть("ОбщийОтступ|КонтрольЗадолженности"));

        // Вывод области контроля задолженности
        ОбластьЗначение = Макет.ПолучитьОбласть("Значение|КонтрольЗадолженности");
        
        ДокументРезультат.Присоединить(ОбластьЗначение);

        ОбластьКонтрольЗадолженности=Макет.ПолучитьОбласть("Показатель|КонтрольЗадолженности");

        ОбластьКонтрольЗадолженности.Параметры.ДопустимаяЗадолженность = СокрЛП(ЗначениеДопустимаяЗадолженность);
        ОбластьКонтрольЗадолженности.Параметры.ТекущаяЗадолженность      = СокрЛП(ЗначениеТекущаяЗадолженность);
        ОбластьКонтрольЗадолженности.Параметры.ОбъемОтгрузки           = СокрЛП(ЗначениеОбъемОтгрузки);

        ДокументРезультат.Присоединить(ОбластьКонтрольЗадолженности);

    КонецЕсли;
        
    // Первую колонку не печатаем
    ДокументРезультат.ОбластьПечати = ДокументРезультат.Область(1,2,ДокументРезультат.ВысотаТаблицы,ДокументРезультат.ШиринаТаблицы);
    ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

КонецПроцедуры // СформироватьОтчет()
[/code]
2 ArikiteO
 
16.10.13
15:49
Есть желающие за разумную денюжку поправить отчет?
3 Лефмихалыч
 
16.10.13
15:51
сам читай свои простыни
4 shuhard
 
16.10.13
15:52
(2)[ УТ 10.2 на 8.1 ]
нет
слишком древний релиз
5 ArikiteO
 
16.10.13
16:01
(4) релиз уже переписан несколькими разными людьми. Базу в случае необходимости могу предоставить.