Привет.Пытаюсь сделать отчет, но что-то не получается.
Скрин:
Код:
ТекстЗапроса =
"//{{ЗАПРОС(Сформ)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Товар = Документ.РасходнаяНакладная.Товар;
|Контрагент = Документ.РасходнаяНакладная.Контрагент;
|Количество = Документ.РасходнаяНакладная.Количество;
|Функция КоличествоСумма = Сумма(Количество);
|Группировка Товар без групп;
|Группировка Контрагент без групп;
|Условие(Товар в ВыбТовар);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Если Флаг = 1 Тогда
Запрос.Выгрузить(ТЗ,,0);
ТЗ.Свернуть("Контрагент, Товар", "Количество");
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица1");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок|ШАпка");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("Товар");
Пока Запрос.Группировка(2) = 1 Цикл
Таб.ВывестиСекцию("Контрагент");
КонецЦикла;
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформ", "");
С секциями.
Запустите конструктор запроса к БИ типа Шахматка.
Общий смысл поймете.
ВыбТовар - это список необходимых товаров?
тогда
В Заголовке вместо Запрос.Товар - переменную например загТовар
В ТекстЗапроса поменять порядок группировок: сначала Контрагент, потом - товар
и
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица1");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок|ШАпка");
Для Сч=1 По ВыбТовар.РазмерСписка() Цикл
загТовар = ВыбТовар.ПолучитьЗначение(Сч)
Таб.ПрисоединитьСекцию("Заголовок|Товар");
КонецЦикла;
Пока Запрос.Группировка(1) = 1 Цикл //Контрагент
Таб.ВывестиСекцию("Контрагент|ШАпка");
Пока Запрос.Группировка(2) = 1 Цикл //Товар
Таб.ПрисоединитьСекцию("Контрагент|Товар");
КонецЦикла;
КонецЦикла;
в запросе группировки так:
|Группировка Контрагент без групп;
|Группировка Товар без групп;
Если Флаг = 1 Тогда
Запрос.Выгрузить(ТЗ,,0);
ТЗ.Свернуть("Контрагент, Товар", "Количество");
Возврат;
Иначе
Запрос.Выгрузить(ТЗ,,0);
ТЗ.Свернуть("Товар", "Количество");
ТЗ.Сортировать("Товар");
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица1");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок|ШАпка");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
загТовар = ТЗ.Товар;
Таб.ПрисоединитьСекцию("Заголовок|Товар");
КонецЦикла;
Пока Запрос.Группировка(1) = 1 Цикл //Контрагент
текКонтр = Запрос.Контрагент;
Таб.ВывестиСекцию("Контрагент|ШАпка");
КвоТовара=0; //то что вывести в Таб
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
загТовар = ТЗ.Товар;
Если Запрос.Получить(текКонтр,загТовар)=1 Тогда
КвоТовара=Запрос.КоличествоСумма;
КонецЕсли;
Таб.ПрисоединитьСекцию("Контрагент|Товар");
КонецЦикла;
КонецЦикла;
А зачем тз?
Простой обход группировок (вторая группировка ВсеВошедшие в Запрос)
Вывод заголовка :
пока запрос.Группировка(1)=1 Цикл
таб.ВывестиСекцию()
пока запрос.Группировка(2)=1 Цикл
таб.присоединитьСекцию(...);
конеццикла;
прервать;
конеццикла
i | Пожалуйста, выделяйте код |
sava1 верно говорит. не выводит по товарам, скорее из-за отсутствия ВсеВошедшие в запрос.
по поводу группировок тоже верно указали.
Группировка Контрагент без групп
группировка товар всеВошедшие в запрос;
попробуйте пока без шапки это вывести.
Пробовал.Таким образом выводит только одного самого первого контрагента.
А товара выводит по всем контрам.Короче много.
Мне же надо, что бы если в папке Алкоголь 4 позиции, то должно выводить их 4.
А контрагентов с количеством разворачивало в разрезе этого товара.
не может быть, чтобы одного контрагента выводило.
мне тогда задача не понятна. А разве количество колонок-товаров не по всем контрагентам? просто ячейки будут заполняться только по нужному контрагенту. а разве нет так шахматка устроена?
вам верно подсказали, тяните код.
|Группировка Контрагент без групп;
|Группировка Товар без групп;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица1");
Пока Запрос.Группировка(1) = 1 Цикл //Контрагент
Таб.ВывестиСекцию("Заголовок|ШАпка");
Пока Запрос.Группировка(2) = 1 Цикл //Товар
Таб.ПрисоединитьСекцию("Контрагент|Товар");
КонецЦикла;
Прервать;
КонецЦикла;
Запрос.вНачалоВіборки();
Пока Запрос.Группировка(1) = 1 Цикл //Контрагент
Таб.ВывестиСекцию("Контрагент|Шапка");
Пока Запрос.Группировка(2) = 1 Цикл //Товар
Таб.ПрисоединитьСекцию("Контрагент|Товар");
КонецЦикла;
Прервать;
КонецЦикла;
sava1,прервать при втором обходе нужно убрать.
ВсеВошедшие в запрос нужно. Иначе будет выдавать в строках разное количество колонок.только те ячейки, по которым есть количество.
Согласен (код копировал - прощелкал)
Ребят, Спасибо.Получилось.
Утром смотрел как в Бухии формирует шапку.Имхо ваш вариант для меня проще оказался.
Есть правда небольшой нюанс.Перестало Итоги выводить...
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua