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

Итоги в печатной форме

Автор ls600, 10 авг 2012, 09:16

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

ls600

Доброго времени суток всем!
Ситуация такая,  документ по отгрузке цемента,  Плательщик по реализации заказывает цемент, реализаций может быть сколько угодно,  в итоге  реализации все суммируются  и получается итог по данному плательщику!
Подскажите как прописать в коде что бы в конце документа был итог по всем плательщикам!? общая сумма, кол-во.
Конфигурация 1С Бухгалтерия 
Платформа 1С:Предприятие 8.2 (8.2.15.301).


Процедура ДействияФормыСводкаОтгрузкиЦементаСформировать(Кнопка)
Если БезТовара Тогда БезВагонов = Истина; КонецЕсли;

Макет  = ОтчетОбъект.ПолучитьМакет("СводЖДТарифов");
ТабДок =  ЭлементыФормы.ПолеТабличногоДокумента;
Отбор = "";
запрос1 = Новый Запрос;
Если ЗначениеЗаполнено(Грузополучатель)и ЗначениеЗаполнено(МаркаЦемента) и ЗначениеЗаполнено(Плательщик) Тогда
  Отбор = "и РЦ_РеализацияЦементаОбороты.Контрагент = &Контр и РЦ_РеализацияЦементаОбороты.Грузополучатель = &ГрПол и РЦ_РеализацияЦементаОбороты.МаркаЦемента=&Цемент";
  запрос1.УстановитьПараметр("Контр", Плательщик);
  запрос1.УстановитьПараметр("ГрПол", Грузополучатель);
  запрос1.УстановитьПараметр("Цемент", МаркаЦемента);
ИначеЕсли ЗначениеЗаполнено(Грузополучатель)и ЗначениеЗаполнено(МаркаЦемента) Тогда
  Отбор = "и РЦ_РеализацияЦементаОбороты.Контрагент = &Контр и РЦ_РеализацияЦементаОбороты.Грузополучатель = &ГрПол";
  запрос1.УстановитьПараметр("Контр", Плательщик);
  запрос1.УстановитьПараметр("ГрПол", Грузополучатель);
ИначеЕсли ЗначениеЗаполнено(Грузополучатель)и ЗначениеЗаполнено(Плательщик) Тогда
  Отбор = "и РЦ_РеализацияЦементаОбороты.Контрагент = &Контр и РЦ_РеализацияЦементаОбороты.МаркаЦемента=&Цемент";
  запрос1.УстановитьПараметр("Контр", Плательщик);
  запрос1.УстановитьПараметр("Цемент", МаркаЦемента);
ИначеЕсли ЗначениеЗаполнено(МаркаЦемента) и ЗначениеЗаполнено(Плательщик) Тогда
  Отбор = "и РЦ_РеализацияЦементаОбороты.Грузополучатель = &ГрПол и РЦ_РеализацияЦементаОбороты.МаркаЦемента=&Цемент";
  запрос1.УстановитьПараметр("ГрПол", Грузополучатель);
  запрос1.УстановитьПараметр("Цемент", МаркаЦемента);
ИначеЕсли ЗначениеЗаполнено(Плательщик) Тогда
  Отбор = "и РЦ_РеализацияЦементаОбороты.Контрагент = &Контр";
  запрос1.УстановитьПараметр("Контр", Плательщик);
ИначеЕсли ЗначениеЗаполнено(Грузополучатель) Тогда
  Отбор = "и РЦ_РеализацияЦементаОбороты.Грузополучатель = &ГрПол";
  запрос1.УстановитьПараметр("ГрПол", Грузополучатель);
ИначеЕсли ЗначениеЗаполнено(МаркаЦемента) Тогда
  Отбор = "и РЦ_РеализацияЦементаОбороты.МаркаЦемента=&Цемент";
  запрос1.УстановитьПараметр("Цемент", МаркаЦемента);
КонецЕсли;
запрос1.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                 | РЦ_РеализацияЦементаОбороты.Контрагент КАК Контрагент,
                 | РЦ_РеализацияЦементаОбороты.Грузополучатель КАК Грузополучатель,
                 | РЦ_РеализацияЦементаОбороты.ДокументОтгрузки КАК ДокументОтгрузки,
                 | РЦ_РеализацияЦементаОбороты.ДокументОтгрузки.Направление КАК Направление,
     | РЦ_РеализацияЦементаОбороты.ДокументОтгрузки.ДокументОтправки КАК ДокументОтправки,
                    | РЦ_РеализацияЦементаОбороты.МаркаЦемента,
                 | РЦ_РеализацияЦементаОбороты.Количество КАК КоличествоОборот,
                 | РЦ_РеализацияЦементаОбороты.СуммаРег КАК СуммаРегОборот,
                 | РЦ_РеализацияЦементаОбороты.Стоимость КАК СтоимостьОборот
                 |ИЗ
                 | РегистрНакопления.РЦ_РеализацияЦемента КАК РЦ_РеализацияЦементаОбороты
     |ГДЕ РЦ_РеализацияЦементаОбороты.Период Между &ДатаНач И &ДатаКон
     |  И РЦ_РеализацияЦементаОбороты.Организация = &Орг " + Отбор + " И РЦ_РеализацияЦементаОбороты.СпособОтправки = &Способ
                 |
                 |УПОРЯДОЧИТЬ ПО
                 | Контрагент,
                 | Грузополучатель,
                 | ДокументОтгрузки
                 |ИТОГИ
                 | СУММА(КоличествоОборот),
                 | СУММА(СуммаРегОборот)
                 |ПО
                 | Контрагент,
                 | Грузополучатель,
                 | ДокументОтгрузки
     |АВТОУПОРЯДОЧИВАНИЕ";
     
запрос1.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
запрос1.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач));
запрос1.УстановитьПараметр("Орг", Организация);
запрос1.УстановитьПараметр("Способ", Перечисления.СпособыОтправкиГрузов.Самовывоз);

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

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

ТабДок.Очистить();
ТабДок.НачатьАвтогруппировкуСтрок();

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

Если Результат1.Пустой() Тогда
  Сообщить("Данных нет!!!");
  Возврат
КонецЕсли;
// Вывод данных в макет
ВыборкаКонтрагент1 = Результат1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаКонтрагент2 = Результат2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаКонтрагент1.Следующий() Цикл
  ВыборкаКонтрагент2.Следующий();
  ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКонтрагент1);
  //ОбластьКонтрагент.Параметры.Тариф = ВыборкаКонтрагент2.Тариф;
  ТабДок.Вывести(ОбластьКонтрагент,ВыборкаКонтрагент1.Уровень());

  ВыборкаГрузополучатель1 = ВыборкаКонтрагент1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
  ВыборкаГрузополучатель2 = ВыборкаКонтрагент2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

    КонецЕсли;
   
   КонецЦикла;
  КонецЦикла;
КонецЦикла;

ТабДок.АвтоМасштаб = Истина;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.ФиксацияСверху = Макет.Области.ШапкаТаблицы.верх-1;
ТабДок.ВерхнийКолонтитул.Выводить = Истина;
ТабДок.ВерхнийКолонтитул.НачальнаяСтраница = 1;
    ТабДок.ВерхнийКолонтитул.ТекстСлева = Формат(ТекущаяДата(), "ДФ=dd/MM/yy");
ТабДок.ВерхнийКолонтитул.ТекстСправа = "[&НомерСтраницы]";

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



Заранее благодарю!

Public_enemy

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

P.S. Описание метода свернуть см. в синтаксис помошнике, также и про таблицу значений.

Теги:

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

Рейтинг@Mail.ru

Поиск