Имя: Пароль:
1C
1С v8
Условие в запросе
,
0 yurikmellon2
 
21.08.19
08:33
Добрый день.
Коллеги, подскажите с условием. Что то туплю, не могу сообразить.

Конфа БП 3.0 Есть нетиповой справочник "График платежей", в нём табличная часть "Платежи" с колонками ДатаПлатежа и СуммаПлатежа. Это плановые данные.
И есть документы ПоступлениеНаРасчётныйСчет - это фактические данные.

Отчёт на СКД выводит соответствующую таблицу с отбором по датам. Когда платежи месяц в месяц, всё хорошо. Но если график нарушается, то не видны плановые цифры, так как условие по датам не выполняется.

Не могу сообразить, как задать условие, чтобы плановые цифры выводились всегда, а факт, когда он есть.

Запрос:

ВЫБРАТЬ
    ГрафикПлатежей.Наименование КАК Наименование,
    ГрафикПлатежей.Контрагент КАК Контрагент,
    ГрафикПлатежей.Договор КАК Договор,
    ГрафикПлатежей.Платежи.(
        НомерСтроки КАК НомерСтроки,
        ДатаПлатежа КАК ДатаПлатежа,
        СуммаПлатежа КАК СуммаПлатежа
    ) КАК Платежи,
    ХозрасчетныйОстаткиИОбороты.СуммаОборот КАК СуммаОборот,
    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
    ХозрасчетныйОстаткиИОбороты.Субконто3 КАК Субконто3,
    ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт
ИЗ
    Справочник.ГрафикПлатежей КАК ГрафикПлатежей
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты КАК ХозрасчетныйОстаткиИОбороты
        ПО ГрафикПлатежей.Договор = ХозрасчетныйОстаткиИОбороты.Субконто2
ГДЕ
    МЕСЯЦ(ГрафикПлатежей.Платежи.ДатаПлатежа) = МЕСЯЦ(ХозрасчетныйОстаткиИОбороты.Субконто3.Дата)
    И ГОД(ГрафикПлатежей.Платежи.ДатаПлатежа) = ГОД(ХозрасчетныйОстаткиИОбороты.Субконто3.Дата)

Скрин:
https://i.ibb.co/936Wx3S/image.jpg

Видно, что в июне 2017 было два платежа, за июнь и за июль, поэтому плановые цифры за июль в отчет не попали.

Подскажите с условием, плиз.
1 Cyberhawk
 
21.08.19
08:35
Кому охота разбираться в твоей структуре и отчете
2 yurikmellon2
 
21.08.19
08:38
(1) если у кого то есть время и желание помочь, то почему бы и нет?
Субконто1 это Контрагент
Субконто2 это Договор
Субконто3 это Документ
3 dezss
 
21.08.19
08:40
А чего ТЧ не левым цепляешь?
И ты ж в ГДЕ как раз к дате и цепляешься, так что он тебе должен выводить?
И благодаря этому ГДЕ, у тебя левое становится внутренним.

Переноси условие из ГДЕ в условия соединения, может тогда чета поменяется)
4 yurikmellon2
 
21.08.19
08:44
(3) Соединение идёт по Договору. Я понимаю, что условие отбирает только те данные, в которых дата совпадает. Как переделать условие, чтобы план по попадал в таблицу всегда, вне зависимости от того был в этом месяце факт или нет?
5 dezss
 
21.08.19
08:51
(4) Переноси условие из ГДЕ в условия соединения!
6 catena
 
21.08.19
08:57
(4)Потому что условие на левую таблицу превращает левое соединение во внутреннее. Слушай dezss
7 yurikmellon2
 
21.08.19
08:59
(5) пытаюсь перенести условие в соединение

ИЗ
Справочник.ГрафикПлатежей КАК ГрафикПлатежей
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты КАК ХозрасчетныйОстаткиИОбороты
ПО ГрафикПлатежей.Договор = ХозрасчетныйОстаткиИОбороты.Субконто2
И (МЕСЯЦ(ГрафикПлатежей.Платежи.ДатаПлатежа) = МЕСЯЦ(ХозрасчетныйОстаткиИОбороты.Субконто3.Дата)
И ГОД(ГрафикПлатежей.Платежи.ДатаПлатежа) = ГОД(ХозрасчетныйОстаткиИОбороты.Субконто3.Дата))

при формировании выдает "Запрос невозможно исполнить. В условиях соединения запроса не допускается обращение к табличным частям"
8 dezss
 
21.08.19
09:01
(7) Вооот. Так что цепляй ТЧ левым, а не обращайся к ней через точку.
9 yurikmellon2
 
21.08.19
09:03
(8) вроде все слова по отдельности понятны, а смысл от меня ускользает) Как это сделать?
10 Cyberhawk
 
21.08.19
09:06
(9) Вместо "ИЗ
    Справочник.ГрафикПлатежей" надо "ИЗ
    Справочник.ГрафикПлатежей.Платежи"
11 DmVl76
 
21.08.19
09:06
(8) Выбираешь из ГрафикПлатежей.Платежи

И вот это зачем? МЕСЯЦ(ГрафикПлатежей.Платежи.ДатаПлатежа) = МЕСЯЦ(ХозрасчетныйОстаткиИОбороты.Субконто3.Дата)
    И ГОД(ГрафикПлатежей.Платежи.ДатаПлатежа) = ГОД(ХозрасчетныйОстаткиИОбороты.Субконто3.Дата)
Есть выражение НАЧАЛОПЕРИОДА,
Субконто3.Дата - практически стопроцентные тормоза. Здесь можно избавиться от них, периодичность виртуальной таблицы устанавливаешь месяц и добавляешь к условиям соединения НАЧАЛОПЕРИОДА(ГрафикПлатежей.Платежи.ДатаПлатежа) = ХозрасчетныйОстаткиИОбороты.Период, ГДЕ выкидываешь.
12 dezss
 
21.08.19
09:13
(11) Только НАЧАЛОПЕРИОДА(ГрафикПлатежей.Платежи.ДатаПлатежа,"МЕСЯЦ")
13 dezss
 
21.08.19
09:14
(10) Не, лучше именно левым, а то у него из Справочник.ГрафикПлатежей в выборку поля вытягиваются.
14 dezss
 
21.08.19
09:15
(9) Таб часть - это отдельная таблица, она не хранится в таблице самого документа. Связь между ними делается через ссылку.
15 Cyberhawk
 
21.08.19
09:16
(13) Вытянет от ссылки, которая есть в тч
16 yurikmellon2
 
21.08.19
09:25
ИЗ
Справочник.ГрафикПлатежей.Платежи КАК ГрафикПлатежейПлатежи
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГрафикПлатежей КАК ГрафикПлатежей
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты КАК ХозрасчетныйОстаткиИОбороты
        ПО ГрафикПлатежей.Договор = ХозрасчетныйОстаткиИОбороты.Субконто2
    ПО (МЕСЯЦ(ГрафикПлатежейПлатежи.ДатаПлатежа) = МЕСЯЦ(ХозрасчетныйОстаткиИОбороты.Субконто3.Дата))
    И (ГОД(ГрафикПлатежейПлатежи.ДатаПлатежа) = ГОД(ХозрасчетныйОстаткиИОбороты.Субконто3.Дата))

выводит вообще все поступления

https://i.ibb.co/mhmpVWP/image.jpg
17 DmVl76
 
21.08.19
09:51
ГрафикПлатежейПлатежи.Ссылка.Контрагент,
...
...
ИЗ
Справочник.ГрафикПлатежей.Платежи КАК ГрафикПлатежейПлатежи
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Месяц) КАК ХозрасчетныйОстаткиИОбороты
        ПО ГрафикПлатежейПлатежи.Ссылка.Договор = ХозрасчетныйОстаткиИОбороты.Субконто2
        И НАЧАЛОПЕРИОДА(ГрафикПлатежейПлатежи.ДатаПлатежа,МЕСЯЦ) = ХозрасчетныйОстаткиИОбороты.Период
18 yurikmellon2
 
21.08.19
10:15
(17) да, похоже на правду. Спасибо большое
19 yurikmellon2
 
21.08.19
10:49
(17) тогда уж ещё в догонку вопрос. Выводятся только строки по которым было поступление. Как вывести строки из Графика платежей, по которым поступлений ещё не было?
20 Cyberhawk
 
21.08.19
10:53
(19) Убери "где"
21 yurikmellon2
 
21.08.19
11:37
Разобрался, всем спасибо, задача решена
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn