Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 13:37

Создание группировки в печатной форме

Автор Djons17, 16 мая 2013, 10:18

0 Пользователей и 1 гость просматривают эту тему.

Djons17

Помогите разобраться как сделать группировку уровневую по производителям. Ниже привожу фрагмент модуля

Процедура СформироватьОтчет(ДокументРезультат, ПоказыватьЗаголовок, ВысотаЗаголовка, ТолькоЗаголовок = Ложь) Экспорт

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

   ДокументРезультат.Вывести(Заголовок);
   // Когда нужен только заголовок:
   Если ТолькоЗаголовок Тогда
      Возврат;
   КонецЕсли;

   ДокументРезультат.Области.Заголовок.Видимость = ПоказыватьЗаголовок;

   РезультирующаяТаблица = Новый ТаблицаЗначений;
   

   
   ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
   СтрокаТаблицы    = Макет.ПолучитьОбласть("СтрокаТаблицы");
   ИтогиТаблицы     = Макет.ПолучитьОбласть("СтрокаИтогов");
   

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

КонецПроцедуры






Процедура ВыполнитьСравнительныйЗапросОстатков(РезультирующаяТаблица)

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

   Запрос.Текст = ТекстЗапроса;
   
   МассивОрганизации = Новый Массив;
   МассивОрганизации.Добавить(Справочники.Организации.НайтиПоКоду("000000001"));
   МассивОрганизации.Добавить(Справочники.Организации.НайтиПоКоду("000000004"));
    //
   
   Запрос.УстановитьПараметр("ДатаНач", ?(НЕ ЗначениеЗаполнено(ДатаНач), Неопределено, Новый Граница(НачалоДня(ДатаНач), ВидГраницы.Включая)));
   Запрос.УстановитьПараметр("ДатаКон", ?(НЕ ЗначениеЗаполнено(ДатаКон), Неопределено, Новый Граница(КонецДня (ДатаКон), ВидГраницы.Включая)));
   Запрос.УстановитьПараметр("Организация", МассивОрганизации);
   Запрос.УстановитьПараметр("Склад", Склад);
   
   МассивСчетов = Новый Массив;
   МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.Материалы); // 10
   МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.Полуфабрикаты); // 21  Товары
   МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.Товары); // 41
   МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ГотоваяПродукция); // 43
   
   Запрос.УстановитьПараметр("Счет", МассивСчетов);
       
   РезультирующаяТаблица = Запрос.Выполнить().Выгрузить();
   РезультирующаяТаблица.Сортировать("Производитель Возр");
   
КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск