Имя: Пароль:
1C
1C 7.7
v7: Как правильно написать батник запуска 1с77 ?
0 Z_Z
 
23.09.11
11:24
Добрый день. Как правильно написать батник запуска 1с77, чтоб если база занята, то процесс не вис и вырубался.?
START /wait "Obmen" "C:\Program Files\1Cv77\BIN\1cv7s.exe" ENTERPRISE /DE:\BASE1C2\ /NFtp /Pftp /m
1 Azverin
 
23.09.11
11:26
проверку окончания записи в txt я делал так, что если файл занят, то его нельзя скопировать. выгрузка звершилась - файл копирнулся, грузиться 1С-ка... как-то же можно прикрутить?))
2 Z_Z
 
23.09.11
11:27
Если б знал как, я бы сам прикрутил и сюда бы не писал))
3 Sk0rp
 
23.09.11
11:32
Я просто всех вырубаю ночью перед бакапом.
4 Azverin
 
23.09.11
11:33
(0) в режиме ENTERPRISE чем база занята, что не заходит?
5 Troodon
 
23.09.11
11:36
а база sql or dbf?
6 Z_Z
 
23.09.11
11:37
например я захожу монопольно  ,а кто-то не вышел и выдается сообщение "Ошибка блокировки данных.." и весит пока не нажмешь "ок"
7 Z_Z
 
23.09.11
11:38
sql
8 Azverin
 
23.09.11
11:40
(6) сорри, 7.7 же )))

тогда (3) или есть необходимость в рабочее время запускать?
9 Z_Z
 
23.09.11
11:40
Вырубать пользователей это не вариант. Надо дождаться пока все выйдут и тогда нормально запускается монопольно.
10 ЧеловекДуши
 
23.09.11
11:41
(9)Зачем тебе именно монопольный доступ?
11 Z_Z
 
23.09.11
11:43
Именно монопольный не надо, мне надо, чтоб когда идет "Ошибка блокировки данных..."процесс не вис и батник закрывался.
12 Troodon
 
23.09.11
11:50
(11) так если монопольный не нужен и в базе никто монопольно не работает, то в (0) в конце убери /m
и будешь запускать 1С-ку в разделенном режиме
13 Z_Z
 
23.09.11
11:52
Хорошо, я оберу ,а базе кто-то монопольно перепроводится. И та же ошибка будет!
14 Z_Z
 
23.09.11
11:52
Разве в батникельзя ничего придумать, если ошибка то завершить процесс???
15 Troodon
 
23.09.11
11:53
(13) на эту проверку у меня есть батник, только для дбф базы
могу выложить
правда придется переписать один блок в нем, вместо запроса к файлу дбф = на запрос к sql таблице
16 Z_Z
 
23.09.11
11:56
А может как-то в батнике можно убивать процесс опредеоенного пользователя? и тогда я при следующем запуске буду прибивать свой предыдущий зависший процесс.
17 Troodon
 
23.09.11
11:58
(16) свой процесс, если нет других запущенных 1с-кой на этом компе, то может тебе поможет taskkill
18 Z_Z
 
23.09.11
12:00
В том и дело что, есть!
19 Z_Z
 
23.09.11
12:07
Свой процесс тоже не годится прибывать. При штатной ситуации он может еще не завершится и тогда новый запуск его прибьет((
20 FN
 
23.09.11
12:09
(0) Абрам ворочается в постели  и  никак не может уснуть. Сара спрашивает:
- Что случилось, Абрам? Почему не спишь?
- Я задолжал Мойше 50 рублей и не знаю, как вернуть ему  долг .
Сара открывает окно и кричит:
- Мойша!!!
С той стороны улицы Мойша:
- Чего, Сара?
- Абрам должен тебе 50 рублей, так он сказал, что он их не отдаст!
Закрыла окно и говорит Абраму:
- Ты спи, пускай теперь он не спит.

к чему это я...

пусть твой робот всегда в 1С висит (например в терминальной сессии), и если кому-нибудь нужно будет монопольно - пусть это будет его проблема.
ЗЫ перепроводки документов отлично делаются ночью в разделенном режиме
21 Sk0rp
 
23.09.11
12:18
(20) Они и днем неплохо делаются, только с паузами, что бы людям не сильно работать мешать.
22 Z_Z
 
23.09.11
12:19
(20)Мой робот второстепенный , но тоже нужен.А перед моим монопольно робот перепроводит доки. И когда тот еще на закончил свою работу. Мой врубается и подвисает(
23 FN
 
23.09.11
12:21
(22) Зачем 2 робота? зачем монопольно?
сделай одного робота + справочник "Задания" и пусть висит и колбасит когда надо и что надо.
24 Z_Z
 
23.09.11
12:22
Ладно, буду раздвигать во времени. Все  спасибо!!
25 Sk0rp
 
23.09.11
12:26
Если бы я уперся именно в необходимость проверки из bat файла возможности монопольного запуска 1С, я бы проверял наличие и пробовал удалить 1Cv7.LCK из папки базы. Если нету или удалось удалить - значит можно входить.
26 Troodon
 
23.09.11
12:26
(24) держи батник для дбф базы, может перепишешь для sql

//батник run.js

Path1С        = "D:\\1Cv77\\BIN\\1cv7s.exe";
PathBD        = "D:\\1CBD\\Baza\\";
PathFileLck    = PathBD + "\\1Cv7.LCK"
PathExchange    = "D:\\1CBD\\#shedule\\";

Name        = "obmen";
Pass        = "obmen";

CommandReindex    = "" +Path1С+ " config /D" +PathBD+ " /N" +Name+ " /P" +Pass+ " /@" +PathExchange+ "reindex";
CommandExchange    = "" +Path1С+ " enterprise /D" +PathBD+ " /N" +Name+ " /P" +Pass;

StatusFile = "Exist";
FSO=WScript.CreateObject("Scripting.FileSystemObject");

ResLog=FSO.FileExists(PathExchange + "log.txt");
if (ResLog==0) {
   FileLog=FSO.CreateTextFile(PathExchange + "log.txt", true);
}
FileLog=FSO.OpenTextFile(PathExchange + "log.txt",8,true);
d=new Date();
ss=DateToStr(d);
ss+=" "+TimeToStr(d);
FileLog.WriteLine("--------------------------------------------------");
FileLog.WriteLine(PathBD + ", time: " + ss);

Res=FSO.FileExists(PathFileLck);
if (Res==0) {
   StatusFile = "NotExist";
}
if (StatusFile=="Exist") {
   //Пробуем удалить его.
   F=FSO.GetFile(PathFileLck);
   StatusFile = "NotExist";
   try {
   F.Delete();
   }
   catch (e) {
       if (e != 0) {
       StatusFile="Exist";
       }
   }
}

ExistUser=0;
if (StatusFile=="Exist") {
       
   ExistUser=1;
   FileLog.WriteLine(" - В базе находятся пользователи, проверим, в монопольном или разделенном режиме.");
   StatusFile = "NotExist";
}

if (StatusFile=="NotExist") {
   
   WshShell=WScript.CreateObject("WScript.Shell");

   SSource = "SELECT * FROM 1SUSERS";
   SConnect="Driver={Microsoft dBase Driver (*.dbf)};DriverID=277;Dbq=" + PathBD;
   Connect=WScript.CreateObject("ADODB.Connection");

   Monopolno=0;
   try {
       Connect.Open(SConnect);
       RS=Connect.Execute(SSource);

       Reindex=1;

       while (!RS.EOF) {
           s=RS.Fields("USRSCNT");
           if (s==0) {
               Reindex=0;
           }
           RS.MoveNext();
       }
       
       RS.Close();

   }
   
   catch (e) {
       if (e != 0) {
       FileLog.WriteLine(" - База используется монопольно.");
       FileLog.WriteLine(" - !!!ОБМЕН НЕ ПРОШЕЛ.");
       Monopolno=1;
       }
   }
   
   
   
   if (Monopolno==0) {

       if (Reindex==1) {
           if (ExistUser==0) {

               FileLog.WriteLine(" - Программа была завершена аварийно, выполняем переиндексацию.");
               WshShell.Run(CommandReindex, 1, true);

           }
       }
   
       FileLog.WriteLine(" - Запускаем обмен.");
       WshShell.Run(CommandExchange, 1, true);
   
   }
   
   
}

FileLog.Close();

// Вспомогательные функции  
function LeadZero(ll,ss) {
 var i,s,l1;
 s=ss.toString();
 l1=s.length;
 if (l1<=ll)
   {
   for (i=1;i<=ll-l1;i++)
     s="0"+s;
   }
 return(s);
 }

function DateToStr(dd) {
 var s;
 s=LeadZero(2,dd.getDate())+"/";
 s+=LeadZero(2,dd.getMonth()+1)+"/";
 s+=dd.getYear();
 return(s);
 }

function TimeToStr(dd) {
 var s;
 s=LeadZero(2,dd.getHours())+":"+LeadZero(2,dd.getMinutes());
 return(s);
 }
27 Z_Z
 
23.09.11
12:34
(26) ничего себе батник, ну спасибо, буду изучать:))))
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший