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

Проблема с ОТЧЕТОМ

Автор ls600, 28 мая 2012, 19:45

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

ls600

Доброго времени суток!!! Помогите решить такую вот задачку!!!
Есть отчет по Реализации Цемента. В нем заполняется Плательщик получатель, Кол-во, Цена, Вагоны и т.д
Допустим 5.05.2012 года Купили цемент и отгрузили его не с вагона. и в отчете должна выводится пустая строка. если с вагоном то строка будет естественно заполнена.
Проблема вот в чем, когда отгрузка идет без вагона то обязательно нужно ставить во вкладке Вагоны пустую строчку т.е добавить без значений!!!!
06.05.2012 года допустим отгрузка была с вагонами. все поля заполняются т.е вагоны и т.д .
Как было сказано выше если 5.05.2012 не заполнять пустую строчку во вкладке вагоны тогда, при формировании отчета 5 числа в строке вагоны будут вагоны с 6-го числа. т.е данные переходят на строку вышел.!!!!
Можно решить эту проблему так если отгрузка идет без вагонов то в формировании отчета строка вагоны будет пуста. Без добавления пустой строки в реализации!!!
Смысл такой как получить пустую. строку автоматически без добавления пустых значений во вкладе вагоны!!!


P.S: 1С Предприяте 8.2 Бухгалтерия для Казахстана Редакция 2.0

Если что то не понятно или не так я выразил мысль прошу не судить строго.
Заранее благодарен!!!

Dethmontt

Так может быть это ОТЧЕТ кривой, а не Строка и вагоны ?
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

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

ls600

Код запроса!!

Процедура ДействияФормыСводкаОтгрузкиЦементаСформировать(Кнопка)
   Если БезТовара Тогда БезВагонов = Истина; КонецЕсли;
   
   Макет  = ОтчетОбъект.ПолучитьМакет("СводЖДТарифов");
   ТабДок =  ЭлементыФормы.ПолеТабличногоДокумента;
   Отбор = "";
   запрос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);
            ОбластьДокумент.Параметры.Направление = ВыборкаДокумент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;
    ТабДок.ВерхнийКолонтитул.ТекстСлева = Формат(ТекущаяДата(), "ДФ=dd/MM/yy");
   ТабДок.ВерхнийКолонтитул.ТекстСправа = "[&НомерСтраницы]";
      
КонецПроцедуры

ls600

Кто нибудь подскажет ???

cska-fanat-kz

Имейте терпение, уважаемый!

Ща Dethmontt проснется... ;)
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Dethmontt

ЭТО ОТЧЕТ???????

СКД отменили что ли????

Я на третьем ИНАЧЕЕСЛИ уже запутался =)))
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

А это вооообще работает????
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

ls600

Все работает!!! только приходится постоянно пустую строчку добавлять!!!! а бухгалатера бывают забывают и потом в конце недели или месяца отчет выглядит как папало, и приходится искать где они забыли добавить!!!! вот!!!!

ls600

А можно ли написать обработку для внешнего отчета. т.е если Вагонная отгрузка то будет выводится ДА Иначе НЕТ. Внешний отчет почти готов осталось только эта вещь, и что то ни как!!!

Теги:

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

Рейтинг@Mail.ru

Поиск