Имя: Пароль:
1C
1C 7.7
v7: Как последовательно открыть формы в 7.7 ?
, ,
0 r1000
 
16.04.13
21:30
После открытия определенной формы, должна открыться еще одна форма.
Как так сделать ? Нужна именно такая последовательность. Сначала одна, потом вторая. Без участия пользователя.
1 r1000
 
16.04.13
21:38
Если в ПриОткрытии() первой открывать вторую форму, то первой открывается вторая ессно... А нужно последовательно.
2 Aleksey
 
16.04.13
21:38
открывай монопольно
3 Aleksey
 
16.04.13
21:39
*тьфу модально
4 r1000
 
16.04.13
21:42
Дело в том, что я открываю форму подбора номенклатуры.
ОткрытьПодбор("Справочник.Номенклатура", "ДляПодбора", СписокПараметровПодбора);
Как это окно модально открыть ?
5 Злопчинский
 
16.04.13
22:04
(1) используй предопределенную ПослеОткрытия()
6 tararam
 
16.04.13
22:04
(4) открывать модально, но в этом случае результат подбора возвращать через, например, глобальную таблицу значений (или список) и перехватывать.
7 tararam
 
16.04.13
22:04
(5) вопрос о 7.7
8 r1000
 
16.04.13
22:08
ну вот так и придется формекс ставить.
9 r1000
 
16.04.13
22:08
Всем спасибо.
10 Злопчинский
 
16.04.13
22:37
(8) вариант послеоткрытия можно и без формекса организовать. однократным запуском выполнения процедуры по обработке ожидания
11 Torquader
 
17.04.13
00:42
В чём проблема:
ОткрытьФорму("Справочник1.ФормаСписка.ФормаСписка");
ОткрытьФорму("Справочник2.ФормаСписка.ФормаСписка");

Если хочется, чтобы появлялись последовательно, то через ОбработкаОжидания и ложное закрытие служебной формы.
12 КонецЦикла
 
17.04.13
03:14
(1), (2) Жжоте
Не нужно искать сложностей там где их нет. Просто открывайте последовательно
13 r1000
 
17.04.13
08:14
Сначало должна открыться первая, а сразу после открытия ее должно сработать ОткрытьПодбор. Но ОткрытьПодбор должно сработать из открытой первой формы, чтобы потом этот подбор об работать в этой первой форме. Задача: в реализации пользователь считывает ШК. При считке должна открыться форма подбора номенклатуры и сразу должно запроситься количество (запрос количество у меня сделан через обработку, а не через обычное ВвестиЧисло).
14 NikVars
 
17.04.13
09:36
(13) "Сначало должна открыться первая". Открылась...
Городишь в ней кнопочку. Юзер давит ее. Откроется твой подбор.
15 r1000
 
17.04.13
09:37
Нужно без кнопочки. В этом и проблема.
16 NikVars
 
17.04.13
09:37
(13) Или сообщи подробнее, что за форма такая, которая обязательно должна быть ФОРМА и что за надобность такая появится и потом исчесзнуть перед подбором?
17 NikVars
 
17.04.13
09:38
Вопрос, Предупреждение как формы катят?
18 r1000
 
17.04.13
09:39
Нет.
19 r1000
 
17.04.13
09:40
Задача вроде бы подробно есть в (13)
20 NikVars
 
17.04.13
09:40
Ну почему же. Задал Таймаут. Она появится, потом исчезнет.
Или ты чего-то не договариваешь.
21 NikVars
 
17.04.13
09:42
(19) Я пользователь. Заполняю док. Нужно мне заполнить табличную часть дока. Далее...
Появляется загадочная форма номер один. НАФИГА казе баян?
Чего за надобность?
22 r1000
 
17.04.13
09:43
Юзер открыл реализацию. Взял в руку товар и сканерШК. Сканирует. Должно произойти следующее: сначала должна открыться форма подбора номенклатуры с текущим элементом отсканированной номенклатуры (как если бы он надавил на кнопку "Подбор"), и сразу должна открыться форма обработки ввода количества(ну чтобы ему не кликать мышью в списке номенклатуры).
23 NikVars
 
17.04.13
09:45
(22) Не понял нафига тут подбор. И еще пользователь захотел почесаться, а количество не успел ввести. Логичнее ему давануть кнопку, почесаться, сказать начу привет, ввести кнопку, поправить лифчик и давануть ок.
24 NikVars
 
17.04.13
09:46
Как вариант - жамкнуть горячую клавишу может быть и появится форма количество, а по умолчанию - 1.
25 Ёпрст
 
17.04.13
09:47
(22) можно штатно, через ОбработкаОжидания и контекст открытой первой формы, можно через 1сpp или формекс запустить процедуру через контекст открытой формы, которая откроет вторую форму из первой.
26 r1000
 
17.04.13
09:48
Потому что в форме подбора есть много доп. информации. Сразу добавлять товар в накладуху не нужно.
27 r1000
 
17.04.13
09:49
(25)Вот через формекс пробую. Вроде ПослеОткрытия() срабатывает, но вторая форма остается как бы под первой - т.е. не активной.
28 NikVars
 
17.04.13
09:49
Вместо открытьподбор лучше и проще сгородить свою форму со своими кнопочками и своим отображением.
Пока не врубаюсь нафига при сканере открытьподбор. Сканер сам все найдет а количество можно и в доке вбить.
29 r1000
 
17.04.13
09:49
Как активизировать формексом вторую форму, открываемую из первой ?
30 Ёпрст
 
17.04.13
09:50
(27) форму с вводом количества открывай модально.
31 r1000
 
17.04.13
09:51
(28)именно нужно форму подбора показать и сразу предоложить ввести количество, сканируемого товара.
32 r1000
 
17.04.13
09:52
(30)Я открываю её вот как:
ОткрытьПодбор("Обработка.итбВводКоличества",, СписокПараметров);
Мне нужно через ОткрытьПодбор, потому что нужно же потом обработкуПодбора отработать. Как модально открыть, чтобы потом обработкаПодбора сработала в первой форме ?
33 Ёпрст
 
17.04.13
09:55
(32) а зачем тебе открытьподбор для ввода количества ?
Ты чего, несколько "количеств" подбирать собрался, или всё же одно значение ?
Если одно - то тупо ОткрытьФормуМодально и при её закрытии поиметь это количество, открыть подбор для второй формы там как бэ не нужен
34 NikVars
 
17.04.13
09:56
(31) Зачем???? Подбор нужен чтобы ПОДБРАТЬ несколько позиций.
Берешь сканер, пик, в доке сразу появляется строчка, с количеством 1. Нужно изменить количество - юзер давит кнопку (придумай какую) - является форма ввода количества. Или открываем нужную форму автоматом для ввода количества.
Подбор при сканировании не нужен.
35 r1000
 
17.04.13
09:59
(33) Задумка вот какая:
Когда вторая форма(форма обработки, где кол-во нужно ввести) открылась - там по умолчанию стоит 1. Если пользователь сканирует новый товар, когда эта вторая форма открыта, то в документ подбирается 1 и программа в первой форме встает на нужный элемент спраочника и опять открывает обработку ввода количества.
А обработку я открываю для того чтобы внешнее событие ловить.
36 r1000
 
17.04.13
10:00
(34)Я Вас понял прекрасно. И соглашаюсь. Но по условию задачи, мне нужно именно форму подбора открывать. Изменение количества в табл. части не катит.
37 r1000
 
17.04.13
10:02
(33)Сейчас попробую из модального выхватить. Похоже это то, что нужно мне.
38 Ёпрст
 
17.04.13
10:02
ладно, зайдём по-другому:
ты форму подбора в Тис-е видел не ?
39 Ёпрст
 
17.04.13
10:03
Там форма подбора номенклатуры с ТЗ на форме - в которую выбранная номенклатура летит и открывается модальная форма с количеством, если галка выставлена, что запрашивать
40 Ёпрст
 
17.04.13
10:03
взял бы готовое и привет.
41 NikVars
 
17.04.13
10:04
(36) ОткрытьПодбор нужен для ручного поиска и ручного ввода товара. Со сканером логика другая. Вторая форма не нужна - все можно сделать из одной формы. Я бы вообще сдал бы без форм. После пика и ввода товара сканером я бы активизировал был колонку с количеством, где уже стоит 1. Нужно или ентер давануть или количество ввести и ентер давануть.
А ты мудришь и потенциально вешаешь сопли в виде двух форм, формекса. В общем, закладываешь себе под зад гарантированный геморр.
42 Ёпрст
 
17.04.13
10:04
Или.. ты количество тоже сканёром вводить будешь ? (тыркая в бумажку со спец-штрих кодами)
43 r1000
 
17.04.13
10:05
Модальная форма с запросом в тисе открывается через ВвестиЧисло, и поэтому там я немогу использовать обработкувнешнегособытия. Поэтому мне нужно использовать свою обработку для ввода количества. Мне нужно чтобы при открытой форме ввода количества я смог отловить обработкувнешнегособытия.
44 Ёпрст
 
17.04.13
10:06
(43) нет в тисе формы с ВВестиЧисло
45 Ёпрст
 
17.04.13
10:06
в подборе там открывается модальная форма для ввода количества (ицены)
46 r1000
 
17.04.13
10:07
Открыл форму ввода количества модально из первой формы. Как при закрытии отловить количество из этой формы, чтобы в первую форму это количество вернуть ?
47 r1000
 
17.04.13
10:10
(45)Нашел. Спасибо.
48 Ёпрст
 
17.04.13
10:11
(46)
:))
Параметр = .....
ОткрытьФормуМодально("Обработка.ТвояПоделка", Параметр);

Сообщить(Параметр.....);
49 Ёпрст
 
17.04.13
10:12
+48 в самой Обработка.ТвояПоделка, в Форма.Параметр присвой чего угодно в ПриЗакрытии, например
50 Ёпрст
 
17.04.13
10:12
Это и прилетит потом в переданный Параметр.
51 r1000
 
17.04.13
10:52
У модально открытой формы ОбработкаВнешнегоСобытия() должны срабатывать ?
52 2S
 
17.04.13
10:55
#-решение. Фигню городите...
53 r1000
 
17.04.13
11:07
Как формексом активизировать нужное окно в 1С ?
54 Ёпрст
 
17.04.13
11:12
(51) скорее нет , чем да - будет вроде только глобальная работать (не помню уже, но был там затык с модальностью)
55 Ёпрст
 
17.04.13
11:13
(53)
НаПереднийПлан(<Форма>)
56 trad
 
17.04.13
11:13
офф/2
Если, частооткрываемая форма ввода количества выполнена как обработка, то обязательно на нее положите ТЗ (можно невидимую, можно в другой слой) если еще нет ТЗ на форме.

Это касается всех частооткрываемых форм обработок.

Частооткрываемая - форма которая открывается за сеанс сотни, тысячи раз.

Каждое открытие формы обработки без ТЗ на ней приводит к утечке 2 объектов USER. Большая утечка приводит к непредсказуемым зависаниям и падениям.
57 r1000
 
17.04.13
11:16
(54)как открыть не модальную форму и потом чтобы при закрытии эта форма вернула результат ? А активизацию окна я попробую сделать формексом.
58 Ёпрст
 
17.04.13
11:22
(56) более непредсказуемо ведёт себя внешняя обработка с х..вой тучей мокселей (в рег отчетности типовой такая есть)
и Пофик там на ТЗ на форме - на 6-7 раз после её открытия валится 1с-ина.
Если уменьшить количество мокселей - норм.
59 Ёпрст
 
17.04.13
11:23
(57) тупо передать в неё контекст открытой формы, в при закрытии установить что угодно в этот контекст, или пнуть "первую" форму и ловить в ПриПовторномОткрытии..
60 r1000
 
17.04.13
11:29
>>в при закрытии установить что угодно в этот контекст
А где потом его в первой форме ловить ?
61 Ёпрст
 
17.04.13
11:32
да где угодно, хоть в обработке внешнегособытия:)
Ну, можешь свой ОткрытьПодбор использовать
62 r1000
 
17.04.13
11:32
(55)Блин, а где это порписывать ?
Пытаюсь в нужной форме делать так:
Процедура ПриОткрытии()
   Окна = СоздатьОбъект("Окна");
   Окна.НаПереднийПлан();
КонецПроцедуры
не получается
63 Ёпрст
 
17.04.13
11:35
в ПослеОткрытия
64 Ёпрст
 
17.04.13
11:35
+ параметр забыл в методе.
65 Ёпрст
 
17.04.13
11:36
без него главное окно программы будет выдвинуто на передний план
66 r1000
 
17.04.13
11:47
Процедура ПослеОткрытия()
   
   Окна = СоздатьОбъект("Окна");
   Окна.НаПереднийПлан(Форма);
   
КонецПроцедуры    


Не срабатывает. Окно по прежнему на заднем плане.
67 Ёпрст
 
17.04.13
11:51
(66) а как ты вторую форму щас открываешь ?
И в какой форме это пишешь ?
68 r1000
 
17.04.13
12:45
// формируем список параметров для передачи в обработку
   Параметр    = СоздатьОбъект("СписокЗначений");
   Параметр.ДобавитьЗначение(ВыбНоменклатура        , "Номенклатура");
   Параметр.ДобавитьЗначение(Колво                    , "Количество");
   Параметр.ДобавитьЗначение(ВозврЕдиница          , "Единица");
   
   // открываем форму обработки
   ОткрытьПодбор("Обработка.ВводКоличества",,Параметр);
69 r1000
 
17.04.13
12:46
Пишу в форме открываемой обработки. Т.е. в той, которую нужно активизировать.
70 Ёпрст
 
17.04.13
13:04
Ну так, например:
ОткрытьПодбор("Обработка.ВводКоличества",,Параметр);
Параметр.Форма.Активизировать("ИмяРеквизитаНаФорме");
71 r1000
 
17.04.13
13:06
Параметр.Форма.Активизировать("Количество");    
{Справочник.Номенклатура.ФормаСписка.ДляПодбора.Модуль(177)}: Поле агрегатного объекта не обнаружено (Активизировать)
72 Ёпрст
 
17.04.13
13:07
(71)
а так ?
Параметр.Активизировать("Количество");    

или так ?
ОткрытьПодбор("Обработка.ВводКоличества",,Параметр);
Окна = СоздатьОбъект("Окна");
   Окна.НаПереднийПлан(Параметр.Форма);
73 r1000
 
17.04.13
13:10
Сейчас вот так в первой форме:
   // формируем список параметров для передачи в обработку
   Параметр    = СоздатьОбъект("СписокЗначений");
   Параметр.ДобавитьЗначение(ВыбНоменклатура        , "Номенклатура");
   Параметр.ДобавитьЗначение(Колво                    , "Количество");
   Параметр.ДобавитьЗначение(ВозврЕдиница          , "Единица");
   
   // открываем форму обработки
   ОткрытьПодбор("Обработка.ВводКоличества",,Параметр);
   
   Окна = СоздатьОбъект("Окна");
   Окна.НаПереднийПлан(Параметр.Форма);    
   
   Параметр.Форма.Активизировать("Количество");
74 r1000
 
17.04.13
13:11
Вылетает ошибка:
Параметр.Форма.Активизировать("Количество");    
{Справочник.Номенклатура.ФормаСписка.ДляПодбора.Модуль(177)}: Поле агрегатного объекта не обнаружено (Активизировать)
75 Ёпрст
 
17.04.13
13:13
(74) делай просто
Параметр.Активизировать("Количество",1);
76 Ёпрст
 
17.04.13
13:13
если работатает, заремь Окна.
77 r1000
 
17.04.13
13:27
Не работает. Сначала форма ввода количества открывается, а потом сразу теряет активность. И на передний план становиться первая.
78 r1000
 
17.04.13
13:30
Вот весь код попытки открытия и активизации формы ввода количества.

Процедура ВыбратьТекущийЭлементСканер(ВыбНоменклатура)

   ВозврЕдиница = ВыбНоменклатура.ОсновнаяЕдиницаИзмерения;
   
   Колво = 1;
   
   // формируем список параметров для передачи в обработку
   Параметр    = СоздатьОбъект("СписокЗначений");
   Параметр.ДобавитьЗначение(ВыбНоменклатура        , "Номенклатура");
   Параметр.ДобавитьЗначение(Колво                    , "Количество");
   Параметр.ДобавитьЗначение(ВозврЕдиница          , "Единица");
   
   // открываем форму обработки
   ОткрытьПодбор("Обработка.ВводКоличества",,Параметр);
   Параметр.Активизировать("Количество",1);    
КонецПроцедуры

Процедура ПослеОткрытия()
   ВыбратьТекущийЭлементСканер(ТекущийЭлемент());
КонецПроцедуры
79 r1000
 
17.04.13
13:31
Тоесть, первая форма подбора открылась и должен сработать ПослеОткрытия, а потом ВыбратьТекущийЭлементСканер() и форма Обработка.ВводКоличества должна стать активной.
80 Ёпрст
 
17.04.13
13:40
Т.е форма ввода количества щас за формой ?
81 Ёпрст
 
17.04.13
13:40
за первой ?
82 r1000
 
17.04.13
13:45
ага. показывается на долю секунды и опять за нее.
83 r1000
 
17.04.13
13:47
Может быть в самой форме ввода количества что то дописать при открытии или после открытия ?
84 r1000
 
17.04.13
13:47
чтобы она назад не улетела...
85 Ёпрст
 
17.04.13
13:49
можно в ложном закрытии первой формы написать открытие второй, или через формековскую обработку ожидания
86 Ёпрст
 
17.04.13
13:49
(чтоб не ждать секунду у штатной)
87 Ёпрст
 
17.04.13
13:49
попробуй
88 r1000
 
17.04.13
13:52
Что значит в ложно закрытии ? Это как ?
89 Ёпрст
 
17.04.13
13:56
в первой форме:

Перем МожноЗакрыть;

Процедура ПриОткрытии()
   Если Форма.Параметр = ... тут условие что открываем из сканёра Тогда
   Форма.Закрыть(0);
   МожноЗакрыть =1;
   КонецЕсли;
КонецПроцедуры // ПриОткрытии
Процедура ПриЗакрытии()
   Если МожноЗакрыть=1 Тогда
       МожноЗакрыть =0;
       СтатусВозврата(0);
       ОткрытьПодбор("Обработка.ТвойПодборКоличество");
   КонецЕсли;
КонецПроцедуры // ПриЗакрытии
90 r1000
 
17.04.13
14:20
Почти работает.
Форма как бы на переднем плане уже, но внизу, где окна показаны - вторая форма как бы не активна. Тоесть как бы активно наполовину :)
91 r1000
 
17.04.13
14:29
Может быть формексом еще как то можно активизировать окно ?
92 r1000
 
17.04.13
14:50
Нашел вот такой код:
   оСервис       = СоздатьОбъект("Сервис");
   сзОкна        = оСервис.СписокВсехОткрытыхОкон();
   
   Для Н = 1 По сзОкна.РазмерСписка() Цикл
       КонтекстОкна    = сзОкна.ПолучитьЗначение(Н);
   КонецЦикла;
Как по контексту определить имя окна, чтобы активизировать то, что нужно ?
93 Ёпрст
 
17.04.13
16:36
Дак ты и так знаешь, что нужно активизировать.

>>>"где окна показаны - вторая форма как бы не активна."

это как ? Щас какая форма активна ? Вторая с вводом количества ?
А надо какую ?
94 Злопчинский
 
17.04.13
16:45
Ёпрст, ну ты терпеливый!!!
95 Ёпрст
 
17.04.13
16:53
(94) скорее ленивый.. мне лень открыть пофигуратор и проверить самому, как оно там
:)
96 r1000
 
17.04.13
16:54
Ёпрст, я забил и пытаюсь уже сделать через обработку ожидания. Только тоже как то криво получается.
Делаю так в первой форме:
Процедура ОткрытВводКоличестваСразу()
   
   ВыбратьТекущийЭлементСканер(ТекущийЭлемент());
   Форма.ОбработкаОжидания("ОткрытВводКоличестваСразу",0);    

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

Процедура ПослеОткрытия()
   
   Если ОткрываемСканером = 1 Тогда
       Форма.ОбработкаОжидания("ОткрытВводКоличестваСразу",1);    
   КонецЕсли;

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

Но есть проблема. Не всегда после открытия первой формы, сразу открывается вторая с вводом количества.
97 r1000
 
17.04.13
16:55
И я не могу понять. Работает штатная обработкаожидания или от формекса...
98 Ёпрст
 
17.04.13
16:57
(97) штатная.
Формековская запускается через расширениеформы или сервис или через объект Таймер
99 Ёпрст
 
17.04.13
16:57
и там время не 1 секунда, мс
100 Ёпрст
 
17.04.13
16:58
а в миллисекундах
101 r1000
 
17.04.13
17:15
Использование штатной обработки как криво. Дело в том, что если быстро сканировать товары, то окно ввода количества не всегда вызывается. Тоесть обработка ожидания сбивается как бы. Как формексовскую обработку использовать ?
102 r1000
 
17.04.13
17:16
РФорма = СоздатьОбъект("РасширениеФормы");
РФорма.ОбработкаОжидания("ОткрытВводКоличестваСразу",10);

Так ?
103 Ёпрст
 
17.04.13
17:26
почти:

Перем РасшФ;
.......
Процедура ПриОткрытии()
  РасшФ= СоздатьОбъект("РасширениеФормы");
  РасшФ.УстановитьФорму(Форма);
  РасшФ.ОбработкаОжидания("ОткрытВводКоличестваСразу",10);
104 Злопчинский
 
18.04.13
04:38
нихрена не вкуриваю - то вам надо окошко чтобы вводить количество, то вы очень быстро сканируете - вам что - тогда не надо количество водить..? ты уж определись С ПРОЦЕССОМ. а потом лепи к нему автоматизацию. а то у тебя и процесс хз какой и автоматизация такая же получится
105 r1000
 
18.04.13
11:58
Да. не нужно вводить количество. количество по умолчанию = 1. если сканируется следующий товар, то по предыдущему товару добавляется 1 шт.
106 r1000
 
18.04.13
11:59
но конечно можно и поменять количество, если нужно.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.