Имя: Пароль:
1C
1C 7.7
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
поменял местами условия в запросе. взлетело)
еще раз, господа, благодарю всех за советы!)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.