Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Другие решения на платформе "1С:Предприятие 8"]

Вертикальный отчет

Александр
читатель
офлайн
Дата регистрации: 22.05.2016
Сообщений: 5
Пост №1
 
22.05.2016 16:56

Здравствуйте. помогите решить задачу.
ВСЕ ВошедшиеВЗапрос. В 77 эта конструкция решала       задачу с выводом пустых значений. Напрмер: задан период с 01.05.16 по 15.05.16. И есть четыре товара. Первый и четвертый продавались 09, 10,12,13 Второй и третий продавался 09, 10 и 13. Причем у Второго товара на 12 число был пизнак1, а у Третьего товара 12 числа был признак2 (признак1 и признак 2 определяются ресурсом того же регистра) Если делать вертикальный отчет с группировкой по периодам, то в 77 я делал так: "Группировка День Все ВошедшиеВЗапрос" и в результате этого я получал в запросе все даты (09, 10, 12 ,13) как для Первого и Второго, так и для Третьего и Четвертого товаров. В 8 я делаю запрос такого вида:


Товар = Новый Массив;
Для каждого строкаТЧ Из Отчет.Товары Цикл      
Товар.Добавить(строкаТЧ.Товар);
КонецЦикла;


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


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





В итоге получаю для Первого и четвертого товара выборку с датами (09, 10, 12 ,13), а для Третьего и Четвертого товара выборку с датами (09, 10, 13), т.е. для них нет данных за 12 число и это, как бы, правильно. Обрабатываю результкт и получаю скособоченную таблицу такого вида, как на рис. отчет8. Создавая отчет с помощью СКД с такими же критериями, получаю рис. ОтчетСКД. Т.е. там для всех товаров все даты присутствуют. Но в нем я не понимаю, как заполнить 12 число признаками. Как и что добавить в мой запрос, для того что бы вывод был как на рис. отчет77? Спасибо.

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №2
 
23.05.2016 11:48

Судя по коду, Александр, Вам нужно срочно идти на курсы по 1С — вообще элементарными знаниями не обладаете. Пока базу не угробили...

Ответили: пост №3
Александр
читатель
офлайн
Дата регистрации: 22.05.2016
Сообщений: 5
Пост №3
 
23.05.2016 11:55
Ответ на пост №2

Денис (САМАРА),Спасибо, Вам огромное за совет. По сути, что то можете предложить? З.Ы. Задача решена.

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №4
 
23.05.2016 12:26

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

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

Ответили: пост №5
Александр
читатель
офлайн
Дата регистрации: 22.05.2016
Сообщений: 5
Пост №5
 
23.05.2016 12:38
Ответ на пост №4

Thorvardr, Да, спасибо. Так и решил. Провозился долго и кучу времени убил.

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №6
 
23.05.2016 12:51

Ну может (раз уж все решилось), то и условие для виртуальной таблицы оборотов перенесете в параметры этой таблицы?

Ответили: пост №7
Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №7
 
23.05.2016 13:18
Ответ на пост №6

Денис (САМАРА),
Да, правильнее будет так:


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

Ответили: пост №8
Александр
читатель
офлайн
Дата регистрации: 22.05.2016
Сообщений: 5
Пост №8
 
23.05.2016 13:34
Ответ на пост №7

Thorvardr, Спасибо, попробую и так. Но разницы, честно говоря, не понял. Чем отличается Запрос.УстановитьПараметр("Номенклатура", Товар); от РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, День, Номенклатура В (&Номенклатура))? Скорость?

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №9
 
23.05.2016 14:07

Александр пишет:

Цитата

Но разницы, честно говоря, не понял.
Суть в том, что таблица оборотов - виртуальная и в базе её в готовом виде нет. Её строит движок по запросу. При этом, если в параметрах построения уточнить что нас интересуют не все сведения, а только по 4-м товарам, то уже на этапе построения она будет отфильтрована и далее для полученной выборки посчитаются значения оборотов. А если условие в запросе добавить ниже так как было в первом варианте, то построение виртуальной таблицы случится по всем товарам, для них посчитаются значения оборотов, а потом в результате запроса уберутся ненужные записи. Если база большая, то это существенные моменты.

Ответили: пост №10
Александр
читатель
офлайн
Дата регистрации: 22.05.2016
Сообщений: 5
Пост №10
 
23.05.2016 14:25
Ответ на пост №9

Thorvardr,Понял, спасибо. Все таки скорость :) Я все время проработал с 77. и там условия задавались в запросе (Условие Номенклатура в выбНоменклатура). И тогда получался Ваш вариант. Т.е. выборка была только по списку выбНоменклатура. Поскольку в приведенном листинге параметры запроса заполняются до РезультатЗапроса = Запрос.Выполнить(); я и считал, что это все равно.

Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация