Имя: Пароль:
1C
1С v8
Подскажите с запросом...
0 morik44
 
24.05.13
09:55
Хочу вывести отчёт по дебиторской задолженности контрагента в БП 2.0,
задолженностью считается суммДт, которая не закрыта СуммойКт в предыдущем месяце. Сломал уже всю голову. Вот мой запрос:

ВЫБРАТЬ
   ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, ИтогЗапроса.Поле1) КАК Период
ПОМЕСТИТЬ Периоды
ИЗ
   (ВЫБРАТЬ
       Календарь.Поле1 КАК Поле1
   ИЗ
       (ВЫБРАТЬ
           0 КАК Поле1
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           1
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           2
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           3
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           4
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           5
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           6
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           7
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           8
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           9
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           10
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           11
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           12) КАК Календарь) КАК ИтогЗапроса
;

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Подитог.Организация,
   Подитог.Контаргент,
   Подитог.Договор,
   Подитог.ОборотПрошлый,
   Подитог.Долг,
   Подитог.СуммаДт,
   Подитог.СуммаКт,
   Подитог.СуммаКт - ВЫБОР
       КОГДА Подитог.Долг >= Подитог.СуммаКт
           ТОГДА Подитог.СуммаКт
       ИНАЧЕ ВЫБОР
               КОГДА Подитог.Долг <= 0
                   ТОГДА 0
               ИНАЧЕ Подитог.СуммаКт - Подитог.Долг
           КОНЕЦ
   КОНЕЦ КАК ОплатаТекущая,
   ВЫБОР
       КОГДА Подитог.Долг >= Подитог.СуммаКт
           ТОГДА Подитог.СуммаКт
       ИНАЧЕ ВЫБОР
               КОГДА Подитог.Долг <= 0
                   ТОГДА 0
               ИНАЧЕ Подитог.СуммаКт - Подитог.Долг
           КОНЕЦ
   КОНЕЦ КАК ОплатаПросрочки,
   Подитог.Период,
   Подитог.СуммаНачало,
   Подитог.СуммаКонец
ИЗ
   Подитог КАК Подитог
1 morik44
 
24.05.13
10:11
может кто помочь?
2 azernot
 
24.05.13
10:15
Чем помочь-то? Запрос за тебя написать? В (0) запрос отвратительный чисто по оптимальности, без анализа логики работы..
3 morik44
 
24.05.13
10:26
(2) писать за меня не надо) Направить на верную мысль)
4 azernot
 
24.05.13
10:29
(3) Направляю. Сформулируй нормально задачу. В нормальных терминах, чётко и понятно.
5 morik44
 
24.05.13
10:39
Задача: получить дебиторскую задолженность по каждому месяцу за выбранный период. Дебитрская задолженность возникает в том случае, если в прошлом месяце суммаДт привысила суммаКт.
6 mastodont
 
24.05.13
10:50
(5) счет 62-й ?
суммаДт и суммаДт это обороты? если да, то авансы их могут не хило увеличить.
7 azernot
 
24.05.13
10:52
(5) Что такое суммаДт и что такое суммаКт?
8 morik44
 
24.05.13
10:53
счёт 62.01
9 morik44
 
24.05.13
10:53
СуммаОборотДт и СуммаОборотКт
10 mastodont
 
24.05.13
10:55
как-то так:?

ВЫБРАТЬ
   ХозрасчетныйОбороты.Субконто1 КАК Контрагент,
   ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОбороты.Субконто1),
   ХозрасчетныйОбороты.Субконто2 КАК ДоговорКонтрагента,
   ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОбороты.Субконто2),
   ХозрасчетныйОбороты.СуммаОборотДт,
   ХозрасчетныйОбороты.СуммаОборотКт,
   ВЫБОР
       КОГДА ХозрасчетныйОбороты.СуммаОборотДт > ХозрасчетныйОбороты.СуммаОборотКт
           ТОГДА ХозрасчетныйОбороты.СуммаОборотДт - ХозрасчетныйОбороты.СуммаОборотКт
       ИНАЧЕ 0
   КОНЕЦ КАК Поле1
ИЗ
   РегистрБухгалтерии.Хозрасчетный.Обороты(, , Месяц, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателями), , Организация = &Организация, , ) КАК ХозрасчетныйОбороты
11 azernot
 
24.05.13
10:56
А задолженность - это остаток по Дт на конец месяца? или разница между дебетовым оборотом этого мес яца и кредитовым предыдущего?
12 morik44
 
24.05.13
11:02
(11) ну тут не так всё просто) если есть кредитовый оборот, то он вначале идёт на погашение прошлого дебетового оборота,а остаток на погашение текущего.
13 mastodont
 
24.05.13
11:05
(12) Ну тогда могу только вернуть тебя к (4).
"Сформулируй нормально задачу. В нормальных терминах, чётко и понятно."
14 azernot
 
24.05.13
11:06
(12) Ты вот подумай, надо оно кому-то из тебя клещами информацию тянуть?
ИМХО, задача, в том виде как ты её описываешь (а точнее пытаешься описать) первосортный бред. И почему-то я склонен думать, что это именно твоя интерпретация. В общем, помочь тебе невозможно по причине того, что ты сам толком не понимаешь что тебе надо.
15 morik44
 
24.05.13
11:11
вот такую задачу мне поставили..
16 azernot
 
24.05.13
11:12
(15) Не ври.
17 mastodont
 
24.05.13
11:14
(15) ну тогда надо сесть с тем кто ставил задачу, что бы тебе прям по оборотке показали какие цифры откуда берутся...
18 morik44
 
24.05.13
11:22
(16) чо мне врать то))
19 ИС-2
 
naïve
24.05.13
11:25
(0) сделай ход конем. В БП есть отчет "Просроченная задолжность" - отдай буху его
20 morik44
 
24.05.13
11:29
http://clip2net.com/s/575crA
вот такая вот задача)
21 morik44
 
24.05.13
11:33
(19) просроченная и нужна, не уточнил я)) вот только прочрочка считается мудрёно)
22 mastodont
 
24.05.13
11:46
(21) так а в чем мудреность-то? где это описано?
23 morik44
 
24.05.13
11:52
система такая: за услуги оказанные в январе, покупатель оплатит только в феврале, т.е. в феврале просрочки ещё нету, она возникнет в марте, если январский ДТ не полностью погашен.
24 azernot
 
24.05.13
11:55
В общем как я понимаю, формула такая
Просроченная задолженность месяца (N) = ОборотДтЗа(N-1)Месяцев - ОбоотКтЗа(N)Месяцев
25 morik44
 
24.05.13
11:57
(24)грубо говоря да)
26 mastodont
 
24.05.13
12:01
(25) а если сальдо на начало-оборотКт?
27 mastodont
 
24.05.13
12:02
(26) или еще можно ориентироваться на "Документы расчетов с контрагентом". По ним можно увидеть за какой месяц не закрытая задолженность.
28 morik44
 
24.05.13
12:05
(26) их это не устраивает
29 azernot
 
24.05.13
12:29
Вот тебе основа. Дальше сам работай.

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

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

УПОРЯДОЧИТЬ ПО
   ОстаткиИОборотыСПросроченнойЗадолженностью.Месяц
30 morik44
 
24.05.13
12:34
(29) хм.. спасибо, сейчас гляну.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.