Имя: Пароль:
1C
 
Отчёт на СКД
,
0 ejikbeznojek
 
01.06.17
17:37
Ребята привет. Нужна помощь коллективного разума.

Делаю сейчас отчёт на СКД в своей самописке на 8.3
Вроде отчёт простой, но чёт весь изматерился уже)))

Есть документ "Посещение магазина" с ТЧ Товары (Колонки Номенклатура и количество)

Есть справочник Номенклатура, в котором всего 9 элементов

И есть отчёт на СКД вот с таким запросом

ВЫБРАТЬ
    ПосещениеМагазинаТовары.Ссылка КАК Документ,
    ПосещениеМагазинаТовары.Номенклатура КАК Номенклатура,
    СУММА(ПосещениеМагазинаТовары.Количество) КАК Количество,
    ПосещениеМагазинаТовары.Ссылка.Адрес КАК Адрес,
    ПосещениеМагазинаТовары.Ссылка.Контрагент,
    ПосещениеМагазинаТовары.Ссылка.Контрагент.СборныйПоставщик КАК Поставщик,
    еркПосещениеМагазинаТовары.Номенклатура КАК КоличествоТМ
ИЗ
    Документ.ПосещениеМагазина.Товары КАК ПосещениеМагазинаТовары
ГДЕ
    ПосещениеМагазинаТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2

СГРУППИРОВАТЬ ПО
    ПосещениеМагазинаТовары.Ссылка,
    ПосещениеМагазинаТовары.Номенклатура,
    ПосещениеМагазинаТовары.Ссылка.Адрес,
    ПосещениеМагазинаТовары.Ссылка.Контрагент,
    ПосещениеМагазинаТовары.Ссылка.Контрагент.СборныйПоставщик,
    ПосещениеМагазинаТовары.Номенклатура


В группировках выводится таблица с колонкой - номенклатура
И строками контрагент и документ.

И есть ресурс "количество документов", который нужно выводить.

Косяк в том, что если в документе есть "товар1" и "товар3", а "товара 2" нет, то требуется в колонке "товар 2" учитывать этот документ при подсчёте количества документов
https://prnt.sc/feovjg
Вот тут должно быть 6 доков, а не 4.
Вроде нужно наверное как-то соединить с чем-то. Но я что-то не соображу
1 Ц_У
 
01.06.17
17:41
А нельзя в запрос добавить "1" как КоличествоДокументов ?
2 ejikbeznojek
 
01.06.17
17:42
(1) А я так пробовал, тот же результат.
Причём пробовал как в таблицу добавлять
1 КАК КоличествоДоков,

так и в вычисляемые поля.
3 Elatiell
 
01.06.17
17:43
(0) Используйте вычисляемое поле и функцию ВычислитьВыражениеСГруппировкойМассив в СКД.
4 ejikbeznojek
 
01.06.17
17:54
Добавил вычисляемое поле
КоличествоДокументов1

Выражение

ВычислитьВыражениеСГруппировкойМассив("выбор когда
Документ есть null тогда
1
иначе
Количество(Документ)
конец")

И добавил его сумму в ресурсы.
Тоже самое выводит
5 ejikbeznojek
 
01.06.17
17:59
https://prnt.sc/fep658

сделал 2 ресурса

количество1
Сумма (ВычислитьВыражениеСГруппировкойМассив("выбор когда
количество есть null тогда
1
иначе
Количество(Документ)
конец"))


Количество2
выбор когда
количество есть null тогда
1
иначе
Количество(Документ)
конец
6 devpro100
 
01.06.17
18:00
Сохранить запрос в временную таблицу, например: ВТ_Товары

"ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ.Контрагент, ВТ.Номенклатура, 1 КАК КоличествоДоков ПОМЕСТИТЬ ВТ_Доки ИЗ ВТ_Товары КАК ВТ"

Соединить полученную таблицу "ВТ_Товары" и исходный запрос (временную таблицу ВТ_Товары) левым соединением по контрагенту и номенклатуре.


Если я правильно понял...
7 devpro100
 
01.06.17
18:02
(6) ВТ_Доки Левое соединение ВТ_Товары так точнее
8 ejikbeznojek
 
01.06.17
18:16
(6) А по номенклатуре нельзя же соединить, ведь "товара 2" нет в доке
Я попытался было сделать вот так: но результат тот же

ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПосещениеМагазинаТовары.Ссылка) КАК Количество3,
    ПосещениеМагазинаТовары.Ссылка.Адрес КАК Адрес
ПОМЕСТИТЬ т1
ИЗ
    Документ.ПосещениеМагазина.Товары КАК ПосещениеМагазинаТовары
ГДЕ
    ПосещениеМагазинаТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2

СГРУППИРОВАТЬ ПО
    ПосещениеМагазинаТовары.Ссылка.Адрес
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПосещениеМагазинаТовары.Ссылка КАК Документ,
    ПосещениеМагазинаТовары.Номенклатура КАК Номенклатура,
    СУММА(ПосещениеМагазинаТовары.Количество) КАК Количество,
    ПосещениеМагазинаТовары.Ссылка.Адрес КАК Адрес,
    ПосещениеМагазинаТовары.Ссылка.Контрагент,
    ПосещениеМагазинаТовары.Ссылка.Контрагент.СборныйПоставщик КАК Поставщик,
    ПосещениеМагазинаТовары.Номенклатура КАК КоличествоТМ,
    СУММА(т1.Количество3) КАК Количество3
ИЗ
    т1 КАК т1
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПосещениеМагазина.Товары КАК ПосещениеМагазинаТовары
        ПО ПосещениеМагазинаТовары.Ссылка.Адрес = т1.Адрес
ГДЕ
    ПосещениеМагазинаТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2

СГРУППИРОВАТЬ ПО
    ПосещениеМагазинаТовары.Ссылка,
    ПосещениеМагазинаТовары.Номенклатура,
    ПосещениеМагазинаТовары.Ссылка.Адрес,
    ПосещениеМагазинаТовары.Ссылка.Контрагент,
    ПосещениеМагазинаТовары.Ссылка.Контрагент.СборныйПоставщик,
    ПосещениеМагазинаТовары.Количество,
    ПосещениеМагазинаТовары.Номенклатура
9 ejikbeznojek
 
01.06.17
18:29
(7) На всякий случай сделал как ты написал.
так же, по докам где нет номенклатуры пишет 0.
8(
10 ejikbeznojek
 
01.06.17
19:23
Может кто-то знает как дополнить таблицу, добавив в неё строки с отсуствующей номенклатурой с 0 количеством?
11 ejikbeznojek
 
01.06.17
20:49
В общем я сдался и набыдлокодил 8(
Поставил, чтобы перед записью отсутствующие позиции заполнялись с 0 количеством.
Отчёт после этого конечно же нормально заработал, но если вдруг кто подскажет как сделать по человечески, буду рад увидеть)
12 devpro100
 
02.06.17
09:43
(9) Я правильно понимаю, что тебе нужно дополнить каждый документ недостающими товарами (всеми или только теми, которые засветились в других документах по контрагенту) с нулевым количеством номенклатуры?
Если так то тебе нужно сделать умножение на товары (т.е. ПОЛНОЕ соединение, не ЛЕВОЕ - я ошибся)
Если тебе нужно показать только тот товар, который присутствовал в каком либо документе по контрагенту, то нужно связывать по контрагенту. Если же все равно, т.е. в таблице должен быть просто весь товар из справочника, то тогда еще проще, можно связать сам справочник по условию "ИСТИНА". Тогда у тебя получится набор записей "Контрагент, Документ, Номенклатура" и количество "1 КАК КоличествоДоков".