Имя: Пароль:
1C
1С v8
Создание батника в 1с82
,
0 Emilio
 
19.12.12
15:34
Пишу обработку, у которой одна из процедур должна создавать батник и потом этот батник должен запуститься. Сам батник должен закрыть процессы 1с и сразу же запустить приложение. Вот процедура:

Процедура СоздатьБат()
   Путь = "C:\";
   ТД = Новый ТекстовыйДокумент;
   ТД.УстановитьТипФайла(КодировкаТекста.ANSI);
   ТД.УстановитьТекст("cd
   |@echo off
   |taskkill.exe /f /im 1cv8*
   |ping -15 seconds 0.0.0.1 > nul
   |""c:\Program Files (x86)\1cv82\8.2.13.219\bin\1cv8.exe""" "ENTERPRISE"  "/S""vrnhd1c-server\lp_sap"""  "/N""lpsap""" "/P""""
   |""c:\Program Files\1cv82\8.2.13.219\bin\1cv8.exe""" "ENTERPRISE"  "/S""vrnhd1c-server\lp_sap"""  "/N""lpsap""" "/P""""
   |""c:\Program Files (x86)\1cv82\8.2.13.199\bin\1cv8.exe""" "ENTERPRISE"  "/S""vrnhd1c-server\lp_sap"""  "/N""lpsap""" "/P""""
   |""c:\Program Files\1cv82\8.2.13.199\bin\1cv8.exe""" "ENTERPRISE"  "/S""vrnhd1c-server\lp_sap"""  "/N""lpsap""" "/P""""");
   ТД.Записать(Путь + "reboot1s.bat");
КонецПроцедуры

Собственно проблема в том, что в батник текст записывается коряво и из-за чего батник до конца не отрабатывает, т.е. процессы рубит, а когда доходит дело до запуска 1с, то запускается только до места выбора ИБ - пакетного запуска 1с нет. Прошу помощи в подсказке как записать текст в батник, что бы он выглядел правильно.
ЗЫ. Что бы было ясно как записывается коряво текст в бат, ниже из батника текст:

cd
@echo off
taskkill.exe /f /im 1cv8*
ping -15 seconds 0.0.0.1 > nul
"c:\Program Files (x86)\1cv82\8.2.13.219\bin\1cv8.exe"
ENTERPRISE
/S"vrnhd1c-server\lp_sap"
/N"lpsap"
/P""
"c:\Program Files\1cv82\8.2.13.219\bin\1cv8.exe"
ENTERPRISE
/S"vrnhd1c-server\lp_sap"
/N"lpsap"
/P""
"c:\Program Files (x86)\1cv82\8.2.13.199\bin\1cv8.exe"
ENTERPRISE
/S"vrnhd1c-server\lp_sap"
/N"lpsap"
/P""
"c:\Program Files\1cv82\8.2.13.199\bin\1cv8.exe"
ENTERPRISE
/S"vrnhd1c-server\lp_sap"
/N"lpsap"
/P""
1 drcrasher
 
19.12.12
15:37
(0) 1) ставить кавычки только там, где надо и 2) start -e комманда - в помощь
2 IVT_2009
 
19.12.12
15:39
Вот так вполне работает


БазаФайлов.Свернуть("Имя,Гтд","");
   БазаФайлов.Сортировать("Гтд");
   ИмяФайла        = Константы.ПутьКБат.Получить();
   ИмяХранилища    = Константы.ПутьКбазеСертификатов.Получить();
   ПутьКпрограмме_ = СокрЛп(Константы.ПутьКПрограммеПросмотра.Получить());
   КомандаСистемы("del.bat","c:\print");
   К        =  Лев("""",1);
   
   Цепочка = "";
   WshShell=Новый COMОбъект("Wscript.Shell");
   Для ЕЕ = 0 По БазаФайлов.Количество()-1 Цикл
       Цепочка    = "i_view32.exe /multitif=(c:\print\"+СокрЛп(БазаФайлов[ее].Имя)+","+СокрЛп(ИмяХранилища)+СокрЛп(БазаФайлов[ее].Имя) +") /killmesoftly";
       WshShell.run("C:\print\IrfanView\"+Цепочка,0,true);
   КонецЦикла;    
   
   Сообщить("ОК");
   Возврат;
   Принтер_ = "02";
   Для ЕЕ = 0 По БазаФайлов.Количество()-1 Цикл
       Если  БазаФайлов[ее].ГТД = "Да" тогда
           Принтер_ = "03";
       Иначе
           Принтер_ = "02";
       КонецЕсли;    
       Цепочка    ="rundll32.exe C:\WINDOWS\System32\shimgvw.dll,ImageView_PrintTo /pt c:\print\"+СокрЛп(БазаФайлов[ее].Имя)+" "+к+Принтер_+к;
       WshShell.run(Цепочка,0,false);
       //КомандаСистемы(Цепочка,"C:\WINDOWS\System32\");
   КонецЦикла;
   
   //Текст.Записать("C:\print\pr.vbs");
   КомандаСистемы("del.bat","c:\print");
3 IVT_2009
 
19.12.12
15:41
Извиняюсь, это более новый вариант.
Вот так работало:

БазаФайлов.Свернуть("Имя","");
   ИмяФайла        = Константы.ПутьКБат.Получить();
   ИмяХранилища    = Константы.ПутьКбазеСертификатов.Получить();
   К =  Лев("""",1);
   Стр000 = "";
   Текст = Новый ТекстовыйДокумент;
   //Текст.УстановитьТипФайла("cp866");
   Текст.Очистить();
   Текст.ДобавитьСтроку("@ECHO OFF");
   Для Каждого Нс Из БазаФайлов Цикл
       Стр000 = Стр000+" "+К+СокрЛп(ИмяХранилища)+СокрЛп(Нс.Имя)+К;
       если СтрДлина(Стр000)>= 170 тогда
             Текст.ДобавитьСтроку(СокрЛп(Константы.ПутьКПрограммеПросмотра.Получить())+" "+СокрЛП(Константы.СтроковыйПараметрПечати.Получить())+Стр000);
             Стр000 = "";
       КонецЕсли;
   КонецЦикла;    
   Текст.ДобавитьСтроку(СокрЛп(Константы.ПутьКПрограммеПросмотра.Получить())+" "+СокрЛП(Константы.СтроковыйПараметрПечати.Получить())+Стр000);
   Текст.ДобавитьСтроку("PAUSE");
   ПутьБат =ИмяФайла+Константы.ИмяЬат.Получить();
   Текст.Записать(ПутьБат,"cp866");
   КомандаСистемы(ИмяФайла,Константы.ИмяЬат.Получить());
4 ilkoder
 
19.12.12
15:42
Если имя без пробелов и английскими буквами, то там кавычни не нужны, и добавь в конце " /DisableStartupMessages /RunModeOrdinaryApplication"
5 Emilio
 
19.12.12
21:49
(1)1)ковычки по другому расставить не возможно, если где-нибудь убрать ковычку, то будет ошибка. 2)что за команда start? bath команда?
(3) не совсем понял как твои примеры мне могут помочь(
(4) где именно имя без пробелов? и куда в конце добавить  " /DisableStartupMessages /RunModeOrdinaryApplication"?
извините если где-то туплю, просто опыта с 1с еще не так много.
6 DmiVo
 
19.12.12
22:16
(0) Зачем столько кавычек. Оставь две, одну в начале вторую в конце и запись в батник перестанет быть корявой.
7 Emilio
 
19.12.12
22:24
(6) ошибки выходят тогда, пробовал ставить ковычки в начале и в конце - ошибка, а вот так ошибок нет, но батник пишется в файл коряво.
8 DmiVo
 
19.12.12
22:26
Путь = "C:\";
   ТД = Новый ТекстовыйДокумент;
   ТД.УстановитьТипФайла(КодировкаТекста.ANSI);
   ТД.УстановитьТекст("cd
   |@echo off
   |taskkill.exe /f /im 1cv8*
   |ping -15 seconds 0.0.0.1 > nul
   |c:\Program Files (x86)\1cv82\8.2.13.219\bin\1cv8.exe  ENTERPRISE  /Svrnhd1c-server\lp_sap  /Nlpsap /P
   |c:\Program Files\1cv82\8.2.13.219\bin\1cv8.exe ENTERPRISE  /Svrnhd1c-server\lp_sap  /Nlpsap /P
   |c:\Program Files (x86)\1cv82\8.2.13.199\bin\1cv8.exe ENTERPRISE  /Svrnhd1c-server\lp_sap  /Nlpsap /P
   |c:\Program Files\1cv82\8.2.13.199\bin\1cv8.exe ENTERPRISE  /Svrnhd1c-server\lp_sap  /Nlpsap /P");
   ТД.Записать(Путь + "reboot1s.bat");

проверял ошибок нет
9 Emilio
 
20.12.12
00:14
(8) а батник запустить пробовал? если в пути наименование каталога с пробелом, путь пишется в ковычках. если бы все так просто было бы, ты думаешь я бы здесь писал? потому и прошу помощи...
10 Живой Ископаемый
 
20.12.12
00:19
какой каталог с пробелом в серверной базе?
11 VasjaIvanov
 
20.12.12
00:20
(9)тебе надо путь сокрашено записать для dos, там без пробелом
Documents and Settings  = Docume~1
12 VasjaIvanov
 
20.12.12
00:21
c:\Program Files (x86) = c:\Progra~1
13 VasjaIvanov
 
20.12.12
00:22
или  = c:\Progra~2
смотри сколько папок у тебя таких
14 Живой Ископаемый
 
20.12.12
00:25
боже, а что это вообще такое, зачем запускать подряд 4 экземпляра ОДНОГО и  ТОГО же клиента (при чем зачем-то установленного в два разных каталога) чтобы зайти ими в одну и ту же базу под одним пользователем. какой в этом сакральный смысл?
15 Emilio
 
20.12.12
00:29
(14) на ПК пользователей может быть разная версия платформы стоять и ОС пользователей может быть как 32х разрядной, так и 64х разрядной.
(10) каталога с пробелом в серверной базе нет, но есть пробел в адресе клиента.
(13) огромное спасибо попробую сделать по твоему совету :)
16 Живой Ископаемый
 
20.12.12
00:38
2(15) И что? клиент разве бывает 64-битный?
И не лучше ли запускать 1cestart, чтобы уже запускался нужный для базы клиент?
Но это конечно от пробелов не избавит, согласен
17 Emilio
 
20.12.12
00:51
(16) клиент не бывает 64 разрядный, а вот к каталогу program files у 64 разрядных осей добавляется приставочка (x86)
18 Живой Ископаемый
 
20.12.12
01:07
ок, я понял смысл, пока это тестовое что-то... в боевых условиях будет что-то одно.
19 Emilio
 
20.12.12
01:13
(18) ага :)
20 DmiVo
 
20.12.12
08:37
(9)
Это лишь к тому, что посчитай кавычки.

УстановитьТекст(<ТекстДляУстановки>)
Параметры:

<ТекстДляУстановки> (обязательный)

Тип: Строка.
Текст, помещаемый в текстовый документ.

Строка (String)
Описание:
Значения данного типа содержат строку в формате Unicode произвольной длины.

Литералы:
Литералы строкового типа представляют собой набор символов заключенных в кавычки. Для задания в строке символа " (кавычка) необходимо записать две кавычки подряд. Кроме того, допускаются "многострочные" строковые константы. В исходном тексте многострочные константы могут задаваться двумя способами:

Между фрагментами, представляющими отдельные строки многострочной строки, не должно встречаться никаких символов, за исключением пробелов, переводов строки и строк комментариев.
Каждая отдельная составляющая не замыкается кавычками, а на каждой последующей строке помещен символ переноса строки | (вертикальная черта). В этом варианте комментарии допускаются, если строка начинается с символа комментария

т.е.

в батник у тебя выводится такт как ты написал в твоей записи
пробел это "
21 DmiVo
 
20.12.12
08:38
+(20) |
22 Emilio
 
21.12.12
20:10
(21) огромное спасибо, но в два часа сам пришел к этому, перечитав о литералах. просто голова мутно думала  :)