Имя: Пароль:
1C
1С v8
УТ запрос средний остаток
,
0 programer_
1c_nn15
 
18.01.12
12:34
День добрый , нужен запрос чтобы выводил остатки помесячно, чтобы за каждый месяц выводился средний остаток в утешке, если несложно короткий пример
1 GLazNik
 
18.01.12
12:37
что значит средний остаток? это как средняя температура по палате?
2 programer_
1c_nn15
 
18.01.12
12:38
ну вобщем да,надо уточнить что конкретно имеет ввиду нач. отдела поставок
3 nazi
 
18.01.12
12:38
(остаток на начало месяц + остаток на конец месяц) / 2 ?
4 programer_
1c_nn15
 
18.01.12
12:43
Наврят ли на конец и начало месяца может быть нулевой, а вот в в остальные месяца какой угодно) постановщик задачи позже отпишет, может быть с оборотом как то связать
5 programer_
1c_nn15
 
18.01.12
12:46
Вобщем есть вариант взять остаток на конец каждого дня суммировать и поделить на конец месяца, я изначально подумал что может какая то функция есть в языке запросов, чтобы формулу не прописывать
6 GLazNik
 
18.01.12
12:48
(5) делить наверное надо не на конец месяца, а на количество дней в месяце.
7 programer_
1c_nn15
 
18.01.12
12:49
ну да,так и хотел написать спутал слова
8 shuhard
 
18.01.12
12:51
(4) сделай так, если заказчик тупой, то требуй фориулу расчета среднего

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

СГРУППИРОВАТЬ ПО
   НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ),
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура
9 AAlexandra
 
18.01.12
13:00
если по логике, то интересен остаток на каждый РАБОЧИЙ день месяца, а не просто каждый день..
З.Ы. а у меня, например, коллега-программист считает, что "среднее" из пяти значений - это третье по счету, если их отсортировать по возрастанию.. Так что лучше уточнить у заказчика, что он понимает под "средним".
10 Ненавижу 1С
 
гуру
18.01.12
13:02
(9) это называется медиана
11 Михаил Козлов
 
18.01.12
13:10
(0) Если в отчете по оборачиваемости поставить периодичность день, то средний остаток в отчтет, вроде как, должен давать средний остаток по дням.
12 ProProg
 
18.01.12
13:16
ТекстЗапроса =
   "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    Интервалы.НачалоИнтервала КАК Период
   |ПОМЕСТИТЬ Периоды
   |ИЗ
   |    &Интервалы КАК Интервалы
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    ВложенныйЗапрос.Период КАК Период,
   |    ВложенныйЗапрос.КоличествоОборот КАК КоличествоОборот,
   |    ВложенныйЗапрос.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
   |    ВложенныйЗапрос.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
   |ИЗ
   |    Периоды КАК Периоды
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |            ВложенныйЗапрос.Период КАК Период,
   |            СУММА(ВложенныйЗапрос.КоличествоОборот) КАК КоличествоОборот,
   |            СУММА(ВложенныйЗапрос.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
   |            СУММА(ВложенныйЗапрос.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
   |        ИЗ
   |            (ВЫБРАТЬ
   |                ТоварыНаСкладах.Период КАК Период,
   |                0 КАК КоличествоОборот,
   |                ТоварыНаСкладах.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
   |                ТоварыНаСкладах.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
   |            ИЗ
   |                РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, ДЕНЬ, , Номенклатура = &УсловиеОтбора) КАК ТоварыНаСкладах
   |            
   |            ОБЪЕДИНИТЬ ВСЕ
   |            
   |            ВЫБРАТЬ
   |                ТоварыВРознице.Период,
   |                0,
   |                ТоварыВРознице.КоличествоНачальныйОстаток,
   |                ТоварыВРознице.КоличествоКонечныйОстаток
   |            ИЗ
   |                РегистрНакопления.ТоварыВРознице.ОстаткиИОбороты(&ДатаНач, &ДатаКон, ДЕНЬ, , Номенклатура = &УсловиеОтбора) КАК ТоварыВРознице
   |            
   |            ОБЪЕДИНИТЬ ВСЕ
   |            
   |            ВЫБРАТЬ
   |                ПродажиОбороты.Период,
   |                ПродажиОбороты.КоличествоОборот,
   |                0,
   |                0
   |            ИЗ
   |                РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, ДЕНЬ, Номенклатура = &УсловиеОтбора) КАК ПродажиОбороты) КАК ВложенныйЗапрос
   |        
   |        СГРУППИРОВАТЬ ПО
   |            ВложенныйЗапрос.Период) КАК ВложенныйЗапрос
   |        ПО Периоды.Период = ВложенныйЗапрос.Период
   |ИТОГИ
   |    СУММА(КоличествоОборот),
   |    СУММА(КоличествоНачальныйОстаток),
   |    СУММА(КоличествоКонечныйОстаток)
   |ПО
   |    Период ПЕРИОДАМИ(ДЕНЬ, &ДатаНач, &ДатаКон)
   |АВТОУПОРЯДОЧИВАНИЕ";
   
   ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"День",ПериодичностьДляЗапроса);
   ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"ДЕНЬ",ПериодичностьДляЗапроса);
   
   //Интервалы.ВыбратьСтроку();
   Запрос = Новый Запрос;    
   Запрос.УстановитьПараметр("УсловиеОтбора", ТекущиеДанные.Номенклатура);
   Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач));
   Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон));
   Запрос.УстановитьПараметр("Интервалы", Интервалы);
   Запрос.Текст = ТекстЗапроса;

(с) http://subsystems.ru/
13 ProProg
 
18.01.12
13:22
Вот еще.
С параметрами по календарю
МассивДней = Новый Массив;
   Если РабочаяНеделя = 5 Тогда
       МассивДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
   ИначеЕсли РабочаяНеделя = 6 Тогда
       МассивДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
       МассивДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
       МассивДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота);
   ИначеЕсли РабочаяНеделя = 7 Тогда
       МассивДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
       МассивДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
       МассивДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота);
       МассивДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье);
   КонецЕсли;
   ПараметрыПостроителя.Вставить("ПереченьРабочихДней",МассивДней);


|        ОБЪЕДИНИТЬ ВСЕ
   |        
   |        ВЫБРАТЬ
   |            НоменклатураСКолДней.Номенклатура,
   |            НоменклатураСКолДней.ХарактеристикаНоменклатуры,
   |            0,
   |            0,
   |            0,
   |            0,
   |            0,
   |            0,
   |            0,
   |            0,
   |            0,
   |            0,
   |            0,
   |            0,
   |            СУММА(НоменклатураСКолДней.КоличествоДнейВПродаже),
   |            0,
   |            0,
   |            0
   |        ИЗ
   |            (ВЫБРАТЬ
   |                РабочиеДниНоменклатуры.Номенклатура КАК Номенклатура,
   |                РабочиеДниНоменклатуры.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   |                СУММА(ВЫБОР
   |                        КОГДА ИсторияОстатков.КоличествоКонечныйОстаток > 0
   |                                ИЛИ КОНЕЦПЕРИОДА(РабочиеДниНоменклатуры.ДатаКалендаря, ДЕНЬ) = КОНЕЦПЕРИОДА(ИсторияОстатков.Период, ДЕНЬ)
   |                                    И ИсторияОстатков.КоличествоКонечныйОстаток <= ИсторияОстатков.КоличествоРасход
   |                                    И (НЕ ИсторияОстатков.КоличествоРасход = 0)
   |                                    И ИсторияОстатков.КоличествоНачальныйОстаток > 0
   |                            ТОГДА 1
   |                        ИНАЧЕ 0
   |                    КОНЕЦ) КАК КоличествоДнейВПродаже
   |            ИЗ
   |                (ВЫБРАТЬ
   |                    ДниКалендаря.ДатаКалендаря КАК ДатаКалендаря,
   |                    МАКСИМУМ(ИсторияОстатков.Период) КАК Период,
   |                    ИсторияОстатков.Номенклатура КАК Номенклатура,
   |                    ИсторияОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
   |                ИЗ
   |                    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК ДниКалендаря
   |                        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |                            ИсторияОстатков.Период КАК Период,
   |                            ИсторияОстатков.Номенклатура КАК Номенклатура,
   |                            ИсторияОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   |                            СУММА(ИсторияОстатков.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
   |                            СУММА(ИсторияОстатков.КоличествоРасход) КАК КоличествоРасход,
   |                            СУММА(ИсторияОстатков.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
   |                        ИЗ
   |                            (ВЫБРАТЬ
   |                                ТоварыНаСкладах.Период КАК Период,
   |                                ТоварыНаСкладах.Номенклатура КАК Номенклатура,
   |                                ТоварыНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   |                                ТоварыНаСкладах.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
   |                                ТоварыНаСкладах.КоличествоРасход КАК КоличествоРасход,
   |                                ТоварыНаСкладах.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
   |                            ИЗ
   |                                РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, ДЕНЬ, , {(Номенклатура).* КАК Номенклатура, (Склад.Подразделение).* КАК Подразделение, (Склад).* КАК Склад}) КАК ТоварыНаСкладах
   |                            
   |                            ОБЪЕДИНИТЬ ВСЕ
   |                            
   |                            ВЫБРАТЬ
   |                                ТоварыВРознице.Период,
   |                                ТоварыВРознице.Номенклатура,
   |                                ТоварыВРознице.ХарактеристикаНоменклатуры,
   |                                ТоварыВРознице.КоличествоНачальныйОстаток,
   |                                ТоварыВРознице.КоличествоРасход,
   |                                ТоварыВРознице.КоличествоКонечныйОстаток
   |                            ИЗ
   |                                РегистрНакопления.ТоварыВРознице.ОстаткиИОбороты(&ДатаНач, &ДатаКон, ДЕНЬ, , {(Номенклатура).* КАК Номенклатура, (Склад.Подразделение).* КАК Подразделение, (Склад).* КАК Склад}) КАК ТоварыВРознице) КАК ИсторияОстатков
   |                        
   |                        СГРУППИРОВАТЬ ПО
   |                            ИсторияОстатков.Период,
   |                            ИсторияОстатков.Номенклатура,
   |                            ИсторияОстатков.ХарактеристикаНоменклатуры) КАК ИсторияОстатков
   |                        ПО (НАЧАЛОПЕРИОДА(ДниКалендаря.ДатаКалендаря, ДЕНЬ) >= НАЧАЛОПЕРИОДА(ИсторияОстатков.Период, ДЕНЬ))
   |                ГДЕ
   |                    ДниКалендаря.ДатаКалендаря <= &ДатаКон
   |                    И ДниКалендаря.ДатаКалендаря >= &ДатаНач
   |                    И ДниКалендаря.ВидДня В(&ПереченьРабочихДней)
   |                
   |                СГРУППИРОВАТЬ ПО
   |                    ДниКалендаря.ДатаКалендаря,
   |                    ИсторияОстатков.Номенклатура,
   |                    ИсторияОстатков.ХарактеристикаНоменклатуры) КАК РабочиеДниНоменклатуры
   |                    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |                        ИсторияОстатков.Период КАК Период,
   |                        ИсторияОстатков.Номенклатура КАК Номенклатура,
   |                        ИсторияОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   |                        СУММА(ИсторияОстатков.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
   |                        СУММА(ИсторияОстатков.КоличествоРасход) КАК КоличествоРасход,
   |                        СУММА(ИсторияОстатков.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
   |                    ИЗ
   |                        (ВЫБРАТЬ
   |                            ТоварыНаСкладах.Период КАК Период,
   |                            ТоварыНаСкладах.Номенклатура КАК Номенклатура,
   |                            ТоварыНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   |                            ТоварыНаСкладах.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
   |                            ТоварыНаСкладах.КоличествоРасход КАК КоличествоРасход,
   |                            ТоварыНаСкладах.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
   |                        ИЗ
   |                            РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, ДЕНЬ, , {(Номенклатура).* КАК Номенклатура, (Склад.Подразделение).* КАК Подразделение, (Склад).* КАК Склад}) КАК ТоварыНаСкладах
   |                        
   |                        ОБЪЕДИНИТЬ ВСЕ
   |                        
   |                        ВЫБРАТЬ
   |                            ТоварыВРознице.Период,
   |                            ТоварыВРознице.Номенклатура,
   |                            ТоварыВРознице.ХарактеристикаНоменклатуры,
   |                            ТоварыВРознице.КоличествоНачальныйОстаток,
   |                            ТоварыВРознице.КоличествоРасход,
   |                            ТоварыВРознице.КоличествоКонечныйОстаток
   |                        ИЗ
   |                            РегистрНакопления.ТоварыВРознице.ОстаткиИОбороты(&ДатаНач, &ДатаКон, ДЕНЬ, , {(Номенклатура).* КАК Номенклатура, (Склад.Подразделение).* КАК Подразделение, (Склад).* КАК Склад}) КАК ТоварыВРознице) КАК ИсторияОстатков
   |                    
   |                    СГРУППИРОВАТЬ ПО
   |                        ИсторияОстатков.Период,
   |                        ИсторияОстатков.Номенклатура,
   |                        ИсторияОстатков.ХарактеристикаНоменклатуры) КАК ИсторияОстатков
   |                    ПО РабочиеДниНоменклатуры.Период = ИсторияОстатков.Период
   |                        И РабочиеДниНоменклатуры.Номенклатура = ИсторияОстатков.Номенклатура
   |                        И РабочиеДниНоменклатуры.ХарактеристикаНоменклатуры = ИсторияОстатков.ХарактеристикаНоменклатуры
   |            
   |            СГРУППИРОВАТЬ ПО
   |                РабочиеДниНоменклатуры.Номенклатура,
   |                РабочиеДниНоменклатуры.ХарактеристикаНоменклатуры) КАК НоменклатураСКолДней
   |        
   |        СГРУППИРОВАТЬ ПО
   |            НоменклатураСКолДней.Номенклатура,
   |            НоменклатураСКолДней.ХарактеристикаНоменклатуры
14 programer_
1c_nn15
 
18.01.12
14:03
(9) вобщем то заказчик сказал как написано в (5) тоесть взять конечный остаток на каждый день, а за месяц взять средний
15 programer_
1c_nn15
 
18.01.12
14:16
где можно  про функцию из языка запросов прочитать "Среднее"? в синтаксис помошнике нет
16 programer_
1c_nn15
 
18.01.12
14:55
*
17 Zombi
 
18.01.12
14:58
(15) А какие с этой функцией у вас непонятки?
18 Ненавижу 1С
 
гуру
18.01.12
14:59
СРЕДНЕЕ брать неправильно
19 programer_
1c_nn15
 
18.01.12
15:06
Да поподробней пр неё прочитать хотел
20 programer_
1c_nn15
 
18.01.12
15:06
)
21 Ненавижу 1С
 
гуру
18.01.12
15:08
если у вас на 1 января остаток =1, на 5-е равен 30, а остальные дни без остатка, то "среднее" даст (30+1)/2=15.5, хотя среднее за месяц равно 1
22 programer_
1c_nn15
 
18.01.12
15:10
если так работает до действительно не подходит, спасибо хотя по идее должна бы на количество дней в месяце делить
23 Ненавижу 1С
 
гуру
18.01.12
15:11
ВЫБРАТЬ
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
   СРЕДНЕЕ(ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0)) КАК СреднееКоличество
ИЗ
   РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, День, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты
       ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = ТоварыНаСкладахОстаткиИОбороты.Период

СГРУППИРОВАТЬ ПО
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура
24 programer_
1c_nn15
 
18.01.12
15:12
если я правильно понял если остатков на день нет то она за этот день ноль втыкает
25 Ненавижу 1С
 
гуру
18.01.12
15:13
(24) да
на самом деле достаточно написать:

СРЕДНЕЕ(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК СреднееКоличество
26 programer_
1c_nn15
 
18.01.12
15:14
ага, буду эксперементировать)
27 programer_
1c_nn15
 
18.01.12
15:15
в (8) вроде как такая же конструкция)
28 programer_
1c_nn15
 
18.01.12
15:18
Набросал пока такую заготовочку , пока без среднего, но выводит не каждый день а когда изменения в остатках есть

"ВЫБРАТЬ
   |    ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
   |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
   |    ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладахОстаткиИОбороты.Номенклатура),
   |    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
   |ИЗ
   |    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, , Номенклатура = &номенклатура) КАК ТоварыНаСкладахОстаткиИОбороты
   |ГДЕ
   |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура = &номенклатура
   |
   |СГРУППИРОВАТЬ ПО
   |    ТоварыНаСкладахОстаткиИОбороты.Период,
   |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура
   |ИТОГИ
   |    СУММА(КоличествоКонечныйОстаток)
   |ПО
   |    ОБЩИЕ,
   |    Период";
29 programer_
1c_nn15
 
18.01.12
15:18
Хотел посмотреть остатки по дням
30 Ненавижу 1С
 
гуру
18.01.12
15:30
(27) не совсем