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

1С:Предприятие :: 1С:Предприятие 8 общая

Как получить тип цен в запросе

Как получить тип цен в запросе
Я
   sergqwert
 
15.01.13 - 19:07
Есть запрос, позволяющий выгружать данные в прайс-лист:

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

Я не могу понять, почему до выполнения запроса я не могу определить, какой тип цен получит запрос? Или из основного договора (если он есть) либо пустой (если нет основного договора)?
 
 
   Kreont
 
1 - 15.01.13 - 19:10
Где то я такое уже видел...
   DrShad
 
2 - 15.01.13 - 19:13
(0) срочно сжечь
   zladenuw
 
3 - 15.01.13 - 19:17
тут не правильно 
  |            ТипЦен = &ТипЦен
                 |                И ТипЦен = &ТипЦенПустой

я бы так   & ТипЦенНЕПустой И ТипЦен = &ТипЦен


я бы так 
ОснДогТипЦен = Контрагент.ОсновнойДоговорКонтрагента.ТипЦен;
Запр.Параметры.Вставить("ТипЦенНеПостуой", НЕ ОснДогТипЦен.Пусатя()) ;
Запр.Параметры.Вставить("ТипЦен", ОснДогТипЦен ) ;
   denfil
 
4 - 15.01.13 - 19:18
Код какой то кривой.
1) В запросе кривое условие "ТипЦен = &ТипЦен
                 |                И ТипЦен = &ТипЦенПустой"
ТО есть тип цен по умолчанию должен быть равен пустому типу цен.
2)  Контрагент.ОсновнойДоговорКонтрагента.ТипЦен =  "ТипЦенПустой"; ТОже безобразие: ссылке присваиваеться значение да и еще не того типа.
3) Проверка зачем то выполняет запрос, а потом еще раз запрос выполнеться.
   denfil
 
5 - 15.01.13 - 19:30
По типу можно сделать так 
1) в запросе условие ТипЦен = &ТипЦен
2) В коде такое условие Если значениезаполнено(Контрагент.ОсновнойДоговорКонтрагента)  и (Контрагент.ОсновнойДоговорКонтрагента.ТипЦен) тогда
 Запр.УстановитьПараметр("ТипЦен", Контрагент.ОсновнойДоговорКонтрагента.ТипЦен) иначе
 Запр.УстановитьПараметр("ТипЦен", ТипЦенПоУмолчанию) конецесли;
3) Все проверки убрать
4) В запросе на скидки необходимо проверять время действие скидки.
   sergqwert
 
6 - 16.01.13 - 14:30
так нельзя, т.к. Пустая() это метод получения Пустой ссылки
   mikecool
 
7 - 16.01.13 - 14:31
(6) точнее и не скажешь
   DrShad
 
8 - 16.01.13 - 14:32
(6) что!? открой СП
   Reset
 
9 - 16.01.13 - 14:32
(6) Врешь
   mikecool
 
10 - 16.01.13 - 14:33
Выбрать Различные ТипЦен Из РегистрСведений.ЦеныНоменклатуры
так в запросе можно получить тип цен, инфа 146%
 
 Рекламное место пустует

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