| 
    
        
     
     | 
    
  | 
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; КонецФункции  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |