Имя: Пароль:
1C
1C 7.7
v7: ОткрытьФорму и ОткрытьФормуМодально
,
0 mama_ay
 
27.07.11
15:06
Подскажите плз,
1С 7.7, конфа КА
Я из документа "Реализация" создаю новый документ, при помощи ОткрытьФормуМодально, новый документ создается, ему присваивается номер и дата, но сам документ в базе данных физически не создается.
а если использовать ОткрытьФорму, тогда все ок.

подскажите в чем проблема?

код в документе "Реализация":

СЗ.Установить("Номенклатура",ВыбНом); // тут выбранная номенклатура
СЗ.Установить("ТЗ", темпТЗ);          // тут список для ТабЧасти
ОткрытьФормуМодально("Документ.НовыйДокумент", СЗ);
1 zak555
 
27.07.11
15:07
77 и КА ?
2 Fragster
 
гуру
27.07.11
15:08
(1) там есть "комплексная"
3 mama_ay
 
27.07.11
15:08
нет , 1С 7.7 конфигурация "комплексная" - Бухгалтерия Торговля Склад Зарплата Кадры
4 Guk
 
27.07.11
15:10
так пока не запишешь, вроде бы и так и так не создается...
5 mama_ay
 
27.07.11
15:12
(4)после "ОткрытьФормуМодально("Документ.НовыйДокумент", СЗ);"
в СЗ возвращается ссылка на НовыйДокумент
я потом пытаюсь его записать, но он все равно не создается.

Док = СЗ.ПолучитьЗначение(1);
Если Док.Выбран() = 1 Тогда
Док.Записать();
Док.Провести();
КонецЕсли;
6 aka AMIGO
 
27.07.11
15:12
(0) за последним оператором "ОткрытьФорму" есть еще строки в процедуре?

зы. мож не всё скопипастил в сабж..
7 ДенисЧ
 
27.07.11
15:12
(5) нет там никакой ссылки...
8 Guk
 
27.07.11
15:13
(5) так пока форма открыта, вроде как новый документ не возвращается...
9 aka AMIGO
 
27.07.11
15:13
(5) так вот, при модально процесс остается на операторе ОткрытьФорму, а при немодальном - проваливается вниз, продолжает выполнять все операторы до конца процедуры
10 aka AMIGO
 
27.07.11
15:15
(5) Если Док.Выбран() = 1 Тогда
не выполнится оператор, потому, что док твой не записан, а значит и  выбран()=0 !
11 andrewks
 
27.07.11
15:15
что-то тут не так... ©
12 mama_ay
 
27.07.11
15:16
(10) код отрабатывает, я в отладчике все проверял.
13 mama_ay
 
27.07.11
15:16
(7) ок, пусть не ссылка, а заполненный документ, который надо записать.
14 mama_ay
 
27.07.11
15:17
(8) форма закрывается потом. и как раз надо когда форма закрывается, документ записать
15 andrewks
 
27.07.11
15:18
давай уже код полный. надеюсь, он не на 10 экранов?
16 Guk
 
27.07.11
15:18
(12) код может отработать только после закрытия модальной формы. ты что-то не договариваешь...
17 mama_ay
 
27.07.11
15:19
(10)если вставить еще вот этот код, то "НовыйДокумент" находит.

НайденДок = СоздатьОбъект("Документ.НовыйДокумент");
НайденДок.НайтиДокумент(Док);
Если НайденДок.Выбран() = 1 Тогда
18 GROOVY
 
27.07.11
15:19
Мля, создай документ сначала программно, потом открой его форму.
19 mama_ay
 
27.07.11
15:20
(16) ну да, я же и говорю, что весь код стоит после
"ОткрытьФормуМодально("Документ.НовыйДокумент", СЗ)"
20 mama_ay
 
27.07.11
15:20
(18) ща попробую
21 chief accountant
 
27.07.11
15:21
Зачем вообще его открывать?
22 mama_ay
 
27.07.11
15:22
(21), наверно если не было бы надобности, я бы не открывал.
23 chief accountant
 
27.07.11
15:25
(22) Что ты с ним делаешь при открытии?
24 mama_ay
 
27.07.11
15:28
(23) я ему передаю номенклатуру, и ТЗ со списком доп номенклатуры, и открывается документ с заполненными значениями, после чего пользователь должен внести в документ свои коррективы и провести его.
25 Ёпрст
 
27.07.11
15:31
(0)
в модуле формы документа напиши
Процедура ПриЗакрытии()
  Если Выбран()=1 Тогда
      Форма.Параметр = ТекущийДокумент();
  Иначе
      Форма.Параметр = "Дурилка, нужно было сперва записывать документ";
  КонецЕсли;
КонецПроцедуры

и потом в своей поделке:

ОткрытьФормуМодально("Документ.НовыйДокумент", СЗ);
Сообщить(СЗ);
26 chief accountant
 
27.07.11
15:31
(24) Зачем тогда (5)?
27 mama_ay
 
27.07.11
15:36
(25) у меня есть такой код при закрытии

Если Выбран()=1 Тогда
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.Установить("ТекущийДокумент",ТекущийДокумент());
 Форма.Параметр = Параметры;
КонецЕсли;
28 mama_ay
 
27.07.11
15:37
(26), так как ФИЗИЧЕСКИ НЕ СОЗДАЕТСЯ ОБЪЕКТ
29 Ёпрст
 
27.07.11
15:38
(27) ну и ?
Что не устраивает тогда ?
И.. нафига его потом еще раз после закрытия формы еще раз потом записывать ?
30 Ёпрст
 
27.07.11
15:38
(28) Где такую траву взял ?
31 chief accountant
 
27.07.11
15:39
(28) Ты уж определись кто будет записывать док - программа или пользователь. И не фиг тут орать, глухих нет. Сам почитай свои посты...
32 Ёпрст
 
27.07.11
15:39
всё там создается, ежели только не в транзакции весь этот код с открытием формы.
33 mama_ay
 
27.07.11
15:39
(29), так он не появляется в базе ))
34 mama_ay
 
27.07.11
15:40
(31), ок. я код лишний закоменчу, но проблему это не решит
35 chief accountant
 
27.07.11
15:41
(34) Кто будет записывать док???
36 Ёпрст
 
27.07.11
15:44
(33) напиши как в (25).
Если будешь в сообщении видеть не ссылку на докуммент а что-то другое, то много думай.
37 mama_ay
 
27.07.11
15:44
(35), док записывает пользователь.
1. Открывается форма нового документа
2. Пользователь смотрит все ли ок
3. Пользователь нажимает кнопку "ОК" (что означает записывает документ)


и после того как пользователь нажимает "ОК", документ в базе не создается..
38 mama_ay
 
27.07.11
15:45
(36) я в отладчике вижу что документ.ВЫБРАН = 1
39 chief accountant
 
27.07.11
15:47
(37) Документ сам ваял?
40 Ёпрст
 
27.07.11
15:48
(37) Это всё в транзакцию обёрнуто поди еще ?
41 mama_ay
 
27.07.11
15:48
(39) да
42 chief accountant
 
27.07.11
15:49
(41) Что в "ОК"?
43 mama_ay
 
27.07.11
15:50
(42) все стандартно "#Записать?Провести?Закрыть"
44 mama_ay
 
27.07.11
15:51
(40), нет никакой транзакции нету
45 chief accountant
 
27.07.11
15:54
(44) Итак смотри:
РКО - делаем кнопку, к ней ОткрытьФормуМодально("Документ.ПриходныйОрдер");
ПКО открывается, жмакаем Записать
Все сохранилось.
46 mama_ay
 
27.07.11
16:03
(45), все равно физически не появляется ))
47 chief accountant
 
27.07.11
16:09
(46) Врешь
48 mama_ay
 
27.07.11
16:10
(47) если бы
49 mama_ay
 
27.07.11
16:11
(47), а может он не записывать, из за того что я
ОткрытьФормуМодально вызываю из ОбработкиПроведения ?
50 mama_ay
 
27.07.11
16:13
(47), скорее всего именно по этому, так как я сейчас переместил процедуру в МодульФормы и все заработало.
51 Torquader
 
27.07.11
16:32
Разница между ОткрытьФорму и ОткрытьФормуМодально - очень большая.
Второй параметр - это то, что передаётся форме в Форма.Параметр.
В случае модального открытия никакого контекста обратно не возвращается, так как операторы после ОткрытьФормуМодально выполняются уже после закрытия формы (контекст в этом случае уже не существует).
В случае вызова "ОткрытьФорму" мы получаем в переменной контекст открываемой формы (так как реально форма откроется уже после того, как будет закончено исполнение кода) - в этом случае мы что-то можем сделать через контекст (но не всё, так как формы ещё нет - если нужно менять что-то на ней, то нужно дождаться её открытия через "ОбработкаОжидания").
P.S. говорят, что если в открытой модально форме выполнить присвоение Форма.Параметр=Значение, то у переменной, переданной при вызове ОткрытьФормаМодально будет установленное значение (проверять лень).
52 Ёпрст
 
27.07.11
16:46
(49) это полный ПЭ.

А ничего, что проведение документа, это всегда транзакция , это раз,
И пока юзверь не наиграется с модально открытой формой, все остальные курят бамбук, это два ?
53 Guk
 
27.07.11
16:53
(49) грамотно ;)...
54 GROOVY
 
27.07.11
17:29
(49) Это просто ПЯТЬ!
55 Torquader
 
27.07.11
17:33
Ну чего вы так расшумелись - может быть - он сразу закрывает документ с Форма.Закрыть(0) в ПриОткрытии (хотя верится с трудом).
56 Ёпрст
 
27.07.11
17:34
(55) ты всю ветку то прочитай.
57 Torquader
 
27.07.11
17:41
Попытка создания и проведения документа из процедуры проведения другого документа - это действительно очень "грамотно".
Вышлите ему, кто-нить, ЖКК для прочтения - может быть - это его спасёт.