Имя: Пароль:
1C
1С v8
Внешние обработки, потеря контекста. Linux+PostgreSQL
0 x3on
 
13.09.23
17:32
Коллеги, добрый день.

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

Изначально:
Есть самописная конфигурация работающая в режиме "Обычное приложение", экземпляры которой развернуты на нескольких сотнях
рабочих станций (все windows 10, платформа 1С 8.3.18), часть в файловом режиме, часть клиент-серверном (СУБД MSSQL 2012)

Ситуация:
В качестве пилота перевели несколько экземпляров ИБ на клиент-серверное взаимодействие с использованием СУБД PostgeSQL:
Windows 10 с виртуальной машиной Ubuntu, на которой в свою очередь установлены Сервер приложений 1С 8.3.18, СУБД PostgeSQL.
Соответственно база живет в СУБД, и подключена к 1С Серверу.

На этих реализациях появилось странное поведение при исполнении внешних обработок, периодически переменные методов модуля объекта обработки или реквизиты обработки будто теряют значение, становятся не инициализированными, как следствие нарушение логики и падения программы.
Падения в модуле могут происходить при обращении к свойствам объектов где к этим же самым свойствам обращались несколькими строками ранее (в рамках одного метода)
Пример: https://i.ibb.co/ZH369t6/Error1c.png

Внешние обработки создаются и исполняются программно, закономерностей в падениях пока не зафиксировано, кроме уже описанных ранее (Все Виртуальная машина Ubuntu, Сервером 1С, PostgeSQL)
Картина следующая:
Одинаковые конфигурации, внешние обработки, платформа 1с:
ОС Win + 1C(клиент-сервер) + MSSQL = Ошибка не происходит.
ОС Win + 1С(файловая база) = Ошибка не происходит.
ОС Win + Окружение Linux(Ubuntu + 1C(клиент-сервер) + PostgeSQL) = Ошибка происходит на всех инстансах, с различной периодичностью.

Куда можно посмотреть, на что обратить внимание, во что залезть куда копнуть, быстрая и не очень гуглежка результата, к сожалению не дала, засим обращаюсь к Вам
1 lubitelxml
 
13.09.23
17:38
(0) ну сохрани нужные тебе реквизиты из ККМ в свою структуру, где она еще исчезла, там ведь простые типы данных, и далее из своей структуры заполняй.
2 АНДР
 
13.09.23
17:41
(0) У тебя тип ожидаемых данных не совпадает с передаваемым типом.
3 x3on
 
13.09.23
18:05
(1) Это лишь пример, данные "теряет" не только реквизит обработки "ККМ", переменные, реквизиты разных типов могут стать не инициализированными в различных местоположениях по ходу исполнения сценария внешней обработки (модуля обработки). Переносить значение в другие коллекции, таким образом пытаясь их сохранить - не спортивно как-то? Во первых исходя из описанного не факт что там они "сохраняться", во вторых задача найти причину такого поведения, ведь оно явно не типичное, что подтверждает удачная эксплуатация обработок на установках ОС Win + 1C(клиент-сервер) + MSSQL и тп.
4 x3on
 
13.09.23
18:20
(2) В данном примере значение и соответственно его тип вообще никуда не передается, происходит падение, потому что объект перестает существовать по крайней мере в этом конкретном вызове, соответственно не свойства не значения этого свойства, не типа значения нет - это и является сутью проблемы. Тут нет ошибки проектирования или реализации программной логики, повторюсь этот код успешно выполняется на 100% установок для файловой или MSSQL 1c.
5 lubitelxml
 
13.09.23
18:23
(4) платформу обновлять пробовал? 18 кстати текущая какая конкретно?
6 x3on
 
13.09.23
18:31
(5) Пробовал, платформы 8.3.18.1208, 8.3.22.1709, 8.3.22.1923 - ситуация одинаковая.
7 lubitelxml
 
13.09.23
18:45
(6) попробуй кеш серверный почистить...
8 x3on
 
13.09.23
19:22
(7) спасибо за совет. Завтра узнаю у коллег, если ещё не делали - попробую.
9 DrZombi
 
гуру
13.09.23
21:08
(8) 24-тый релиз попробуй :)
10 DrZombi
 
гуру
13.09.23
21:10
+ (0) "ККМ" - какого типа реквизит?
Что за Реквизит?
Переходите на Управляемые формы, там тоже можно жить.
Предлагаю отказать от режима совместимости и перейти на повышенный релиз, 21-ый к примеру... Как правило, ошибка найдется в использовании функций, которых нет в 21-ом релизе :)
11 Garykom
 
гуру
13.09.23
22:42
(0) Для внешних отчетов не стоит использовать реквизиты объекта
Только реквизиты формы

Это что я понял с УФ но у вас ОФ, хотя возможно та же проблема
Там какие то глюки с серверным кэшем, когда обработка измененная открывается снова
12 Garykom
 
гуру
13.09.23
22:43
(11)+ Если обработка совершенно новая то никаких проблем нет
Стоит в ней начать менять код и заново запускать без очистки кэша (достаточно рестарта сервера 1С) - разные глюки
13 АНДР
 
13.09.23
22:50
(4) на картинке первый раз значение заносится в структуру - пофигу на его тип, второй раз структура со значением сразу передается в качестве параметра предпоследней строки.
14 lubitelxml
 
13.09.23
23:54
(11) тоже недавно напоролся - компоновка данных как реквизит обработки не работает как надо, как реквизит формы - все ок (обработка добавленная в расширении)
15 ДедМорроз
 
14.09.23
01:56
ККМ это же внешняя компонента.
Причем здесь контекст обработки ?
16 x3on
 
14.09.23
08:00
(10) ККМ - ComОбъект, который инициируется в этой обработке и живет в ее реквизите.
ЗЫ. Перейти на УФ было бы здорово, переписать всю основную систему учета покинув пустыню легаси и войдя в дивный новый мир...красота, это конечно все будет, но не сегодня и даже не завтра.
17 x3on
 
14.09.23
08:02
(12) Чистку кэша сегодня попробуем, (7) тоже предложил этот вариант.
18 x3on
 
14.09.23
08:08
(13) Метод "ПолучитьДокумент" ожидает 2 аргумента (2 структуры), одна не заполненная - ее заполнит сам метод, вторая заполняется и передается в момент вызова. Вызов метода не происходит, соответсвенно до разбора и валидации параметров дело даже не доходит.
19 x3on
 
14.09.23
08:19
(11) Эта внешняя обрабтка не имеет форм, она не взаимодействует с пользователем интерактивно.
Да и работа армии других внешних отчетов и обработок на обычных формах, что эксплуатируются каждый день не вызывает нареканий (1с + MSSQL)
20 x3on
 
14.09.23
08:23
(15) ККМ - ComОбъект, под контекстом, в данном случае, имеется ввиду состав обработки, ее реквизиты, табличные части, макеты. Проблема с Реквизитом ККМ.
21 Logovazz
 
14.09.23
09:12
(16) COM объект на linux ???
22 arsik
 
гуру
14.09.23
09:16
(21) Ну у него клиенты то на винде. Тем более толстые.
23 Logovazz
 
14.09.23
09:20
(22) см. (19) обработка не имеет форм, не взаимодействует с пользователем интерактивно
24 arsik
 
гуру
14.09.23
09:22
(22) И чего? В толстом клиенте все запускается в контексте клиента. Там еще нужно постараться что бы в контексте сервера что то выполнилось. Только модули общие могут в контексте сервера запускаться если флаг стоит.
25 АНДР
 
14.09.23
09:53
(18), (24) При вызове метода ПолучитьДокумент() происходит неявный переход на сервер, который COM объект убивает. Создай вторую структуру до вызова и и посмотри. Передавай не ссылку, а значение.
26 Valdis2007
 
14.09.23
09:58
(0) Пример: https://i.ibb.co/ZH369t6/Error1c.png - Всегда в этом месте исключение? Или периодически нормально отрабатывает?
27 arsik
 
гуру
14.09.23
10:13
(25) Что такое "неявный переход на сервер". Даже с явным переходом контекст не должен пропадать
28 x3on
 
14.09.23
10:15
(26) Далеко не всегда, исключение возникает 2-5 раз на сотню использований в Linux окружение, в win исключений не возникает никогда.
29 x3on
 
14.09.23
10:17
(25) никуда никто не переходит и на сервер вызова нет, это клиентский метод этого же модуля.
30 x3on
 
14.09.23
13:06
Вот еще пример.
Тоже внешняя обработка, только теперь "потерялись" данные находящиеся в типе Структура.
Извиняюсь за это полотно, но как показать нагляднее не придумал.

https://i.ibb.co/D47LFgB/Error1c-2.png
31 Valdis2007
 
14.09.23
13:56
(30) по описанию это какой-то "гейзенбаг"...проблема возможно лежит на уровне работы ОС с памятью. Есть вариант не использовать это окружение?
32 Garykom
 
гуру
14.09.23
14:03
(30) Никак нельзя отказаться от использования реквизитов обработки?
Ну там на переменных в модуле сделать или еще как
33 x3on
 
14.09.23
14:31
(32) В примере из (30) потерялись данные которые не хранятся в реквизитах объекта, просто пришли как параметры метода из нижних стеков.
Боюсь вариант с рефакторингом и переносом данных в переменные или еще куда - нереален.
34 x3on
 
14.09.23
14:33
(31) Если не решим малой кровью, то будем с окружением экспериментировать, на привычную схему уходить, если уж совсем никак.
35 Garykom
 
гуру
14.09.23
14:33
(33) В 1С все передается по ссылке, поэтому глюк на нижних стеках касается и высоких
Имхо вижу два варианта:
1. Использовать старую версию платформы для древней конфы на ОФ
2. Переписать все нафиг под новую платформу и УФ
36 Garykom
 
гуру
14.09.23
14:35
(35)+ 3. Обратиться в техподдержку 1С
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший