|
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) Спасибо, не надо :).
Вопрос можно считать закрытым. В очередной раз всем спасибо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |