|
v7 Выбор даты последнего изменения цены номенклатуры (конфа переписанная) | ☑ | ||
---|---|---|---|---|
0
YurAnt
12.08.14
✎
15:59
|
Доброго времени суток, господа.
Ситуация следующая, отбираю как видно из заголовка дату последнего изменения цены номенклатуры. ТЗ.ТекРасшифровка.Код - код номенклатуры, по которому беру элемент из справочника, выбираю записи из Справочника "Цены", группирую по владельцу (это и есть наша номенклатура), однако условия (оба закоменчены) ведут себя некорректно. Без условий - выборка всего справочника, с любым из условий - пустая выборка... (мб я чего-то не так понял?) //*************************************************************** СпрНом = СоздатьОбъект("Справочник.Номенклатура"); Если СпрНом.НайтиПоКоду(ТЗ.ТекРасшифровка.Код) = 1 Тогда НоменклатураПоНаименованию = СпрНом.ТекущийЭлемент(); Пер = СоздатьОбъект("Периодический"); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |ТекущийЭлемент = Справочник.Цены.ТекущийЭлемент; |Код = Справочник.Цены.Код; |Наименование = Справочник.Цены.Наименование; |Владелец = Справочник.Цены.Владелец; |Валюта = Справочник.Цены.Валюта; |Единица = Справочник.Цены.Единица; |Процент = Справочник.Цены.Процент; |ТипЦен = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |Группировка Владелец Без Групп; //|Условие (Владелец В НоменклатураПоНаименованию); //|Условие (Владелец = НоменклатураПоНаименованию); |"; Запрос.Выполнить(ТекстЗапроса); Пока Запрос.Группировка(1)=1 Цикл Если запрос.Владелец = НоменклатураПоНаименованию Тогда Пер.ИспользоватьОбъект("Цена",запрос.ТекущийЭлемент); Пер.ОбратныйПорядок(); Пер.ВыбратьЗначения(); Пер.ПолучитьЗначение(); ДатаПослПр = Пер.ДатаЗнач; КонецЕсли; КонецЦикла; КонецЕсли; //*************************************************************** Ладно... если (да знаю пожизненный цих с гвоздями за выгрузку всего справочника с последующей переборкой в цикле) но для теста - годится... Выбирается значение периодического реквизита "цена" постоянно Первое, а не последнее... ват ам дуинг вронг? Благодарен, за любые советы, с ув. YurAnt. |
|||
1
Ёпрст
12.08.14
✎
16:12
|
ОбратныйПорядок(1)
|
|||
2
Ёпрст
12.08.14
✎
16:13
|
в НоменклатураПоНаименованию что там?
|
|||
3
Ёпрст
12.08.14
✎
16:14
|
ну и запросом, первым - ты не получишь дату установки цены номенклатуры.
|
|||
4
YurAnt
13.08.14
✎
07:34
|
1) менять на ОбратныйПорядок(1) пробовал, результата не дало(
http://savepic.su/4301232.png 2) НоменклатураПоНаименованию - в данное значение могут попадать как номенклатурные элементы конечного уровня (товары) так и их родители (группы), мне интересны только товары потому в запросе выставил //****************************************************** |Группировка Владелец Без Групп; //****************************************************** далее в //****************************************************** Если запрос.Владелец = НоменклатураПоНаименованию Тогда //****************************************************** в запросе у нас только товары без групп, соотв-но дату по группам не получаем. 3) будьте добры немного подробнее с этого места (3) в запросе я получаю все цены по спр.номенклатура (увы пока без отбора по конкретной номенклатуре), в цикле ищу нужного Владельца (номенклатуру), далее уже по нему получаю цену из справочника цен... |
|||
5
1Сергей
13.08.14
✎
07:39
|
ДатаПослПр = Пер.ДатаЗнач;
Прервать; |
|||
6
YurAnt
13.08.14
✎
08:09
|
благодарствую, господа) на мысль о решении 2-й проблемы набрел...) посмотрел свой же скриншот)
Если СпрТЦ.НайтиПоКоду("00001") = 1 Тогда ЗакупочнаяЦена = СпрТЦ.ТекущийЭлемент(); Иначе ЗакупочнаяЦена = ПолучитьПустоеЗначение("Справочник.ТипыЦен"); КонецЕсли; а в запросе |Условие (ТипЦен = ЗакупочнаяЦена); что в общем вполне логично... и даже вроде как заработало. Теперь пилю в запросе условие для отбора конкретных значений а не всего справочника цен. |
|||
7
YurAnt
13.08.14
✎
08:44
|
итак, теперь работает быстро, выборка не пустая (проблема №1 решена), но... снова проблема №2 - выбирается всегда первая дата...
//********************************************************** СпрТЦ = СоздатьОбъект("Справочник.ТипыЦен"); Если СпрТЦ.НайтиПоКоду("00001") = 1 Тогда ЗакупочнаяЦена = СпрТЦ.ТекущийЭлемент(); Иначе ЗакупочнаяЦена = ПолучитьПустоеЗначение("Справочник.ТипыЦен"); КонецЕсли; СпрНом = СоздатьОбъект("Справочник.Номенклатура"); Если СпрНом.НайтиПоКоду(ТЗ.ТекРасшифровка.Код) = 1 Тогда НоменклатураПоНаименованию = СпрНом.ТекущийЭлемент(); Пер = СоздатьОбъект("Периодический"); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |ТекущийЭлемент = Справочник.Цены.ТекущийЭлемент; |Код = Справочник.Цены.Код; |Наименование = Справочник.Цены.Наименование; |Владелец = Справочник.Цены.Владелец; |Валюта = Справочник.Цены.Валюта; |Единица = Справочник.Цены.Единица; |Процент = Справочник.Цены.Процент; |ТипЦен = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |Группировка Владелец Без Групп; |Условие (ТипЦен = ЗакупочнаяЦена); |Условие (Владелец = НоменклатураПоНаименованию); |"; Запрос.Выполнить(ТекстЗапроса); Пока Запрос.Группировка(1)=1 Цикл Если запрос.Владелец = НоменклатураПоНаименованию Тогда Пер.ИспользоватьОбъект("Цена",запрос.ТекущийЭлемент); Пер.ОбратныйПорядок(); Пер.ВыбратьЗначения(); Пер.ПолучитьЗначение(); ДатаПослПр = Пер.ДатаЗнач; КонецЕсли; КонецЦикла; КонецЕсли; //********************************************************** попробую поиграть с условиями, видимо соль в них. |
|||
8
YurAnt
13.08.14
✎
09:05
|
поменял местами условия в запросе. взлетело)
еще раз, господа, благодарю всех за советы!) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |