Вход | Регистрация

1С:Предприятие ::

Метки: 

Как получить динамические цены

Я
   Виталий777
 
08.10.17 - 00:20
Всем привет.
Нужен прайс с использованием скидок по ценовым группам.
Вроде все сделал, работает.
Но появилась проблема, Если у клиента динамический тип цен, тогда прайс не формируется.
Так как динамические цены нигде не хранятся, как их вычислить???
Код:

    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    |    ЦеныНоменклатурыСрезПоследних.Цена,
    |    ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
    |    ЦеныНоменклатурыСрезПоследних.Валюта,
    |    СкидкиНаценкиПоЦеновымГруппамСрезПоследних.ПроцентСкидкиНаценки,
    |    ЦеныНоменклатурыСрезПоследних.Цена - ЦеныНоменклатурыСрезПоследних.Цена * СкидкиНаценкиПоЦеновымГруппамСрезПоследних.ПроцентСкидкиНаценки / 100 КАК Цена2
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СкидкиНаценкиПоЦеновымГруппам.СрезПоследних КАК СкидкиНаценкиПоЦеновымГруппамСрезПоследних
    |        ПО ЦеныНоменклатурыСрезПоследних.Номенклатура.ЦеноваяГруппа = СкидкиНаценкиПоЦеновымГруппамСрезПоследних.ЦеноваяГруппа
    |            И ЦеныНоменклатурыСрезПоследних.ТипЦен = СкидкиНаценкиПоЦеновымГруппамСрезПоследних.ПолучательСкидки.ТипЦен
    |ГДЕ
    |    ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен";
    Если Номенклатура1.Количество()>0 Тогда
        Запрос.Текст=Запрос.Текст+"
        |    И ЦеныНоменклатурыСрезПоследних.Номенклатура В ИЕРАРХИИ (&Номенклатура1)";
    КонецЕсли;
    Если Номенклатура2.Количество()>0 Тогда
        Запрос.Текст=Запрос.Текст+"
        |    И ЦеныНоменклатурыСрезПоследних.Номенклатура НЕ В ИЕРАРХИИ (&Номенклатура2)";
    КонецЕсли;
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("Номенклатура1",Номенклатура1);
    Запрос.УстановитьПараметр("Номенклатура2",Номенклатура2);
    Запрос.УстановитьПараметр("ТипЦен",ТипЦен);
    Результат=Запрос.Выполнить();
    ТЗцены=Результат.Выгрузить();
    МассивНоменклатуры=ТЗцены.ВыгрузитьКолонку("Номенклатура");
    МассивРодителей=Новый Массив;
    Родитель=0;
    Для каждого ЭлементМассиваНоменклатура Из МассивНоменклатуры Цикл
        Если Родитель<>ЭлементМассиваНоменклатура.Родитель Тогда
            ТекРодитель=ЭлементМассиваНоменклатура.Родитель;
            Пока ТекРодитель<>Справочники.Номенклатура.ПустаяСсылка() Цикл
                Если МассивРодителей.Найти(ТекРодитель)=Неопределено Тогда
                    МассивРодителей.Добавить(ТекРодитель);
                КонецЕсли;
                ТекРодитель=ТекРодитель.Родитель;
            КонецЦикла;
            Родитель=ЭлементМассиваНоменклатура.Родитель;
        КонецЕсли;
    КонецЦикла;
    Запрос=Новый Запрос;
    Запрос.Текст=
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка В(&МассивНоменклатуры)
        |    ИЛИ Номенклатура.Ссылка В(&МассивРодителей)
        |
        |УПОРЯДОЧИТЬ ПО
        |    Номенклатура.Наименование ИЕРАРХИЯ";
    Запрос.УстановитьПараметр("МассивНоменклатуры",МассивНоменклатуры);
    Запрос.УстановитьПараметр("МассивРодителей",МассивРодителей);
    Результат=Запрос.Выполнить();
    //

    ТабДок=Новый ТабличныйДокумент;
    Макет=ЭтотОбъект.ПолучитьМакет("Макет");
    ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапкаТаблицы=Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьГруппа=Макет.ПолучитьОбласть("Группа");
    ОбластьЭлемент=Макет.ПолучитьОбласть("Элемент");
    
    ОбластьЗаголовок.Параметры.Организация=ЭлементыФормы.Организация.Значение;
    ОбластьЗаголовок.Параметры.Контрагент=Контрагент;
    ОбластьЗаголовок.Параметры.Дата="на дату "+Формат(Дата,"ДФ=dd.MM.yyyy");

    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетальныеЗаписи=Результат.Выбрать();
     Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Ссылка.ЭтоГруппа Тогда
            ТекОбласть=ОбластьГруппа;
        Иначе
            //

            ЕдиницаИзмерения=ВыборкаДетальныеЗаписи.Ссылка.ЕдиницаХраненияОстатков;
            Цена=0;
            //

            ПараметрыОтбора=Новый Структура;
            ПараметрыОтбора.Вставить("Номенклатура",ВыборкаДетальныеЗаписи.Ссылка);
            Строки_ТЗцены=ТЗцены.НайтиСтроки(ПараметрыОтбора);
            Если Строки_ТЗцены.Количество()>0 Тогда
                ЕдиницаИзмерения=Строки_ТЗцены[0].ЕдиницаИзмерения;
                Валюта=Строки_ТЗцены[0].Валюта;
                Цена=Строки_ТЗцены[0].Цена;
            КонецЕсли;
            Если Цена>0 Тогда
                    Цена=Строки_ТЗцены[0].Цена2;
            КонецЕсли;
            
            ТекОбласть=ОбластьЭлемент;
            ТекОбласть.Параметры.ЕдиницаИзмерения=ЕдиницаИзмерения;
            ТекОбласть.Параметры.Валюта=Валюта;
            ТекОбласть.Параметры.Цена=Цена;
        КонецЕсли;
        ТекОбласть.Параметры.Номенклатура=ВыборкаДетальныеЗаписи.Ссылка;
        ТабДок.Вывести(ТекОбласть,ВыборкаДетальныеЗаписи.Уровень());
        
    КонецЦикла;
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.ОтображатьСетку=Ложь;
    ТабДок.ОтображатьЗаголовки=Ложь;
    ТабДок.ТолькоПросмотр=Истина;
    ТабДок.Показать();
 
 
   Злопчинский
 
1 - 08.10.17 - 00:21
(0) "Так как динамические цены нигде не хранятся, как их вычислить??"
- очевидно так же как вычисляются при их появлении в типовых местах типовых конфигураций...
   Виталий777
 
2 - 08.10.17 - 00:27
ожидал конечно более конкретного ответа ...
   Злопчинский
 
3 - 08.10.17 - 00:32
- "Я хренею с вас, дорогая редакция..." пишет нам девочка Маша. И мы ей - верим!!!
   ildary
 
4 - 08.10.17 - 07:46
(2) Даю конкретный ответ - предварительно рассчитываем динамические цены и суем их в запрос. На вопрос "Как?" - отвечаю - стуча по клавишам в конфигураторе.


Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует