Есть отчёт на скд :
Вопрос следующий.Реквизит "Заказчик" у документа "Внутрений заказ" имеет составной тип Справочник.Контрагенты и Справочник.Категории.
И есть справочник "КатегорииКонтрагентов"(владелец у него спр.Контрагенты) с реквизитом "Значение"(типа.спр.Категории).
При выборе в документа ВидЗаказчика = Категории, можно выбрать название категории и вывести отчёт по этой категории(группе) в которую входят несколько "Контрагентов". Пример кода этого отчёта:
Проблема следующего характера. В моём отчёте Остатки и обороты выводит по контрагенту безупречно. Но если у документа выбрана "Категория", то эту группу категории не видно.
Подскажите как сделать запрос, чтобы пользователь смог увидеть ТекЗначение и среднее по группе Контрагентов?
Приложил скрин,как раз где формируется отчёт по Категории.
ВЫБРАТЬ
ВЗ.Заказчик КАК Клиент,
ВЗ.Заказчик.ОсновнойМенеджерПокупателя.Родитель КАК Канал,
ВЗ.Ссылка КАК Ссылка,
ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура,
ВЗ.ГраницаРезерва КАК ДатаКонцаСрочногоРезерва,
ВЗ.Дата КАК ДатаНачалаСрочногоРезерва,
ВнутреннийЗаказТовары.Количество КАК ПервоначальноеЗначениеРезерва,
ВнутреннийЗаказТовары.СерияНоменклатуры КАК СерияНоменклатуры
ПОМЕСТИТЬ ВЗаказ
ИЗ
Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВнутреннийЗаказ КАК ВЗ
ПО ВнутреннийЗаказТовары.Ссылка = ВЗ.Ссылка
ГДЕ
ВЗ.Дата МЕЖДУ &ДатаНач И &ДатаКон
И ВЗ.Проведен = ИСТИНА
И ВЗ.ПометкаУдаления = ЛОЖЬ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЗаказ.Клиент КАК Клиент,
ВЗаказ.Канал,
ВЗаказ.Ссылка,
ВЗаказ.Номенклатура КАК Номенклатура,
ВЗаказ.ДатаНачалаСрочногоРезерва,
ВЗаказ.ДатаКонцаСрочногоРезерва,
ВЗаказ.ПервоначальноеЗначениеРезерва,
ВЗаказ.СерияНоменклатуры КАК СерияНоменклатуры,
ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК ТекЗначение
ПОМЕСТИТЬ Резервы
ИЗ
ВЗаказ КАК ВЗаказ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, ) КАК ТоварыВРезервеНаСкладахОстатки
ПО ВЗаказ.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
И ВЗаказ.Ссылка = ТоварыВРезервеНаСкладахОстатки.ДокументРезерва
И ВЗаказ.СерияНоменклатуры = ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
ГДЕ
ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток > 0
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Клиент,
СерияНоменклатуры
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Резервы.Клиент,
Резервы.Канал,
Резервы.Номенклатура,
Резервы.ДатаНачалаСрочногоРезерва КАК ДатаНачалаСрочногоРезерва,
Резервы.ДатаКонцаСрочногоРезерва КАК ДатаКонцаСрочногоРезерва,
ВЫРАЗИТЬ(Резервы.ПервоначальноеЗначениеРезерва КАК ЧИСЛО(15, 3)) КАК ПервоначальноеЗнач,
ЕСТЬNULL(Резервы.ТекЗначение, 0) КАК ТекЗначение,
ВЫРАЗИТЬ(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот / 3 + 0.4999999999, 0) КАК ЧИСЛО(15, 0)) КАК Среднее
ИЗ
Резервы КАК Резервы
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
И Резервы.Клиент = ПродажиОбороты.Контрагент
УПОРЯДОЧИТЬ ПО
ДатаНачалаСрочногоРезерва,
ДатаКонцаСрочногоРезерва
ПоказатьВопрос следующий.Реквизит "Заказчик" у документа "Внутрений заказ" имеет составной тип Справочник.Контрагенты и Справочник.Категории.
И есть справочник "КатегорииКонтрагентов"(владелец у него спр.Контрагенты) с реквизитом "Значение"(типа.спр.Категории).
При выборе в документа ВидЗаказчика = Категории, можно выбрать название категории и вывести отчёт по этой категории(группе) в которую входят несколько "Контрагентов". Пример кода этого отчёта:
Построитель = Новый ПостроительОтчета;
Построитель.ВыводитьЗаголовокОтчета = Истина;
Построитель.ТекстЗаголовка = "СПИСОК Контрагентов по категории """ + Строка(Заказчик) + """";
Построитель.Параметры.Вставить("Значение", Заказчик);
Построитель.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
Построитель.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Асфальт);
Построитель.Текст =
"ВЫБРАТЬ
| КатегорииКонтрагентов.Владелец КАК Контрагент,
| КатегорииКонтрагентов.Владелец.Представление КАК КонтрагентПредставление
|ИЗ
| Справочник.КатегорииКонтрагентов КАК КатегорииКонтрагентов
|ГДЕ
| КатегорииКонтрагентов.Значение = &Значение
| И НЕ КатегорииКонтрагентов.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| КонтрагентПредставление";
Построитель.ЗаполнитьНастройки();
ТабДок = Новый ТабличныйДокумент;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.ОтображатьСетку = Ложь;
Построитель.Вывести(ТабДок);
ТабДок.Показать();
ПоказатьПроблема следующего характера. В моём отчёте Остатки и обороты выводит по контрагенту безупречно. Но если у документа выбрана "Категория", то эту группу категории не видно.
Подскажите как сделать запрос, чтобы пользователь смог увидеть ТекЗначение и среднее по группе Контрагентов?
Приложил скрин,как раз где формируется отчёт по Категории.
Прикрепленные файлы:

По теме из базы знаний
- Всякие полезности
- Пример алгоритма синхронизации справочников по GUID
- Еще раз о дополнительных реквизитах и дополнительных сведениях
- Расширение типового механизма настройки заполнения бухгалтерской отчетности (на примере конфигурации 1С:ERP. Управление холдингом 3.1.8.15)
- Несколько альтернативных универсальных способов подбора ссылок при переносах данных
Найденные решения
Если решать Вашу задачу "в лоб", то самое простое, это доработать последний запрос следующим образом:
Однако будьте готовы к тому, что у Вас появятся дубли значений (например, "ПервоначальноеЗнач").
ВЫБРАТЬ
...
ИЗ
Резервы КАК Резервы
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КатегорииКонтрагентов КАК КатегорииКонтрагентов
ПО Резервы.Клиент = КатегорииКонтрагентов.Значение
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
И ЕСТЬNULL(КатегорииКонтрагентов.Владелец, Резервы.Клиент) = ПродажиОбороты.Контрагент
ПоказатьОднако будьте готовы к тому, что у Вас появятся дубли значений (например, "ПервоначальноеЗнач").
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Это вот неплохой такой источник проблем, на самом деле. Вопрос: если в заказе указана категория в которую входит несколько контрагентов то как понять на кого из них отнести заказ?
Реквизит "Заказчик" у документа "Внутрений заказ" имеет составной тип Справочник.Контрагенты и Справочник.Категории.
Это вот неплохой такой источник проблем, на самом деле. Вопрос: если в заказе указана категория в которую входит несколько контрагентов то как понять на кого из них отнести заказ?
Если решать Вашу задачу "в лоб", то самое простое, это доработать последний запрос следующим образом:
Однако будьте готовы к тому, что у Вас появятся дубли значений (например, "ПервоначальноеЗнач").
ВЫБРАТЬ
...
ИЗ
Резервы КАК Резервы
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КатегорииКонтрагентов КАК КатегорииКонтрагентов
ПО Резервы.Клиент = КатегорииКонтрагентов.Значение
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
И ЕСТЬNULL(КатегорииКонтрагентов.Владелец, Резервы.Клиент) = ПродажиОбороты.Контрагент
ПоказатьОднако будьте готовы к тому, что у Вас появятся дубли значений (например, "ПервоначальноеЗнач").
(3) А мне думается что нужно в первый запрос добавить выборку где заказы расписанные на категории будут дублироваться на каждого входящего в категорию заказчика. Чтобы в последнем запросе резервы по конкретным заказчикам расписать. Только нужно будет еще и категорию туда добавить чтобы можно было по ней среднюю считать...
(5) Я не могу прокоментировать, как лучше, т.к. плохо представляю конечный результат, которого автор пытается достичь. Да, предварительное получение контрагентов будет выгоднее еще и тем, что обороты продаж можно будет получить отдельной выборкой с отбором по этим контрагентам. Это может положительно сказаться на производительности отчета.
Но как я уже указал выше, есть риск получить дубли значений в отчете. Тогда в этом случае придется либо писать сложные выражения ресурсов, либо переделывать запрос вовсе. Потому и предложил самый простой путь. Если потребуется, автор задаст дополнительные вопросы с уточнениями по задаче, тогда и я смогу предложить более корректное альтернативное решение.
Но как я уже указал выше, есть риск получить дубли значений в отчете. Тогда в этом случае придется либо писать сложные выражения ресурсов, либо переделывать запрос вовсе. Потому и предложил самый простой путь. Если потребуется, автор задаст дополнительные вопросы с уточнениями по задаче, тогда и я смогу предложить более корректное альтернативное решение.
(14) пожалуйста
ВЫБРАТЬ
ВЗ.Заказчик КАК Клиент,
ВЗ.Заказчик.ОсновнойМенеджерПокупателя.Родитель КАК Канал,
ВЗ.Ссылка КАК Ссылка,
ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура,
ВЗ.ладГраницаРезерва КАК ДатаКонцаСрочногоРезерва,
ВЗ.Дата КАК ДатаНачалаСрочногоРезерва,
ВнутреннийЗаказТовары.Количество КАК ПервоначальноеЗначениеРезерва,
ВнутреннийЗаказТовары.СерияНоменклатуры КАК СерияНоменклатуры
ПОМЕСТИТЬ ВЗаказ
ИЗ
Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВнутреннийЗаказ КАК ВЗ
ПО ВнутреннийЗаказТовары.Ссылка = ВЗ.Ссылка
ГДЕ
ВЗ.Дата МЕЖДУ &ДатаНач И &ДатаКон
И ВЗ.Проведен = ИСТИНА
И ВЗ.ПометкаУдаления = ЛОЖЬ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЗаказ.Клиент КАК Клиент,
ВЗаказ.Канал,
ВЗаказ.Ссылка,
ВЗаказ.Номенклатура КАК Номенклатура,
ВЗаказ.ДатаНачалаСрочногоРезерва,
ВЗаказ.ДатаКонцаСрочногоРезерва,
ВЗаказ.ПервоначальноеЗначениеРезерва,
ВЗаказ.СерияНоменклатуры КАК СерияНоменклатуры,
ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК ТекЗначение
ПОМЕСТИТЬ Резервы
ИЗ
ВЗаказ КАК ВЗаказ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, ) КАК ТоварыВРезервеНаСкладахОстатки
ПО ВЗаказ.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
И ВЗаказ.Ссылка = ТоварыВРезервеНаСкладахОстатки.ДокументРезерва
И ВЗаказ.СерияНоменклатуры = ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
ГДЕ
ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток > 0
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Клиент,
СерияНоменклатуры
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Резервы.Клиент,
Резервы.Канал,
Резервы.Номенклатура,
Резервы.ДатаНачалаСрочногоРезерва КАК ДатаНачалаСрочногоРезерва,
Резервы.ДатаКонцаСрочногоРезерва КАК ДатаКонцаСрочногоРезерва,
ВЫРАЗИТЬ(Резервы.ПервоначальноеЗначениеРезерва КАК ЧИСЛО(15, 3)) КАК ПервоначальноеЗнач,
ЕСТЬNULL(Резервы.ТекЗначение, 0) КАК ТекЗначение,
ВЫРАЗИТЬ(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот / 3 + 0.4999999999, 0) КАК ЧИСЛО(15, 0)) КАК Среднее
ИЗ
Резервы КАК Резервы
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ладКатегорииКонтрагентов КАК ладКатегорииКонтрагентов
ПО Резервы.Клиент = ладКатегорииКонтрагентов.Значение
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
И Резервы.Клиент = ПродажиОбороты.Контрагент
И (ЕСТЬNULL(ладКатегорииКонтрагентов.Владелец, Резервы.Клиент) = ПродажиОбороты.Контрагент)
УПОРЯДОЧИТЬ ПО
ДатаНачалаСрочногоРезерва,
ДатаКонцаСрочногоРезерва
Показать
(16) да,заметил. переделал так. всё равно та же история:
ВЫБРАТЬ
ВЗ.Заказчик КАК Клиент,
ВЗ.Заказчик.ОсновнойМенеджерПокупателя.Родитель КАК Канал,
ВЗ.Ссылка КАК Ссылка,
ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура,
ВЗ.ладГраницаРезерва КАК ДатаКонцаСрочногоРезерва,
ВЗ.Дата КАК ДатаНачалаСрочногоРезерва,
ВнутреннийЗаказТовары.Количество КАК ПервоначальноеЗначениеРезерва,
ВнутреннийЗаказТовары.СерияНоменклатуры КАК СерияНоменклатуры
ПОМЕСТИТЬ ВЗаказ
ИЗ
Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВнутреннийЗаказ КАК ВЗ
ПО ВнутреннийЗаказТовары.Ссылка = ВЗ.Ссылка
ГДЕ
ВЗ.Дата МЕЖДУ &ДатаНач И &ДатаКон
И ВЗ.Проведен = ИСТИНА
И ВЗ.ПометкаУдаления = ЛОЖЬ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЗаказ.Клиент КАК Клиент,
ВЗаказ.Канал,
ВЗаказ.Ссылка,
ВЗаказ.Номенклатура КАК Номенклатура,
ВЗаказ.ДатаНачалаСрочногоРезерва,
ВЗаказ.ДатаКонцаСрочногоРезерва,
ВЗаказ.ПервоначальноеЗначениеРезерва,
ВЗаказ.СерияНоменклатуры КАК СерияНоменклатуры,
ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК ТекЗначение
ПОМЕСТИТЬ Резервы
ИЗ
ВЗаказ КАК ВЗаказ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, ) КАК ТоварыВРезервеНаСкладахОстатки
ПО ВЗаказ.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
И ВЗаказ.Ссылка = ТоварыВРезервеНаСкладахОстатки.ДокументРезерва
И ВЗаказ.СерияНоменклатуры = ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
ГДЕ
ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток > 0
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Клиент,
СерияНоменклатуры
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Резервы.Клиент,
Резервы.Канал,
Резервы.Номенклатура,
Резервы.ДатаНачалаСрочногоРезерва КАК ДатаНачалаСрочногоРезерва,
Резервы.ДатаКонцаСрочногоРезерва КАК ДатаКонцаСрочногоРезерва,
ВЫРАЗИТЬ(Резервы.ПервоначальноеЗначениеРезерва КАК ЧИСЛО(15, 3)) КАК ПервоначальноеЗнач,
ЕСТЬNULL(Резервы.ТекЗначение, 0) КАК ТекЗначение,
ВЫРАЗИТЬ(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот / 3 + 0.4999999999, 0) КАК ЧИСЛО(15, 0)) КАК Среднее
ИЗ
Резервы КАК Резервы
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ладКатегорииКонтрагентов КАК ладКатегорииКонтрагентов
ПО Резервы.Клиент = ладКатегорииКонтрагентов.Значение
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
И (ЕСТЬNULL(ладКатегорииКонтрагентов.Владелец, Резервы.Клиент) = ПродажиОбороты.Контрагент)
УПОРЯДОЧИТЬ ПО
ДатаНачалаСрочногоРезерва,
ДатаКонцаСрочногоРезерва
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот