|
v7: ВыполнитьПроцедуру() | ☑ | ||
---|---|---|---|---|
0
Eeakie
16.07.13
✎
12:39
|
Добрый день.
При закрытии одного документа начинается поиск кое-какого подчиненного. В этом подчиненном надо выполнить процедуру, записать и провести. Делаю так: подчДок // уже найден Конт = ""; ОткрытьФорму(подчДок, Конт); Сервис = СоздатьОбъект("Сервис"); Сервис.ВыполнитьПроцедуру(Конт, "Распределить"); // всё отлично выполняется Как этот документ теперь записать и провести? |
|||
1
Eeakie
16.07.13
✎
12:59
|
Да ладно... ап!
|
|||
2
povar
16.07.13
✎
13:01
|
выполни процедуру записать и провести
|
|||
3
Ёпрст
16.07.13
✎
13:01
|
Вот подрастешь и поймешь, что открывать форму это моветон для таких задач
|
|||
4
Eeakie
16.07.13
✎
13:03
|
(3) тогда как мне получить контекст найденного документа чтобы "ВыполнитьПроцедуру()"?
|
|||
5
Eeakie
16.07.13
✎
13:03
|
(2) звучит очень просто. Конт.Записать() и Конт.Провести() ругается.
|
|||
6
povar
16.07.13
✎
13:04
|
(5) не так
|
|||
7
Eeakie
16.07.13
✎
13:05
|
(6) собственно, к этому сабж. Как?
|
|||
8
Галахад
гуру
16.07.13
✎
13:07
|
подчДок.Записать(). Не?
|
|||
9
Eeakie
16.07.13
✎
13:08
|
(8) "Объект заблокирован".
|
|||
10
Eeakie
16.07.13
✎
13:16
|
Ладно. Давайте больше не будем про записать/провести.
При создании документа программно как "ВыполнитьПроцедуру(парам1,парам2)" из него? Что передавать в первый параметр? |
|||
11
Eeakie
16.07.13
✎
13:26
|
Док.Новый();
... // заполнение Док.Записать(); С.ВыполнитьПроцедуру(???, "..."); // что здесь должно быть чтобы выполнилась процедура из модуля этого "нового" документа? |
|||
12
Ёпрст
16.07.13
✎
14:06
|
(11) там должен быть вызов глобальной экспортной функции заполнения документа.
|
|||
13
Chum
16.07.13
✎
14:16
|
Объект Сервис это же из 1cpp.dll или formex.dll?
|
|||
14
Eeakie
16.07.13
✎
14:21
|
(12) не понял... в первый параметр же надо передавать контекст?
(13) Формекс. |
|||
15
Eeakie
16.07.13
✎
14:25
|
(12) + а зачем мне заполнение через глобальную функцию? Это больше походит на намёк, типа: "хватит страдать ***нёй, всё гораздо проще".
|
|||
16
Ёпрст
16.07.13
✎
14:56
|
(15) какой догадливый
|
|||
17
Ёпрст
16.07.13
✎
14:57
|
для программного создания доков вовсе не обязательно открывать их форму.
|
|||
18
Ёпрст
16.07.13
✎
14:57
|
и выполнять какие-либо процедуры в открытой форме.
|
|||
19
Eeakie
16.07.13
✎
14:58
|
(18) само собой. У меня документ уже создан, программно, без открытия формы. Просто надо выполнить процедуру из его модуля.
|
|||
20
Eeakie
16.07.13
✎
15:01
|
(18) + форму документа открывал только лишь для того чтобы получить контекст, потому что в "ВыполнитьПроцедуру()" первый параметр как раз он и есть...
|
|||
21
1Сергей
16.07.13
✎
15:03
|
(20) контекст есть только у открытой формы, выполнить код формы можно только в открытой форме. А это очень долго, жрёт много памяти и вообще не спортивно
|
|||
22
Eeakie
16.07.13
✎
15:05
|
(21) тогда хотелось бы услышать альтернативное предложение...
Всё что нужно: после проведения документа (1) создать подчиненный ему (2), заполнить его всякой ботвой из (1), выполнить процедурку в модуле (2), записать и провести. |
|||
23
Eeakie
16.07.13
✎
15:06
|
Да и нафига тогда нужен метод "ВыполнитьПроцедуру()", если он такой "нехороший"...
|
|||
24
Eeakie
16.07.13
✎
15:07
|
(22) * ... выполнить процедуру из модуля (2).
|
|||
25
Ёпрст
16.07.13
✎
15:09
|
баловство это всё.
|
|||
26
Eeakie
16.07.13
✎
15:09
|
Да, хотелось бы не открывать форму подчиненного документа, но как через созданный объект Док можно будет обратиться к процедур из его модуля...
|
|||
27
Eeakie
16.07.13
✎
15:09
|
(25) почему баловство?
|
|||
28
Ёпрст
16.07.13
✎
15:10
|
всё можно и штатно сделать при желании, и без правки модуля формы документа
|
|||
29
Ёпрст
16.07.13
✎
15:11
|
(27) см (21)
|
|||
30
Ёпрст
16.07.13
✎
15:11
|
процедуры модуля формы документа есть только в его открытой форме.
|
|||
31
Ёпрст
16.07.13
✎
15:12
|
Если надо делать быстро и универсально, то нужный функционал выносится в глобальник и привет.
Пример, глЗаполнитьШапку во всех типовых. |
|||
32
Eeakie
16.07.13
✎
15:13
|
(30) предположим, открывать форму не буду, тогда что? Сделать нужную мне процедуру глобальной и вызывать оттуда?
|
|||
33
Eeakie
16.07.13
✎
15:14
|
(31) ну, собственно, так и подумал...
|
|||
34
Eeakie
16.07.13
✎
15:22
|
(31) просто дело в том, что эта процедура используется только в одном случае (кнопка в документе). Не хотелось бы забивать глобальный такими, ммм, "неважными" процедурами...
|
|||
35
Ёпрст
16.07.13
✎
15:44
|
(34) перенеси её код в свою поделку, делов то
|
|||
36
Eeakie
16.07.13
✎
15:45
|
(35) там процедура на 378 строк... уже в глобальный запихнул. Всё работает. Остался лишь вопрос о рациональности...
|
|||
37
Eeakie
16.07.13
✎
15:47
|
+ (35) даже на 382 ;) Про рациональность в плане правильности сего решения.
|
|||
38
Mikeware
16.07.13
✎
15:48
|
(36) создай другой глобальник. создай класс-обертку документа. Делай через ВыполнитьМодуль, в конце концов...
|
|||
39
uno-group
16.07.13
✎
16:17
|
Блин глянул бы как быстрая печать реализованна.
Конт="Распределить" ОткрытьФормуМодально(подчДок,"Распределить"); В документе в приоткрытии() Если Форма.Параметр="Распределить" Тогда Распределить(); Записать(); СтатусВозврата(0); Возврат; КонецЕсли; |
|||
40
Eeakie
16.07.13
✎
16:19
|
(39) нафига после СтатусВозврата() еще Возврат()? В ходе обсуждения понял, что без открытия формы действительно лучший вариант.
|
|||
41
Eeakie
16.07.13
✎
16:20
|
(38) еще маленький для такого ;) но, как вариант, было бы, конечно, классно. Когда-нибудь сяду и попробую.
|
|||
42
Eeakie
16.07.13
✎
16:22
|
(39) хотя, это тоже выход ;)
|
|||
43
Ёпрст
16.07.13
✎
16:26
|
(42) в этом случае, форма всё равно открывается, хотя и подавляется статусом возврата, + тебе придётся править модуль формы.
|
|||
44
uno-group
16.07.13
✎
16:28
|
2(40) Статус возврата 0 в при открытии сразу закрывает документ после выполнения процедуры при открытии до конца.
Не растягивать же условие если на всю процедура. В типовых от 1с быстрая печать так реализована и некого не парит. только ты не путай открыть форму и открыть форму модально в первом случае выполнение модуля продолжается во время открытия формы во втором останавливается до закрытия формы. многие наступали на грабли когда сразу паралельно печатается например 40 доков и 1с виснит и сходит с ума или какие глобальные переменные одновременно меняются несколькими документами. |
|||
45
uno-group
16.07.13
✎
16:35
|
(43) Там править в документе всего пару строк. эт если надо что по быстрому сворганить во внешнем отчете чтобы юзеров не выгонять догда да. а так лучше документ подправить и быть увереным что оно работает одинаково. А не вспоминать как нибуть через год при изменение в документе процедуры распределить() что есть еще нацать оброботок где она продублированна и ее тоже надо подправить. Потом народ иногда неделями баг пытается отловить. уж тогда выносить процедуру в глобальник.
|
|||
46
Ёпрст
16.07.13
✎
16:37
|
(45) есть турбомд для этого.
А менять модуль формы для того что в (0) - баловство |
|||
47
Eeakie
16.07.13
✎
16:42
|
В итоге мне так никто и не сказал зачем вообще нужен метод "ВыполнитьПроцедуру()". Вроде бы такой удобный...
|
|||
48
Ёпрст
16.07.13
✎
16:53
|
(47) У АЛьФ -а спроси, это его метод.
|
|||
49
ADirks
17.07.13
✎
06:51
|
(47) В основном для вызова процедур, имя которых заранее неизвестно. Например, вяческие callback'и.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |