Имя: Пароль:
1C
1С v8
Изменение реквизита типа УИД отрабатывает не так же, как и других типов.
,
0 ReaLg
 
07.11.20
18:01
Что-то я туплю.
Есть ТЧ документа.
В ТЧ есть колонка с типом УИД.
Меняю значения строки в серверной функции.

Получаю строку:

---
ОтборС = Новый Структура;
ОтборС.Вставить("УИДСтрокиЗаказы", УИДСтрокиЗаказы);
НС = Объект.Заказы.НайтиСтроки(ОтборС);
Если НС.Количество() < 1 Тогда
  РезультатС.Результат = Ложь;
  РезультатС.ОписаниеОшибки = "Не найдена строка для переноса.";
  Возврат РезультатС;
КонецЕсли;
СтараяСтрокаЗНР = НС[0];
----

Потом меняю:
---
НовыйУИДСтрокиЗаказа = Новый УникальныйИдентификатор;
---
СтараяСтрокаЗНР.Заказ = НовыйЗаказО.Ссылка;
СтараяСтрокаЗНР.УИДСтрокиЗаказы = НовыйУИДСтрокиЗаказа;
СтараяСтрокаЗНР.ДатаОтгрузки = НоваяДатаОтгрузки;
СтараяСтрокаЗНР.Покупатель = НовыйПокупатель;
СтараяСтрокаЗНР.Соглашение = НовоеСоглашение;      
---
Все, дальше фиксация изменений и возврат на клиент:
---
ЗафиксироватьТранзакцию();
Возврат РезультатС;
---
При этом все остальные реквизиты, ДатаОтгрузки, например, меняются нормально, а УИДСтрокиЗаказы в момент возвращения
на клиент приобретает старое значение.
Я в отладчике вижу, что на сервере новое значение, при возврате на клиент - старое.

Я сделал костыль конечно, с возвратом нового УИДа на клиент и присвоением там, но хочется понять что происходит :))
1 ReaLg
 
07.11.20
18:49
Вопрос снят.
Нашел, где туплю.
Вот что Миста животворящая делает :))
2 ДенисЧ
 
07.11.20
18:55
И самое главное - никому не рассказывай, даже если тебя будут пытать...
3 Злопчинский
 
07.11.20
19:24
(2) запишите меня в палачи!
4 ДенисЧ
 
07.11.20
19:32
5 ReaLg
 
07.11.20
21:03
(2) Ну, как бы иногда не хочется всем прям говорить, что ты дурак. Но если Вы настаиваете :))

Вызов был вида
РезультатС = ПеренестиСтрокуВНовыйЗаказ(Элементы.Заказы.ТекущиеДанные.УИДСтрокиЗаказы, ...

Переделал на
ТекУИД = Элементы.Заказы.ТекущиеДанные.УИДСтрокиЗаказы;
РезультатС = ПеренестиСтрокуВНовыйЗаказ(ТекУИД, ...
6 ДенисЧ
 
07.11.20
21:06
7 ReaLg
 
07.11.20
21:11
Сделал тестовую базу, Документ, ТЧ, одна кнопка.

&НаКлиенте
Процедура ИзменитьСтроку(Команда)  
  //Вариант 1
  ТекУИД = Элементы.ТабличнаяЧасть1.ТекущиеДанные.УИД;
  ИзменитьСтрокуНаСервере(ТекУИД);
  
  //Вариант 2
  //ИзменитьСтрокуНаСервере(Элементы.ТабличнаяЧасть1.ТекущиеДанные.УИД);
КонецПроцедуры

&НаСервере
Процедура ИзменитьСтрокуНаСервере(УИД)
  Если Объект.ТабличнаяЧасть1.Количество() > 0 Тогда
    ТекСтрока = Объект.ТабличнаяЧасть1.Получить(0);
    ТекСтрока.РСтрока = "112233";
    ТекСтрока.УИД = Новый УникальныйИдентификатор;
  КонецЕсли;
КонецПроцедуры

Вариант1 работает, Вариант2 нет.
8 ДНН
 
07.11.20
21:15
(7) Если во втором варианте добавить передачу параметра по значению, то должно работать. Просто при передаче с клиента на сервер всегда создаются копии параметров, а потом едут обратно на клиента. Вот старый УИД и приезжал обратно
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший