|
Открыть из одной базы другую | ☑ | ||
---|---|---|---|---|
0
Adgjj
12.11.11
✎
11:39
|
Скажите, пжл, как программно из конф одной базы открыть другую (обе базы пока локальные на 1 компе)
Это нужно для обмена в РБД: батником запускается центр. база, из к-рой выгружается xml-файл обмена. Дальше в конфе центр. базы хотелось бы прописать запуск периферийной базы и загрузку туда выгруженного файла. |
|||
1
IamAlexy
12.11.11
✎
11:40
|
ыыыыыыыыыы
батником... ыыыы |
|||
2
Нуф-Нуф
12.11.11
✎
11:41
|
кури пакетный режим. яндекс спасет
|
|||
3
Mikhail Volkov
12.11.11
✎
12:23
|
Можно так:
Если ФлажокЗапуститьБазуПриемник Тогда // Запускаем базу приемник УТ11 для загрузки // КомандаСистемы("""c:\Program Files\1cv82\8.2.14.528\bin\1cv8.exe"" ENTERPRISE /Fc:\Work\1Cv82\KrsTrade_11_0 /NРобот /Pпароль /C" + ФайлВыгрузки); // в офисе файловый (отладка) // КомандаСистемы("""c:\Program Files\1cv82\8.2.14.528\bin\1cv8.exe"" ENTERPRISE /Ssrv1c\1c_ut_krs /NРобот /Pпароль /C" + ФайлВыгрузки); // в офисе серверный (отладка) // КомандаСистемы("""c:\Program Files\1cv82\8.2.14.528\bin\1cv8.exe"" ENTERPRISE /Sserver1c\1c_ut_krs /NРобот /Pпароль /C" + ФайлВыгрузки); // на базе №1 КомандаСистемы("""c:\Program Files\1cv82\8.2.14.528\bin\1cv8.exe"" ENTERPRISE /Fi:\1Cv82\KrsTrade_11_0_6_9 /NРобот /Pпароль /C" + ФайлВыгрузки); // дома файловый (отладка) КонецЕсли; |
|||
4
Adgjj
12.11.11
✎
15:44
|
(3) спасибо большое
|
|||
5
Adgjj
12.11.11
✎
15:58
|
КомандаСистемы("""C:\Program Files\1cv81\bin\1cv8.exe"" ENTERPRISE /Fi:\UAT8_baza" /N"obmen" /P"obmen" /C" + ИмяФайлаСообщения);
синтаксис не идет /N"obmen" /P"obmen" /C - эти 3 слеша красные всяко пробую пока не получилось |
|||
6
Mikhail Volkov
13.11.11
✎
12:58
|
(5) Путь "C:\Program Files\1cv81\bin\1cv8.exe" заключен в ковычки (двойные), потому что есть пробел. Ключи /N (пользователь), /P (пароль) и /C (строка параметров) заключать в ковычки не требуется. Если имя пользователя, или значение пароля содержит пробелы, тогда их надо в ковычки - но только сами значения (не ключи).
|
|||
7
Adgjj
13.11.11
✎
13:04
|
спасибо!
|
|||
8
Mikhail Volkov
13.11.11
✎
13:06
|
Еще, при использовании КомандаСистемы программа будет ждать запущщенной программы (будет весеть DOS окно Командная строка). Есть более гибкая ЗапуститьПриложение(<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>), но для СтрокаКоманды bat-файл придется писать.
|
|||
9
Adgjj
13.11.11
✎
13:07
|
спасибо, поробую обязательно, но чуть позже, пока с другой ошибкой бьюсь. Спасибо!
|
|||
10
Adgjj
16.11.11
✎
14:16
|
Возвращаюсь к этой теме, никак не могу сделать сама.
Процедура ОбновитьКонфигурацию() Экспорт МассивСоединений=ПолучитьСоединенияИнформационнойБазы(); Если МассивСоединений.Количество()>1 Тогда Возврат; // ждем дальше... КонецЕсли; СтрокаСоединения=СтрокаСоединенияИнформационнойБазы(); ПутьКСкрипту=КаталогВременныхФайлов()+"obmen.vbs"; Скрипт=Новый ЗаписьТекста(ПутьКСкрипту,КодировкаТекста.ANSI); Скрипт.ЗаписатьСтроку("WScript.Sleep 5000"); // на всякий случай Скрипт.ЗаписатьСтроку("Set WshShell=CreateObject(""WScript.Shell"")"); Команда=""""""+КаталогПрограммы()+"1CV8.EXE"""" CONFIG"+?(НСтр(СтрокаСоединения,"File")<>""," /F "+НСтр(СтрокаСоединения,"File")," /S "+НСтр(СтрокаСоединения,"Srvr")+"\"+НСтр(СтрокаСоединения,"Ref"))+" /N Obmen /P Obmen /UpdateDBCfg"; Скрипт.ЗаписатьСтроку("ReturnCode=WshShell.Run("""+Команда+""",1,1)"); //открыть конфигуратор Скрипт.ЗаписатьСтроку("If ReturnCode=0 Then"); // если обновились удачно, то пытаемся дочитать сообщение Скрипт.ЗаписатьСтроку("WshShell.Run """+Команда+""",1,0"); //Скрипт.ЗаписатьСтроку("WshShell.Run """+Команда+""",1,1"); //Скрипт.ЗаписатьСтроку("WScript.Sleep 5000"); //WshShell.Run(cmd, [windowStyle], [waitOnReturn]) //Параметр waitOnReturn представляет собой булево значение, которое указывает должен ли сценарий ждать перед выполнением следующий команды. Скрипт.ЗаписатьСтроку("End If"); Скрипт.ЗаписатьСтроку("Set FSO=CreateObject(""Scripting.FileSystemObject"")"); Скрипт.ЗаписатьСтроку("Set File=FSO.GetFile(WScript.ScriptFullName)"); Скрипт.ЗаписатьСтроку("File.Delete"); //скрипт сам себя удаляет Скрипт.Закрыть(); ЗапуститьПриложение(ПутьКСкрипту); //запустить скрипт, записанный выше //ЗапуститьПриложение(ПутьКСкрипту,,Истина); //скрипт открывает предпр (подождите) сообщить("1сПредприятие запустилось"); ЗавершитьРаботуСистемы(Ложь); КонецПроцедуры Скажите, пжл, почему при выполнении кода ЗапуститьПриложение(ПутьКСкрипту,,Истина); сообщить("1сПредприятие запустилось"); ЗавершитьРаботуСистемы(Ложь); команда 1сПредприятие запускается после появления сообщения "1сПредприятие запустилось"? |
|||
11
Adgjj
16.11.11
✎
15:14
|
кто-нибудь, пжл, помогите!
|
|||
12
zladenuw
16.11.11
✎
15:16
|
почему после. отправила команду и сообщила тебе
|
|||
13
Fragster
гуру
16.11.11
✎
15:16
|
(11) так ведь фотки в личной карточке нет
|
|||
14
Adgjj
16.11.11
✎
15:20
|
(12) а как дождаться, чтоб запустилось сначала 1Спредприятие, я ведь поставила третьим параметром истина7
|
|||
15
zladenuw
16.11.11
✎
15:21
|
проверку что приложение запустилось. смотри процесс. а зачем ты запускаешь сеанс ? через ком нельзя разве ?
|
|||
16
zladenuw
16.11.11
✎
15:22
|
entConn = new ActiveXObject("v82.comconnector");
conn = entConn.connect("Srvr=1c8:1541; Ref=baza; Usr=admin; Pwd=131072"); conn.st_export(); |
|||
17
hhhh
16.11.11
✎
15:23
|
(14) так bat файл уже завершился. Она тебе честно об этом сказала.
|
|||
18
Adgjj
16.11.11
✎
15:25
|
пытаюсь сделать автообмен в 8.1 UAT (управление автотранспортом)
Чтение xml-файла в периферийную базу запускаю первый батник(обновление конфы), после него как раз остается открытой конфа, надо ее закрыть, а потом запустить 2 батник (обновление данных) |
|||
19
zladenuw
16.11.11
✎
15:27
|
(18) ну а сразу закрывать после обновление. не проще ли сделать в самой конфе. и после ее закрытия запускать 2
|
|||
20
Adgjj
16.11.11
✎
15:28
|
(15) у меня обновление конф периф-ной базы реализовано через скрипт, отсюда взяла http://infostart.ru/public/16993/
|
|||
21
Adgjj
16.11.11
✎
15:28
|
(16) я в этом не понимаю, это предлагаете вместо скрипта?
|
|||
22
Adgjj
16.11.11
✎
15:29
|
код обмена пишу во внешней обработке
|
|||
23
Adgjj
16.11.11
✎
15:31
|
потому что если писать в конфе, то как этот код из центральной попадет в периферийную конфу, периф ведь не доступна для прямого редактирования, только через сообщение обмена
|
|||
24
Adgjj
16.11.11
✎
15:31
|
пока не поняла, что нужно сделать
|
|||
25
zladenuw
16.11.11
✎
15:33
|
20()
ЗавершитьРаботуСистемы(Ложь); КонецПроцедуры ну так там же есть завершение работы. почему тогда у вас она остается открытой пусть уже цо запускает второй батник и завершает свою работу. |
|||
26
Adgjj
16.11.11
✎
15:36
|
как я поняла, остается открытой, т.к. эта команда выполняется раньше, чем 1с успела запуститься
нужно будет делать обмен ночью на сервере, пока пытаюсь сделать у себя локально на компе вручную запускаю батник - остается открытой 1сПредпр, вручную закрываю ее и запускаю второй батник мучаюсь давно ничего не получается |
|||
27
zladenuw
16.11.11
✎
15:36
|
(25) не то. в примере у тебя без параметра ожидать запуск, а сразу. да и не забывай что ожидать может процесс. что он ее запустил. процесс появился и 1с тебе сообшила
|
|||
28
Adgjj
16.11.11
✎
15:38
|
если я ставлю параметр истина, то 1С вообще не запускается 0_0
|
|||
29
hhhh
16.11.11
✎
15:38
|
(26) надо с иваном бездомным тебе связаться, он уже накопил огромный опыт по автоматическому обновлению баз.
|
|||
30
Adgjj
16.11.11
✎
15:38
|
(27) да, сообщила и закрытие не сработало((
|
|||
31
Adgjj
16.11.11
✎
15:39
|
(29) не до шуток..
|
|||
32
zladenuw
16.11.11
✎
15:40
|
а если без запуска скрипта, завершается.
|
|||
33
zladenuw
16.11.11
✎
15:40
|
может попробуешь вынести все в 1 скрипт и после отработки в 1 базе. запускать 2
|
|||
34
Adgjj
16.11.11
✎
15:52
|
батник для загрузки xml-файла в периф. базу: (из центр. базы уже выгрузила файл на диск и теперь им пользуюсь)
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /F"C:\UAT8_les_KOT" /N"obmen" /P"obmen" /DisableStartupMessages/Execute Obmen.epf Запускаю этот батник 2 раза Почему-то если пишу в этом батнике 2 строки, чтоб запустить 1 раз, то данные не загружаются. А если запускаю этот батник 2 раза (первый раз выполнился, затем запускаю второй раз), то все загружается.Причем предприятие, оставшееся открытым после первого батника, можно закрыть и в конце. |
|||
35
Adgjj
16.11.11
✎
15:54
|
сейчас выложу внешнюю обработку
|
|||
36
Adgjj
16.11.11
✎
16:06
|
Процедура ОбновитьКонфигурацию() Экспорт
МассивСоединений=ПолучитьСоединенияИнформационнойБазы(); Если МассивСоединений.Количество()>1 Тогда Возврат; // ждем дальше... //возврат туда, откуда ОбновитьКонфигурацию() вызвана КонецЕсли; СтрокаСоединения=СтрокаСоединенияИнформационнойБазы(); //Пример: File="C:\1cv8\Base". ПутьКСкрипту=КаталогВременныхФайлов()+"obmen.vbs"; Скрипт=Новый ЗаписьТекста(ПутьКСкрипту,КодировкаТекста.ANSI); Скрипт.ЗаписатьСтроку("WScript.Sleep 5000"); ///5 секунд Скрипт.ЗаписатьСтроку("Set WshShell=CreateObject(""WScript.Shell"")"); Команда=""""""+КаталогПрограммы()+"1CV8.EXE"""" CONFIG"+?(НСтр(СтрокаСоединения,"File")<>""," /F "+НСтр(СтрокаСоединения,"File")," /S "+НСтр(СтрокаСоединения,"Srvr")+"\"+НСтр(СтрокаСоединения,"Ref"))+" /N Obmen /P Obmen /UpdateDBCfg"; Скрипт.ЗаписатьСтроку("ReturnCode=WshShell.Run("""+Команда+""",1,1)"); //открыть конфигуратор Скрипт.ЗаписатьСтроку("If ReturnCode=0 Then"); // если обновились удачно, то пытаемся дочитать сообщение Скрипт.ЗаписатьСтроку("WshShell.Run """+Команда+""",1,0"); //Скрипт.ЗаписатьСтроку("WshShell.Run """+Команда+""",1,1"); //Скрипт.ЗаписатьСтроку("WScript.Sleep 5000"); //WshShell.Run(cmd, [windowStyle], [waitOnReturn]) //Параметр waitOnReturn представляет собой булево значение, которое указывает должен ли сценарий ждать перед выполнением следующий команды. Скрипт.ЗаписатьСтроку("End If"); Скрипт.ЗаписатьСтроку("Set FSO=CreateObject(""Scripting.FileSystemObject"")"); Скрипт.ЗаписатьСтроку("Set File=FSO.GetFile(WScript.ScriptFullName)"); Скрипт.ЗаписатьСтроку("File.Delete"); Скрипт.Закрыть(); ЗапуститьПриложение(ПутьКСкрипту); //запустить скрипт, записанный выше //ЗапуститьПриложение(ПутьКСкрипту,,Истина); //скрипт открывает предпр (подождите) ЗавершитьРаботуСистемы(Ложь); КонецПроцедуры Пользователь = ИмяПользователя(); ЭтотУзел = ПланыОбмена.уатПолный.ЭтотУзел(); Если СокрЛП(ЭтотУзел.Код) = "KOR" Тогда ЦентрБаза = 1; ПерифБаза = 0; КодУзлаЗагрузки = "KOT"; ИначеЕсли СокрЛП(ЭтотУзел.Код) = "KOT" Тогда ЦентрБаза = 0; ПерифБаза = 1; КодУзлаЗагрузки = "KOR"; КонецЕсли; ТекущийЧас = Сред(Строка(ТекущаяДата()),12,2); //11.11.2011 13:42:48 Если СокрЛП(Пользователь) = "Obmen" Тогда //!!! и "01"<ТекущийЧас и ТекущийЧас<"05" //ПРЕДВАРИТЕЛЬНО СОЗДАТЬ АРХИВЫ БАЗ ДатаИзмФайлаXMLПериф = ""; УзелЗагрузки = ПланыОбмена.уатПолный.НайтиПоКоду(КодУзлаЗагрузки); Если ЦентрБаза = 1 тогда //ЗАПИСЬ xml-файла из центр. базы Если ДатаИзмФайлаXMLПериф <> Лев(ТекущаяДата(),10) Тогда //СЕГОДНЯ из Периф ЕЩЕ НЕ записали файл обмена, сначала запишем из центр ЗаписьXML = Новый ЗаписьXML(); ИмяФайлаСообщения = КаталогВременныхФайлов() + "Message_KOR_KOT.xml"; ЗаписьXML.ОткрытьФайл(ИмяФайлаСообщения); ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьXML,УзелЗагрузки); ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения); ЗаписьСообщения.ЗакончитьЗапись(); ЗаписьXML.Закрыть(); Сообщить("1) ОБМЕН: Файл из центр базы записан"); ЗавершитьРаботуСистемы(Ложь); //КомандаСистемы("""C:\Program Files\1cv81\bin\1cv8.exe"" ENTERPRISE /Fi:\UAT8_les_KOT" /N"obmen" /P"obmen" /C" + ИмяФайлаСообщения); //КомандаСистемы("""C:\Program Files\1cv81\bin\1cv8.exe"" ENTERPRISE /Fi:\UAT8_les_KOT" +"/N"obmen" /P"obmen" "/C" + ИмяФайлаСообщения); // /F"C:\UAT8_les_KOT //***конецесли; Иначе //СЕГОДНЯ из Периф базы выгрузили файл обмена -> ОБМЕН ДЕЛАТЬ ПОСЛЕ ПОЛУНОЧИ, ЧТ. ФАЙЛ ОБМЕНА Message_KOT_KOR БЫЛ НА ТЕКУЩУЮ ДАТУ //ЧТЕНИЕ xml-файла центр базы Попытка ЧтениеXML = Новый ЧтениеXML(); ИмяФайлаСообщения = КаталогВременныхФайлов() + "Message_KOT_KOR.xml"; //НАДО НА СЕРВЕРЕ ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML,); // //ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Истина; ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения); ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть(); Если Константы.ВыводитьСообщенияОбмена.Получить() Тогда Сообщить("ОБМЕН: Данные обмена приняты",СтатусСообщения.Информация); КонецЕсли; Сообщить("4) ОБМЕН: Файл из базы Периф базы принят"); Исключение Сообщить("ОБМЕН: Ошибка при получении данных обмена: " + ОписаниеОшибки(),СтатусСообщения.ОченьВажное); КонецПопытки; //После того, как чтение данных обмена закончено, возвращаем //параметру сеанса ИдетОбменРаспределеннойБазы значение Ложь. //ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Ложь; КонецЕсли; //ЗАПУСК периф БАЗЫ //!!!выполняется сл. строка батника: запуск 1СПредприятия UAT8_les_KOT //ЗапуститьПриложение(,,); //ИмяБатФайла = "" + Каталог + "UAT8_les_OBMEN.bat"; //КомандаСистемы(""""+ ИмяБатФайла + """"); Иначе //Если ПерифБаза = 1 тогда //Периферийная база //ЧТЕНИЕ xml-файла центр базы Попытка Состояние("Считываем файл центр базы"); ЧтениеXML = Новый ЧтениеXML(); ИмяФайлаСообщения = КаталогВременныхФайлов() + "Message_KOR_KOT.xml"; ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения); ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); ЧтениеСообщения.НачатьЧтение(ЧтениеXML,); //ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Истина; ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения); предупреждение("Ура: ДАННЫЕ из центр базы загрузились."); ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть(); Сообщить("2) ОБМЕН: ДАННЫЕ ОБМЕНА в базу Перифа приняты"); //ЗавершитьРаботуСистемы(Ложь); //КОГДА 2 РАЗА Исключение СтрОписания="Обновление может быть выполнено в режиме Конфигуратор."; Если Прав(ОписаниеОшибки(),СтрДлина(СтрОписания))=СтрОписания Тогда ОбновитьКонфигурацию(); // процедура обновления конфигурации КонфигурацияИзменена() //открыть конфигуратор //КомандаСистемы(""""""+КаталогПрограммы()+"1CV8.EXE"""" CONFIG /F ""C:\UAT8_les_KOT"" /N Obmen /P Obmen /UpdateDBCfg"); //КомандаСистемы(""""""+КаталогПрограммы()+"1CV8.EXE"""" ENTERPRISE /F ""C:\UAT8_les_KOT"" /N obmen /P obmen/wait"); //ЗавершитьРаботуСистемы(Ложь); //предупреждение("вышли из скрипта"); //а 1C из скрипта еще не запустилась //ЗавершитьРаботуСистемы(Ложь); Иначе Сообщить("ОБМЕН: Ошибка при получении данных обмена: " + ОписаниеОшибки(),СтатусСообщения.ОченьВажное); КонецЕсли; КонецПопытки; //ПараметрыСеанса.ИдетОбменРаспределеннойБазы = Ложь; //ЗАПИСЬ xml-файла периф базы //ЗаписьXML = Новый ЗаписьXML(); //ИмяФайлаСообщения = КаталогВременныхФайлов() + "Message_KOT_KOR.xml"; //ЗаписьXML.ОткрытьФайл(ИмяФайлаСообщения); //ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); //ЗаписьСообщения.НачатьЗапись(ЗаписьXML,УзелЗагрузки); //ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения); //ЗаписьСообщения.ЗакончитьЗапись(); //ЗаписьXML.Закрыть(); //Файл = Новый Файл(ИмяФайлаСообщения); //Если Файл.Существует() Тогда // ДатаИзмФайлаXMLПериф = Лев(Строка(Файл.ПолучитьВремяИзменения()),10); //Пример: 11.11.2011 13:42:48 //КонецЕсли; //Сообщить("3) ОБМЕН: Файл из Периф базы записан"); //предупреждение("ЗавершитьРаботуСистемы"); ЗавершитьРаботуСистемы(Ложь); //Периф базы //Открывается батником 2-й раз центр база //КомандаСистемы("""C:\Program Files\1cv81\bin\1cv8.exe"" ENTERPRISE /Fi:\UAT8_les" /N"obmen" /P"obmen" /C" + ИмяФайлаСообщения); КонецЕсли; КонецЕсли; |
|||
37
zladenuw
16.11.11
✎
16:08
|
так у тебя ведь ЗапуститьПриложение(ПутьКСкрипту); //запустить скрипт, записанный выше
без ожидание завершение запуска |
|||
38
Adgjj
16.11.11
✎
16:08
|
из http://infostart.ru/public/16993/
не использую, т.к. у меня в типовой таких констант и ролей нет Процедура ПриНачалеРаботыСистемы() // Инициализация авто обмена Если РольДоступна("АвтоОбмен") Тогда // Если нами был включен запрет для обновления конфигурации ИБ Если Константы.РежимЗавершенияРаботыПользователей.Получить()<>Перечисления.РежимыЗавершенияРаботыПользователей.РазрешитьРаботу Тогда Константы.РежимЗавершенияРаботыПользователей.Установить(Перечисления.РежимыЗавершенияРаботыПользователей.РазрешитьРаботу); КонецЕсли; ЧастотаОбмена=Константы.ЧастотаАвтоОбменаДанными.Получить(); Если ЧастотаОбмена<>0 Тогда ПодключитьОбработчикОжидания("АвтообменДанными",ЧастотаОбмена); Иначе Сообщить("Не задана частота авто обмена, подключение не возможно.",СтатусСообщения.Внимание); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
39
Adgjj
16.11.11
✎
16:10
|
(37) я уже писала, что если пишу ЗапуститьПриложение(ПутьКСкрипту,,Истина); то задача совсем не работает - загрузки данных не происходит
выложен вариант обработки, к-рый работает хоть и 1 раз 1СПредпр надо вручную закрыть - с другими попытками не работало совсем |
|||
40
Adgjj
16.11.11
✎
16:15
|
к (39) в случае если пишу истина, 1с в режмие польз не открывается
После первого выполнения батника открыла конф периф базы: код занесен, то у конф стоит "!" |
|||
41
Adgjj
16.11.11
✎
16:15
|
но
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |