Имя: Пароль:
1C
 
v8 как сделать автомат?
Ø
0 MaxS
 
10.08.05
07:09
Запускаем 1С 8.0 в режиме предприятия под логином "Автомат". 8-ка висит вечно в памяти и по какому-то событию загружает из внешнего файла документ, выгружает обратно в файл печатные формы документа.
Как в режиме ожидания события минимально напрягать сервер?
1 echo
 
10.08.05
07:12
Запускайте COM сессию и не партесь...
2 MaxS
 
10.08.05
08:25
(1) да, это был первый вариант, склоняюсь к тому, что так и нужно делать...
но проблема в том, что нужно запускать V8.Application, т.к. в режиме V8.COMConnector не всё возможно сделать.
...
отсюда вопрос (0) Что лучше - сотню раз в день подымать V8.Application
или один раз поднять 8-ку в режиме предприятия, а потом сотни раз давать команду через V8.COMConnector или каким-то другим способом дать понять 8-ке, что нужно что-то сделать?
3 echo
 
10.08.05
09:39
(2) А что нельзя сделать в режиме COM соединения?
4 barlog
 
10.08.05
09:41
Работать с интерфейсными объектами.
В том числе с табличными документами, что особенно неприятно.
5 barlog
 
10.08.05
09:44
(2) ИМХО лучше одна сесия, стартует восьмерка сам знаешь как.
А насчет того, как с ней общатся, это от конкретного типа события зависит.
6 echo
 
10.08.05
10:17
(4) Не могу согласиться. Табличный документ - это в конечном итоге бумажка, которая нужна человеку. Поэтому пусть человек запускает 8.0 и печатает себе свои отчеты. А COM соединение все - таки нужно в первую очередь для изменения состояния ИБ, ИМХО.
7 DZIDen
 
10.08.05
10:42
(0)я думаю так :
1.вначале в фоновом режиме запускать и делать обработку ожидания на файл.
2.СОМ соединением менять константу а обработчик ожидания будет проверять ее.
надо тестить,но скорее всего 1-ый будет быстрее
8 Коротков
 
10.08.05
10:52
Я не спец 8-ки, но непонятно, зачем для (7) нужен COM? Если есть обработка, ловящая событие файла.
А я вообще объявил бы таблицу заданий для обработки - типа автор, задание, флаг обработки и пр. И сканировал бы ее на предмет необработанных. Возврат файликом. Заодно будет лог, кто что делал...
9 echo
 
10.08.05
10:57
(0)Делать нужно так. Где - то у тебя формируется файл с данными. Самое правильное - если это xml документ. Этот файл пишется в определенную директорию на жестком диске. Внешняя прога обрабатывает событие записи нового файла в этом каталоге и открывает COM соединение с целью создать документ на основе данных из xml файла. Документ создается, проводится (если нужно), а данные для печати выгружаются в xml документ, который записывается в определенный каталог. Когда юзеру потребуются печатные формы, он запускает 8.0 и выполняет обработку, которая по данным xml документов печатает твердые копии.
10 Коротков
 
10.08.05
10:57
В первой строке читать "нужен COM, если есть обработка, ловящая событие изменения файла?"
11 echo
 
10.08.05
10:59
9+ А вообще непонятно, почему нальзя приделать печатную форму прямо к документу...
12 echo
 
10.08.05
11:07
(7) << 1.вначале в фоновом режиме запускать и делать обработку ожидания...
~
1. что значит << в фоновом режиме запускать?
2. запускать в фоновом режиме что?
13 barlog
 
10.08.05
11:08
2(9) А еще лучше сделать xsl-стиль для этого xml документа, чтоб он сразу его в печатную форму выводил. Тогда вобще никакого 1С не надо:)
А вобще не зная откуда берется файл и куда нужно доставить сохранненные отчеты, все это разговор слепого с глухим.
Я всетаки предлагаю один экземпляр V8.Application который запущен во внешнем процессе, отслеживающем события.
14 echo
 
10.08.05
11:31
(13) Тогда ему нужен отдельный экземпляр компьютера, который никогда не выключается и на котором никто не работает...:)
15 barlog
 
10.08.05
11:34
(14)Такие компьютеры принято называть серверами:)
16 echo
 
10.08.05
11:34
14+ И все - таки я не могу понять, чем V8.Application лучше windows службы, запущенной на сервере и обрабатываюшей событие FileCreate?
17 barlog
 
10.08.05
11:38
(16) Ничем не лучше, экземпляр V8.Application существует внутри этой службы для быстрого доступа к 1С без регулярного тормозного запуска 8-ки.
18 echo
 
10.08.05
11:44
(17) Не согласен. Внутри вызывающего процесса как раз создается COM соединение. Поэтому - то оно быстро и работает, так как не требуется выполнять маршалинг через границы процессов. А V8.Application работает в своем процессе...
19 barlog
 
10.08.05
11:48
(18)Ну не может COMConnector сохранить печатную форму документа, не может.
20 MaxS
 
10.08.05
11:54
вернулся с обеда, а тут такое ;)
(9) необходимость в 1С - это нумерация документов.
Пришел excel файл (его формат я изменить не могу), закачался в 1С, присвоился номер счет-фактуры и т.д., создаём в отдельном каталоге excel файлы счет-фактуры и Торг-12. роль 1С на этом заканчивается.
...
Желательно, чтобы во время работы автомата, другие пользователи, работающие с этой 1С видели, что документы появляются. т.е. алгоритм "засосать" информацию, вернуть номер фактуры, а потом при запуске 1С создать необходимые документы, не подходит.
...
(7) я тоже так думаю, но в том, то и вопрос(0) - как эти постоянные проверки константы или наличия файла отразятся на загрузке сервера?
Как, например, работает сканер штрих-кода... вот эту идею бы раскопать - обработка в 1С внешнего события...
21 MaxS
 
10.08.05
12:01
событие появления файла отслеживать не надо, это реализовано.
макрос Excel из контекста открытого документа запускает 1С...
Set Docum = Application.ActiveWorkbook
FileFact = Docum.Path & "\" & Docum.name
Set V8 = CreateObject("V8.Application") ' тут появился вопрос (0) ;)
V8.Connect (ПараметрыЗапускаБазы)
Call V8.autofakt(СообщенияОбОшибках, FileFact, ТудаВернутьРезультат)
22 echo
 
10.08.05
12:07
(20)
1. Excel может сохранять листы в формате xml.
2. Пусть даже будет excel. Пишешь win службу на C#, которая отслеживает события записи файлов в отдельный каталог. Как только файлик создаться, твоя служба открывает COM соединение и на основании данных, содержащихся в файле excel, создает документ в 1С. После этого win служба берет номер документа и создает excel файлы счет-фактуры и Торг-12. COM соединение закрывается.
23 barlog
 
10.08.05
12:18
Не парься, оставь как есть.
Твои юзера не смогут так быстро документы открывать.
24 MaxS
 
10.08.05
12:25
(22) 2. там гора параметров... в шапке - контрагенты, банк, договор взаиморасчетов, в теле - номенклатура с кучей реквизитов, тысячи позиций...
В самой 1С в интерактивном режиме, есть форма для загрузки документа из файла. Логично было бы в автомате использовать отлаженный механизм. Это облегчает поддержку ПО, т.к. алгоритм загрузки один для автомата и для ручной загрузки.
...
формировать печатные формы это тоже морока... в 1С-е это всё уже есть, просто сохранил печатную форму документа в файл и всё :-\
...
если всё делать в режиме COMConnector сходу и не вспомню какие есть ограничения. можно всё делать на стороне макроса, а можно и на стороне 1С... COMConnector не умеет в качестве параметра получить из VBA массив, Application умеет, но тут тоже нарвался на ошибку с памятью. В 1С эту ошибку зафиксировали, ответа пока нет.
...
пока стою на перепутье - пытаться все сделать через COMConnector или как (0)
25 MaxS
 
10.08.05
12:31
(23) а юзера и не будут открывать документы. просто нужна уникальность номеров. параллельно с юзерами, автомат "колбасит" документы днём и ночью...
...
вот ещё что вспомнил. Windows может выставлять какие-то то ли флаги, то ли семафоры, не помню. 1С научить видеть их можно?
мне бы научить 1С работать не в цикле проверки, а в режиме прерывания. Просыпаться когда нужно...
26 echo
 
10.08.05
12:38
(25) Семафоры нужны для межпроцессорного и межпоточного взаимодействия...
27 MaxS
 
10.08.05
13:03
(9) бывает, что база 1С, место формирования входящего файла и место печати выходных файлов, физически удалены друг от друга, прямой связи нет, только файлами и можно обмениваться. Поэтому основная роль 1С - это завести уникальный номер документа...
Т.е. там, где документ печатается, нецелесообразно устанавливать 1С...
28 echo
 
10.08.05
13:14
(27)Обмен файлами - это все не то. Напиши web службу, а на филиалы win клиентов этой службы. Лично я по такой технологии сейчас работаю.