|
Значение на каждый месяц, значение может не заполнятся | ☑ | ||
---|---|---|---|---|
0
breezee
24.06.16
✎
09:20
|
Уже классическая тема получения значения на каждый день(в моем случае месяц), только в у меня могут быть не заполнены значения. Накидал алгоритм, но, думаю, что он очень костыльный вышел, может подскажите как лучше сделать? Сама задача - есть плановая валюта, курс на которую может меняться не чаще раза в месяц. Может меняться раз в год или пол года(на пример) - мне нужно получать значения на каждый месяц, если значение не заполнено - брать последнее заполненное. И всё суммировать. Вот сам код:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МЕСЯЦ(КурсыВалют.Период) КАК НомерМесяца, | КурсыВалют.Курс |ИЗ | РегистрСведений.КурсыВалют КАК КурсыВалют |ГДЕ | КурсыВалют.Период МЕЖДУ &ПериодНачала И &ПериодКонца | И КурсыВалют.Валюта.Код = ""001"" | |УПОРЯДОЧИТЬ ПО | НомерМесяца"; Запрос.УстановитьПараметр("ПериодНачала", ПериодОтчета.ДатаНачала); Запрос.УстановитьПараметр("ПериодКонца", ПериодОтчета.ДатаОкончания); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); СуммаПоследнийЗаполненныйМесяц = 0; резЗнач = 0; Для Ит = 1 По 12 Цикл староеРезЗнач = резЗнач; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ит = ВыборкаДетальныеЗаписи.НомерМесяца Тогда резЗнач = ВыборкаДетальныеЗаписи.КурсыВалют; СуммаПоследнийЗаполненныйМесяц = ВыборкаДетальныеЗаписи.КурсыВалют; КонецЕсли; КонецЦикла; Если староеРезЗнач = резЗнач Тогда //Сумма не изменилась - надо добавить последнее заполненное значение резЗнач = резЗнач + СуммаПоследнийЗаполненныйМесяц; КонецЕсли; КонецЦикла; |
|||
1
xxTANATORxx
24.06.16
✎
09:25
|
(0)цикл в цикле?
и я стесняюсь спросить, а зачем курсы суммировать? |
|||
2
aleks_default
24.06.16
✎
09:26
|
на классический вопрос классический ответ
Книга знаний: Срез последних на каждую дату в запросе |
|||
3
breezee
24.06.16
✎
09:29
|
(1) Чтобы посчитать средний курс
(2) Да я же сделал поправку, что у меня может быть не заполнен курс |
|||
4
aleks_default
24.06.16
✎
09:31
|
(3) Какая разница? Ты же курс срезом берешь
|
|||
5
xxTANATORxx
24.06.16
✎
09:39
|
(3)делается одним запросом, и среднее тоже запросом считай
|
|||
6
breezee
24.06.16
✎
10:06
|
(5) Это не сработает. Я же правильно понимаю логику - мне всё равно нужна таблица дат, чтобы получить данные на эти даты?
|
|||
7
catena
24.06.16
✎
10:19
|
(6)Это сработает. Таблица дат делается из регламентированного календаря, либо на крайний случай отдельно.
|
|||
8
aleks_default
24.06.16
✎
10:22
|
Да. Сделай свою таблицу дат, в которой точно есть все месяцы. И к ней делай срез на каждую дату.
|
|||
9
catena
24.06.16
✎
10:30
|
Держи
ВЫБРАТЬ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Период ПОМЕСТИТЬ тзДаты ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КурсыВалют.Период КАК Период, КурсыВалют.Курс ПОМЕСТИТЬ тзКурсы ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ГДЕ КурсыВалют.Период МЕЖДУ &ДатаНач И &ДатаКон И КурсыВалют.Валюта = &Вал ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НАЧАЛОПЕРИОДА(тзДаты.Период, МЕСЯЦ) КАК Период, СРЕДНЕЕ(тзКурсы.Курс) КАК Курс ИЗ (ВЫБРАТЬ тзДаты.Период КАК Период, МАКСИМУМ(тзКурсы.Период) КАК ПериодыСреза ИЗ тзДаты КАК тзДаты ЛЕВОЕ СОЕДИНЕНИЕ тзКурсы КАК тзКурсы ПО тзДаты.Период >= тзКурсы.Период СГРУППИРОВАТЬ ПО тзДаты.Период) КАК тзДаты ЛЕВОЕ СОЕДИНЕНИЕ тзКурсы КАК тзКурсы ПО тзДаты.ПериодыСреза = тзКурсы.Период СГРУППИРОВАТЬ ПО НАЧАЛОПЕРИОДА(тзДаты.Период, МЕСЯЦ) |
|||
10
breezee
24.06.16
✎
11:28
|
(9) Да это я и сам нашел, всё равно спасибо. У меня в конфигурации нет производственного календаря. Есть другой справочник периодов, но он может быть не заполнен как нужно, хотел бы опираться на месяцы
|
|||
11
catena
24.06.16
✎
11:46
|
(10)Тогда вместо первой таблицы подбрасывай свою таблицу с данными и дальше все то же самое. В итоге и получаются месяцы. Хочешь - выводи номер месяца.
|
|||
12
catena
24.06.16
✎
11:46
|
*"свою таблицу с данными"="свою таблицу с датами"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |