8.х Открыть форму

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

  1. TopicStarter Overlay
    kogor
    Offline

    kogor Опытный в 1С

    Регистрация:
    5 фев 2010
    Сообщения:
    412
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте.

    Чтобы при нажатии на кнопку выбора поля ввода (тип СправочникСсылка.Сотрудники) открывалась форма списка справочника Сотрудники с отбором сделал так:

    Код:
    Процедура СотрудникНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    //открываем список справочника сотрудники в модальной форме
    СтандартнаяОбработка = ЛОЖЬ;
    ФормаВыбора = Справочники.Сотрудники.ПолучитьФормуСписка(,Элемент,);
    ФормаВыбора.РежимВыбора = Истина;
    ФормаВыбора.ОткрытьМодально();
    
    КонецПроцедуры
    
    Отбор происходит в процедуре ПриОткрытии справочника Сотрудники.

    Но в другом месте мне нужно сделать то же самое, только поле ввода имеет составной тип (СправочникСсылка.Сотрудники и СправочникСсылка.Менеджеры). Вместо кнопки выбора стоит кнопка Т. При нажатии на нее открывается форма выбора нужного справочника, а затем можно выбирать из конкретного справочника. Но при этом не срабатывает процедура ПриОткрытии формы списка справочников и отбор не осуществляется.

    Подскажите пожалуйста как заменить СтандартнуюОбработку выбора элемента? Чтобы пользователь сначала мог выбрать один из 2 справочников, а затем мог открыть форму списка выбранного справочника, но с отбором задаваемом в процедуре ПриОткрытии формы списка этого справочника, ну или задаваемом как то по-другому.
  2. TopicStarter Overlay
    kogor
    Offline

    kogor Опытный в 1С

    Регистрация:
    5 фев 2010
    Сообщения:
    412
    Симпатии:
    0
    Баллы:
    26
    Идей никто не подкинул :unsure: сам я тоже не продвинулся :smile:

    Поэтому решил изменить постановку задачи: решил убрать справочник Менеджеры и переместить все элементы в справочник Сотрудники. В поле ввода Сотрудник решил загрузить список значений, сформированный запросом с отбором по реквизиту:

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

    Вот только возникла такая проблемка: Элемент можно выбрать, но он не помещается в поле ввода Сотрудник пока не тыкнешь где-нибудь на свободном месте формы. Если тыкнешь то значение аккуратно появляется и даже можно подключить процедуру ПриИзменении(), она сработает. Но вот эта закавыка очень портит впечатление от работы данного алгоритма.

    Кто-то может подсказать как правильно вставить значение из списка значений в поле ввода, чтобы оно сразу появлялось?
  3. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Первый вопрос: зачем ищете по наименованию?

    СтрокаТабличнойЧасти.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(ВыбранныйСотрудник.Значение);

    Если тип значения ВыбранныйСотрудник = СправочникСсылка.Сотрудники, то тогда сразу присваивайте
  4. TopicStarter Overlay
    kogor
    Offline

    kogor Опытный в 1С

    Регистрация:
    5 фев 2010
    Сообщения:
    412
    Симпатии:
    0
    Баллы:
    26
    Если пишу:

    Код:
    СтрокаТабличнойЧасти.Сотрудник = ВыбранныйСотрудник;
    
    то значение в поле Сотрудник вообще не помещается. Поле остается пустым.

    Если пишу:

    Код:
    СтрокаТабличнойЧасти.Сотрудник = ВыбранныйСотрудник.Значение;
    
    то значение подставляется только после клика на любом месте формы, как и при поиске по наименованию справочника

    Может это глюк платформы? (платформа 8.2.12.78, обычное приложение)
  5. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    а типы значения у СтрокаТабличнойЧасти.Сотрудник и ВыбранныйСотрудник какие?
  6. TopicStarter Overlay
    kogor
    Offline

    kogor Опытный в 1С

    Регистрация:
    5 фев 2010
    Сообщения:
    412
    Симпатии:
    0
    Баллы:
    26
    ВыбранныйСотрудник - тип ЭлементСпискаЗначений
    СтрокаТабличнойЧасти.Сотрудник - тип СправочникСсылка.Сотрудники
  7. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Тогда думаю так должно работать

    СтрокаТабличнойЧасти.Сотрудник = ВыбранныйСотрудник.Значение;

    Если конечно тип ВыбранныйСотрудник.Значение = СправочникСсылка.Сотрудники
  8. TopicStarter Overlay
    kogor
    Offline

    kogor Опытный в 1С

    Регистрация:
    5 фев 2010
    Сообщения:
    412
    Симпатии:
    0
    Баллы:
    26
    Так и есть (я писал выше) такой вариант работает, но выбранное значение отображается в поле ввода только после клика.

    Насчет типов - см. скрин.

    Вложения:

    • табло.JPG
      табло.JPG
      Размер файла:
      25,1 КБ
      Просмотров:
      31
  9. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Так попробуйте:
    Код:
    ...
    РезультатВыбора = ВыбратьИзСписка(Список, Элемент);
    Если РезультатВыбора = Неопределено Тогда //Ничего не выбрали
    Возврат();
    КонецЕсли;
    СтрокаТабличнойЧасти.Сотрудник = РезультатВыбора;
    ЭлементыФормы.Сотрудники.ОбновитьСтроки();
    
    
  10. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Тогда попробовать как вариант обновить строки ТЧ, как было сказано выше
  11. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Извиняюсь, немного не так:
    Код:
    РезультатВыбора = ВыбратьИзСписка(Список, ЭлементыФормы.ВыбранныйСотрудник);
    Если РезультатВыбора = Неопределено Тогда //Ничего не выбрали
    Возврат();
    КонецЕсли;
    СтрокаТабличнойЧасти.Сотрудник = РезультатВыбора.Значение;
    ЭлементыФормы.Сотрудники.ОбновитьСтроки();
    
  12. TopicStarter Overlay
    kogor
    Offline

    kogor Опытный в 1С

    Регистрация:
    5 фев 2010
    Сообщения:
    412
    Симпатии:
    0
    Баллы:
    26
    Сделал так. Но результат прежний.

    Если пишу:

    Код:
    СтрокаТабличнойЧасти = ЭлементыФормы.Сотрудники.ТекущиеДанные;
    ВыбранныйСотрудник = ВыбратьИзСписка(Список, СтрокаТабличнойЧасти.Сотрудник);
    
    то получаю ошибку:
    Так что видимо лучше всего Элемент

    Это поле (СтрокаТабличнойЧасти.Сотрудник) используется в дальнейших вычислениях по строке и все отлично считается, но вот само оно остается пустым пока не сделаю клик.

    У меня вот появилась мысль: пока я не кликну на пустом месте это поле находится в фокусе (другими словами активизировано). Можно как-то прораммно снять эту фокусировку или переключить на другое поле?
  13. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Посмотрите. Справочника "Сотрудники" у меня нет, есть "СотрудникиОрганизации", ну запрос подправите и значение типа в табличной части и поле ввода.

    Вложения:

  14. TopicStarter Overlay
    kogor
    Offline

    kogor Опытный в 1С

    Регистрация:
    5 фев 2010
    Сообщения:
    412
    Симпатии:
    0
    Баллы:
    26
    Спасибо за обработку, shurikvz. Помогла. Обнаружил, что у поля ввода, в который загружается список снята галка РежимВыбораИзСписка. А у меня стояла!! Убрал и элемент в поле стал отличным образом отображаться!

    Всем спасибо за помощь!

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