Не перезаписывается регистр сведений

1. hoyo 10.09.21 12:16 Сейчас в теме
Доброго всем дня.
Конфигурация 1С Документооборот. Нужно программно записать пользователю должность и подразделение, которые хранятся в непериодическом регистре сведений. Не получается, ошибок никаких не выдаёт, всё отрабатывает, в отладке вижу что пользователь правильный, должность и подразделения правильные. Но после выполнения запись в регистре не меняется, остаются старые должность и подразделение. Пытался тремя разными способами, везде так. Уже обменДанными.Загрузка = Истина воткнул, не помогло. Может кто сталкивался, в чём причина?

Пробовал так:
Набор = РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьНаборЗаписей();
	Набор.Отбор.Пользователь.Установить(НовПольз.Ссылка);
		
	НоваяЗапись = Набор.Добавить();
	НоваяЗапись.Пользователь = НовПольз.Ссылка;
	НоваяЗапись.Должность = ДолжСсылка;
        НоваяЗапись.Подразделение = ПодрСсылка;
	Набор.ОбменДанными.Загрузка = Истина;
	Набор.Записать();
Показать


И так:
ЗаписьРегистра = РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьМенеджерЗаписи();
		ЗаписьРегистра.Пользователь = НовПольз.Ссылка;
		
		ЗаписьРегистра.Прочитать();//пробовал и с этой строкой и без неё
		
		ЗаписьРегистра.Должность = ДолжСсылка;
		ЗаписьРегистра.Подразделение = ПодрСсылка;
			
		ЗаписьРегистра.Записать(Истина);
Показать


Нашёл стандартную процедуру в Документообороте, вызываю её. Те же яйца, только в профиль. Текст процедуры:
Процедура ПеренестиПользователяВПодразделение(Пользователь, Подразделение) Экспорт
	
	НачатьТранзакцию();
	
	Попытка
		
		Блокировка = Новый БлокировкаДанных;
		ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи");
		ЭлементБлокировки.УстановитьЗначение("Ссылка", Пользователь);
		ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователяхДокументооборот");
		ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь);
		Блокировка.Заблокировать();
		
		Запись = РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьМенеджерЗаписи();
		Запись.Пользователь = Пользователь;
		Запись.Прочитать();
		
		Если Запись.Подразделение <> Подразделение Тогда
			
			Набор = РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьНаборЗаписей();
			Набор.Отбор.Пользователь.Установить(Пользователь);
			
			НоваяЗапись = Набор.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяЗапись, Запись);
			НоваяЗапись.Подразделение = Подразделение;
			НоваяЗапись.Пользователь = Пользователь;
			
			Набор.Записать();
			
		КонецЕсли;
		
		ПользовательОбъект = Пользователь.ПолучитьОбъект();
		Если ПользовательОбъект.Подразделение <> Подразделение Тогда
			ПользовательОбъект.Подразделение = Подразделение;
			ПользовательОбъект.Записать();
		КонецЕсли;
		
		ЗафиксироватьТранзакцию();
		
	Исключение
		
		ОтменитьТранзакцию();
		ВызватьИсключение;
		
	КонецПопытки;
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 10.09.21 12:23 Сейчас в теме
(1) может пользователь другой?
5. slavyan_arena 10.09.21 12:27 Сейчас в теме
(1)
Здравствуйте.
скорее всего у регистра есть регистратор
и запись без регистратора не будет производиться, нужно указывать ссылку на документ регистратор
7. slavyan_arena 10.09.21 12:43 Сейчас в теме
(5)
вот пример рабочего кода, сегодня делал:

				поискФормы = регистрыСведений._ИспользованиеФорм.СоздатьНаборЗаписей();
		поискФормы.Отбор.ШифрФормы.Значение = ТекСтрока.Шифр;
		поискФормы.Отбор.ШифрФормы.Использование = истина;
		поискФормы.Прочитать();
		если поискФормы.Количество()>0 тогда 
			НовыйДвиж = поискФормы.Получить(0);
		иначе
			НовыйДвиж = регистрыСведений._ИспользованиеФорм.СоздатьМенеджерЗаписи();
		КонецЕсли;	
		НовыйДвиж.Местонахождение = перечисления._Местонахождение.Механика;
		НовыйДвиж.ФормыЗаливки = ТекСтрока.Изделие;
		НовыйДвиж.Пригодность = перечисления._ПригодностьФорм.МожноИспользовать;
		НовыйДвиж.Расточена = Ложь;
		НовыйДвиж.ШифрФормы = ТекСтрока.Шифр;
		если поискФормы.Количество()>0 тогда
			ПоискФормы.Записать();
		иначе	
			НовыйДвиж.Записать();
		КонецЕсли;	
Показать
9. retr0 10.09.21 12:56 Сейчас в теме
(7) И чем этот вариант будет отличаться от его первого примера?
Плюс у тебя какие-то странные вообще манипуляции, СоздатьНабор затем СоздатьМенеджер. Я бы твой вариант вообще никому не рекомендовал...
10. slavyan_arena 10.09.21 13:00 Сейчас в теме
(9)
хе хе учитесь батенька )))
если понимаешь как это будет работать можно писать что угодно

а если по существу:
он пытается создать... а ему нужно изменить имеющуюся запись
11. retr0 10.09.21 13:06 Сейчас в теме
(10) ХЕ ХЕ ХЕ. Сейчас бы СоздаватьНабор, а потом СоздаватьЗапись. вместо того чтобы добавить в свой набор просто эту же запись. ХЕ ХЕ ХЕ. Пиши как угодно только свои наработки не показывай никому, еще и с таким стилем написания кода. ХЕ ХЕ ХЕ ХЕ ХЕ ХЕ ХЕ
13. slavyan_arena 10.09.21 13:11 Сейчас в теме
(11)
Но тем не менее этот код работает
и работает безупречно

где-то вы в лесу... повторюсь, не нужно добавлять, нужно изменить тем более что вот это
ЗаписьРегистра.Записать(Истина);
нормально не работает если есть регистратор

мне плевать на стиль, как хочу так и пишу
14. retr0 10.09.21 13:17 Сейчас в теме
(13) В каком лесу, Вася? Я тебе еще раз повторю пиши как хочешь, только свои художества не рекомендуй никому. Я бы тебя за твой говнокод пинком погнал с работы.
17. slavyan_arena 10.09.21 13:30 Сейчас в теме
(14)
)))

(14)
Я бы тебя за твой говнокод пинком погнал с работы.


ты бы бегал за мной и уговаривал, а я бы тебя послал

ладно мне надоели ваши придирки, удачи!

P.S. и да работа это для лохов )))
18. пользователь 10.09.21 13:33
Сообщение было скрыто модератором.
...
15. FatPanzer 10.09.21 13:18 Сейчас в теме
(13)
Но тем не менее этот код работает
и работает безупречно
Говно тоже содержит калории, и им можно даже питаться безупречно.
мне плевать на стиль, как хочу так и пишу
Удачи в профессии!
16. slavyan_arena 10.09.21 13:27 Сейчас в теме
(15)
10 лет уже и все идеально
параллельно еще игры пишу на других языках ;)
12. retr0 10.09.21 13:07 Сейчас в теме
(1)
Набор = РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьНаборЗаписей();
Набор.Отбор.Пользователь.Установить(НовПольз.Ссылка);

НоваяЗапись = Набор.Добавить();


Ты ставишь отбор по пользователю, и добавляешь в набор новую запись и типа получается у тебя при записи уже будет не 1 пользователь а 2 с разными должностями и подразделениями.
2. user1278383 5 10.09.21 12:22 Сейчас в теме
НоваяЗапись = РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьМенеджерЗаписи();
		НоваяЗапись.Пользователь = СозданныйПользователь;
		НоваяЗапись.Подразделение = СведенияПользователей.Подразделение;
		НоваяЗапись.Должность = СведенияПользователей.Должность;
		НоваяЗапись.ГрафикРаботы = СведенияПользователей.ГрафикРаботы;
		НоваяЗапись.Ранг = СведенияПользователей.Ранг;
		НоваяЗапись.Записать();
3. burgomister 59 10.09.21 12:22 Сейчас в теме
Может, прав не хватает? Попробуйте так:
УстановитьПривилегированныйРежим(Истина);
6. retr0 10.09.21 12:30 Сейчас в теме
(3) если бы не хватало прав так и писало что нет прав, он же говорит нет ошибок
8. starjevschik 10.09.21 12:47 Сейчас в теме
Я б проверил значения параметров. Которые передаются при записи и которые потом проверяются на наличие записи.
Вообще у 1с есть отладка, это одно из немногого, что у 1с есть полезного.
19. burgomister 59 10.09.21 14:52 Сейчас в теме
(8) Согласен, надо проверить типы значений, которые должны совпадать с типом в регистре.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот