Имя: Пароль:
1C
1C 7.7
v7: ОткрытьПодбор и ожидание ввода
Ø (Злопчинский 22.02.2016 22:20)
0 blondinko1
 
22.02.16
20:38
Здравствуйте.
Подскажите пожалуйста как реализовать ожидание выбора из справочника с помощью метода ОткрытьПодбор() из цикла, т.е. пока пользователь не выберет элемент справочника дальше код не выполнять?
1 Злопчинский
 
22.02.16
20:50
попытаться как-то с модальностью...?
2 vcv
 
22.02.16
20:51
Может тогда не подбором воспользоваться?

Выбрать(<?>,)
Синтаксис:
Выбрать(<Подсказка>,<ФормаСписка>)
Назначение:
Вызов диалога для выбора элемента справочника.
Возвращает: 1 - если элемент выбран; 0 - если не выбран.

Подбор, по определению, работает асинхронно с вызвавшим его кодом. Или используйте "синхронный" вызов Спр.Выбрать(), или немного измените логику работы [обработки|мозга], что бы воспользоваться асинхронным подбором.
3 vcv
 
22.02.16
20:51
(1) Научился открывать подбор модально? Поделись!
4 Злопчинский
 
22.02.16
20:52
если нужен выбор только одного элемента то можно тупо
Спр.Выбрать(....)
анализируешь выбор в цикле, если выбора нет снова спрашиваешь
5 Злопчинский
 
22.02.16
20:52
(2) опередун
6 Злопчинский
 
22.02.16
20:53
(3) открываем не подбор, а открываем модально обработку-стартер, из которой в ПриОткрытии() открываем подбор - по идее должен открыться модально...
??
7 blondinko1
 
22.02.16
20:54
Справочник должен открыться с фильтром (т.е. какие-то существующие элементы). Спр.Выбрать не подходит. А ОткрытьФормуМодально и ИспользоватьСписокЭлементов подружить не получается :(.
8 vcv
 
22.02.16
20:57
(6) Открытый из модальной формы подбор открывается под ней. Хотя из ПриОткрытии не пробовал...
(7) Почему не получается? Что мешает ИспользоватьСписокЭлементов в модальной форме?
9 Злопчинский
 
22.02.16
20:57
(7) загони в ТЗ и пусть из ТЗ выбирает. В типовой тиС есть даже обработка штатная ВопросСтаблицейЗначений (я ее у себя модфифицировал чтобы не просто ответ на вопрос да/нет, а выбор - или одного элемента или нескольких)
10 Злопчинский
 
22.02.16
20:57
(8) ща попробую...
11 blondinko1
 
22.02.16
21:02
(8) Как это сделать в 7.7 (ИспользоватьСписокЭлементов в модальной форме) - не знаю. Ведь контекст формы не доступен пока она не закроется?
12 vcv
 
22.02.16
21:05
Передаёшь список значений в параметре формы. В самой форме в ПриОткрытии этот список используешь.
13 Злопчинский
 
22.02.16
21:06
(10) с ходу не получилось...
14 blondinko1
 
22.02.16
21:12
(12) Можно пример как это реализовать без изменения конфигурации?
15 Злопчинский
 
22.02.16
21:13
А почему бы просто не открыть форму модально и все? а подбор уже самому обрабатывать?
16 Остап Сулейманович
 
22.02.16
21:14
(14) "без изменения конфигурации" О_О? Такого еще не придумали. А с изменениями все просто.
17 blondinko1
 
22.02.16
21:17
(15) Как в модальную форму передать список элементов (типа фильтра) т.е. аналог ИспользоватьСписокЭлементов без редактирования справочника? Это вообще реально в 7.7?
18 Злопчинский
 
22.02.16
21:19
при открытии форм в параметрах открытия формы - всегда можно передать что-то.
19 blondinko1
 
22.02.16
21:19
Или проще с ТЗ? Просто иногда возникает необходимость добавить элемент в справочник, если один из отфильтрованных не подходит.
20 blondinko1
 
22.02.16
21:20
КонтПодбора.ИспользоватьСписокЭлементов(дубли_СЗ);
21 Злопчинский
 
22.02.16
21:22
СЗ = СоздатьОбъект("СписокЗначений");
СЗ.ДобавитьЗначение("мальчик","вася");
СЗ.ДобавитьЗначение("девочка","галя");
СЗ.ДобавитьЗначение("еще не определился","женя");
ОткрытьФормуМодально("Отчет",СЗ,имяОтчета);

в отчете:
Процедура ПриОткрытии()
   СЗ = Форма.Параметр;
   СЗ.Получить("вася");
22 Остап Сулейманович
 
22.02.16
21:23
+ (16) В процедуре, которая открывает форму подбора/выбора. (В вашем случае выбора, потому что после него форму нужно закрыть) :

Спис = СоздатьОбъект("СписокЗначений);
Спис.ДобавитьЗначение(Элемент_для_отбора_1);
Спис.ДобавитьЗначение(Элемент_для_отбора_2);
...
Результат = ОткрытьФормуМодально("Справочник.МойОфигенныйСправочник.МояОфигеннаяФорма", Спис);
//В результат будет выбор из МояОфигеннаяФорма

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

В обработке выбора строки списка :
Форма.Закрыть(ТекущийЭлемент()); //Ну для примера.
23 Злопчинский
 
22.02.16
21:24
так чтобы вообще не редактировать код формы списка справочника - затрудняюсь...
24 blondinko1
 
22.02.16
21:26
(21) (22) Спасибо, об этих методах я знаю. Т.е. получается без редактирования конфигурации(справочника) никак?
25 Злопчинский
 
22.02.16
21:27
(24) можно... сек...
26 Остап Сулейманович
 
22.02.16
21:28
(24) Можно еще склепать свою отдельную форму (например с таблицей значений) и выполнять выбор уже оттуда. Зависит от условий задачи.
27 blondinko1
 
22.02.16
21:28
(26) (19)
28 vcv
 
22.02.16
21:29
Ну делай тогда без модальности. Открывай подбор. В твоей обработке какая-нибудь кнопка "Далее" будет запрещена, в процедуре ОтработкаПодбора возьмёшь выбранный элемент и разрешишь для пользователя кнопку "Далее". Или просто выполнишь чего-нибудь.
29 blondinko1
 
22.02.16
21:30
(28) (1) ...ОткрытьПодбор() из цикла...
30 Остап Сулейманович
 
22.02.16
21:30
(27) Ну так :
1. проверить есть ли то, что нужно.
2. если нет - добавить.
3. заполнить табличку тем, что нужно.
4. дать выбрать.
31 Злопчинский
 
22.02.16
21:31
не, не получается (не смотрел подробно)
открыть штатно не модально
получить формексом извне контекст формы, перевести в модальный режим - но не знаю, есть ли такое
32 Остап Сулейманович
 
22.02.16
21:32
+ (30) Только это уже близко к косячной постановке задачи. Неконтролируемый пользователем процесс добавления информации в справочник может прогеру плохо аукнуться.
33 Злопчинский
 
22.02.16
21:32
Проще всего запихнуть в ТЗ и делай что хошь. тем более что тебе это надо для выбора.
34 blondinko1
 
22.02.16
21:34
(30) В процессе загрузки из файла(в цикле) в определенный момент надо из справочника выбрать один из элементов(одинаковых - разница только в коде, т.е. наименование и всё остальное полный дубль).
35 blondinko1
 
22.02.16
21:34
(33) Да видимо так и придется.
Всем спасибо за ответы.
36 Злопчинский
 
22.02.16
21:35
(34) одинаковые элементы справочника - в ТЗ!
ТЗ - с вопросом/предложением - юзверю!
37 Остап Сулейманович
 
22.02.16
21:35
Сдается мне, что задача из сходна с автоматизированной обработкой платежек? И если попался контрагент (или например операция) которой нет в справочнике - нужно обязательно ее добавить. Вот тут вас и ожидает большая и крупная засада.

Такие задачи не решаются тупым перебором строк. Вернее решаются некоторыми, но не должны.
38 blondinko1
 
22.02.16
21:35
(36) Это понятно, хотелось из справочника.
39 blondinko1
 
22.02.16
21:37
(37) Нет, задача другая. Вся загвоздка в существовании дублей в справочнике (код эл-та при загрузке не известен).
40 Остап Сулейманович
 
22.02.16
21:39
(39) Я и не говорю, что задача именно такая. Сходная.

У пользователя ДО НАЧАЛА обработки должна быть табличка с полностью заполненными строками. Никаких обработок не начинать пока табличка не будет полностью заполнена.
41 FN
 
22.02.16
21:40
грузи в тз, показывай пользователю. пока он не заполнит все проблемные позиции кнопочка Далее неактивна.
просто как двери
42 Остап Сулейманович
 
22.02.16
21:41
+ (40) И у пользователя, в случае неправильного выбора, будет возможность исправить ситуацию до начала обработки. И у прогера будет возможность в коде перепроверить данные.
43 Остап Сулейманович
 
22.02.16
21:41
(41) +100500.
44 blondinko1
 
22.02.16
21:45
(40) (41) Так и так и придется делать. Хотелось красиво сделать(без ТЗ), т.к. в 99.9% случаев юзеру надо выбрать всего ОДИН из дублей в справочнике, и лишь в оставшихся 0.1% добавить ещё один элемент(дублирующий остальные дубли) в справочник.
45 blondinko1
 
22.02.16
21:46
Кто-же знал что в 7.7 все так печально.
Ещё раз всем спасибо.
46 Остап Сулейманович
 
22.02.16
21:48
Так ты же программист или где?
Настрой разную реакцию программы на 99.9% и на 0.1%

(45) Подобный подход точно так же справедлив в восьмерке, а равно и прочих языках.
47 Злопчинский
 
22.02.16
21:56
(45) в 77 все замечательно и быстро. кто ж виновать что вам серпом обрубили конфигурацию редактировать
48 blondinko1
 
22.02.16
21:57
(46) ...а равно и прочих языках.
Передать в модальную форму фильтрованный список элементов, либо тормознуть код пока не сделан выбор? Что-то не в C++, .NET, Delphi и др. не разу не вызывало проблем. (47) Да, в этом тоже проблема.
49 Остап Сулейманович
 
22.02.16
22:04
(48) Если уж так хочется - в 1С есть вполне себе модальный выбор из списка.
Но не говорите, что вас не предупреждали.
50 blondinko1
 
22.02.16
22:08
(49) Спасибо, не надо :).
Вопрос можно считать закрытым.
В очередной раз всем спасибо.