Имя: Пароль:
1C
1C 7.7
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;
КонецФункции