Имя: Пароль:
1C
 
Запуск обработки 1с из другой программы
0 axel123
 
08.06.09
14:56
Добрый день))
Проблема: есть программа, которая делает свои дела и по завершению определенных операций хотелось бы автоматически и сразу запустить обработку из 1с(прогармамма самописная и может дорабатываться)
Возможно ли такое? если да, то как
Поиском пользовался не нашел ответа
Нашел про 1с++, но не понял как это реализовать

Подскажите, если знаете, пожалуйста)
Заранее спасибо)
1 gr13
 
08.06.09
14:58
запуск от пользователя и запуск обработки в при запуске
2 Guk
 
08.06.09
14:59
(0) А допустим Ворд из той программы ты можешь запустить? Если да, то и с 1С так же...
3 YF
 
08.06.09
15:00
(2) Тока кнопочку сформировать не нажать :-)
4 axel123
 
08.06.09
15:02
1 в принципе подходит))что-то ступил и сам не додумался)))

А есть ли средства чтоб в работающей 1с запустить?
5 Side
 
08.06.09
15:03
Зачем в работающей програмно запускать?
6 axel123
 
08.06.09
15:06
(5) для данной задачи не обязательно, просто искал способ в работающей запустить - не нашел,
в 1с есть процедура ОбработкаВнешнегоСобытия() или что-то такое, через неё можно что-то сделать
7 axel123
 
08.06.09
15:07
(6) это был вопрос))
8 Иду
 
08.06.09
15:08
(7) не события а ОбработкаОжидания(...)
возводишь файл-флаг (например) и обрабатываешь "событие" из глобального модуля.
9 axel123
 
08.06.09
15:09
(8) не, другая, через которую со сканерами работают
10 axel123
 
08.06.09
15:11
я поспрашивал, сказали что она только на сигналы с портов реагирует, так ли это?
11 Иду
 
08.06.09
15:14
(9) что другая (это вопрос) тебе русским по белому = не осилить?
в глобальном модуле размещаешь процедуру ОбработкаОжидания(ИмяДругойПроцедурыВКавычках,ЦифраИнтервалаОжидания)
и нехай сканит, а в ИмяДругойПроцедурыВКавычках вызывай свои проверки на наличие чего-то где-то, и далее отрабатывай любой отчет-обработку с параметрами/без ... да хоть об-стену.
12 ДенисЧ
 
08.06.09
15:15
Можно ещё извращаться через FindWindow и SendMessage (WM_KEYDOWN...)
13 axel123
 
08.06.09
15:18
(11) если правильно понял, то это 1с просматривает что-то, где-то
а надо, чтоб что-то само 1с сказало, что пора
14 axel123
 
08.06.09
15:19
или не так понял?
15 Иду
 
08.06.09
15:23
1. есть программа, которая делает свои дела и по завершению определенных операций что в конце еще делает, кроме истины...
2. Результатом операции есть/могутбыть (к примеру) создание файла/ов на диске.
3. Запущенная 1С из обработки ожидания, периодически, запускает процедуру проверки наличия Если ФС.СуществуетФайл...тогда, открыть обработку/выполнить иные действия, файл переместить/переименовать/хез что еще то не понятно?
16 mrkorn
 
08.06.09
15:26
если все штатно то
заводится пользователь
у которого при НачалеРаботыСистемы() вызывается обработка с нужными параметрами

в ПриОткрытии()
проверяешь параметры и выполняешь, что нужно
17 axel123
 
08.06.09
15:27
(15) согласен, такой вариант то же работает
но интересно, можно ли чтоб не 1с смотрела периодически,а ей  сказали и она давай шуршать виньтиками)))

спасибо за помощь, но если можно просветите ещё))))
18 axel123
 
08.06.09
15:28
(16)Ддя решения данной задачи подходят решения (16)(8)(1)
не спорю))
19 ДенисЧ
 
08.06.09
15:32
(17) Можешь ещё покурить на предмет внешних компонент и ОбработкаВнешнегоСобытия()...
20 axel123
 
08.06.09
15:35
(17) в этом что-то есть, спасибо) буду изучать)
21 dk
 
08.06.09
15:38
так себе варианты
самый рульный вариант не предложили - запустить 1с по OLE и там запустить отчет
22 dk
 
08.06.09
15:40
хотя если надо часто запускать, то так себе вариант по OLE
23 axel123
 
08.06.09
15:40
(21) как запустить 1с по OLE ?
24 axel123
 
08.06.09
15:43
(21) те в качестве оле объекта будет 1с?
25 dk
 
08.06.09
15:43

dim err_code

sub my

   Dim v7
   Dim s_path
   Dim s_user
   Dim s_pass
   Dim s_report
   Dim s_context

   s_path = "Z:\*****"
   s_user = "Обработчик"
   s_pass = "****"
   s_report = "Z:\*******.ert"
   s_context = "Run"

   Set v7 = CreateObject("V77.Application")
   result = v7.Initialize(v7.RMTrade, "/D" & s_path & " /N" & s_user & " /P" & s_pass, "NO_SPLASH_SHOW")
   if  not result then
       'msgbox("Облом")
       exit sub
   end if

   result = v7.OpenFormModal("Отчет", s_context, s_report)

   'msgbox("s_context = " & s_context)
   'msgbox("result = " & result)
   'msgbox("Усе")
   
   err_code = 0

end sub

err_code = 255
my()
wscript.Quit(err_code)
26 axel123
 
08.06.09
15:46
(25) Красиво)))
27 Иду
 
08.06.09
16:04
красиво, только работать не будет.
28 dk
 
08.06.09
16:15
(27) почему у меня работает? :)
29 dk
 
08.06.09
16:15
что я делаю не так? :)
30 mrkorn
 
08.06.09
16:45
(29) ты без Formex'а попробуй ))
31 Torquader
 
08.06.09
16:47
Кстати, ещё можно не по OLE, а через DDE открывать форму в уже запущенной 1С.

Например, макрос для Excel:
Sub Test()
   Dim chNum As Integer
   Dim Res As Variant
   chNum = Application.DDEInitiate(app:="1Cv7", topic:="")
   ' вылетает окошко с выбором 1С, к которой мы ходим подключаться
   Res = Application.DDERequest("OpenFormModal(""Отчет"",,""C:\ПутьКОбработке\Обработка.ert"");")
   ' после этого в 1С откроется модально окно внешней обработки в котором можно что-то выполнить
   Application.DDETerminate (chNum)
   ' не забываем завершить сеанс
End Sub
32 Torquader
 
08.06.09
16:49
(25) прекрасно работает и без всякого Formex-а, только надо помнить, что OpenFormModal вернёт управление только после закрытия формы (в данном случае только в том случае, если в процедуре ПриОткрытии установлен нулевой статус возврата).
Также нет смысла анализировать полученный Context, так как при закрытии формы он будет разрушен (конечно, если использовать OpenForm, то всё должно получиться)
33 dk
 
08.06.09
16:50
(30) А кто сказал, что у меня есть формекс?
34 GrayT
 
08.06.09
17:31
При чем тут ФормЕХ - и без него все работает...
Основная теорема систематики: Новые системы плодят новые проблемы.