При работе с внешними консольными утилитами в 1С:Предприятие 7.7 часто возникают ситуации, когда система сообщает о том, что файл не найден, хотя выполнение команды архивации было инициировано. Давайте разберем, почему это происходит и как правильно организовать процесс вызова внешних программ.
Основная проблема заключается в использовании команды start внутри метода КомандаСистемы(). В Windows команда start запускает процесс в отдельном потоке и тут же возвращает управление вызывающей программе. В нашем случае 1С не дожидается окончания работы архиватора RAR.exe и сразу переходит к следующей строке кода — проверке наличия файла через ФС.СуществуетФайл().
Так как архивация — процесс не мгновенный, метод ФС.СуществуетФайл() срабатывает раньше, чем WinRAR успевает создать архив. Именно поэтому система возвращает 0, утверждая, что файл не найден.
Самый простой и эффективный способ исправить ситуацию — исключить команду start. Если вызвать RAR.exe напрямую без дополнительных оболочек, 1С будет ждать полного завершения выполнения команды перед тем, как перейти к выполнению последующих строк алгоритма.
Рассмотрим правильный пример формирования строки вызова:
Кавычка = Симв(34);
ПутьКРару = Кавычка + "C:\Program Files\WinRAR\rar.exe" + Кавычка;
Параметры = " a -ep ";
ИмяАрхива = "D:\Backups\Archive.rar";
ИмяФайла = "D:\Data\MyData.dbf";
СтрокаКоманды = ПутьКРару + Параметры + Кавычка + ИмяАрхива + Кавычка + " " + Кавычка + ИмяФайла + Кавычка;
КомандаСистемы(СтрокаКоманды);
// Теперь 1С дождется окончания работы RAR и только потом выполнит следующую строку:
Сообщить("Файл существует: " + ФС.СуществуетФайл(ИмяАрхива));
Еще один важный момент — это корректное использование кавычек в путях к файлам. Если в именах каталогов или файлов есть пробелы, консольная утилита может воспринять их как разделители параметров. Чтобы избежать ошибок, всегда обрамляйте каждый путь к файлу или папке двойными кавычками. В 1С 7.7 удобнее всего использовать функцию Симв(34).
Кавычка = Симв(34).Если вам необходимо запускать архивацию, не блокируя работу интерфейса 1С на длительное время, рассмотрите использование объекта WScript.Shell. Это позволит более гибко управлять запуском процессов:
// Пример использования WScript.Shell для управления запуском
WshShell = СоздатьОбъект("WScript.Shell");
Команда = "D:\Tools\WinRAR\RAR.exe a -m5 ""D:\Archive.rar"" ""D:\Data\*.*""";
// Второй параметр 1 означает ожидание завершения (bWaitOnReturn)
WshShell.Run(Команда, 0, 1);
Метод Run объекта WScript.Shell позволяет явно указать необходимость ожидания завершения процесса (третий параметр равен 1), что гарантирует, что ваша программа не будет проверять файл до того, как WinRAR закончит работу.
\\server\share).WScript.Shell вы можете анализировать код возврата программы, чтобы понять, успешно ли завершилось архивирование или произошла ошибка (например, нехватка места на диске).start для вызова консольных утилит — это усложняет отладку и мешает 1С синхронизировать выполнение задач.Применяя эти простые рекомендации, вы сможете избавиться от ошибок типа «Файл не найден» и сделать ваши процессы автоматизации в 1С 7.7 стабильными и предсказуемыми.