7.7 Перенос ТА программно

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем evgPinsk, 16 июл 2012.

  1. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Нужно программно через например команду УстановитьТАНа() в начале суток перенести ТА на текущую дату. Проблема в том, что один из сеансов 1с запущен круглосуточно и значит монопольно 1ску запустить нельзя. Какие есть варианты решения моей задачи?
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Без вариантов. ТОЛЬКО МОНОПОЛЬНО,
  3. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Попробуйте так:
    [CODE1C]
    Если ПолучитьДатуТА() < ТекущаяДата() Тогда
    Док = СоздатьОбъект("Документ.ИмяДокумента");
    Док.Новый();
    Док.Записать();
    Док.УстановитьВремя(0,0,1);
    Док.Провести();
    Док.Удалить(1);
    КонецЕсли;
    [/CODE1C]

    При переходе границы работать не будет. Документ должен быть с признаком оперативный учет и проводиться пустым и без всяких вопросов (можно вообще добавить в конфигурацию отдельный новый документ).
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Во-во.... Не взлетит....
  5. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Ну ничего идеального нет :D
    Обычно периодичность - месяц, а раз в месяц можно и ручками перенос сделать.
  6. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Где раньше в нете ещё встречал обработку по переносу ТА для SQL версии (на основе прямых запросов вроде), но сам никогда не пользовался.
  7. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Ок, пусть монопольно. В теории вариант такой: программно убить запущенный сеанс, зайти монопольно, передвинуть ТА, закрыть сеанс и опять запустить первоночальный сеанс. Средствами ОС это можно сделать? Или как ещё?
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да. Можно. Написать скрипт и запускать по расписанию раз в месяц. Ну и в самой 1с ПриНачалеРаботыСистемы добавить перенос ТА без всяких вопросов о необходимости переноса
  9. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Конечно можно.

    Приблизительный вариант:
    1. Завершение работы пользователя:
    Можно завершать процесс taskkill'ом, но, IMHO, лучше через ОбработкаОжидания периодически проверять дату, флаг-файл и т.п. - при совпадении условий - ЗавершитьРаботуСистемы(0);
    2. Планировщиком запускаете 1С под нужным пользователем (ключи командной строки нагуглите), в процедуре ПриНачалеРаботыСистемы переносите ТА и завершаете работу системы;
    3. Планировщиком запускаете 1С под первоначальным пользователем.
  10. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Сделал через ОбработкаОжидания() и планировщик задач операционной системы. Вроде работает. В свойствах терминальных сеансов пользователей поставил "Завершение отключённого сеанса" = 2 часа. Все сессии 1с к полночи будут отключаться, кроме моего одного работающего фоного, что позволит 1ске в начале суток сначала себя закрыть, потом запуститься монопольно и без вопросов к пользователю перевести ТА.
    Всем спасибо
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не есть это хорошо. У вас будет подводный камень. При не корректном выходе одного из пользователей в каталоге БД останется файлик 1SUSERS.DBF. При старте монопольно 1с предложит переиндексировать БД. Окно с вопросом модальное и будет висеть до бесконечности. Поэтому перед запуском в монопольном режиме рекомендую удалять вышеупомянутый файл
  12. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Спасибо. Вылез ещё один камень, не могу понять что и как. Запуск в полночь 1с я осуществляю в Windows 2003 через "Панель управления/Назначенные задания". Там создал задание, запускающееся от имени пользователя Робот, в терминальном сеансе которого и крутится 1ска без участия человека. Данный терминальный сеанс постоянно запущен. Первые несколь раз при запуске "назначенного задания" 1ска нормально запускалась в сеансе Робота, но на данный момент при запуске "назначенного задания" 1ска не стартует в сеансе Робота, я вижу только запущенный процесс 1ски от Робота
  13. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Точно не помню, но вроде бы похожее происходит когда для пользователя нет открытого сеанса или когда их несколько (терминальный и консольный).
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да есть такой прикол. Рекомендую запускать ваше задание не из под терминальной сессии, а с консоли сервера.
    Надеюсь сам сервер у вас не является рабочим местом))))))))))))))
  15. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Что значит "запускать ваше задание"? Задание ведь запускается само операционной системой по расписанию, а не руками за какимто рабочим местом или в консоли. Кстати сам сервер тоже является рабочим местом, но пользователь работает за ним тоже запуская терминальный сеанс

    Сенас Робота запущен у меня только один, всё равно запускается только процес 1с, а не сама задача в нём.Но ведь самый прикол что первоночально всё работало и запускались задачи

    Вложения:

  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    все... дальше ехать некуда... Вы мне объясните: каким образом вы ЛОКАЛЬНО умудряетесь запустить терминальную сессию???????????????
  17. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    :) Что в Вашем понимании локально? Терминальную сессию (RDP сеанс) можно запустить с любого компьютера находящегося в сети, или даже с любого компьютера в интернете (зная IP сервера нашего). Точно также и на самом сервере пользователь может запустить RDP сеанс. Т.е. один из наших пользователей работает физически за сервером, но не в консоли, а запуская RDP
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Извиняюсь за резкость, но вы говорите полную чушь. Локально вы запускаете именно консольный сеанс. Если вы считаете что зашли не под администратором - это еще ничего не значит. Вот вам наглядный пример: удалите в свойствах пользователя под которым подключаетесь локально членство в группах "пользователи удаленного рабочего стола" и вы все равно авторизируетесь.

    З/Ы Работать локально на сервере это все равно что на вертолете за хлебом ездить. Можно, но не рационально.

    Хорошо что хоть Серега этой темы не видит......
  19. TopicStarter Overlay
    evgPinsk
    Offline

    evgPinsk Опытный в 1С

    Регистрация:
    27 окт 2010
    Сообщения:
    193
    Симпатии:
    0
    Баллы:
    26
    Я что-то не могу Вас понять и хотя дискуссия ушла наверное чуть в сторону от моей проблемы, но можно продолжить. Возможно я путаюсь в определениях, но понимаю так: у нас есть локальная сеть. В ней есть сервер, на нём OS Windows 2003. При запуске OS на сервере мы можем зайти в неё консольно под каким-то юзером, тем самым у нас появится один сеасн - консольный. Далее на этом же сервере или на любой другой машине в сети (или я находясь у себя дома) можно подключиться к этому серверу под чьим-то логином. В системе появится ещё один, уже RDP сеанс. Сколько пользовователей подключиться столько и будет RDP сеансов. На фото которое я выкладывал в ответе №15 видно что подключено 3 пользователя: Аня консольно, Бот и Администратор через RDP. Администратор это я - сидел физически дома, Бот - это сеанс робота в котором постоянно крутится 1ска, которая в полночь должна запускаться монопольно и смещать ТА. Для этого в операционной системе я определил назначенные задания, которые выполняются под пользователем Бот, одно из которых запускает 1с монопольно в полночь. Так вот при срабатывании данного задания 1с не запускается как задча в сеансе бота, а виден только процесс 1с под этим пользователем.
    Для решения данной проблемы Вы посоветовали мне:
    Вот данный совет я и не понял, я не понимаю как сделать чтобы назначенное задание запускалось с консоли сервера
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    С консоли - значит ЛОКАЛЬНО. Вы действительно путаетесь в терминах. Просто как-то не правильно что на сервере еще и локально работают. На то и рассчитано что локально должны выполнятся как раз фоновые задания. Конечно допустимо что они могут выполнятся и в фоне удаленных сеансов... Но зачастую это приводит к проблемам. Как в вашем случае.
    Из вышеописанного понятно что задание выполнилось и 1с запустилась. И опять у вас "блуждает" терминология. Сеанс запущен. Значит задача сработала. Для разбора полетов неплохо было бы видеть скрипт который вы там запускаете

Поделиться этой страницей