Управляемая форма выбора с отбором по реквизиту табличной части #563864


#0 by Золотце
Всем добрый день! Кто-нибудь реализовывал отбор по реквизиту табличной части справочника? У меня в конфигурации есть справочник "КодыПроизводителя" с реквизитами "Производитель" (тип: справочник "Клиенты") и "СоглашениеСПроизводителем" (тип: справочник "СоглашенияСПроизводителями"). Также есть неподчиненный ничему справочник "СоглашенияСПроизводителями" в табличной части которого находится реквизит "Производитель" (тип: справочник "Клиенты"). Необходимо в форме элемента справочника "КодыПроизводителя" с заранее выбранном производителем при попытке выбрать соглашение открывать форму списка справочника с отбором по производителю (который запрятан в табличной части соглашений). Делаю следующее: в модуле формы элемента справочника "КодыПроизводителя" при начале выбора соглашения располагаю строки: В форме выбора справочника "СоглашенияСПроизводителем" создаю реквизит "ФильтрПоПроизводителю" (тип: справочник "Клиенты"), у основного реквизита формы (списка) устанавливаю флаг "Динамический запрос", в нем пишу текст: ВЫБРАТЬ    СоглашенияСПроизводителем.Ссылка ИЗ    Справочник.СоглашенияСПроизводителем КАК СоглашенияСПроизводителем ГДЕ И при создании формы выбора справочника "СоглашенияСПроизводителем" пишу: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) После запуска в режиме Предприятия из справочника "КодыПроизводителя" вместо справочника "СоглашенияСПроизводителем" с отбором открывается форма без единой строки и полностью недоступная. Что я делаю неправильно? Заранее спасибо!
#1 by lxs
Параметры передавай лучше.
#2 by Золотце
lxs, если передавать параметры, то придется в процедуре "ПриСозданииНаСервере" их получать и использовать в отборе (левое значение, правое, использование и т.п.). А разве есть возможность такой отбор устанавливать по реквизитам табличной части?
#3 by lubja
а ты отладчиком посмотри, что в процедуре ПриСозданииНаСервере  в качестве ФильтрПоПРоизводителю. мое мнение он пуст...
#4 by lxs
Справочник "СоглашенияСПроизводителями" подчинен справочнику "Клиенты"?
#5 by Золотце
lubja, Вы правы, "ФильтрПоПроизводителю" - пустая ссылка на справочник "Клиенты". Буду думать, как передать.
#6 by Золотце
lxs, нет, "СоглашенияСПроизводителями" независимый справочник. Ничему не подчинен.
#7 by lubja
почитай в СП про динамические списки
#8 by Золотце
lubja, спасибо! Пойду читать.
#9 by lubja
не во что, потом отдашь)
#10 by Золотце
Форму выбора с отбором по табличной части в итоге реализовала следующим образом: в справочнике "КодыПроизводителя" при начале выбора соглашения разместила процедуру &НаКлиенте Процедура СоглашениеСПроизводителемНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
#11 by Золотце
В форме выбора справочника "СоглашенияСПроизводителем" запрос динамического списка изменила на стандартный (предлагаемый при снятом флаге "ПризвольныйЗапрос"):    СправочникБП_СоглашенияСПроизводителем.Ссылка,    СправочникБП_СоглашенияСПроизводителем.ВерсияДанных,    СправочникБП_СоглашенияСПроизводителем.ПометкаУдаления,    СправочникБП_СоглашенияСПроизводителем.Предопределенный,    СправочникБП_СоглашенияСПроизводителем.Наименование ИЗ    Справочник.БП_СоглашенияСПроизводителем КАК СправочникБП_СоглашенияСПроизводителем
#12 by Золотце
Создала реквизит формы "ОтброрПоПризводителю" (тип: справочник "Клиенты").
#13 by Золотце
При открытии формы выбора справочника "БП_СоглашенияСПроизводителем" вызываю процедуру с отбором:
#14 by Золотце
В модуле формы справочника "БП_СоглашенияСПроизводителем" создаю процедуру "Отобрать":
#15 by lxs
В итоге получилось? могу подсказать очень короткий путь решения.
#16 by lxs
Тебе надо правильно использовать динамические списки и параметры. Лена верно тебе советовала.
#17 by Золотце
Да, в итоге получилось. Отбор работает. lxs, если не сложно - подскажите альтернативный путь решения. Все-таки, хотелось бы правильно написать.
#18 by lubja
процедуру Отобрать можно слегка укоротить Список.ТекстЗапроса = "ВЫБРАТЬ |СправочникБП_СоглашенияСПроизводителем.Ссылка,
#19 by новичекВ1С
те же яйца, только в профиль:)
#20 by lubja
знаю )) ну, раз она так написала, почему бы не помочь укоротить эти яйца)
#21 by новичекВ1С
Делается элементарно, в форму передаем параметр отбора, в форме Список - диманический список с произвольным запросом по ТЧ, далее ПриСозданииНаСервере смотрим, если нам пришел отбор, то устанавливаем отбор на Список, типо так: &НаСервере
#22 by lubja
ну, и распиши, что есть НайтиОтборВДинамическомСписке и ДобавитьОторВДинамическийСписок, чтобы понятнее было...
#23 by новичекВ1С
Вам все разжуй, еще и в рот положи :) &НаСервере
#24 by новичекВ1С
#25 by новичекВ1С
можно конечно использовать только последнюю функцию сразу для добавления, но не кошерно:)
#26 by lubja
а как же)))
#27 by lubja
ну... для Золотца это слишком сложно...
#28 by новичекВ1С
ТС хоть бы спасибо сказала, первый раз помог кому то, понимаешь ли :)
#29 by lubja
за спасибо работаешь? :)
#30 by новичекВ1С
скилы к харизме набиваю:)
#31 by kiruha
Отбор в табличной части реализуется критерием отбора из документации
#32 by новичекВ1С
Вы таки хотите сказать, что не взлетит?
#33 by kiruha
Нет. Я хочу сказать, что штатно это делают критерием отбора - добавляется физически индекс, для быстрого извлечения данных по отбору и т.д.
#34 by Золотце
lubja, у меня была аналогичная мысль с сокращением процедуры "Отобрать". Решила остановиться на своем варианте, чтобы не возвращать табличную часть справочника на клиент тогда, когда не нужен отбор по клиенту. Если не ставить флаг "Произвольный запрос", 1С формирует текст без выборки табличной части. Наверное, это не просто так.
#35 by Золотце
новичекВ1С, спасибо за предложенный вариант! Любую задачу можно решить не одним способом. Хотелось узнать, есть ли методика реализации аналогичных задач. В первой части руководства разработчика "1С:Предприятие 8.2" сказано: "Если в динамическом списке выбрано ручное формирование запроса, то на запрос налагаются некоторые ограничения: ... в динамических списках не поддерживается отбор по реквизитам табличных частей". Это сбивает с толку.
#36 by Золотце
kiruha, в какой документации можно почитать про реализацию отбора по реквизиту табличной части критериями отбора?
#37 by lxs
Да нифига
#38 by lxs
Пишу рецепт в общем
#39 by lxs
Справочник КодыПроизводителя, форма элемента:
#40 by lxs
Справочник СоглашенияСПроизводителями, форма выбора: 1. динамический список формируем при помощи произвольного запроса. Текст запроса ниже: ИЗ    Справочник.СоглашенияСПроизводителями.Производители КАК СоглашенияСПроизводителямиПроизводители ГДЕ
#41 by lxs
2. Нюанс: надо очистить поле Основная таблица
#42 by lxs
В модуле формы выбора этого справочника положить такой код:
#43 by lxs
Вот и всё.
#44 by новичекВ1С
И че? А если нам не надо отбирать по производителю ? Делать другую форму? Бред! Решение в вернее :)
#45 by lxs
и ниче.. если не надо отбирать, фильтры сама настроит, это элементарно.
#46 by lxs
я не стал просто на эту тему заморачиваться.
#47 by lxs
есть косяк один, сейчас его уберу. при окончании выбора значение не помещается в поле Соглашение..
#48 by новичекВ1С
Вообще то отбор , наложенный в запросе, не будет показан в отборе дин. списка...
#49 by новичекВ1С
тогда каким образом она сможет его настроить?:)
#50 by Золотце
страница 368 первой части руководства разработчика, не мной придумано.
#51 by Золотце
новичекВ1С, я думаю, lxs имеет в виду установку отбора не в пользовательском режиме. Надо проанализировать передан ли параметр в форму выбора, если передан - тогда устанавливать отбор.
#52 by новичекВ1С
Если ты не установишь параметр в запросе , у тебя форма вообще не откроется, поэтому  я и говорю, что если отбор не нужен будет, то этой формой уже не воспользуешься
#53 by Золотце
lxs, а параметр "Производитель" в запросе, с помощью которого накладывается ограничение - это ни реквизит формы выбора справочника "СоглашенияСПроизводителями", ни параметр формы выбора?
#54 by Золотце
новичекВ1С, если параметр в форму выбора не передан - можно текст запроса динамического списка программно изменить так, чтобы в нем не было никаких отборов.
#55 by Золотце
lxs, параметр "Основная таблица" мы очищаем для чего? Чтобы не контролировать уникальность ключей?
#56 by новичекВ1С
это понятно, что можно, но это неправильно!
#58 by lxs
Только надо в форме выбора добавить параметр Производитель с типов СправочникСсылка.Клиенты
#59 by lxs
Прежде, чем говорить "бред", подумай головой. Путей решения проблемы может быть много. И необязательно твое - САМОЕ верное. Не строй иллюзий.
#60 by новичекВ1С
, А теперь попробуй в твоей форме выбора ДОБАВИТЬ элемент справочника! И тогда поймешь, почему я говорю, что твой вариант решения неверен.
#61 by новичекВ1С
+ я не говорил, что мой вариант решения САМЫЙ верный, я говорил, что он вернее твоего
#62 by Золотце
новичекВ1С, а Вы пробовали предлагаемым способом отобрать по реквизиту табличной части? Если в руководствах не врут, то такой отбор (вид сравнения, левое значение, правое и т.п.) неприменим к табличным частям.
#63 by lubja
не парься и оставляй, как есть)
#64 by Золотце
lubja, можно написать,как угодно. А хочется нормально и методологически правильно. Но в типовых конфигурациях я не нашла примеров таких отборов.
#65 by lubja
в 8.1 я делала через КритерииОтбора...
#66 by Золотце
Всем спасибо за участие, итоговый вариант на данный момент. Справочник "Коды производителя", начало выбора соглашения:
#67 by Золотце
У формы выбора справочника "Соглашения с производителями" создаю параметр "Производитель" (тип: справочник "Клиенты").
#68 by Золотце
У основного реквизита формы выбора ставлю флаг "Произвольный запрос", текст запроса:    СправочникСоглашенияСПроизводителем.ПометкаУдаления,       СправочникСоглашенияСПроизводителем.Предопределенный,    СправочникСоглашенияСПроизводителем.Наименование ИЗ    Справочник.СоглашенияСПроизводителем КАК СправочникСоглашенияСПроизводителем
#69 by новичекВ1С
у тебя по моему методу не получилось? И ты прочитала, что я писал в ? Ты не сможешь добавлять элементы справочника
#70 by Золотце
Основную таблицу динамического списка не очищаю. Это позволит создать новый элемент справочника даже при установленном в форме выбора отборе.
#71 by новичекВ1С
Молодец, правильно:) А вот так и не понял наверное, как это победить.
#72 by Золотце
И в форме выбора справочника "Соглашения с производителем" создаю процедуру:
#73 by Золотце
Отбор работает, элементы новые в форме выбора можно создавать. Убрать отбор по производителю в такой форме выбора интерактивно нельзя.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С