Обработка 7.7 по расписанию

31.05.14

База данных - Инструменты администратора БД

Альтернативный метод запуска обработок в 7.7 по расписанию

Скачать файлы

Наименование Файл Версия Размер
Скрипт для запуска по расписанию
.vbs 1,31Kb
31
.vbs 1 1,31Kb 31 Скачать
Пример запускаемой обработки
.ert 7,50Kb
15
.ert 7,50Kb 15 Скачать

Читая статьи набрёл на "Запуск внешней обработки по расписанию v7.7", стало интересно - чем предложенный способ отличается от того, как сделал я.

В оригинальной статье автор предлагает использовать событие начала работы системы в глобальном модуле и отдельного пользователя.
На мой взгляд решение реальное, однако я бы дополнил его:
При таком подходе стоит выделить отдельную внешнюю обработку и запускать только её.
В коде этой обработки запускать другие необходимые обработки.
Плюс подхода - всё в одной обработке.
Минусы подхода - нет возможности выполнять обработки параллельно; необходимость первоначальной правки глобального модуля каждой конфигурации, где планируется запускать обработку по расписанию.

Другой способ

Мы не будем вообще трогать код конфигурации, в которой планируется запускать внешнюю обработку.
Вместо этого мы создадим vbs-сценарий, который будем создавать COM-объект приложения 7.7.
В нём открывать необходимую обработку.
Внутри обработки опишим необходимые действия в событии "ПриОткрытии".
После всего добавляем запуск этого сценария в планировщик заданий.

совсем примитивный вариант, который демонстрирует идею:

Set v77 = CreateObject("V77.Application")
v77.Initialize v77.RMTrade, "/D""E:\1С77Тестовая\""", "NO_SPLASH_SHOW"
v77.OpenForm "Report", "", "c:\Регламент\Регламент.ert"

Shine bright like a diamond!

Давайте улучшим наше решение.
Что было бы здорово добавить?

1) во-первых, нужно сделать из этого скрипта универсальный механизм.
Неудобно держать 100 однотипных скриптов для разных баз, поэтому сделаем один, но с параметрами.

Добавим такие параметры:
- путь к базе
- логин
- пароль
- путь к внешней обработке

2) во-вторых, нам нужен лог файл.
Желательно лог запуска + лог действий обработки.
Добавляем параметр - лог файл.
Пишим в него самим скриптом, передаём как параметр открываемой обработке. Если будет использовать - хорошо, не будет - и ладно.

3) нужно корректно закрывать 1С
Используем ЗавершитьРаботуСистемы(0), чтобы корректно выйти из 1С, обнуляем ссылку в памяти.

этот вариант уже толще:

'будем получать параметры запуска из коммандной строки, и они будут именованные
Set Arguments = WScript.Arguments.Named

if Not Arguments.Exists("Base1C") OR Not Arguments.Exists("Ert") Then
	Wscript.Echo "Необходимо задать параметры запуска!"
	Wscript.Quit
End if

Base1C = Arguments.Item("Base1C") 'путь к базе
Ert = Arguments.Item("Ert") 'путь к обработке
LogFile = "" 'лог-файл

'формируем строку - аргумент для запуска 1С
V77Arguments = "/D" & """" & Base1C & """"
if Arguments.Exists("Login") Then
	V77Arguments = V77Arguments & " /N" & Arguments.Item("Login")
End if
if Arguments.Exists("Pass") Then
	V77Arguments = V77Arguments & " /P" & Arguments.Item("Pass")
End if
if Arguments.Exists("Log") Then
	LogFile = Arguments.Item("Log")
End if

'Запишим в лог факт попытки запуска 1С
'Однако, лучше делать это внутри обработки
'if LogFile <> "" Then
' set objFSO = CreateObject("Scripting.FileSystemObject")
' set objLogFile = objFSO.OpenTextFile(LogFile, 8, True)
' objLogFile.WriteLine("----------------------------")
' objLogFile.WriteLine(">> " & Now)
' objLogFile.WriteLine(">Start 1C: " & V77Arguments)
' objLogFile.WriteLine(">Opening " & Ert)
' objLogFile.Close
' Set objFSO = Nothing
'End if


Set v77 = CreateObject("V77.Application")
v77.Initialize v77.RMTrade, V77Arguments, "NO_SPLASH_SHOW"

'открываем форму внешней обработки, что для нас важно:
'*второй параметр - путь к лог-файлу, передаётся в форму и доступен как "Форма.Параметр"
'последний параметр - путь к самой обработке
v77.OpenForm "Report", LogFile, Ert

'закрываем 1С
v77.ExitSystem 0
set v77 = Nothing
'завершаем скрипт
Wscript.Quit

В самой обработке

Процедура Сформировать()
	
	ПисатьПротокол = ?(СтрДлина(LogFile) > 0, 1, 0);
		
	Если ПисатьПротокол = 1 Тогда
		протокол = СоздатьОБъект("Текст");
		Попытка
			// если лог-файл уже содержит какие-то данные, пробуем их прочитать
			протокол.Открыть(LogFile);
		Исключение
		КонецПопытки;
	КонецЕсли;
	
	
	СчитаемДо = 10;
	
	// записываем протокол обновления данных - дату, сообщения об ошибках, результаты	
	Если ПисатьПротокол = 1 Тогда
		протокол.ДобавитьСтроку("Обработка запущена > " + текущаяДата());
		протокол.ДобавитьСтроку("Считаем до " + СчитаемДо);
	КонецЕсли;
	
	Для а = 1 по СчитаемДо Цикл
		Если ПисатьПротокол = 1 Тогда
			протокол.ДобавитьСтроку(а);
		КонецЕсли;
	КонецЦикла;
	
	Если ПисатьПротокол = 1 Тогда
		протокол.ДобавитьСтроку("Счёт завершён > " + текущаяДата());
		Попытка
			// пытаемся записать лог-файл
			протокол.Записать(LogFile);
		Исключение
			// если попытка записи не прошла, то можно предпринять дополнительные действия
			протокол.Показать();
			Сообщить("Невозможно сохранить протокол");
		КонецПопытки;
	КонецЕсли;	

КонецПроцедуры


Процедура ПриОткрытии()
	
	LogFile = Форма.Параметр;

	
	ВремяОжиданияОтклика = 10;
	'Если обработка была запущена для отладки или совмещает автоматический и ручной режимы
	Ответ = Вопрос("Прервать автоматическое выполнение обработки?", 4, ВремяОжиданияОтклика);
	Если Ответ <> 6 Тогда
		Попытка
			Сформировать();
		Исключение
			// Глобальный перехват - плохой приём
			// В нашем случае все возможные ошибки лучше обработать в процедуре "Сформировать()"
			// Тем не менее, нам не нужно, чтобы обработка мёртвым грузом висела в памяти и что-нибудь блокировала
			// Поэтому, на случай каких-то пропущенных исключений, здесь можно сделать обращение в какой-то глобальный лог ошибок
		КонецПопытки;
	КонецЕсли;
	
	
КонецПроцедуры
 

Создаём расписание

Полный путь к скрипту выглядит так: C:\WINDOWS\system32\wscript.exe C:\Регламент\autostart.vbs /Base1C:E:\1С77Тестовая\ /Ert:c:\Регламент\Регламент.ert /Log:c:\Регламент\Регламент.log

C:\WINDOWS\system32\wscript.exe - необходимо указывать наш скрипт как параметр для wscript.exe, иначе он сам не сможет получать параметры
C:\Регламент\autostart.vbs - путь к нашему скрипту
/Base1C:E:\1С77Тестовая\ - путь к базе
/Ert:c:\Регламент\Регламент.ert - путь к обработке
/Log:c:\Регламент\Регламент.log - путь к лог-файлу
/Login:... - можно указать пользователя, под которым нужно открывать 1С
/Pass:... - и пароль

Важные моменты

При таком подходе возможны ошибки, когда обработка вызывает "ЗавершитьРаботуСистемы" одновременно с прописанным "v77.ExitSystem 0" в скрипте.
Происходит некорректное завершение, которое лечится входом в 1С в монопольном режиме с переиндексацией.
Нужно определится - или обработка закрывает 1С, или скрипт.

Как можно улучшить решение?

первое что приходит на ум - добавить обработку ошибок, прикрутить логирование с проверкой занятости файла

расписание запуск по расписанию

См. также

Монопольное открытие формы обработки 1с77

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Блокировка открытия формы обработки одним пользователем.

1 стартмани

24.05.2023    585    igor7777    1    

0

Групповое переименование файлов для 1С 7.7

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Простецкий скрипт переименования файлов в папке в нижний регистр, будет полезен программистам и системным администраторам имеющим навыки програмирования в 1С. Можно легко настроить под себя, спасает мне периодически час времени, может, кому еще будет полезен.

1 стартмани

18.02.2022    3780    0    igor7777    6    

2

[7.7 ТиС. СТОП-БАРДАК] Автоперенос непроведенных документов на текущий день

Инструменты администратора БД Оперативный учет 7.7 1С:Торговля и склад 7.7 Управленческий учет Абонемент ($m)

Боремся с бардаком. Работы в прошлых датах запрещены. Непроведенные документы (по разным причинам) - автоматом переносятся в начало текущего дня при запуске любого первого сеанса 1С в текущем дне. Задержка старта 1С - практически незначима. Не требует настройки, не требует допрограммирования (исключая один оператор вставки в процедуру старта системы). Можно обработку выполнять вручную с любой периодичностью.

2 стартмани

25.05.2020    5684    2    CheBurator    3    

2

Анализ 1С: Предприятие 7.7 с помощью ELK стека

Журнал регистрации Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Рассмотрим систему на базе Elasticsearch, Logstash и Kibana (ELK Stack) для анализа логов 1С Предприятие 7.7 с целью визуализации и анализа событий 1С.

22.01.2019    11093    phsin    20    

27

Автоматическое объединение конфигураций 1С 7.7

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Скрипт позволяет выполнить объединение конфигураций и реструктуризацию из командной строки. Объединение выполняется штатными средствами конфигуратора 1С 7.7, взаимодействие с которым происходит путем посылки нажатий клавиш. Пригодится, если есть необходимость обновить или постоянно обновлять множество ИБ.

1 стартмани

22.04.2017    15665    4    devlabnn    2    

6

Перепроведение по счету

Инструменты администратора БД Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Украина Бухгалтерский учет Абонемент ($m)

Перепроведение по счету для конфигурации Бухгалтерский учет для Украины, 1С: Предприятие 7.7

1 стартмани

23.09.2016    3745    1    Genyak    1    

0

Решение проблем с печатью, предварительным просмотром печати, пакетной печатью 1С: 7.7 в терминале

Инструменты администратора БД Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Периодически сталкивался со следующими проблемами при печати в 1С: 7.7 работающей под терминалом: 1) После замены принтера на клиентской машине 1С пытается печатать на старый принтер. 2) Отсутствует предварительный просмотр при печати. 3) Не работает печать без предварительного просмотра (пакетная печать документов). 4) В некоторых формах печатает, в некоторых нет.

1 стартмани

09.06.2016    27128    18    tux    3    

1

Логирование в 1С

Инструменты администратора БД Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Часто бывает необходимо отслеживать состояние часто повторяющихся регламентных заданий. Например, синхронизация данных с IP-телефонией, которая может производиться каждую минуту, синхронизация с сайтами, синхронизация данных с различными системами. Использовать для этих целей логирование 1С чрезвычайно неэффективно и не удобно. В таких случаях удобно использовать подход, применяемый в Unix-системах: писать логи в обычные текстовые файлы, а потом делать их обработку через эффективно работающие Unix-команды: grep, tail, cat, less и т.п.

18.05.2016    34942    rudjuk    21    

33
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Yury1001 1470 27.09.14 21:57 Сейчас в теме
от автора статьи "Запуск внешней обработки по расписанию v7.7" отправлен камаз лайков)))
akocur; BigB; +2 Ответить
2. delete 253 29.09.14 08:44 Сейчас в теме
(1) Yury1001, ахахаха) спасибо))
3. yanis 21.07.15 07:41 Сейчас в теме
Спасибо за ваш скрипт! Работает "из коробки"
4. mcgoblin 3 08.02.19 14:55 Сейчас в теме
Оставьте свое сообщение