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