Имя: Пароль:
1C
1С v8
БУ2.0 - непонятное поведение алгоритма в базе под SQL
0 ksergey
 
04.06.19
13:16
Бухгалтерия для Украины, редакция 2.0.15.1
Платформа 8.3.10.2772

Имею сложную в алгоритме и оформлении обработку загрузки данных под старой версию Бухгалтерия для Украины 1.2 под 8.2

В связи с переходом на БУ 2.0 пришлось ее переделать, учитывая сложность переделал только сам алгоритм под нюансы новой БУ 2.0
т.е. новая обработка в оформлении осталась такой же, а для работы в 2.0 запускаю её под специальным пользователем в толстом клиенте.

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


Ошибка при вызове метода контекста (Записать):
Ошибка при выполнении обработчика - 'ОбработкаПроведения':
{ОбщийМодуль.НалоговыйУчет.Модуль(591)}: Ошибка при вызове метода контекста (УстановитьУправляемуюБлокировку):
Попытка передачи с клиента на сервер мутабельного значения 2-го параметра метода УстановитьУправляемуюБлокировку ()

В чем причина нашел быстро (там действительно в вызове с толстого клиента на сервер передается в параметре структуры ТаблицаЗначений,
но мне не понятно - почему же этот алгоритм работает в файловой версии ?
И как разрешить эту проблему под SQL?

Буду балгодарен за любую помощь и дельный совет  :)
1 Провинциальный 1сник
 
04.06.19
13:20
Потому что в файловой версии не происходит передачи мутабельного объекта на сервер за неимением сервера)
2 ЛЮС
 
04.06.19
13:27
вместо таблицы можете передавать массив структур
3 ksergey
 
06.06.19
10:52
Добрый день коллеги.
Решил немного освежить тему, в связи с вновь открывшимися обстоятельствами  :)

Оказалось, что на самом деле ошибка передачи мутабельного значения вызывала вот эта структура
содержащая Новый Диапазон

СтруктураЗначенийБлокировки = Новый Структура("Период", Новый Диапазон(, ДокументОбъект.Дата));

Вопрос: почему передача этого пар-ра Новый Диапазон  вызывает такую ошибку передачи мутабельного значения?
4 ksergey
 
06.06.19
11:00
Собственно само решение нашел - обернул через ЗначениеВСтрокуВнутр(Новый Диапазон )
а в вызываемой процедуре вывернул и подсунул снова в алгоритм - всё заработало

Но вопрос у меня остался: почему передача пар-ра Новый Диапазон вызывает такую ошибку передачи мутабельного значения?
5 ptiz
 
06.06.19
11:12
(4) А хз. Судя по СП - должно передаваться.
Доступность:

Сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером. Сериализуется.
6 Провинциальный 1сник
 
07.06.19
08:05
(4) ДокументОбъект в ЗначениеВСтрокуВнутр? Ну-ну.. Возможность сериализации несериализуемого через структуру - багоюз. Серверных процессов может быть больше одного, вы это понимаете хоть?
7 ksergey
 
10.06.19
11:22
Отвечу в надежде, что привлеку еще какое-либо мнение

>>ДокументОбъект в ЗначениеВСтрокуВнутр? Ну-ну.
уважаемый Провинциальный, у меня речь идет о том, что пришлось оборачивать вот этот код
Новый Диапазон(, ДокументОбъект.Дата)  а не сам ДокументОбъект

>>Серверных процессов может быть больше одного, вы это понимаете хоть?
пож-та, поясните - это каким-то образом связано с Новый Диапазон(, ДокументОбъект.Дата)

ну и таки снова спрошу - почему этот алгоритм в файловой версии работает?
8 Провинциальный 1сник
 
14.06.19
11:04
(7) Может 1с реквизит объекта передает по ссылке, а не по значению, в целях оптимизации.. Попробуйте для интереса передать именно значение типа "дата" (для надежности можно его пропустить через сериализацию), а не реквизит объекта.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой