8.х Отбор по нескольким реквизитам

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Elfix, 7 май 2010.

  1. TopicStarter Overlay
    Elfix
    Offline

    Elfix Опытный в 1С

    Регистрация:
    10 апр 2010
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Добрый день!

    В нетиповой конфигурации есть справочник ДоговорыКонтрагентов с булевыми реквизитами ДоговорСПоставщиком, ДоговорСПокупателем, ТрудовойДоговор.

    В документе ЗаказНаПоступлениеТоваров и услуг есть реквизит ДоговорПоставщика типа СправочникСсылка.ДоговорыКонтрагентов. Пишу следующее:

    Код:
    Процедура ДоговорКонтрагентаНачалоВыбора(Элемент, СтандартнаяОбработка)
    ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора(, Элемент);
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПоставщиком.Значение = Истина;
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПоставщиком.Использование = Истина;
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПокупателем.Значение = Истина;
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПокупателем.Использование = Истина;
    ФормаВыбора.Открыть();
    СтандартнаяОбработка = Ложь;
    КонецПроцедуры
    
    Отображаются только те договоры, у которых оба флага (ДоговорСПоставщиком и ДоговорСПокупателем) проставлены. Как сделать так чтобы при выборе у меня отображались в форме выбора только договоры, которые либо являются договором с поставщиком, либо являются договором с покупателем (или-или)?
  2. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Направление для решения :)
    Код:
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПокупателем.ТипСравнения = ...;
    
  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Так у него же это разные реквизиты (ДоговорСПоставщиком и ДоговорСПокупателем), если бы у него это был один реквизит типа скажем перечисление.
  4. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    В тип сравнения - НЕ РАВНО как вариант
  5. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Исправляюсь, "ВидСравнения".

    Вот так должно прокатить.
    Код:
    Процедура ДоговорКонтрагентаНачалоВыбора(Элемент, СтандартнаяОбработка)
    ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора(, Элемент);
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПоставщиком.ВидСравнения = ВидСравнения.НеРавно;
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПоставщиком.Значение = ЛОЖЬ;
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПоставщиком.Использование = Истина;
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПокупателем.ВидСравнения = ВидСравнения.НеРавно;
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПокупателем.Значение = ЛОЖЬ;
    ФормаВыбора.СправочникСписок.Отбор.ДоговорСПокупателем.Использование = Истина;
    ФормаВыбора.Открыть();
    СтандартнаяОбработка = Ложь;
    КонецПроцедуры
    
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ммм.. а разве что-то поменяется?

    ДоговорСПоставщиком ДоговорСПокупателем Получится
    1____________________1____________________1 и 1 = 1
    1____________________0____________________1 и 0 = 0
    0____________________1____________________0 и 1 = 0
    0____________________0____________________0 и 0 = 0
    а надо
    1
    1
    1
    0
    нет, разве, не правильно посчитал?

    оно пробелы убирает.
  7. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Виноват, сморозил, предпраздничное настроение :)
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Elfix
    Как вариант напишите:
    Код:
    Процедура ДоговорКонтрагентаНачалоВыбора(Элемент, СтандартнаяОбработка)
    ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора(, Элемент);
    ФормаВыбора.СправочникСписок.Отбор.ТрудовойДоговор.ВидСравнения = ВидСравнения.НеРавно;
    ФормаВыбора.СправочникСписок.Отбор.ТрудовойДоговор.Значение = ИСТИНА;
    ФормаВыбора.Открыть();
    СтандартнаяОбработка = Ложь;
    КонецПроцедуры
    
    
    :)
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    ФормаВыбора.СправочникСписок.Отбор.ТрудовойДоговор.Использование = Истина; всмысле тоже там в коде должно быть, удалил при редактировании случайно.
  10. TopicStarter Overlay
    Elfix
    Offline

    Elfix Опытный в 1С

    Регистрация:
    10 апр 2010
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Не работает. Убрал галки с ДоговорСПоставщиком и ДоговорСПокупателем, оставил галку ТрудовойДоговор. В списке не отображается ни один договор.
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Хм.. как так? Ну вот так попробуйте:
    Код:
    Процедура ДоговорКонтрагентаНачалоВыбора(Элемент, СтандартнаяОбработка)
    ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора(, Элемент);
    ФормаВыбора.СправочникСписок.Отбор.ТрудовойДоговор.ВидСравнения = ВидСравнения.Равно;
    ФормаВыбора.СправочникСписок.Отбор.ТрудовойДоговор.Значение = ЛОЖЬ;
    ФормаВыбора.СправочникСписок.Отбор.ТрудовойДоговор.Использование = Истина;
    ФормаВыбора.Открыть();
    СтандартнаяОбработка = Ложь;
    КонецПроцедуры
    
  12. TopicStarter Overlay
    Elfix
    Offline

    Elfix Опытный в 1С

    Регистрация:
    10 апр 2010
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Ой, простите, виноват. Отображается договор который или с поствщиком или с покупателем. Но не отображается договор, который одновременно и с поставщиком и с покупателем и трудовой договор. А должен отображаться...
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ааа... такое тоже может быть. В отборе конечно его не будет...

    Я тогда только могу предложить открывать не форму подбора справочника, а динамически формировать список (таблицу значений) и выбирать уже оттуда.
  14. TopicStarter Overlay
    Elfix
    Offline

    Elfix Опытный в 1С

    Регистрация:
    10 апр 2010
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Если никто не предложит более красивых вариантов решения, скорее всего так и сделаю.
  15. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Мдааа... попробовал через критерий отбора - вроде работает, но не так как хотелось бы :)
    Когда стоит ++ не отображает, а когда -- отображает, +- и -+ отображает :)
    Как вариант добавить еще один реквизит, который будет принимать ИСТИНА, когда хотя бы один из флагов отмечен. Старые прогнать универсальной обработкой,для новых, изменениных - перед записью элемента прописать установку этого реквизита.
    И по нему уже проводить отбор.
  16. TopicStarter Overlay
    Elfix
    Offline

    Elfix Опытный в 1С

    Регистрация:
    10 апр 2010
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Да, пожалуй последний вариант еще более красивый. Им и воспользуюсь. Спасибо!
  17. TopicStarter Overlay
    Elfix
    Offline

    Elfix Опытный в 1С

    Регистрация:
    10 апр 2010
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Потихоньку начал учиться писать запросы и создавать разные формы выбора. Решил проблему еще более красиво: создал форму выбора справочника Договоры, где указал процедуру при открытии:
    Код:
    
    Процедура ПриОткрытии()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Договоры.Ссылка КАК Договор
    |ИЗ
    |    Справочник.Договоры КАК Договоры
    |ГДЕ
    |    (Договоры.ДоговорСПоставщиком = ИСТИНА
    |            ИЛИ Договоры.ДоговорСПокупателем = ИСТИНА)";
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Фильтр = СправочникСписок.Отбор;
    Фильтр.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
    Фильтр.Ссылка.Использование = Истина;
    
    Пока Выборка.Следующий() Цикл
    Фильтр.Ссылка.Значение.Добавить(Выборка.Договор);
    КонецЦикла;
    
    КонецПроцедуры
    
    
    
  18. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Хм.... очень неплохой вариант, по скорости только вопрос )) но можно было форму не создавать, а прописать отбор при открытии старой формы выбора
  19. TopicStarter Overlay
    Elfix
    Offline

    Elfix Опытный в 1С

    Регистрация:
    10 апр 2010
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Да нет. Мне необходимо будет много раз из разных документов вызывать именно эту форму выбора. Очень удобно, но по скорости тоже думаю проблемы возникнут. Но благо договоров сравнительно не много скорее всего будет работать не очень долго.

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