Имя: Пароль:
1C
1С v8
Передать ТЗ с сервера на клиент
0 John83
 
16.03.22
22:16
УПП 1.3 толстый клиент
Нужно из привилегированного модуля передать ТЗ в модуль внешней обработки заполнения ТЧ.
Пишу в функции прив. модуля

тз = ОбщегоНазначения.ТаблицаЗначенийВМассив(НаборДвижений);
Возврат тз;

Но ругается Попытка передачи с сервера клиенту мутабельного значения 2-го параметра метода
Это же массив. Что ему не нравится?
1 VladZ
 
16.03.22
22:44
(0) Не нужно передавать ТЗ с сервера на клиент.
2 Мимохожий Однако
 
16.03.22
23:16
из ТЗ в массив. Передать. А потом из массива в ТЗ )
3 John83
 
16.03.22
23:27
(2) ОбщегоНазначения.ТаблицаЗначенийВМассив(НаборДвижений)
оно так и делает, по факту передается массив. Переменную неудачно обозвал
4 sandal_r
 
16.03.22
23:59
где-то внутри НаборДвижений лежит мутабельный объект
5 Said_We
 
17.03.22
00:46
Объекты бывают мутабельные и иммутабельные. Значение иммутабельного объекта нельзя изменить после того, как он был создан, а значение мутабельного можно.

1С решило что массив иммутабельный объект, а ТЗ мутабельный.
Логики тут можно не искать.
Просто где нарисовали возможность передачи с клиента и обратно, назвали иммутабельным объектом. А где нет, там значит мутабельный объект.
Как только нарисуют передачу ТЗ с клиента на сервер и обратно (грозятся каждый раз более 10 лет), то и ТЗ перестанет быть мутабельным объектом.
6 OldCondom
 
17.03.22
01:53
Нет никакого смысла передавать ТЗ на клиент.
На клиенте рисуем и складываем 2+2, все.
7 Chai Nic
 
17.03.22
07:02
(5) По-моему тут дело не в мутабельности, а во-первых в сериализуемости, во-вторых в совместимости с джаваскриптом.
8 John83
 
17.03.22
10:58
(4) так и есть - ссылка на документ
9 timurhv
 
17.03.22
11:10
(8) Ссылка - не мутабельный.
НаборДвижений - тут что? Судя по названию - не таблица значений. НаборДвижений.Выгрузить() ?
10 acht
 
17.03.22
12:20
(7) > в совместимости с джаваскриптом.
И животноводство!
11 John83
 
17.03.22
12:24
(9) НаборДвижений = Документы.АктСверкиВзаиморасчетов.ПустаяСсылка().ПоДаннымОрганизации.Выгрузить()
12 Малыш Джон
 
17.03.22
13:28
(11) Выгрузить() - это ТЗ
13 John83
 
17.03.22
13:38
(12) фыва = ОбщегоНазначения.ТаблицаЗначенийВМассив(НаборДвижений);
возврат фыва
14 Малыш Джон
 
17.03.22
13:44
(13) ну значит, как и писали выше - в одной из колонок таблицу - мутабельное значение
15 Малыш Джон
 
17.03.22
13:45
(13) Попробуй выгружать не все сразу, а добавлять по колонке и пробовать, на какой споткнется
16 John83
 
17.03.22
13:52
(15) что тут мутабельное?
https://ibb.co/6XxWRPd
17 Малыш Джон
 
17.03.22
13:57
(16)  ¯\_(ツ)_/¯
18 Малыш Джон
 
17.03.22
13:58
(16) как говорят герои: никто, кроме тебя.
Пробуй (15), потом нам расскажешь, что именно было.
19 John83
 
17.03.22
14:15
сделал вообще
НаборДвижений.Очистить();
НаборДвижений.Свернуть("Дата","Дебет, Кредит");
тз = ОбщегоНазначения.ТаблицаЗначенийВМассив(НаборДвижений);
Возврат тз;

т.е. пустая тз и простые типы - все равно

{ВнешняяОбработка.Комплектация_ЗаполниениеДолейСтоимости.МодульОбъекта(59)}: Ошибка при вызове метода контекста (ЗаполнитьПоДаннымБухгалтерскогоУчета)
    фыва = крассПривилегированныйМодуль.ЗаполнитьПоДаннымБухгалтерскогоУчета(СоотвОбеъкт, ФильтрСписокСчетов, МетаданныеПоДокументам);
по причине:
Попытка передачи с сервера клиенту мутабельного значения 2-го параметра метода ЗаполнитьПоДаннымБухгалтерскогоУчета ().
20 John83
 
17.03.22
14:15
и почему 2го параметра?
21 1Сергей
 
17.03.22
14:22
(20) ну а что в ФильтрСписокСчетов?
22 John83
 
17.03.22
14:29
(21) ФильтрСписокСчетов = Новый массив();
внутри счета БУ
23 1Сергей
 
17.03.22
14:32
(22) точно не реквизит объекта или формы?
24 Малыш Джон
 
17.03.22
14:33
(19) а СоотвОбеъкт - это чисто случайно не соответствие объектов?
25 John83
 
17.03.22
14:34
(24)     СоотвОбеъкт = Новый Соответствие();
    Для Каждого рек Из Метаданные.Документы.АктСверкиВзаиморасчетов.Реквизиты Цикл
        СоотвОбеъкт.Вставить(рек.Имя, Объект[рек.Имя]);
    КонецЦикла;
26 John83
 
17.03.22
14:36
(23)     ФильтрСписокСчетов = Новый массив();
    Для каждого СтрокаСчета Из Объект.СписокСчетов Цикл
        Если НЕ ЗначениеЗаполнено(СтрокаСчета.Счет) или СтрокаСчета.УчаствуетВРасчетах = Ложь Или Найти(СтрокаСчета.Счет.Код, 60)>0 Тогда
            Продолжить;
        Иначе
            ФильтрСписокСчетов.Добавить(СтрокаСчета.Счет);
        КонецЕсли;
    КонецЦикла;
27 Малыш Джон
 
17.03.22
14:45
(25) мммм, какая неожиданность...

объект - мутабельный
28 John83
 
17.03.22
14:58
в прив. модуле сделал
Функция ЗаполнитьПоДаннымБухгалтерскогоУчета(Знач Объект, Знач ФильтрСписокСчетов, Знач МетаданныеПоДокументам) Экспорт
Не знаю, на сколько правильно, но заработало
Всем спасибо!
29 ДедМорроз
 
17.03.22
21:55
Массив содержит только значения,а Т.З.в обычных формах - значения и оформление,вот последнее передать нельзя,т.к.оно не сериализуется.
И именно из-за этих косяков в управляемых формах Т.З.нет на клиенте,т.к.оформление для web-клиента не придумали,а сделать Т.З.без оформления было стыдно.
Хотя,ДанныеФормыКоллекция это и есть Т.З.и некоторая часть оформления,а другая передается в составе элементов формы.
30 acht
 
17.03.22
23:06
(29) > Массив содержит только значения,а Т.З.в обычных формах - значения и оформление
https://www.youtube.com/watch?v=OGsHshpYkiU
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший