Самопроизвольное выполнение кода. Мистика?

1. nomad_irk 68 19.08.19 12:32 Сейчас в теме
Дано: Платформа 1С 8.3.14.1565.
Конфигурация: ЗУП 3.1.
Клиент-серверный вариант.

Суть проблемы: прерывание обмена с сайтом BITRIX без каких-либо сообщений об ошибках и запуск процесса обмена с самого начала, но вообще не уверен, что проблемы именно с обменом. Скорее всего, так будут себя вести все длительные операции, инициированные из формы по кнопке.

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

Для тестирования создал обработку, с полем для выбора узла обмена и кнопкой "выполнить обмен":


В ходе тестирования выяснилось, что процесс начинается с серверного вызова:


Запуск обмена по кнопке начинается с вызова клиентской процедуры в модуле формы(что вполне ожидаемо).

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

Никто не сталкивался?

Для меня это пока выглядит как мистика, либо очередной глюк платформы 1С.
Вознаграждение за ответ
Показать полностью
Найденные решения
39. BruSeV 05.09.19 09:51 Сейчас в теме +3 $m
7200 - это как раз 2 часа! Если рабочий процесс был создан ранее начала выполнения обмена - как раз и упадет раньше. Регламентные задания и фоновое выполнение задач - разные вещи. Все сходиться в пользу моей версии. Можно попробовать перезапуск до суток увеличить - 86400 или вообще отключить - 0 тогда будет точно ясно в этом дело или нет!
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. user623969_dusa 19.08.19 13:06 Сейчас в теме
(1) в чем конкретно мистика - то
Сам процесс обмена выполняется без ошибок,

мистика, что без ошибок и при этом это 1с? повтор кода может быть не только из-за регламентного задания но и обработчиков ожидания
4. nomad_irk 68 19.08.19 13:21 Сейчас в теме
15. ben19791010 03.09.19 06:50 Сейчас в теме
(1)
Никто не сталкивался?
а если всем запретить выполнение регламентных, оставить только себе
16. nomad_irk 68 03.09.19 07:55 Сейчас в теме
(15) Каким образом это сделать?
19. ben19791010 03.09.19 13:24 Сейчас в теме
(16)
/AllowExecuteScheduledJobs –Off
но нужно это у всех юзеров в командной прописать, иначе понту ноль будет
20. nomad_irk 68 03.09.19 13:29 Сейчас в теме
(19) я вообще запрещал регламентные задания через консоль кластера 1С, никак не влияет.
3. nomad_irk 68 19.08.19 13:18 Сейчас в теме
Да нет обработчиков ожидания, внешняя обработка создана с нуля только для тестирования обмена.
Либо рассказывайте, как искать этот самый обработчик ожидания.
5. Blackspb 25.08.19 16:07 Сейчас в теме
Судя по описанному Вами поведению, регламентное задание 1С завершается аварийно и запускается повторно. Попробуйте установить количество повторов равным 0 в настройках регламентного задания.
6. nomad_irk 68 02.09.19 10:34 Сейчас в теме
(5)нет. Все работает без привлечения регламентных заданий. Нажимаю кнопку на форме внешней обработки, вызывается серверный метод ВыполнитьОбмен() и все.
7. TODD22 18 02.09.19 10:46 Сейчас в теме
(6)Попробуй для эксперимента заблокировать выполнение рег заданий на сервере и посмотри будет повторно запускаться или нет.
8. nomad_irk 68 02.09.19 11:08 Сейчас в теме
Даже если не будет, как мне побороть произвольный запуск при работающих регламентных заданиях? :)
Выключать регламентные задания совсем на рабочей БД нельзя.
9. TODD22 18 02.09.19 11:15 Сейчас в теме
(8)Для начала бы убедится в этом дело или нет.
10. nomad_irk 68 02.09.19 11:43 Сейчас в теме
Проверил. Проблема не в регламентных заданиях. У меня еще больше вопросов появилось........

В логе обмена все выглядить вот так:



Список используемых регл. заданий:


на момент проверки регламентные задания блокированы через консоль кластера 1С.
31. Aftee 04.09.19 09:01 Сейчас в теме
(10) Получается, что прерывание идет на обработке пользователей? В тестовой выгрузке такое же количество обрабатывается?
32. nomad_irk 68 04.09.19 09:16 Сейчас в теме
(31) Да, именно на обработке пользователей на стороне Битрикса.
Да, тестовая выгрузка выполняется из только что сделанной копии рабочей БД.
35. Aftee 04.09.19 10:05 Сейчас в теме
(32) во время обработки пользователей файл как-то задействован?
36. nomad_irk 68 04.09.19 10:20 Сейчас в теме
(35)Со стороны 1С - точно нет, т.к. он отправлен в сторону Битрикс перед обработкой.
Со стороны Битрикс - обрабатывается. Какой еще процесс может обращаться к этому файлу - не в курсе, нужно узнавать у админов Битрикса. Админы Битрикса про проблему вкурсе, пока молчат.
11. kauksi 212 02.09.19 16:23 Сейчас в теме
Возможно, база прописана в консоли сервера 1с два раза. В одной вы заблокировали регзадания, а во второй нет.
12. nomad_irk 68 02.09.19 16:53 Сейчас в теме
не, не....если бы такое было, то там чудеса посерьезнее были бы.

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

Если бы работало регламентное задание, то были бы конфликты доступа к файлу лога, чего не наблюдается вообще.
13. rusmil 262 02.09.19 17:09 Сейчас в теме
Проблема может быть на стороне хостинга. У нас была ситуация: файл обмена маленький - обмен выполнялся без проблем. Файл обмена большой на хостинге возникал обрыв соединения. Может проблема не в 1С?
14. nomad_irk 68 02.09.19 20:23 Сейчас в теме
(13) Да вот пока все указывает, что проблема именно в 1С, но в чем именно - загадка.
17. kot30688 3 03.09.19 10:47 Сейчас в теме
А почему у Вас выполнение происходит на сервере без контекста? Понятно, что не хотите контекст формы передавать, но в данном конкретном случае это не имеет значения. Попробуйте просто на сервере выполнить процедуру. Это первое. Второе - процедура Б_ОбменСКПСервер.ВыполнитьОбмен() - это процедура, которая вызывает обмен, правильно понимаю? Если так, то никакого перезапуска фонового задания не происходит, а происходит повторный вызов этой процедуры. Поищите, что еще вызывает эту процедуру, если это задание обмена - отключите его на время отладки, попробуйте еще раз запустить вручную. Третье - ИМХО, самое действенное, но нужно чтоб была включена отладка на сервере, на рабочем сервере делать не рекомендуется. Поставить точку отладки в начале процедуры обмена (которая Б_ОбменСКПСервер.ВыполнитьОбмен()), посмотреть по стеку вызовов откуда пришел второй вызов этой процедуры. Ну а по результатам уже будет понятней что там происходит
18. nomad_irk 68 03.09.19 11:38 Сейчас в теме
(17)
Б_ОбменСКПСервер.ВыполнитьОбмен() - это процедура, которая вызывает обмен, правильно понимаю? Если так, то никакого перезапуска фонового задания не происходит, а происходит повторный вызов этой процедуры. Поищите, что еще вызывает эту процедуру, если это задание обмена - отключите его на время отладки, попробуйте еще раз запустить вручную.

Понимаете правильно.
Про фоновые задания вообще речи не идет, т.к. на время теста я отключал регламентные задания вообще.

НаСервере/НаСервереБезКонтекста - абсолютно без разницы, изначально было НаСервере, я уж подумал, мож форма чего чудит, убрал контекст, ничего не поменялось.

Стек вызовов при первом запуске выглядит вполне стандартно:


При самопроизвольном запуске стек выглядит так же, за исключением того, что выполнение кода начинается сразу с вызова(выделено красным):
21. kot30688 3 04.09.19 02:20 Сейчас в теме
(18)интересный случай, однако. А есть ли что-то еще, что вызывает эту же процедуру? Ну, может подписка какая. А и еще, настроено ли автоматическое подключение к фоновым заданиям? И в коде нету ли какой-нибудь обработки исключений, которая запускает обмен заново?
23. nomad_irk 68 04.09.19 06:08 Сейчас в теме
(21) Обмен запускается мной из внешней обработки, напрямую, без всяких фоновых заданий, нажатием на кнопку. Самопроизвольно он запускается так же из этой внешней обработки, но сразу с серверной части кода.

Даже если бы работали фоновые задания или исключения, оно бы из обработки не запускалось, а запускалось бы из какого-то другого места и конкурировало бы за файл лога.
25. kot30688 3 04.09.19 07:23 Сейчас в теме
(23)Ну да, что-то я не внимательно прочитал, что запускается из той же формы.
Пробовал выполнить обмен на копии базы - выполняется корректно, до завершения. В копии все регламентные выключены.
- там платформа та же и вариант клиент-серверный?
27. nomad_irk 68 04.09.19 07:56 Сейчас в теме
(25)Версии платформы - одинаковые, так же клиент-сервер. Сама база на другом SQL сервере и сервере 1С, естественно.
29. kot30688 3 04.09.19 08:53 Сейчас в теме
(27)тогда какой-то локальный глюк. Дальше только танцы с бубном: почистить кэш, переписать процедуру и прочее. Кстати, насчет проверки кэша, под другим пользователем каким-нибудь, не пробовали запускать?
30. nomad_irk 68 04.09.19 08:58 Сейчас в теме
(29)Кэш чистил - без изменений вообще.
Попробую под другим пользователем еще пустить.....
22. Артано 759 04.09.19 03:10 Сейчас в теме
А если в функции которая запускает обмен выполнять проверку на уже запущенные задания обмена? Ну или если есть возможность поставить режим отладки, то точку останова там и посмотреть стек вызовов.
24. nomad_irk 68 04.09.19 06:14 Сейчас в теме
(22) Стек вызовов я уже показал в (18), процедура обмена запускается из внешней обработки сперва мной, нажатием кнопки на форме, а затем спонтанно самопроизвольно из этой же обработки. Разница лишь в том, что при нажатии на кнопку отрабатывает сначала клиентский код, вызывающий серверный без контекста, а самопроизвольный запуск начинается сразу с серверного участка кода.
26. Fox-trot 156 04.09.19 07:31 Сейчас в теме
видимо глюк в процедуре Б_ОбменСКПСервер
попробуй его обновить = запиши его заново
28. nomad_irk 68 04.09.19 07:57 Сейчас в теме
(26) ЭЭЭ....попробую конечно, но на копии базы выполнятся нормально.
33. Fox-trot 156 04.09.19 09:35 Сейчас в теме
(28) раз уж в копии регламенты остановил, то попробуй и регламент перезаписать
34. nomad_irk 68 04.09.19 09:45 Сейчас в теме
(33) Да я на продуктиве регламенты останавливал - бестолку.
37. BruSeV 05.09.19 07:18 Сейчас в теме
Была однажды проблема: долгоиграющий отчет, то выполниться, то завершиться. Причина оказалась в перезапуске рабочих процессов. В отчете тоже использовалось фоновое задание. Проверьте, может тоже рабочий процесс с фоновым заданием завершается раньше чем Bitrix успевает обработать выгрузку..
Прикрепленные файлы:
38. nomad_irk 68 05.09.19 08:00 Сейчас в теме
(37) регламентные задания отключены. интервал перезапуска - 7200, но оно успевает сглючить за примерно 1.5-2 часа
39. BruSeV 05.09.19 09:51 Сейчас в теме +3 $m
7200 - это как раз 2 часа! Если рабочий процесс был создан ранее начала выполнения обмена - как раз и упадет раньше. Регламентные задания и фоновое выполнение задач - разные вещи. Все сходиться в пользу моей версии. Можно попробовать перезапуск до суток увеличить - 86400 или вообще отключить - 0 тогда будет точно ясно в этом дело или нет!
40. nomad_irk 68 05.09.19 10:05 Сейчас в теме
(39) Да, этот вариант очень похож на правду, т.к. судя по логам глюк именно через 2 часа происходил.
Про интервал перезапуска в 7200 я знал с самого начала, видимо, меня переглючило и я был уверен, что это более 2-х часов.
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Программист 1С:ERP
Москва
зарплата от 100 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день