Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 10:47

Форма выбора возвращает не те данные

Автор Golickoff, 20 янв 2016, 13:28

0 Пользователей и 1 гость просматривают эту тему.

Golickoff

Всем привет.

В документе необходимо заполнить реквизит "Счёт", однако при открытии формы выбора справочника "Счета" должны отображаться только определённые элементы.
Как я это делаю:
В документе
&НаКлиенте
Процедура СчётНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ФормаВыбора = ПолучитьФорму("Справочник.Счета.ФормаВыбора",,Элемент);
ФормаВыбора.ОткрытьМодально();
КонецПроцедуры

В форме выбора
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.ТекстЗапроса = "ВЫБРАТЬ
                      | Счета.Ссылка,
                      | Счета.Наименование,
                      | Счета.Код
                      |ИЗ
                      | Справочник.Счета КАК Счета
                      |ГДЕ
                      | (Счета.Держатель = &Держатель
                      | ИЛИ Счета.Общий = ИСТИНА)";
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Держатель = Справочники.Пользователи.НайтиПоНаименованию(ТекущийПользователь.Имя);
Список.Параметры.УстановитьЗначениеПараметра("Держатель", Держатель);
КонецПроцедуры

В форме выбора появляются только нужные значения, всё красиво. Однако, при выборе форма закрывается, а вместо выбранного элемента справочника возвращается номер строки из формы выбора. Что я делаю не так?
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Rasty

Лучше устанавливайте отбор в списке, не меняя текст запроса
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Golickoff

Цитата: Rasty от 20 янв 2016, 14:09
Лучше устанавливайте отбор в списке, не меняя текст запроса
Боюсь, нужны подробности.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

vitasw

Цитата: Golickoff от 20 янв 2016, 14:55Боюсь, нужны подробности.

Да вроде все понятно... Нужно не запросом что-то искать, а нужно накладывать отбор на дин. список.

Vladimir_Sh

Если я Вам помог, нажми - Спасибо!

cska-fanat-kz

текст запроса можно и в настройках динамического списка прописать, не обязательно его программно устанавливать.
заодно в настройках проверить - основная таблица не слетает?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Golickoff

Цитата: Vladimir_Sh от 20 янв 2016, 16:57
Вот ТУТ можно почитать или ТУТ
Переделал по первому примеру.
В модуле формы выбора больше ничего нет. В модуле формы документа находится этот код:
&НаКлиенте
Процедура СчётНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СЗСчетов = Новый СписокЗначений;
МассивЗначенийСчетов = Новый Массив;
ПолучитьЗначенияСчетов(МассивЗначенийСчетов);
СЗСчетов.ЗагрузитьЗначения(МассивЗначенийСчетов);
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
ОтборСписка = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборСписка.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
    ОтборСписка.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ОтборСписка.ПравоеЗначение = СЗСчетов;
    ОтборСписка.Использование = Истина;
ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
ОткрытьФорму("Справочник.Счета.Форма.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры

&НаСервере
Процедура ПолучитьЗначенияСчетов(Массив)
ЗапросСчетов = Новый Запрос;
ЗапросСчетов.Текст = "ВЫБРАТЬ
                      | Счета.Ссылка,
                      | Счета.Наименование,
                      | Счета.Код
                      |ИЗ
                      | Справочник.Счета КАК Счета
                      |ГДЕ
                      | (Счета.Держатель = &Держатель
                      | ИЛИ Счета.Общий = ИСТИНА)";
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Держатель = Справочники.Пользователи.НайтиПоНаименованию(ТекущийПользователь.Имя);
ЗапросСчетов.УстановитьПараметр("Держатель", Держатель);
Выборка = ЗапросСчетов.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Массив.Добавить(Выборка.Ссылка);
КонецЦикла;
КонецПроцедуры

Теперь выбранное значение корректно возвращается в поле ввода, но... Открывается две формы выбора. Одна с отбором и одна без него. Почему -- для меня загадка. Прошёлся отладкой до строки ОткрытьФорму("Справочник.Счета.Форма.ФормаВыбора", ПараметрыФормы, Элемент); и ничего подозрительного не нашёл. Дальше пошёл неотлаживаемый тёмный лес, открывающий вторую форму. Кто-нибудь знает откуда взялась вторая форма?
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

cska-fanat-kz

Процедура СчётНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Golickoff

Цитата: cska-fanat-kz от 21 янв 2016, 06:02
Процедура СчётНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
А бревно в глазу и не заметил. Всем спасибо. Всё работает.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск