Запуск 1С 7.7 по расписанию без авторизации пользователя

Автор АЛьФ, 21 марта 2024, 11:07

« назад - далее »

АЛьФ

Цитата: Злоп от 29 марта 2024, 12:43Полные права виндявого пользователя на папку с базой должны быть.
Папка сетевая и шара подключается с помощью
EXEC xp_cmdshell 'net use R: \\192.168.0.43\e$\Development\Programmer\AFedorov\_bases_\v7\_copy_ /user:*** /Persistent:no'
Из задания в папку пишет. Как проверить достаточно ли прав?

АЛьФ

Попробовал переделать на обращение через OLE.
Initialize возвращает 0 и в журнале регистрации теперь только подключение, без отключения.

АЛьФ

На самом деле с каталогом непонятно, конечно.
Подключается с данными одного пользователя, но запуск 1С идет от системы (от пользователя, под которым SQL запущен). 1С папку видит и к базе логинется, в журнал регистрации пишет. Но тут же отваливается, записав это в тот же ЖР. Т.е. доступа достаточно на чтение и на запись.
Вот почему бы 1С в этом случает не писать в тот же ЖР причину отвала? Загадка...

АЛьФ

Ха! А вот еще тайна природы.
Если код запроса запустить не в задании, а просто в запросе, то запускается и начинает работу. Но валится в исключение на выполнении метода глСервис.ПолучитьСписокАктивныхПользователей().

АЛьФ

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

АЛьФ

Выявилась странная закономерность. Подключаюсь к серверу, на котором стоит SQL, своим логином. Там запускаю "от имени администратора" 1С под регламентным пользователем. Все запускается, как ожидается.
Тут же со своего компа в открытой "менежмент студио" запускаю запрос с регламентыми заданиями, получаю исключение в методе ПолучитьСписокАктивныхПользователей (т.е. идет уже запуск 1С на уровне выполнения глобального модуля и дошло до ПриНачалеРаботыСистемы()). Запускаю этот же запрос второй раз, получаю вход-выход без инициализации глобального модуля.

А может и нет связи между запусками...
Ваще не понимаю что там происходит...

АЛьФ

Тупик... Так ничего и не удалось сегодня сделать. То вход-выход, то вход - вылет по исключению. Без какой-либо системы.
Пытался делать запуск от имени моего логина. Безрезультатно.
Похоже придется писать подмену dll, чтобы отловить где же затык.

АЛьФ

В итоге решение: использовать регламентное задание v8 для запуска батника, в котором прописан запуск семерки.
Все работает.

zhenyat

Здравствуйте
У меня настроено так:
1. Создан cmd - шник, в котором выполняются различные регламентные действия (создание баккапов конфигруатором и  запуск 1с для восстановления индексных файлов:

set CURDATE=%DATE% set LOG=C:\cmds\Log\backup-%CURDATE:~6,4%-%CURDATE:~3,2%-%CURDATE:~0,2%.txt set BACKUP_PATH=\\-------\backup\1c77 echo %TIME% ***Begin > %LOG% del /q D:\-------\ExtForms\DB_SQLite\* echo %TIME% БД SQLite очищена >> %LOG% "%ProgramFiles(x86)%\1cv77\bin\1cv7s.exe" config /dD:\------- /tE:\Temp /nBackup /@C:\cmds\Backup echo %TIME% Резервная копия создана >> %LOG% if exist %BACKUP_PATH% ( move E:\Backup\base.zip %BACKUP_PATH%\Work-%CURDATE:~6,4%-%CURDATE:~3,2%-%CURDATE:~0,2%.zip >> %LOG% ) else ( rename E:\Backup\base.zip Work-%CURDATE:~6,4%-%CURDATE:~3,2%-%CURDATE:~0,2%.zip ) del /f/q D:\------\*.cdx "%ProgramFiles(x86)%\1cv77\bin\1cv7s.exe" enterprise /m /dD:\----- /tE:\Temp /nBackup echo %TIME% Индексы восстановлены >> %LOG%

А раньше и был запуск от имени специального пользователя регламентов - для него в "ПриНачалеРаботыСистемы()" был запуск разных обработок.

2. в планировщике этот батничек запускается от имени специального юзера, с настройками "Выполнять для всех пользователей" и "Выполнять с наивысшими правами"
Естественно, для этого пользователя необходимые базы уже прописаны в реестре

Эта связка работает уже лет 10

MadDAD

Цитата: АЛьФ от 29 марта 2024, 13:48Ха! А вот еще тайна природы.
Если код запроса запустить не в задании, а просто в запросе, то запускается и начинает работу. Но валится в исключение на выполнении метода глСервис.ПолучитьСписокАктивныхПользователей().

Так а что за исключение? Может проблема в правах доступа к папкам пользователей?
Вообще на сколько я помню с семерошных времен - для корректной работы семерки сессия под которой запускается платформа должна быть открыта интерактивно хотя бы один раз после перезапуска сервера, иначе получаются такие спецеффекты. Там какой-то затык с контекстом.

GSoft

Сам запуск делался штатным планировщиком без выкрутас. Только первый запуск делался в ручном режиме под пользователем чтобы все правильно прописалось и настроилось

А про реализацию задачи уже на стороне 1С - я в свое время писал такую штуку для разбора командной строки из ярлыка запуска

вот например строка для запуска в авторежиме отчета на техподдержку и выгрузку его в HTML

""C:\Program Files\1Cv77\BIN\1cv7s.exe" enterprise /d"\\ИмяПК\fs\1C\base\itbase\" /N"ИнфоЭкран" "Attr-Отчет.ИнфоЭкранСПП,ИнфоЭкран,ХТМ,ЗакрытьФорму,ЗакрытьПриложение""


1. код запуска основной функции при старте системы
//обработка доппараметров командной строки, пока только для инфоэкранов Если ОбработкаДопПараметровКоманднойСтроки() > 0 Тогда //В параметрах передан признак закрытия приложения СтатусВозврата(0); Возврат; КонецЕсли; //работа системы для инфоэкрана закончена




2. код самой функции (при старте системы)
//_____________________________________________________________________________ Функция ОбработкаДопПараметровКоманднойСтроки() ЕстьПроблемы = 0;     Закрыть1С = 0; Если (НазваниеНабораПрав() = "Пользователь") и (ИмяПользователя() = "ИнфоЭкран") Тогда Состояние("Обработка параметров командной строки"); ////пока не формируем отчеты из регистров эта проверка не нужна ////проверка наличия "Оперативного учета" //Если НаличиеКомпонентыОперативныйУчет() = 0 Тогда // Возврат 2; //КонецЕсли; ////эта проверка пока тоже под вопросом //// автоматическое открытие периода //Если АвтоматическоеОткрытиеПериода() = 0 Тогда // Возврат 5; //КонецЕсли;                             ////загружаем только формекс, больше ничего из компонент не надо //Если глЗагрузитьКомпонентуФормекс(0) = 0 Тогда // //формекс не загружен, инициализировать командную строку не получится // СписокДопПарам = 0; //Иначе        // //формекс загружен, инициализируем командную строку // СписокДопПарам = РазборКоманднойСтрокиФормекс(); //КонецЕсли; //2024-10-02 Если ПустоеЗначение(глФормексЗагружен) = 1 Тогда Если глЗагрузитьКомпонентуФормекс() = 0 Тогда //формекс не загружен, инициализировать командную строку не получится СписокДопПарам = 0; КонецЕсли; //формекс загружен только что, инициализируем командную строку СписокДопПарам = РазборКоманднойСтрокиФормекс(); Иначе //формекс уже загружен, инициализируем командную строку СписокДопПарам = РазборКоманднойСтрокиФормекс(); КонецЕсли//2024-10-02 Если СписокДопПарам = 0 Тогда //доппараметры отсутствуют или не инициализирован Формекс //поэтому запускаем только то что точно надо Результ = ""; Результ = ИнфоЭкранСПП(0);    Закрыть1С = 1; Иначе Если (ТипЗначенияСтр(СписокДопПарам) = "СписокЗначений") тогда //и (СписокДопПарам.ПолучитьЗначение(1) = "ДопПараметры") Тогда Если ТипЗначенияСтр(глСервис) = "Сервис" Тогда // (глФормексЗагружен = 1)  Конт = "глМод"Для Инд  =  1 По СписокДопПарам.РазмерСписка() Цикл //Ищем набор объектов ТекущийПараметр = СокрЛП(СписокДопПарам.ПолучитьЗначение(Инд));                                                   //в принципе можно в цикле увеличитвать значения счетчика на кол-во значений по умолчанию //для отчета на 4 параметра //для обработки на 3 параметра Если Найти(ТекущийПараметр,"Обработка.") = 1 Тогда ТекущийПараметр = СтрЗаменить(ТекущийПараметр, "Обработка.", ""); ИначеЕсли Найти(ТекущийПараметр,"Отчет.") = 1 Тогда ТекущийПараметр = СтрЗаменить(ТекущийПараметр, "Отчет.", ""); ИначеЕсли Найти(ТекущийПараметр,"ЗакрытьПриложение") = 1 Тогда ТекущийПараметр = ""; Закрыть1С = 1; Иначе ТекущийПараметр = ""; КонецЕсли; Если ПустоеЗначение(ТекущийПараметр) = 0 Тогда                                    Результ = ""; Попытка глСервис.ВыполнитьФункцию(Конт,ТекущийПараметр,СписокДопПарам,Результ);    Исключение Сообщить(ОписаниеОшибки()); Сообщить("Ошибка при выполнении функции: " + "ТекущийПараметр", "!"); ЕстьПроблемы = 1; КонецПопытки; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли;                                КонецЕсли; КонецЕсли;    Если ЕстьПроблемы > 0 Тогда Сообщить("Были ошибки при выполнении глобального модуля", "!!!"); КонецЕсли; Возврат Закрыть1С; КонецФункции // ОбработкаДопПараметровКоманднойСтроки


3. а дальше в нужном объекте производим разбор параметров полученных из функции (2)