Имя: Пароль:
1C
1С v8
остатки по месяцам
0 емое
 
26.01.12
14:34
Пришла беда откуда не ждали

Нужно получить остатки на конец каждого месяца в указанном периоде, сделал запрос (упрощенный вид):

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

Оказалось, что если взять период, например 3 месяца, то по счетам, по которым остатки не менялись, т.е. не было оборотов запрос вернет только остаток на первый и последний месяц :(

А нужно на каждый. Пробовал поставить метод дополнения ДвиженияИГраницыПериода, ничего не изменилось.

Как победить? Можно взять остатки на конец нескольких месяцев одним запросом?
1 Alex S D
 
26.01.12
14:37
ищи, тут много тем таких было
2 емое
 
26.01.12
14:41
гуглил, искал по форму, нашел только вопросы без ответов.
3 Shurjk
 
26.01.12
14:42
В книге знаний была такая статья.
4 емое
 
26.01.12
14:45
хотя бы запрос поисковый подскажите
5 Ненавижу 1С
 
гуру
26.01.12
14:48
соедини с регламентным производственным календарем например
6 Sandy_S
 
26.01.12
14:54
v8: Получение в запросе всех периодов из указанного интервала...
7 Sandy_S
 
26.01.12
14:54
8 емое
 
26.01.12
15:11
т.е. надо соединить мой запрос с таблицей периодов, и там где нулл взять данные на прошлый период, еще раз соединив с таблицей остатков...
9 емое
 
26.01.12
16:02
сделал, может кому пригодиться:

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

СГРУППИРОВАТЬ ПО
   периоды.Период
   ) периоды
   левое соединение
   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПер, &КонПер, Месяц, , , , ) КАК ХозрасчетныйОстаткиИОбороты
                       по периоды.текпериод = ХозрасчетныйОстаткиИОбороты.Период
и    ХозрасчетныйОстаткиИОбороты.Счет = &Счет
   И ХозрасчетныйОстаткиИОбороты.Организация = &Организация
   
   левое соединение
   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПер, &КонПер, Месяц, , , , ) КАК ХозрасчетныйОстаткиИОборотыПрошПериод
                       по периоды.предыдущийпериод = ХозрасчетныйОстаткиИОборотыПрошПериод.Период
и    ХозрасчетныйОстаткиИОборотыПрошПериод.Счет = &Счет
   И ХозрасчетныйОстаткиИОборотыПрошПериод.Организация = &Организация
   
Упорядочить по периоды.текпериод
10 емое
 
26.01.12
21:51
Если кому надо, запрос для получения остатков по всем счетам в разрезе контрагентов (там где есть)

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

;

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

УПОРЯДОЧИТЬ ПО 2,1
11 емое
 
26.01.12
23:49
приврал малость :) завтра еще проверю...
Программист всегда исправляет последнюю ошибку.