Версия для печати темы (https://pro1c.org.ua/index.php?s=30157d2acbf43785015c86f3e8bc3b5b&showtopic=36228)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Поле ввода подчинённого справочника

Автор: andrew76 28.03.17, 7:00

Доброе утро !

Возникла следующая проблема. В конфигурации определены следующие справочники: Области и Районы. Справочник Районов( Районы) подчинён справочнику Областей.
На форме есть 2 поля ввода .1-е поле ввода-области,2-е поле ввода-районы.
В свойствах поля ввода Район –определена связь по владельцу –ОбластьРождения:


При работе пользователя с полями ввода всё в принципе работает, правда только когда пользователь меняет область рождения на другую, список района рождения не обновляется ,остаётся привязанным к предыдущей записи справочника Областей.
Пользователю нужно принудительно выбирать и район рождения. Можно ли как-нибудь после выбора Области принудительно открывать список значений Районов рождения. Это нужно для того , чтобы ввод данных происходил корректно. А то пользователи народ мечтательный и могут этот момент запросто пропустить -получится следующее : район рождения останется привязанным на поле ввода не к своей области.

Автор: candrey 28.03.17, 8:09

Добрый день.

Какая 1С , какой релиз? Оформите тему согласно требованием форума!!!


Принскрин бы улучшил поминание об проблеме.

Прикрутите к полям которые пользователь должен заполнить- контроль на заполнение этого поля+ уведомление пользователя.
Или условие при изменение одного поля проверка второго поля.

Условие при изменение одного поля второе поле очищается (такое не делал но думаю можно).

Тут уже как вам веднее.

Автор: Vofka 28.03.17, 8:12

Я бы в ПриИзменении поля Область просто очищал Район.

Автор: andrew76 28.03.17, 8:27

Платформа : 8.2, релиз 8.2.19.106

Рад бы прикрутить "принтскрины", у нас интернет "несколько" заблокирован (политика ИБ нашей компании).Прикручу их позже-из дома.
Можно ли при Изменении поля ввода Области сэмулировать нажатие клавиши выбора из меню Районов ,предварительно назначив ему (поле ввода Районы)
фокус ввода?

Автор: Bernet 28.03.17, 8:35

Можно конечно, посмотрите как в типовых конфигурациях реализована связка Контрагент-Договор, принцип тот же, при изменении договора, автоматически подставляется контрагент и наоборот, при изменении контрагента договор либо очищается либо если есть основной то подставляется основной.

Автор: Petre 28.03.17, 8:41

andrew76 @ Сегодня, 8:27 * ,
Эти поля разве не последовательно идут? Выбрали область, в "ПриИзменении" проверяем заполненность района, если заполнен и не подчинен текущей области, обнуляем. Если все же пользователи ленятся дополнительного нажатия кнопки, сделайте там же обработку выбора района.

Автор: andrew76 28.03.17, 9:30

У меня пока нет возможности ознакомиться с тем, как это сделано в типовых конфигурациях.Поэтому отсебятина :

На поле ввода Область (при изменении) передаю фокус на поле ввода Район.
Фокус передаётся нормально.Осталось узнать- как сэмулировать нажатие клавиши F4?

Процедура Область_рождПриИзменении(Элемент)
    
    ЭтаФорма.ТекущийЭлемент=ЭлементыФормы.Район_рож;

КонецПроцедуры


Срабатывает,при получении фокуса список районов открывается с корректным подчинением областям страны.
Средствами 1с 8.2 сэмулировать нажатие клавиши F4 можно ?

Процедура Область_рождПриИзменении(Элемент)

  ЭтаФорма.ТекущийЭлемент=ЭлементыФормы.Район_рож;  
  Shell= Новый COMОбъект("Wscript.Shell");
  Shell.SendKeys("{F4}");

КонецПроцедуры

Автор: Petre 28.03.17, 10:49

andrew76 @ Сегодня, 9:30 * ,
Зачем использовать сторонние объекты, если все можно сделать встроенными средствами, например, как-то так:

Процедура Область_рождПриИзменении(Элемент)
    
    Если ЗначениеЗаполнено(Область_рожд) И Район_рож.Владелец <> Область_рожд Тогда
        Район_рож = Неопределено;
        Параметры = Новый Структура;
        Отбор = Новый Структура;
        Отбор.Вставить("Владелец", Область_рожд);
        Параметры.Вставить("Отбор", Отбор);
        ОткрытьФорму("Справочник.Районы.ФормаВыбора", Параметры, ЭлементыФормы.Район_рож);
    КонецЕсли;
    
КонецПроцедуры

Автор: andrew76 28.03.17, 11:33

Можно и так-но так открывается форма Выбора.Тут основная проблема- с пользователями.Если прут окна какие-то ,то их это очень пугает.
В общем "Восток-дело тонкое".

Процедура Область_рождПриИзменении(Элемент)
    
    Если ЗначениеЗаполнено(Область_рожд) И Район_рож.Владелец <> Область_рожд Тогда
        Район_рож = Неопределено;
        Параметры = Новый Структура;
        Отбор = Новый Структура;
        Отбор.Вставить("Владелец", Элемент.Значение);  //в вашем варианте ругается-"переменная не найдена-Область_рожд   Отбор.Вставить("Владелец",  Область_рожд);
        Параметры.Вставить("Отбор", Отбор);
        ОткрытьФорму("Справочник.Районы.ФормаВыбора", Параметры, ЭлементыФормы.Район_рож);
    КонецЕсли;
    
КонецПроцедуры

Автор: Petre 28.03.17, 11:48

Цитата(andrew76 @ 28.03.17, 11:33) *
Можно и так-но так открывается форма Выбора.Тут основная проблема- с пользователями.Если прут окна какие-то ,то их это очень пугает.

Ок. Проэмулируете вы нажатие "F4" в элементе района. Что по-вашему произойдет? Не окно ли выбора районов откроется? В чем разница?

Автор: andrew76 28.03.17, 11:58

Для нас -никакой разницы.Что в лоб,что по лбу.Но пользователям-так удобнее.Против этого у нас не попрёшь.Привыкли они так-шаг влево,вправо считается,что
программа не так работает.Долго объяснять...

Автор: Vofka 28.03.17, 12:53

Цитата(andrew76 @ 28.03.17, 12:58) *
Но пользователям-так удобнее.

Как так? Если в поле ввода нажать Ф4, то открывается форма. Но вы говорите, что форму открывать нельзя, надо нажимать Ф4. icon_revenant7.gif

Автор: Petre 28.03.17, 13:07

Цитата(andrew76 @ 28.03.17, 11:58) *
Но пользователям-так удобнее.

Вариант 1. Как реализовываем: после выбора области программно открываем форму выбора района.
Как видит пользователь: открывается форма выбора района.

Вариант 2. Как реализовываем: после выбора области программно назначаем текущий элемент и эмулируем нажатие F4.
Как видит пользователь: открывается форма выбора района.

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

Автор: andrew76 28.03.17, 16:07

Да не,в данном конкретном уникальном случае предпочтительнее будет вариант с использованием эмуляции нажатия клавиши F4.

Скрины-шоТЫ:

Настройка связи по владельцу;




Состояние полей ввода до смены области (правильный вариант ввода данных)



Состояние полей ввода после смены области (неправильный вариант ввода данных)
Хивинский район на самом деле принадлежит Хорезмской области:





Цитата(andrew76 @ 28.03.17, 18:50) *
Тут дело не в востоке, а в чем-то более тяжелом, чтобы понять разницу для пользователя...


Если бы разработчики платформы 1с придумали метод РаскрытьСписок у поля ввода я бы эту тему и не открывал.
Разница для пользователя есть -в этом конкретном уникальном случае с эмуляцией нажатия -вариант изящнее (даже с визуальной точки зрения).

А вообще в першу чэргу-"Восток-дело тонкое..".

Автор: Petre 28.03.17, 17:01

andrew76 @ Сегодня, 16:07 * ,
Вот только сейчас понял, что у вас установлен режим быстрого выбора. Тогда можно использовать метод "ВыбратьИзСписка".

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua