|
v7: Вопрос по реализации запроса | ☑ | ||
---|---|---|---|---|
0
MatrosoV AleXXXand_R
25.06.15
✎
08:26
|
Подскажите пожалуйста как реализовать следующее (конфигурация "альфа-Авто" 7.7)
1) Небольшое описание к задаче: Есть регистр накопления "Остатки товаров". В нем есть ресурс стоимость. Также в этом отчете выводится мелкооптовая и оптовая цена (сумма). Отчет выводится с заданными группировками Товар -> Склад -> Поставщик -> Партия. Группировка "Склад" выводится если на форме доступен флажок "Разворачивать по складам". Группировка "Партия" выводится если на форме доступен флажок "Разворачивать по партиям". 2) Суть задачи: Добавляется новый справочник "Ранжирование периодов отчета остатков". В нем задаются начальное количество дней и конечное количество дней для расчета (то есть здесь - [Текущая дата] - [Дата партии товара] должна попадать в этот диапазон), и %% расчета мелкооптовой и оптовой цены от ресурса "Стоимость" товара 3) Что именно не получается: - На группировке партии добавить функционал расчета %% для мелкооптовой цены и оптовой цены вполне легко - для этого можно и не переписывать запрос. А вот как рассчитать - мелкооптовую сумму и оптовую на высших уровнях? Когда я пытаюсь сделать что-то типа такого: РанжированиеПериодов = СоздатьОбъект("Справочник.РанижированиеПериодов"); ИндексЦены = 1; РанжированиеПериодов.ВыратьЭлементы(); Пока РанжированиеПериодов.ПолучитьЭлемент() = 1 Цикл ТекстЗапроса = ТекстЗапроса + "Функция МелкооптоваяЦена_" + Строка(ИндексЦены) + " = КонОст(Стоимость )* " + РанжированиеПериодов.ПроцентМелкооптовойЦены / 100 + " (когда ТекДата - ДатаПартии > " + РанжированиеПериодов.НачальноеКоличествоДней + " И " + " ТекДата - ДатаПартии < " + РанжированиеПериодов.КонечноеКоличествоДней + ";" КонецЦикла; Вот в таком случае ругается - пишет, что после "КонОст(Стоимость)" должна быть ";", а у меня идет "*" Господа-профессионалы семерочники - как решить данную задачу? Прошу помощи и подсказок. Спасибо большое заранее - если кто реально сможет помочь, а не пофлудить |
|||
1
MatrosoV AleXXXand_R
25.06.15
✎
08:28
|
за запрос, приведенный выше - заранее извиняюсь - просто набил его только что рукой. Но суть та же, не меняется
|
|||
2
Simod
25.06.15
✎
08:29
|
(РанжированиеПериодов.ПроцентМелкооптовойЦены / 100)
|
|||
3
MatrosoV AleXXXand_R
25.06.15
✎
08:32
|
(2) то есть будет что-то типа
"МелкоотоваяЦена_1 = КонОст(Стоимость) * (РанжированиеПериодов.ПроцентМелкооптовойЦены) Когда ((ТекДата - Дата/Партии) > 365 И (ТекДата-ДатаПартии) < 730)" И так будет работать? То есть вы хотите сказать - что я просто должен скобки добавить? |
|||
4
Simod
25.06.15
✎
08:40
|
Как я понял, необходимо рассчитать коэффициент и подставить его в формулу? Тогда с помощью скобок ты определяешь порядок расчета и конкатенации.
|
|||
5
Simod
25.06.15
✎
08:41
|
Или тебе необходимо реализовать собственную функцию?
|
|||
6
MatrosoV AleXXXand_R
25.06.15
✎
08:42
|
(4) нужно рассчитать в функции КонОст(Стоимость) * %%
|
|||
7
MatrosoV AleXXXand_R
25.06.15
✎
08:43
|
просто программа ругается - что после ")" идет символ "*". Пишет - что должен идти символ ";"
|
|||
8
MatrosoV AleXXXand_R
25.06.15
✎
08:43
|
а мне нужно этот остаток именно умножить на определенный %
|
|||
9
Simod
25.06.15
✎
08:45
|
||||
10
Simod
25.06.15
✎
08:48
|
Но вообще, лучше делать вычисления при переборе результатов запроса.
|
|||
11
MatrosoV AleXXXand_R
25.06.15
✎
08:50
|
Хорошая ссылка ...
Но ... "То результат, возвращаемый внешней функцией всегда будет целым числом (точность 0). Почему так происходит – не очень понятно, но поделать с этим (как с другими «фичами» движка V7) ничего нельзя." Жалко очень что так |
|||
12
ДенисЧ
25.06.15
✎
08:53
|
(11) А в чём вопрос внутри функции умножить всё на 100? А при обработке разделить?
|
|||
13
Simod
25.06.15
✎
08:54
|
Есть какая-то фича, связанная с точностью результатов возвращаемых запросом. В некоторых случаях как-то можно обойти.
Ухожу, нет времени. Поищи сам. |
|||
14
MatrosoV AleXXXand_R
25.06.15
✎
08:57
|
(12) это как - КонОст(Стоимость * 0.8)
Так сойдет? |
|||
15
ДенисЧ
25.06.15
✎
08:58
|
(14) Стоп. Ты собираешь использовать свои функции? Тогда в них умножай.
Если стандартные - ничего не надо умножать... |
|||
16
MatrosoV AleXXXand_R
25.06.15
✎
09:02
|
Думаю .. что
В запросе надо будет написать что-то вида "| Функция МелкооптоваяЦена = РассчитатьМелкооптовуюЦену(КонОст(Стоимость), ПроцентМелкооптовойЦены)" |
|||
17
MatrosoV AleXXXand_R
25.06.15
✎
09:03
|
и потом объявить внешнюю функцию
Функция РассчитатьМелкооптовуюЦену(Стоимость, ПроцентРасчетаЦены) Возврат Стоимость * ПроцентРасчетаЦены / 100; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |