Имя: Пароль:
1C
1C 7.7
v7: как выполнить процедуру модуля формы документа из обработки?
0 net
 
16.01.09
08:50
есть такая возможность? или надо ее только в глобальном модуле прописывать со словом Экспорт?
1 Guk
 
16.01.09
08:51
через АЛьФа можно...
2 net
 
16.01.09
08:52
что это?
3 Guk
 
16.01.09
08:52
(2) формекс...
4 TM
 
16.01.09
08:53
1.штатно никак.
2.не обязательно в глобальном
3.http://www.dorex.ru/?projects&formex
5 Sadovnikov
 
16.01.09
08:53
(1) Почему через АЛьФа?
(0) Загрузи 1С++. Желательно, последней версии.
6 Guk
 
16.01.09
08:54
(5) я так формекс называю...
7 Vippi
 
16.01.09
08:55
(5)+1
(0) И запускай процедуру просто Конт.ТвояПроцедура().
Просто, правда?
8 Sadovnikov
 
16.01.09
08:55
(6) Офигеть...
9 Sadovnikov
 
16.01.09
08:56
(6) При помощи 1С++ удобнее.
10 smaharbA
 
16.01.09
08:56
(4) если процедуру, то именно штатно
11 Guk
 
16.01.09
08:57
(0) а вообще, чем башку ломать, давно бы скопипастил ;)...
12 Сергей-ХХХ
 
16.01.09
09:06
В принципе, можно и без извратов.

В обработке:

параметр = "выполнить процедуру";
открытьформу(док.текущийДокумент(),параметр);
...
...


В документе:

Процедура ПриОткрытии()

если ТипЗначенияСтр(форма.параметр) = "Строка" Тогда
 если форма.параметр = "выполнить процедуру" тогда
   мояпроцедура();
   статусвозврата(0);
   форма.закрыть()
 конецЕсли;
...
...
конецПроцедуры;

Вот как-то так...
13 net
 
16.01.09
09:07
ух ты, попробуем
14 net
 
16.01.09
09:08
(11) неправильное решение. Если кто-то изменит эту процерц в документе, не будет ж он искать где она еще скопирована
А вот формекс сейчас посмотрим, по описанию замечательная штука
15 Sadovnikov
 
16.01.09
09:08
(12) Ага, молодец. Теперь выполни это при открытом в данном сеансе документе. Или, если форма обработки открыта модально.
16 Sadovnikov
 
16.01.09
09:09
(14) Еще раз. Для выполненния задачи в (0) смотри 1С++. Формекс - замечательная вещь. Но, несколько для других задач.
17 net
 
16.01.09
09:10
(12) и открывать форму тоже мне не надо, просто надо изменить реквизиты в документах и провести их. а при изменении реквизита должна выполняться процедура из м.ф. док-та. Вот так
18 Guk
 
16.01.09
09:10
(14) ну, если вас там целый выводок, и каждый правит то что хочет, то конечно неправильное решение...
19 Sadovnikov
 
16.01.09
09:11
(18) В любом случае неправильное...
20 Guk
 
16.01.09
09:13
(19) я знаю. однако городить огород с ВК для задачи в (17), это тоже та еще болезнь...
21 Сергей-ХХХ
 
16.01.09
09:16
Можно проверять блокировку документа. Но для того, чтобы при изменении реквизита выполнялась процедура модуля форма, ИМХО, лучше эту процедуру перенести в модуль обработки и убрать все лишнее. Часто достаточно после изменения прописать что-то типа:

глПриИзмененииРеквизита(док,"реквизит");
22 Рэйв
 
16.01.09
09:20
(17)А чего б тупо не скопировть процедуру из формы дока в обработку?
23 Guk
 
16.01.09
09:21
(22) да вишь, тут есть мнение, что для мегазадачи в (17), это неправильное решение...
24 Sadovnikov
 
16.01.09
09:22
(20) Нифига подобного. Во-первых, не "городить огород", а загрузить ВК. Тоесть воспользоваться штатным механизмом 1С. Во-вторых - простая загрузка 1С++ даст ускорение работы базы. Плюс, решит задачу из (0).
(21) Зачем городить вот такой непонятный огород, если можно все сделать просто и правильно?
(22) Фи... Ну от тебя-то я такого не ожидал...
25 Sedoy
 
16.01.09
09:23
(23) Я бы тоже скопировал во внешнюю обработку, зачем лишний раз лезть в основную конфигурацию...
26 Guk
 
16.01.09
09:27
(24) разработчики 1С++ несут ответственность за то, что после загрузки 1С++, уменя база на переферии заткнется по непонятным причинам?...
27 Сергей-ХХХ
 
16.01.09
09:29
(24) Г-н Sadovnikov. а вы на секунду не могли бы представить, что тоже можете ошибаться? Хотя... Нет, это невозможно, определенно! )))
28 Vippi
 
16.01.09
09:29
(26) А почему по непонятным? Причины всегда есть, чудес не бывает.
29 Рэйв
 
16.01.09
09:30
(24)А накой ходить сложными путями?:) Тем более если разово.
30 Guk
 
16.01.09
09:30
(28) А оно мне надо, разбираться с этими причинами?...
31 Vippi
 
16.01.09
09:31
(30) Гм... Был прецедент? Есть уверенность в виновности 1С++?
32 net
 
16.01.09
09:31
это не разово, а постоянный обмен с другой программой
33 Рэйв
 
16.01.09
09:33
(32)Да все равно нормально будет работать. Зачем ломиться к форме и изобретать велосипед если можно все написать локально.
34 Sedoy
 
16.01.09
09:33
(32) Если постоянно, перенеси процедуру в глобальный модуль или в модуль документа...
35 Sadovnikov
 
16.01.09
09:34
(26) Во насмешил... Можно я задам встречный вопрос? Разработчики 1С несут ответственность за то, что после загрузки 1С++, уменя база на переферии заткнется по непонятным причинам?
(27) А можно данное высказывание как-то по-понятнее аргументировать? В свете того, что писал в данной ветке?
(29) Так и я про тоже :) Грузишь 1С++ и наслаждаешься результатом. Зачем что-то сложное изобретать? Копипастить, исправлять все обращения к реквизитам документа, другим функциям и процедурам модуля форму документа :)
36 Sadovnikov
 
16.01.09
09:35
+(35) Блин.
"В свете того, что писал в данной ветке?" = "В свете того, что Я писал в данной ветке?"
37 Guk
 
16.01.09
09:35
нет, всё таки вк - это религия...
38 Рэйв
 
16.01.09
09:35
(35):-))  Вот у меня например стойкое отвращение к 1С++ ...Так что не для всех подходит:)
39 TM
 
16.01.09
09:36
(31) А при чем здесь прецедент? Чем больше ВК и тому подобного тем меньше общая надежность системы. Это азбука.
40 Vippi
 
16.01.09
09:39
(39) А при чем здесь ВК? Чем кривее руки, тем меньше общая надежность системы. Это азбука.
41 Сергей-ХХХ
 
16.01.09
09:39
(36) (24) "Зачем городить вот такой непонятный огород, если можно все сделать просто и правильно?"

На мой взгляд, при таком раскладе правильно - это поменять реквидит документа "док.реквизит = значение" и вызвать процедуру, пкркнксенную в форму " приизмененииреквизита("реквизит") ", если данной процедуры еще нет в глобальном модуле. А по поводу того, что какой-то объект может быть открыт, то есть "док.блокировка", позволяющая это проверить.
42 Guk
 
16.01.09
09:40
(39) Доказано. Непереубеждаемо...
43 TM
 
16.01.09
09:40
(40) Вот только формализовать кривость рук и включить их в расчет надежности пока еще не получается.
44 Sadovnikov
 
16.01.09
09:41
(41) Не понял. Мне надо вызвать процедуру, которая живет в форме документа. И почему я должен обламываться с этим, если форма этого документа открыта??
45 TM
 
16.01.09
09:41
+(43) Только не говорите мне, что ни разу не сталкивались в школе с расчетом надежности ПО.
46 Sadovnikov
 
16.01.09
09:42
(42) Ты на вопрос-то в (35) ответь :)
47 Sadovnikov
 
16.01.09
09:42
(45) Представляю тогда на сколько ненадежна восьмерка...
48 Guk
 
16.01.09
09:46
(46) Разработчики тойоты несут ответственность, если я себе в авенсис шаровую от приоры воткну?...
49 Ёпрст
 
гуру
16.01.09
09:47
(4) гон. Штатно всё можно.
50 ДенисЧ
 
16.01.09
09:48
(45) Это в какой школе учат надёжности ПО? О_о
51 smaharbA
 
16.01.09
09:48
(49) ну не совсем все конечно, если не о приоткрытии речь конечно
52 smaharbA
 
16.01.09
09:49
+(51) а об обработкаожидания )))
53 Sadovnikov
 
16.01.09
09:49
(48) При чем здесь доработка машины? Я имел ввиду абсолютно штатную безо всяких ВК 1С и абсолютно типовую конфигурацию. Так каким будет твой отрицательный ответ?
54 Токс3
 
16.01.09
09:50
Кроме Гука кто-нить (17) читал? Нах ВК?
55 smaharbA
 
16.01.09
09:51
(53) слушай, тыж спец какой-никакой ))) по 1с++, ты тут сказал, что если просто загрузить 1с++ база убыстрится, с чем это связано, есть объяснение ?
56 smaharbA
 
16.01.09
09:51
(54) дак то понятно, что скопипастил в обработку и успокоился
57 rie
 
16.01.09
09:52
(54) Так автор вопроса хочет использовать именно процедуру из модуля формы документа.
58 Vippi
 
16.01.09
09:52
(55) Есть. Потому что в 1С++ встроена TurboBl
59 rie
 
16.01.09
09:52
(56) Потом в модуле формы документа что-то изменилось и начинаем искать, почему обработка работает не так, как надо.
60 Ёпрст
 
гуру
16.01.09
09:53
(55) есть. Это описано в описании работы turbobl.dll ..которая вошла в 1cpp.dll
61 Sadovnikov
 
16.01.09
09:54
(55) Есть, конечно. Знаю человека, который на этом бизнес строит :) Просто грузит 1С++ и берет 1 тыр за каждый прогцен увеличения скорости работы :)
При загрузке 1С++
1. Очень сильно увеличивается скорость вызова (самого поиска) процедур и функций того же глобального модуля.
2. В разы возрастает скорость работы метода СоздатьОбъект()
Это, вот, что сразу на вскидку вспомнилось.
62 smaharbA
 
16.01.09
09:54
пля, дак эта турба вроде с турбойМД не живет нормально
63 Ёпрст
 
гуру
16.01.09
09:55
(62) Путаешь чего-то :)
64 smaharbA
 
16.01.09
09:55
(61) а как (62) ?
65 Sadovnikov
 
16.01.09
09:55
(54) Не мешай спорить :)
66 Sadovnikov
 
16.01.09
09:55
(64) Прекрасно живут вместе.
67 Vippi
 
16.01.09
09:56
(62) Откуда сведения?
68 smaharbA
 
16.01.09
09:56
(63) не, нифига, помню точно не дежавю и не ретроградная амнизия, с кем то или турбоМД или формексом косяки при совместном пользовании
69 TM
 
16.01.09
09:56
(47) С научной точки зрения надежность восмерки меньше чем семерки. Хотя бы по причине большего объема кода и меньшеко срока эксплуатации.

Я ни в коем случае не против ВК. Они действительно расширяют возможности семерки весьма и весьма и используются в стопицоттыще конкретных задач, которые семерка в дефолтном виде не потянула бы. Но использовать ВК для решения данной задачи, мягко говоря, нецелесообразно. Предпосылок нет.

(50) В любой, где готовят специалистов по програмному обеспечению всяких АСУ. Навскидку - МАИ, Бауманка, ЛИАП, Военмех, Политех, Техноложка, Бауманка. Там, где ошибка ПО может привести к выполнению годового плана по выработки энергии за одну милисекунду надежность ПО считают всегда. Есть учебники, ЕМНИП, даже ГОСТ есть :)
70 Токс3
 
16.01.09
09:56
(57) Я так сильно подозреваю, что при выборе какого-то реквизита формы выполняется процедура модуля формы и заполняются реквизиты документа... по которым документ и проводится...
71 Sadovnikov
 
16.01.09
09:57
(68) если загрузишь 1С++ версии ниже 2.5 и формекс - вот тогда и получишь косяки :)
72 Ёпрст
 
гуру
16.01.09
09:57
(68) есть такое, но щас почти всё пофиксили... в последней сборке турбомд
73 smaharbA
 
16.01.09
09:57
(67) не помню, но точно было, может со старинными версиями, но было, причем касяк описать не могу, но был конкретный (не пропадающий), я даже тогда (года 3-4 назад) убрал турбоБЛ из конфы
74 Guk
 
16.01.09
09:58
(71) класс!...
75 Sadovnikov
 
16.01.09
09:58
(69) "Но использовать ВК для решения данной задачи, мягко говоря, нецелесообразно" - не факт. Глянь, например, (61).
76 Токс3
 
16.01.09
09:58
(65) Извините, ошибся... :)
77 Sadovnikov
 
16.01.09
09:58
(74) Поясни свой восторг?
78 Sadovnikov
 
16.01.09
09:59
(76) :)))
79 Сергей-ХХХ
 
16.01.09
09:59
(44) Только в одном случае из многих тысяч других необходимо как-то подправить форму уже открытого документа из какой-то обработки. Да и в этом оном случае можно пойти другим путем, более простым (все гениальное - прото, как сказал один из признанных, в отличие от меня, гениев))) способом.

По поводу решения, предложенного мной (и не только), то оно стало очевидным после того, как задача была сформулирована более конкретно.

Извините, если чем обидел.
80 Vippi
 
16.01.09
09:59
(68) Все могло быть.
Но проект 1С++ живет и развивается.
Никогда не задумывался о числе даже документированных ошибок в Windows7
81 Guk
 
16.01.09
10:00
(77) это неописуемо...
82 TM
 
16.01.09
10:01
(75) В задаче (0) не требуеться увеличивать скорость работы создатьобъекта :)
83 NS
 
16.01.09
10:01
Правильное решение - вынести процедуру в глобальный модуль.
84 Sadovnikov
 
16.01.09
10:01
(79) Да почему обидел-то? Нормальное общение :)
Если уж идти совсем правильным путем, то эту процедуру стоит вынести в класс документа.
85 Guk
 
16.01.09
10:02
(83) +100...
86 Sadovnikov
 
16.01.09
10:02
(81) Наверное, потому, что ты не в курсе, что в 1С++ версии ниже 2.5 встроен формекс? И повторная загрузка такой ВК, мягко говоря, не приветствуется.
87 Sadovnikov
 
16.01.09
10:03
(82) Ага. В задаче из (0) не требуется. Но, почему бы, попутно этого не сделать?
(83) Неа :) См. (84).
88 Vippi
 
16.01.09
10:03
(77) Guk видимо не в курсе, о чем ты.
89 smaharbA
 
16.01.09
10:03
а что там с 1с++ и формексом ? т.е. или забываю про раскраски для тупых или забываю про ускорение ?
или всеже можно совместить ?
90 Guk
 
16.01.09
10:03
(86) Не вижу ни одной причины, по которой я должне быть в курсе столь знаменательного события...
91 Vippi
 
16.01.09
10:04
(86) Обогнал :))
92 Sadovnikov
 
16.01.09
10:04
(89) И можно и нужно совмещать :)
(90) Дык, если ты не обладаешь информацией - чего тогда такие посты создаешь?
93 smaharbA
 
16.01.09
10:04
а где 1с++ качнуть ? на его сайте ?
94 ДенисЧ
 
16.01.09
10:05
(93) Eue/
95 TM
 
16.01.09
10:05
(87) Анекдот про обрезание вспомнил
"Но зачем?!!"
"Ну, во первых, это красиво"
96 smaharbA
 
16.01.09
10:08
а чо делать с 1с++ , она без регистрации работает ? (без админской)
97 ДенисЧ
 
16.01.09
10:08
(96) Вормекс свежий  - точно работает :-)
98 smaharbA
 
16.01.09
10:10
а это, как проверить ее загруженность ? вызвать в исключении метод, или есть кошерный вариант ?
99 Sadovnikov
 
16.01.09
10:13
(98) Например, так:
Функция ЗагрузитьКомпоненту(ИмяКомпоненты, ИмяКласса, ИмяДЛЛ)
   Если ЗагрузитьВнешнююКомпоненту(ИмяДЛЛ) <> 1 Тогда
       Если ПустаяСтрока(ИмяКомпоненты) = 0 Тогда
           Предупреждение("Компонента "+ИмяКомпоненты+" ("+ИмяКласса+", "+ИмяДЛЛ+") не загружена!
           |Работа системы невозможна!!!");
       КонецЕсли;
       Возврат 0;
   КонецЕсли;
   Возврат 1;
КонецФункции
.
Процедура ПриНачалеРаботыСистемы()
   Если
       (ЗагрузитьКомпоненту("1C++",        "AddIn.1C++",        "1cpp.dll")        = 0)    ИЛИ
       (ЗагрузитьКомпоненту("FormEx",        "AddIn.FormEx",        "formex.dll")        = 0)    ИЛИ
       (ЗагрузитьКомпоненту("NetaTable",    "AddIn.NTable",    "NetaTable.dll")    = 0)    ИЛИ
       (ЗагрузитьКомпоненту("RiK_SQL",    "AddIn.R_SQL",        "RiK_SQL.dll")        = 0)    ИЛИ
       (ЗагрузитьКомпоненту("RiK_Inet",    "AddIn.R_Inet",    "RiK_Inet.dll")    = 0)    ИЛИ
       (ЗагрузитьКомпоненту("NetaMenu",    "AddIn.NMenu",        "NetaMenu.dll")    = 0)    ИЛИ
       (ЗагрузитьКомпоненту("TableDoc",    "ПолеТабличногоДокумента", "TableDoc.dll") = 0) ИЛИ
       (ЗагрузитьКомпоненту("Dial-Mail",    "AddIn.FTP",    "DialMail.dll") = 0)
   Тогда
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;
100 Ёпрст
 
гуру
16.01.09
10:18
(98) можно и в попытке создватьобъект какой-нить..если что - грузить... если в ПриНачале не грузится.
101 smaharbA
 
16.01.09
10:18
(99) не, я не о том, это ясно
у меня вообще так ))))))) (и работает падло как надо)

//-------------------------------------------------------------------------
Функция ЗагрузитьВнешнююКомпоненту(ВК="") Экспорт
// Переопределение штатной функции ЗагрузитьВнешнююКомпоненту
// Ищет в Каталоге программы, Каталоге базы, каталоге пользователя
// далее в них же, в подкаталоге ExtDLL
// ВК - имя или полное имя файла внешней компоненты
// возвращает 1 - компонента загружена, 0 - не загружена
   Перем Стр, Путь;
   Путь="";
   Стр="
   |"+КаталогПрограммы()+"
   |"+КаталогИБ()+"
   |"+КаталогПользователя()+"
   |"+КаталогПрограммы()+"ExtDLL\
   |"+КаталогИБ()+"ExtDLL\
   |"+КаталогПользователя()+"ExtDLL\";
   Для к=1 По СтрКоличествоСтрок(Стр) Цикл
       Если ФС.СуществуетФайл(СтрПолучитьСтроку(Стр,к)+ВК)=1 Тогда
           Путь=СтрПолучитьСтроку(Стр,к);
           к=0;
           Прервать;
       КонецЕсли;
   КонецЦикла;
   Если к>0 Тогда
       Сообщить("Не найдена Внешняя компанента "+ВК);
       Возврат 0;
   КонецЕсли;
   Возврат LoadAddIn(Путь+ВК);
КонецФункции    // ЗагрузитьВнешнююКомпоненту

//-------------------------------------------------------------------------
Функция LoadAddIn(ВК="") Экспорт
// Переопределение штатной функции LoadAddIn
   Возврат ЗагрузитьВнешнююКомпоненту(ВК);
КонецФункции    // ЗагрузитьВнешнююКомпоненту
102 Ёпрст
 
гуру
16.01.09
10:19
(101) а нафига проверять наличие файла ? :)
Он же сам всё ищет в указаных каталогах..:)
103 smaharbA
 
16.01.09
10:22
(102) там еще и ExtDLL и обрати внимание на

стр="
|...
104 Sadovnikov
 
16.01.09
10:22
(103) А я по другому вопрос задам: зачем держать ВК в стольких разных папках? Не замучаешься одинаковые версии поддерживать?
105 smaharbA
 
16.01.09
10:24
(104) да не раскиданы они, это так, для "многа буков" )))
106 Сергей-ХХХ
 
16.01.09
10:25
(101) А че такой неоптимальный код?
СЗ.ИзСтрокиСРазделителями("перечень каталогов и файлов через точку с запятой (или запятую - не помню)");

для а = 1 по СЗ.РазмерСписка();
если фс.СуществуетФайл(СЗ.ПолучитьЗначение(а))=1 тогда путь = СЗ.ПолучитьЗначение(а); прервать конецЕсли;

ну и т.д.
107 smaharbA
 
16.01.09
10:28
переопределил все что надо и ненадо )))
Состояние
Сообщить
ОткрытьФорму
ОткрытьФормуМодально
ЗавершитьРаботуСистемы
ЗаголовокСистемы
ЗагрузитьВнешнююКомпоненту
(106) самый, что ни наесть оптимальный... писать просче и понятнее, всегда пользуюсь Стр если не много строк и не часто вызывается
108 Vippi
 
16.01.09
10:28
(96) Нет. Пока не работает без регистрации. Но скорее всего будет.
А 1С++ настоятельно рекомендую v. 3.0
109 smaharbA
 
16.01.09
10:29
(108) а на сайте вроде 2.5.какаято
110 smaharbA
 
16.01.09
10:31
+(107) не изменив вызов, играюсь внутри типами переданных параметров и содержимым, Состояние и Сообщить сделал функциями
111 Vippi
 
16.01.09
10:33
(109) Не надо. 2.5 больше развиваться не будет.
Бери 3.0 вот тут
http://www.1cpp.ru/index.php/Image:Icpp-latest.rar#.D0.92.D0.B5.D1.80.D1.81.D0.B8.D1.8F_3.0.1.22
112 smaharbA
 
16.01.09
10:37
(111) спасибо... только я ее пользовать буду как микроскопом гвозди )))
согласно (61)
113 Sadovnikov
 
16.01.09
10:38
(111) Что ж прямее-то ссылку не дал?
http://www.1cpp.ru/images/3/32/Icpp-latest.rar
114 Vippi
 
16.01.09
10:40
(112) Ну, уже огромный прогресс то, что будешь вообще использовать.
Согласись, твое мастерское использование VBA совсем не прибавляет скорсти работе.:))
115 Vippi
 
16.01.09
10:41
(113) Чтобы поглядел, где в следующий раз искать.
116 smaharbA
 
16.01.09
10:42
(114) да это баловство, но на скору руку нетривиальные штучки иногда канают )))
117 Vippi
 
16.01.09
10:44
(116) Давно хочется, чтобы ты направил свои нетривиальные штучки в правильное русло.
И сегодня сделан еще один шажок в этом направлении :))
118 Sadovnikov
 
16.01.09
10:45
(116) И я к (117) присоединяюсь!!
119 net
 
16.01.09
10:50
Вот это активность! Господа, внимательно изучив все посты, я приняла решение все-таки вынести процедуру в гл.модуль. Формекс, как оказалось, здесь совсем ни к чему, использование 1с++ - противоречиво судя по разнообразным мнениям... В общем всем спасибо :)

ПС. Будет время, посмотрю на возможности 1с++, сейчас задачу необходимо было решить срочно.
120 Sadovnikov
 
16.01.09
10:51
(119) " использование 1с++ - противоречиво судя по разнообразным мнениям... " - так ты глянь, кто негативные мнения выдает. Тот, кто ничего об 1С++ не знает и никогда ею не пользовался :)
121 Ёпрст
 
гуру
16.01.09
10:53
(120) 1срр - это как новые грибочки: вставляет хорошо, а съесть боязно ....
:)
122 net
 
16.01.09
10:53
(120) кто их выдает, лично не знакома с ними, а ошибки типа копирования процедур - с кем не бывает :)
123 Sadovnikov
 
16.01.09
10:54
(121) Это да... Зато, привыкание - с первой дозы :)
124 Vippi
 
16.01.09
10:55
(123) +1 :))
125 Рэйв
 
16.01.09
10:57
(132)Я уже привык вот к телепату.....Теперь на "обестелепаченой" 77 работать не могу:))...Так что нафик-нафик
126 Sadovnikov
 
16.01.09
10:58
(125) "Вреда - ноль! Привыкания - ноль!" "Это не наркотик! Это - супернаркотик!!!" ©Бо
:)
127 Mikeware
 
16.01.09
11:01
(123) Освоение требует некоего мозгового напряжения, что не всем по силам ввиду известной причины. :-) Ну и ЖКК нету.
128 Vippi
 
16.01.09
11:02
(125) Что именно нафик? Если ты про (38), то не смущает, что автор телепата Орефков имеет статус "1c++ developer"?
129 Sadovnikov
 
16.01.09
11:03
(127) Я почему-то твердо уверен, что для Ёпрст3 и smaharbA не составит труда освоить функционал 1С++ :)
"Ну и ЖКК нету" - ну да. Описание 1С++ - не желто-красное :)
130 Sadovnikov
 
16.01.09
11:04
(128) Да он же просто подсесть боится. Как подсел на телепата :)
131 Vippi
 
16.01.09
11:04
(127) Угу. "Стойкое отвращение" у некоторых возникает именно по этой причине.
132 Mikeware
 
16.01.09
11:06
(129) Ну так Ёпрст3 и smaharbA - человеки! точнее, Человеки!
133 Torquader
 
16.01.09
11:15
А из модуля документа процедуру выполнить можно ?
И ещё вопрос - можно ли каким-то образом выполнить произвольный код на встроенном языке 1С не вызывая внешней обработки ?
134 Sadovnikov
 
16.01.09
11:16
(133)
   Модуль = СоздатьОбъект("ВыполняемыйМодуль");
   Модуль.УстановитьМодуль("
   |Функция ПолучитьЗначение()
   |    Возврат "+ИдентЭлемДиалога+"
   |КонецФункции
   |
   |Процедура УстановитьЗначение(НовЗнач)
   |    "+ИдентЭлемДиалога+" = НовЗнач;
   |КонецПроцедуры
   |
   |Функция ВыборГруппы()
   |    Возврат ?(Форма."+ИдентЭлемДиалога+".ВыборГруппы() = 1, 1, 0);
   |КонецФункции
   |");
   Модуль.НазначитьКонтекст(Конт);
   Модуль.КомпилироватьМодуль();
   Модуль.ВыполнитьМодуль();

   ЗначениеЭлемента = Модуль.ПолучитьЗначение();
135 Ёпрст
 
гуру
16.01.09
11:17
(133)
1.Код из модуля вызывается в момент проведения...
2.можно.
136 Рэйв
 
16.01.09
11:18
(128)Привыкнув,потом испытываешь определенные неудобство при отсутствии.
Мне пока не попадалась такая ситуация что я просто жить не смогу без 1С++.
Так что обходился без него раньше и думаю и в дальнейшем не заболею без этой фичи.
137 Ёпрст
 
гуру
16.01.09
11:19
(136) это до первой балшой базы.
138 Рэйв
 
16.01.09
11:21
(137) да были балшие.

Около 120-130  юзверев одновременно + нехилый документооборот.
Не сказать конечно что 77 летало, но и не загибалось
139 Mikeware
 
16.01.09
11:26
жЁстко форум работает... на пост 132 ссылка в 125 :-))
140 Torquader
 
16.01.09
11:49
(134) большое спасибо за пример, но всё равно немножко не то.
При использовании DDE можно получить любой параметр из базы, передав выполняемую строку, возвращающую значение.
Также можно передать функцию ОткрытьФорму для открытия внешней обработки.
Но, так как по DDE можно передавать только строки, то невозможно выполнить создание какого-то объекта.
Хотя, процедуры глобального модуля вызываются на ура.
Внешние обработки - это очень большая проблема безопасности, так как "умный" пользователь может её подредактировать - приходится их хранить на сетевом диске ReadOnly и вызывать только оттуда.

Данный вариант хорошо подходит для идеи хранения кода в самой базе - тогда можно будет изменять код на лету без выхода всех пользователей.
141 Sadovnikov
 
16.01.09
11:51
(140) А можно чуть подробнее? Зачем используется DDE? Если я не ошибаюсь, это устаревшая технология, на смену которой пришло OLE. Что вообще за задача?
142 Torquader
 
16.01.09
12:01
Задача в том, чтобы в открытый сеанс 1С из другой программы передать данные.
Другими словами, запускается программа-монитор. Она ожидает каких-либо событий в системе, и смотрит, запустилась ли 1С.
Как только происходит событие - монитор "пинает" 1С и просит её выполнить обработку этого действия.
Такой изощрённый способ позволяет избежать постоянного вызова процедур из обработки ожидания.
143 Vippi
 
16.01.09
12:01
(138) Не верю.
144 Ёпрст
 
гуру
16.01.09
12:03
(142) а что мешает по оле запустить еще один сеанс из сторонней проги ? В нём делай всё что хочешь..
145 Sadovnikov
 
16.01.09
12:04
(142) Так и пусть этот монитор отдает 1С-ке нужный программный код.
И второе - чем пинать по DDE, ИМХО, лучше пнуть на сокет. Причем, в таком случае можно 1С-ке и файлик какой-нибудь скормить. Например, обработку, которую надо выполнить, а потом удалить.
146 smaharbA
 
16.01.09
12:05
а не просче внешнее событие счупать ?
147 smaharbA
 
16.01.09
12:06
хотя ОЛЕ ще проще конечно, либо вообще робота и обычный запуск
148 Torquader
 
16.01.09
12:10
DDE гарантировано выполняет процедуры из глобального модуля.
Если писать внешнюю компоненту для прослушивания сокета, то она должна ещё и уметь обходить FireWall.
Скармливать файл - это и есть ОткрытьФорму по DDE - а в форме ПриОткрытии - всё, что нужно сделать.
OLEConnector - это замена DDE для 1С v8.
У семёрки с OLE не срослось.
Есть ещё более "изощрённый" способ - посылка в 1С сообщения WM_COMMAND с идентификатором какого-то пункта меню, который вызывает определённую функцию, но невиден пользователю - здесь проблема в том, что 1С бросает все свои дела (даже выполнение обработки или обработки проведения) и начинает выполнять обработку события.
149 Sadovnikov
 
16.01.09
12:13
(148) Есть уже написанная и проверенная временем и дорогами ВК для работы с сокетами:
http://www.rikcenter.ru/downloads.php?file=5
и пример ее использования:
http://www.rikcenter.ru/downloads.php?file=13
150 Torquader
 
16.01.09
12:13
(147) мысль с "роботом" уже рассматривается - один процесс на сервере делает всё, а с клиентов ему пишутся задания в определённый справочник.
На клиенте же всё равно нужно проверять события.
Идея в том, что на клиенте пользователь вообще может закрыть 1С, а монитор - это сервисный процесс - он жив всегда и пользователь увидит сообщение о том, что он "поступил нехорошо", и 1С запустится автоматически.
P.S. с написанием сервисных процессов у меня немного лучше, чем с "дрессировкой" 1С.
151 smaharbA
 
16.01.09
12:13
(148) нифига она не бросает, надо только постмесадж, но тогда не гарантированный вызов, не понял почему у семерки ОЛЕ не срослось ?
152 smaharbA
 
16.01.09
12:14
(150) автоматически в пределах доверия станций запустить можно что угодно
153 smaharbA
 
16.01.09
12:15
+(152) целиком штатными средствами ОС
154 Torquader
 
16.01.09
12:20
(151) OLE в текущий открытый сеанс (чем ?).
Я пробовал вызывать управление бухгалтерскими итогами в сеансе пользователя, которому это не разрешено.
При этом в сеансе выполнялась обработка, из которой проводились документы.
"Умная" 1С посылкой ей SendMessage(УказательОкна1С,WM_COMMAND,ИдентификаторМенюДляВызоваОкна,0) успешно открыла окно, а потом SendMessage(УказательОкнаКнопкиПересчитать,WM_LBUTTONDOWN,0,0) запустило процесс пересчёта итогов в момент проведения документа (документ иногда проводился иногда нет).
Факт в том, что 1С даже не проверила, а монопольно ли я в базе.
Если делать через PostThreadMessage, то сообщения теряются из-за переполнения очереди и никто не гарантирует, что они испонятся.
155 Torquader
 
16.01.09
12:22
(153) про WScript можно не рассказывать - я на нём даже базы данных пишу.
Причём там штатно есть метод eval, который позволяет исполнять код.
(Сейчас пишу интерактивный отладчик кода, чтобы не можно было отлаживать написанное).
156 Sadovnikov
 
16.01.09
12:23
(155) Ты по ссылкам из (149) сходил?
157 Torquader
 
16.01.09
12:26
Я их скачал - буду смотреть.
Пример чата я уже смотрел - проблема в том, что любая внешняя компонента к 1С требует запущеной 1С.
Если 1С запускается на сервере терминалов, то если пользователь с клиентской машины не зашёл на сервер терминалов, то запустить 1С там нельзя.
А чтобы показать сообщение пользователю на клиентской машине, нужно - чтобы там кто-то жил и мог показать это сообщение.
158 Guk
 
16.01.09
12:34
(143) 2001 год. 80-100 активных юзеров. 30-40 из них в цитриксе. База 20 гигов. Ежедневный документооборот порядка 1,5 тыс. доков. Среднее количество строк в доке приблизительно 100. Ни одной ВК в системе. Всё работает. Тормоза редки и незначительны. Веришь?
Можешь не верить. А я с этим работал...
159 Torquader
 
16.01.09
12:36
(158) про цитрикс поподробнее можно - сколько максимально пользователей можно "запихать" в терминале на один сервер, чтобы последний не "тормозил" на каждом нажатии?
160 Guk
 
16.01.09
12:44
(159) Не моя епархия. За цитрикс отдельный админ отвечал...
161 Torquader
 
16.01.09
12:45
(160) везёт же людям - у них отдельные админы.
А если всё и сразу, то только полная ж... и получается.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан