Имя: Пароль:
1C
1С v8
8.2 Остатки на каждый день
0 Aswed
 
21.11.11
14:56
Знаю что уже много много раз это обсуждали.
Знаю что даже есть такая статья в КЗ

Книга знаний: v8: Полные остатки по периоду во вложенном запросе;

Но что то у меня все равно не получается, уже целый день бьюсь над этим вопросом и пока результаты не важнецкие.

Пробую запросом

ВЫБРАТЬ РАЗРЕШЕННЫЕ
ОстаткиАвтомобилейОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остаток,
ОстаткиАвтомобилейОстаткиИОбороты.ПодразделениеКомпании.ДилерскийЦентр КАК ДилерскийЦентр,
ОстаткиАвтомобилейОстаткиИОбороты.Период КАК Период
ИЗ
РегистрНакопления.ОстаткиАвтомобилей.ОстаткиИОбороты(&НачалоПериода, &ОкончаниеПериода, День, , Организация В (&СписОрганизаций)) КАК ОстаткиАвтомобилейОстаткиИОбороты
ИТОГИ
СУММА(Остаток)
ПО
ОБЩИЕ,
Период ПЕРИОДАМИ(ДЕНЬ, &НачалоПериода, &ОкончаниеПериода),
ДилерскийЦентр

Выполняю, выгружаю в ТЗ

Выбирает все равно только даты когда были движения.
1 Aswed
 
21.11.11
14:57
Попробовал создать таблицу дат и подставить её в запрос

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


Результат аналогично и первому запросу.
2 Axel2009
 
21.11.11
15:18
в таблице периодов нужно создавать с колонкой ДилерскийЦентр.
3 sergei123654
 
21.11.11
15:24
(0) может так?

ВЫБРАТЬ
   НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2011, 3, 31, 0, 0, 0), ДЕНЬ) КАК Даты
ПОМЕСТИТЬ ТаблицаДат

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2011, 1, 31, 0, 0, 0), ДЕНЬ)

ИНДЕКСИРОВАТЬ ПО
   Даты
;

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

ИНДЕКСИРОВАТЬ ПО
   Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТаблицаДат.Даты,
   ТабдицаОстатковИОборотов.Получатель,
   ТабдицаОстатковИОборотов.СуммаВзаиморасчетовПриход,
   ТабдицаОстатковИОборотов.СуммаСборовПриход,
   ТабдицаОстатковИОборотов.СуммаСборовРасход,
   ТабдицаОстатковИОборотов.СуммаВзаиморасчетовРасход
ИЗ
   ТаблицаДат КАК ТаблицаДат
       ЛЕВОЕ СОЕДИНЕНИЕ ТабдицаОстатковИОборотов КАК ТабдицаОстатковИОборотов
       ПО ТаблицаДат.Даты = ТабдицаОстатковИОборотов.Период


а хотяяяяяяя.... пппёс его знает, но вроде так, а мож я и не правильно понял автора
4 teapot123
 
21.11.11
15:40
5 Rebelx
 
21.11.11
15:43
ищи на инфостарте, Душелов вроде делал
6 Rebelx
 
21.11.11
15:44
ВЫБРАТЬ
           Остатки.Номенклатура КАК Номенклатура,
           Остатки.Характеристика КАК Характеристика,
           ТаблицаПериодов.Период КАК Период,
           Остатки.ВНаличииНачальныйОстаток,
           ВЫБОР
               КОГДА Остатки.ВНаличииНачальныйОстаток > 0
                   ТОГДА 1
               ИНАЧЕ 0
           КОНЕЦ КАК НаличиеТовара,
           Остатки.Склад КАК Склад
       ПОМЕСТИТЬ #НаличиеТоваровНаСкладахПоДням
       ИЗ
           (ВЫБРАТЬ РАЗЛИЧНЫЕ
               КурсыВалют.Период КАК Период
           ИЗ
               РегистрСведений.КурсыВалют КАК КурсыВалют
           ГДЕ
               КурсыВалют.Период МЕЖДУ &ПериодРасчета И КОНЕЦПЕРИОДА(&ПериодРасчета, МЕСЯЦ)) КАК ТаблицаПериодов
               ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   ТоварыНаСкладахОстаткиИОбороты.Период КАК НачалоИнтервала,
                   МИНИМУМ(ВЫБОР
                           КОГДА Товары.Период ЕСТЬ NULL
                               ТОГДА КОНЕЦПЕРИОДА(КОНЕЦПЕРИОДА(&ПериодРасчета, МЕСЯЦ), ДЕНЬ)
                           ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Товары.Период, ДЕНЬ, -1), ДЕНЬ)
                       КОНЕЦ) КАК КонецИнтервала,
                   ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                   ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
                   ТоварыНаСкладахОстаткиИОбороты.ВНаличииОборот КАК ВНаличииОборот,
                   ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
                   ТоварыНаСкладахОстаткиИОбороты.Характеристика КАК Характеристика
               ИЗ
                   РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ПериодРасчета, КОНЕЦПЕРИОДА(&ПериодРасчета, МЕСЯЦ), День, , ) КАК ТоварыНаСкладахОстаткиИОбороты
                       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ПериодРасчета, КОНЕЦПЕРИОДА(&ПериодРасчета, МЕСЯЦ), День, , ) КАК Товары
                       ПО ТоварыНаСкладахОстаткиИОбороты.Период < Товары.Период
                           И ТоварыНаСкладахОстаткиИОбороты.Склад = Товары.Склад
                           И ТоварыНаСкладахОстаткиИОбороты.Номенклатура = Товары.Номенклатура
                           И ТоварыНаСкладахОстаткиИОбороты.Характеристика = Товары.Характеристика
               
               СГРУППИРОВАТЬ ПО
                   ТоварыНаСкладахОстаткиИОбороты.Период,
                   ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
                   ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток,
                   ТоварыНаСкладахОстаткиИОбороты.ВНаличииОборот,
                   ТоварыНаСкладахОстаткиИОбороты.Склад,
                   ТоварыНаСкладахОстаткиИОбороты.Характеристика) КАК Остатки
               ПО (Остатки.НачалоИнтервала <= ТаблицаПериодов.Период)
                   И (Остатки.КонецИнтервала >= ТаблицаПериодов.Период)
       
       СГРУППИРОВАТЬ ПО
           Остатки.Номенклатура,
           ТаблицаПериодов.Период,
           Остатки.ВНаличииНачальныйОстаток,
           Остатки.Склад,
           Остатки.Характеристика
7 Classic
 
21.11.11
15:46
(0)
Делай запрос, который выдаст тебе все даты и потом цепляй к нему твои обороты.
Запрос можешь найти в нете. Может написать сам.
8 andrewks
 
21.11.11
21:13
(0) таблицу дат можно сформировать таким макаром:


select
0 as val
into tt1
union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9

;

select
dateadd(&ДатаНачала,day,tab1.val+10*tab2.val+100*tab3.val) as dateval
into days_tab
from
tt1 as tab1, tt1 as tab2, tt1 as tab3
where (dateadd(&ДатаНачала,day,tab1.val+10*tab2.val+100*tab3.val)<=&ДатаКонца)
index by dateval

;

//здесь уже твой запрос, используй соединение с ВТ dateval