Имя: Пароль:
1C
1C 7.7
v7: Как из открытой формы элемента справочника перейти в открытую форму списка справочника?
,
0 MWWRuza
 
гуру
18.02.19
16:50
Добрый день!
Вот, на просторах интернета нашел: https://avprog.ru/q/659990/#p13
Задача, один в один как у меня. И она как-то решена, но как, я так и не понял...
Короче, опишу еще раз подробно:
Открываем форму списка справочника "Контрагенты". Интерактивно создаем новый элемент. Вводим ИНН. Далее запускаем процедуру поиска по контрагента по ИНН в одном известном сервисе. Но, перед тем, как искать его в интернете, ищем у себя в базе - а вдруг он уже есть? Блин... Нашли! "Ругаемся" на пользователя, и закрываем форму нового элемента справочника.
А вот далее, хочется найти его(уже имеющийся элемент), и спозиционироваться на нем в уже открытой форме списка справочника...
Как это можно сделать? Метод "ОткрытьФорму("Справочник.Контрагенты.ФормаСписка")" открывает новую форму, появляется второе окно формы списка... Если интерактивно открывать форму списка справочника, то форма открывается одна, при попытке открыть второй раз, просто активизируется уже открытая. Как это сделать программно?
Ну, или как закрыть уже открытую форму, что-бы открыть такую-же новую(дальше, при открытии этой новой формы я уже активизирую найденный элемент) - ?
1 Ёпрст
 
18.02.19
16:51
(0) ОткрытьФорму + установить текущую строку в форме через контекст. усё
2 Ёпрст
 
18.02.19
16:53
хочешь открывать несколько форм, смотри на #
3 MWWRuza
 
гуру
18.02.19
16:54
(1)Не, ну это-то понятно. Но, откроется еще одна форма списка, а уже открытая, изначально, интерактивно, так и останется висеть. Как ее закрыть?
4 MWWRuza
 
гуру
18.02.19
16:56
(2)Да в том-то и дело, что не хочу... Нужна одна.
5 MWWRuza
 
гуру
18.02.19
16:58
Создать глобальную переменную, в которую записывать контекст открытой интерактивно формы списка, что-бы потом ее закрывать, перед открытием новой?
6 Ёпрст
 
18.02.19
16:58
(4)  сколько всего форм списка есть у этого справочника ?
7 MWWRuza
 
гуру
18.02.19
17:00
(6)Две.
8 skafandr
 
18.02.19
17:00
(0)Как вариант,сделай отдельное окно под проверку ИНН,если нашел - позиционируешь на него если нет - открываешь создание нового элемента и ИНН в него вносишь
9 skafandr
 
18.02.19
17:01
в форме списка есссно
10 Sserj
 
18.02.19
17:03
(0)
"..при попытке открыть второй раз, просто активизируется уже открытая.."
Не просто открывается, там есть не очень известная
ПриПовторномОткрытии()

Поэтмоу можешь как обычно передать найденный элемент параметром
И в этом ПриПовторномОткрытии() его обработать.
11 MWWRuza
 
гуру
18.02.19
17:08
(8)Ну, это как вариант... Но, придется юзеров переучивать, что перед созданием нового контрагента надо вводить в это окошко ИНН и нажимать кнопку... А в моем варианте, они привычно жмакают "новый", и тут видят подсвеченную красным кнопку "Создать по ИНН". Вводят ИНН, а дальше уже все происходит, либо создается новый, из интернета, либо должно закрыться окно нового элемента и курсор спозиционироваться на имеющемся в форме списка.

(10)А вот это интересно... Сейчас покопаю...
12 MWWRuza
 
гуру
18.02.19
17:23
Не-аа...
Видимо, не все так просто, на скриншоте видно:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-266.jpg
Интерактивно открывается одна форма, программно - две(я думаю, и более, сколько раз вызовешь метод "ОткрытьФорму"), но ни в том, ни в другом случае, отладчик не попадает в процедуру "ПриПовторномОткрытии". Видимо, что-то я делаю не так
13 MWWRuza
 
гуру
18.02.19
17:44
(12)Это я ступил... Заработался. Ошибся, разместил процедуру не в форме списка, а в форме элемента. Ну да ладно, бывает.
Процедура отрабатывает нормально при интерактивном повторном открытии, но не работает при программном, так две формы и создаются, отладчик туда не попадает.
14 MWWRuza
 
гуру
18.02.19
18:30
Победил...
Кому интересно, расскажу как:
В ГМ объявил переменную:

Перем КонтОткрФормы Экспорт;

В форме списка справочника, в процедуре при открытии:

КонтОткрФормы = глВзятьКонтекст(Форма);
Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
АктивизироватьОбъект(Форма.Параметр);
КонецЕсли;

В форме элемена:

Если Спр.НайтиЭлемент(Контр) = 1 Тогда
Предупреждение("Контрагент с ИНН: " + СокрЛП(ИННЮрЛица) + " в базе уже существует!");
Форма.Закрыть(0);
КонтОткрФормы.Закрыть();
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", Спр.ТекущийЭлемент());
СтатусВозврата(0);
Возврат;
КонецЕсли;

Все работает именно так, как мне было надо. Бинго! Всем спасибо.
15 MWWRuza
 
гуру
18.02.19
18:33
Теперь остается кнопочку красным покрасить, с помощью Formex, и можно "сдавать в промышленную эксплуатацию" :-)
16 MWWRuza
 
гуру
18.02.19
19:11
Ха... А Formex оказывается не умеет шрифт кнопок красить :-( . Придется через картинку делать...
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.