Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Изменение реквизита типа УИД отрабатывает не так же, как и других типов.

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

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

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

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

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

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

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

&НаКлиенте
Процедура ИзменитьСтроку(Команда)  
  //Вариант 1

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

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

КонецПроцедуры

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.