Имя: Пароль:
1C
1С v8
Как заставить bat-файл дождаться окончания выгрузки 1С
0 AlexYurg
 
06.08.18
17:38
Есть пакетный файл, содержащий строку вида

"C:\...\1cv8.exe" DESIGNER /S Сервер\База /N ... /P ... /DumpIB File.DT

В этом месте необходимо дождаться, когда закончится выгрузка в File.DT, т.к. дальше там идет загрузка из этого файла в другую базу.

На платформе 1С 8.2 (8.2.19.130) это работало без проблем, а на 8.3 (8.3.12.1567) проскакивает на следующую строку батника, т.е. пытается грузить из файла, который еще не сформирован.

Вопрос: почему так происходит и как заставить батник дождаться окончания выгрузки?
1 SilentMan
 
06.08.18
17:42
start /wait ?
2 AlexYurg
 
06.08.18
17:44
(1) Сейчас попробую...
3 AlexYurg
 
06.08.18
17:47
(1) Ошибка: "Не удается найти DESIGNER ..."
Я уже прочно забыл эти батники, как там писать start?
4 AlexYurg
 
06.08.18
17:50
Посмотрел синтаксис START, похоже надо делать несколько батников. Как-то это некрасиво.

Другие мысли есть у кого-нибудь?
5 Локи-13
 
06.08.18
17:50
напиши на powershell
6 Локи-13
 
06.08.18
17:52
$EXE="C:\Program Files (x86)\1cv8\8.3.10.2699\bin\1cv8.exe"
$arglist = @("DESIGNER", "/S $SERVERNAME\$IBNAME", "/N $ADMINNAME", "/P $ADMINPASS", "/UpdateDBCfg")
& $EXE $arglist | Out-Null
7 alkras
 
06.08.18
17:54
setlocal enabledelayedexpansion
set count=0
set month=1%date:~3,2%
set /a month-=100

for %%a in (Январь Февраль Март Апрель Май Июнь Июль ^
Август Сентябрь Октябрь Ноябрь Декабрь) do (
set /a count+=1
if !count! equ %month% (set m=%%a))
md "i:\BaseCopy\%m%\uat\"

echo Текущий месяц %m%

set v8exe="c:\Program Files (x86)\1cv82\8.2.19.83\bin\1cv8.exe"
set AdminUser=/N"UserAdmin"   /P"PassAdmin"  /WA-
set FileInformation=i:\BaseCopy\%m%\error_log.txt
date /t >> %FileInformation%
time /t >> %FileInformation%


rem ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
rem Создание копии UAT

set DataBaseName="Server/uat"
set DataBase=/S%DataBaseName%
set DataBaseName>>%FileInformation%

rem Завершение работы пользователей
start "" /wait %v8exe% ENTERPRISE %DataBase% %AdminUser% /C"ЗавершитьРаботуПользователей" /UC"ПакетноеОбновлениеКонфигурацииИБ" /Out%FileInformation% -NoTruncate /DisableStartupMessages

set filebak="i:\BaseCopy\%m%\uat\%date% %time:~-11,2%-%time:~-8,2%-%time:~-5,2% SQL УАТ.dt"
start "" /wait %v8exe% CONFIG %DataBase% %AdminUser% /DumpIB%filebak% /UC"ПакетноеОбновлениеКонфигурацииИБ" /Out%FileInformation% -NoTruncate

rem Разрешение работы пользователей
start "" /wait %v8exe% ENTERPRISE %DataBase% %AdminUser% /C"РазрешитьРаботуПользователей" /UC"ПакетноеОбновлениеКонфигурацииИБ" /Out%FileInformation% -NoTruncate /DisableStartupMessages
8 alkras
 
06.08.18
17:55
Раньше пользовался таким скриптом. Все корректно работало с ежедневным сохранением в нужные папки.
9 AlexYurg
 
06.08.18
17:55
(6), (7) Круто! Спасибо, попробую!
10 Cthulhu
 
06.08.18
18:30
(4): да норм.
никто же не мешает из твоего батника запилить какие надо ( echo > / echo >> ) потом запустить их потом подтереть за собой...
11 Сияющий в темноте
 
06.08.18
22:42
И чем VbScript не угодил?
там даже обьект есть для запуска без окошка и ожидания завершения
12 AlexYurg
 
07.08.18
09:20
(11) Вся проблема как раз в ожидании завершения.
Нужно, чтобы было ожидание, и в 8.2 оно было, а в 8.3 пропало.
Из-за этого и возник вопрос, как вернуть ожидание завершения.
13 spectre1978
 
07.08.18
09:24
(12) оно не пропало. Скорее всего проблема в том, что запускается стартер, который запускает другой процесс и выходит. Нужно посмотреть, что происходит при запуске, какие процессы рожаются. И запускать именно конечный, последний процесс, а не то что прописано в ярлыке.
14 AlexYurg
 
07.08.18
09:33
(13) Нет, не стартер. Запускается напрямую 1cv8.exe из нужной папки. Такой же процесс появляется в памяти.
Пробовал запускать 1cv8s.exe - та же беда - не ждет.
15 Мыш
 
07.08.18
09:36
(14) Асинхронный вызов нельзя сделать?
16 spectre1978
 
07.08.18
09:38
Вопросы по бат файлам.

start /wait /D "C:\Program Files (x86)\1cv8\8.3.11.2867\bin\" 1cv8.exe
echo Тру-ля-ля
Надпись появляется после того как закрыли 1С
17 spectre1978
 
07.08.18
09:39
у меня тоже были подобные проблемы, но в конце концов выяснилось что дело было в стартере. В случае с выгрузкой есть еще один вариант с попыткой открытия dt-файла - в приведенном топике я об этом писал. Когда откроется - значит, 1С закончила работу. Я такое на VBS делал.
18 Serg_1960
 
07.08.18
09:55
Start "Backup" /Wait "C:\Program Files (x86)\1cv8\common\1cestart.exe"...
:repeat
TimeOut /T 10
tasklist | find "1cv8.exe"
if errorlevel 0 GOTO repeat
19 mistеr
 
07.08.18
09:59
(18) Ничего, что еще кто-то может внезапно запустить 1С для своих целей?
20 mistеr
 
07.08.18
10:00
(14) Возьми Process Explorer да посмотри, кто кого запускает.
21 Serg_1960
 
07.08.18
10:34
(19) Не принципиально при определенных условиях. Например, когда батник работает ночью, когда пользователей нет и/или некому запустить сеанс на конкретном компе.
22 Мыш
 
07.08.18
10:55
И вообще агента Смита запустить можно и на каком-нибудь питоне автоматизировать.
23 AlexYurg
 
07.08.18
11:33
Джентльмены, произошло чудо!
Ожидание вернулось само собой.
В результате упражнений с батником обнаружилось, что поведение 1С-ки вернулось к тому, что было в 8.2, т.е. батник сам дожидается окончания выгрузки. Без всяких start /wait и прочих хитростей.
Что это было - не понятно. Глюк, одним словом.
Всем спасибо за обсуждение и советы!