7.7 Помогите с выборкой значения из справочника.

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем AlexFF, 18 мар 2007.

  1. TopicStarter Overlay
    AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    А это снова я :) Еще раз спасибо всем откликнувшимся в предыдущей теме.
    Сделал. Работает. Теперь возникла другая проблемка.
    Конфигурация Торговля и Склад ред. 9.2 (7.70.938)

    У номенклатуры есть свойство (не основное свойство) которое может принимать несколько значений
    причем типов этих свойст несколько.
    Пример: Свойство "Приход" имеет значения приход1, приход2, приход3 и т.д.
    Свойство "Поставщик" имеет значение поставщик1, поставщик1, поставщик3 и т.д.

    (помечу это сделали так я незнаю, и переделать уже поздно так что приходиться выкручиаться)

    Вопрос можно ли как-нибудь в запросе выбрать все позиции номенклатуры по значению свойства.

    Значения свойств храняться в справочник "ЗначенияСвойств" (приход1, приход2, приход3...),
    который подчинен справочнику "ВидыСвойств" (приход, поставщик), который связан со справочником "Номенклатура" через справочник "СвойстваНоменклатуры".

    До вида свойства (поставщик, приход) я добираюсь (вроде :) ) а вот само значение мне никак не дается. Может посоветуете чего интересного.

    Можно это и не в самом запросе, можно просто в непосредственно в самой процедуре.
  2. TopicStarter Overlay
    AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Застрелюсь я наверное.
    По идее должно работать, но не работает ...

    СпрСвойстваНоменклатуры = СоздатьОбъект(Справочник.СвойстваНоменклатуры);
    .....
    Тут запрос
    .....

    Пока Запрос.Группировка(1) = 1 Цикл
    СпрСвойстваНоменклатуры.ИспользоватьВладельца(Запрос.Номенклатура);
    Если СпрСвойстваНоменклатуры.НайтиПоРеквизиту("ВидСвойства", "Поставщик", 0) = 1 Тогда
    Сообщить(Запрос.Номенклатура.Артикул + " " + Строка(СпрСвойстваНоменклатуры.ЗначениеСвойства));
    КонецЕсли;
    КонецЦикла;

    Если в поиске по реквизиту стоит флаг 1 то выбирается вся номенклатура
    если стоит 0 то выбирается какой-то несуразный кусок.

    причем артикул выводиться а значение нет

    Ну правильно же вроде все.
  3. TopicStarter Overlay
    AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Победил :)
    Во как изголился:

    СпрСвойстваНоменклатуры = СоздатьОбъект("Справочник.СвойстваНоменклатуры");
    СпрЗначенияСвойств = СоздатьОбъект("Справочник.ЗначенияСвойств");
    .....
    Тут запрос
    .....

    Пока Запрос.Группировка(1) = 1 Цикл
    СпрЗначенияСвойств.НайтиПоНаименованию("Поставщик",0,1);
    СпрСвойстваНоменклатуры.ИспользоватьВладельца(Запрос.Номенклатура);
    Если СпрСвойстваНоменклатуры.НайтиПоРеквизиту("ВидСвойства", СпрЗначенияСвойств.ТекущийЭлемент(), 0) = 1 Тогда
    Сообщить(Запрос.Номенклатура.Артикул + " " + Строка(СпрСвойстваНоменклатуры.ЗначениеСвойства));
    КонецЕсли;
    КонецЦикла;
  4. TopicStarter Overlay
    AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    А всетаки можно эту выборку запихнуть как-то в сам запрос?
  5. Lucifer
    Offline

    Lucifer Опытный в 1С

    Регистрация:
    27 фев 2007
    Сообщения:
    91
    Симпатии:
    0
    Баллы:
    26
    То, что выше написано, называется ОНАНИЗМ. Естественно всё через запрос делаешь.

    Вносишь свойства в переменную запроса(Например назовём её "ЗнСвва"), после добавляешьусловие "|Условие(ЗнСвва=ВыбСвойство);" где "ВыбСвойство" переменная с нужным значением(может быть например реквизитом диалога)

    В общих чертах вот так.
  6. TopicStarter Overlay
    AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    То, что выше написано, называется ОНАНИЗМ. Естественно всё через запрос делаешь.

    Спасибо. Оценили мои творческие муки :)


    Вносишь свойства в переменную запроса(Например назовём её "ЗнСвва"), после добавляешьусловие "|Условие(ЗнСвва=ВыбСвойство);" где "ВыбСвойство" переменная с нужным значением(может быть например реквизитом диалога)


    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать1)
    |Период с ДатаНачала по ДатаКонца;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |ЗначениеСвойства = Регистр.ОстаткиТМЦ.Номенклатура.ОсновноеСвойство.ЗначениеСвойства;
    |Группировка Номенклатура Упорядочить по Номенклатура.Артикул Без Групп Все;
    |Условие (ЗначениеСвойства = ВыбСвойство);
    |"//}}ЗАПРОС
    ;

    Вот при таком запросе у меня не выбирается ни одной записи.
    Поэтому я и занялся как вы выразились............
  7. TopicStarter Overlay
    AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Нсколько я понимаю проблема в том, что у номенклатуры несколько свойств которые в свою очередь имеют по несколько значений. И как дать знать какое конкретное свойство мне надо в запросе я незнаю.

    Вроде понятно написал.
  8. Amishechka
    Offline

    Amishechka Опытный в 1С

    Регистрация:
    8 сен 2006
    Сообщения:
    361
    Симпатии:
    1
    Баллы:
    26
    Если задача стоит такая: Выбрать все позиции номенклатуры по значению свойства - то запрос будет выглядеть так:
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Обрабатывать НеПомеченныеНаУдаление;
    |Владелец = Справочник.СвойстваНоменклатуры.Владелец;
    |ВидСвойства = Справочник.СвойстваНоменклатуры.ВидСвойства;
    |ЗначениеСвойства = Справочник.СвойстваНоменклатуры.ЗначениеСвойства;
    |Группировка Владелец;
    |Условие(ВидСвойства в ВыбВидСвойства);
    |Условие(ЗначениеСвойства в ВыбЗначениеСвойства);
    |"//}}ЗАПРОС
    ;
    где, ВыбВидСвойства и ВыбЗначениеСвойства - реквизиты на форме

Поделиться этой страницей