Имя: Пароль:
1C
 
Ошибка создания записи в регистре сведений | УТ11
,
0 Lepexa207
 
25.07.24
08:52
Добрый день. Возникла такая проблема, мне необходимо сопоставлять состояния (они выставляются автоматически - Диадок), но само состояние записывается лишь в дополнительные сведения одного документа. Менеджерам и бухам необходимо видеть их и в реализации и заказе клиента.

В итоге я докопался до того, что смог отобрать значение состояния из счёта и застрял на том, чтобы записать это значение в реализации и заказе клиента, так как у меня не встаёт значение объекта при записи в регистр сведений. Я правда не понимаю в чём проблема, хотелось бы прояснений)

Вот код:

&НаСервере
Функция ПолучитьДиадок()
	
	ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "СтатусДиадок");	
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	ДополнительныеСведения.Значение КАК Значение,
	               |	ДополнительныеСведения.Свойство КАК Свойство
	               |ИЗ
	               |	РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
	               |ГДЕ
	               |	ДополнительныеСведения.Объект = &Объект
	               |	И ДополнительныеСведения.Свойство = &Свойство";
	
	Запрос.УстановитьПараметр("Объект", Объект.Ссылка);
	Запрос.УстановитьПараметр("Свойство", ДопСвойство);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		Если Выборка.Свойство = ДопСвойство Тогда
			
			Сообщить(Выборка.Значение);	
			
			Если ЗначениеЗаполнено(Объект.ДокументОснование) Тогда 
				
				РеализацияДок = Объект.ДокументОснование.ПолучитьОбъект();
				
				НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
				НоваяЗапись = НаборЗаписей.Добавить();
				НоваяЗапись.Объект = РеализацияДок; // Вот его он не записывает, хотя в отладке явно видна ссылка на Реализацию
				НоваяЗапись.Свойство = ДопСвойство;
				НоваяЗапись.Значение = Выборка.Значение; 
				
				         
			 КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
КонецФункции


Сам регистр сведений "Дополнительные сведения" является независимым, непериодическим.

Ошибка по причине:
Запись не верна! Значение поля "Объект" не может быть пустым!: ДополнительныеСведения: , Статус Диадок (Счета-фактуры выданные) (Регистр сведений: Дополнительные сведения)
1 mmg
 
25.07.24
08:58
(0) Если поле назвали "объект", это еще не означает, что туда надо писать объект.
2 Lepexa207
 
25.07.24
09:05
(1) М, там сначала идёт выбор типа данных, а после выбор документа
3 Мультук
 
гуру
25.07.24
09:09
(0)

НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Объект = РеализацияДок; // Вот его он не записывает, хотя в отладке явно видна ссылка на Реализацию
НоваяЗапись.Свойство = ДопСвойство;
НоваяЗапись.Значение = Выборка.Значение;


Хотите очистить весь регистр РегистрыСведений.ДополнительныеСведения ?
Ай молодец!

Хорошо что 1С предусмотрительно упал в ошибку.
4 ass1c
 
25.07.24
09:10
МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
                
МенеджерЗаписи.Объект = Объект.ДокументОснование.ССЫЛКА;
МенеджерЗаписи.Свойство = ДопСвойство;
МенеджерЗаписи.Значение = Выборка.Значение;
                
МенеджерЗаписи.Записать(Истина);
5 Lepexa207
 
25.07.24
09:12
(3) ну поэтому и работаю в тестовой, чтобы в случае чего откатить)
а так, забавно бы получилось. Буду знать)
6 Мультук
 
гуру
25.07.24
09:13
(4)

Вот зачем, объясните мне, вы (как множество) вместо

МенеджерЗаписи.Объект = Объект.ДокументОснование;

пишите

МенеджерЗаписи.Объект = Объект.ДокументОснование.ССЫЛКА;


ДокументОснование -- это уже ссылка. Наху Зачем от ссылки вы берете ссылку ?
7 Lepexa207
 
25.07.24
09:14
(4) Спасибо, работает, истина была рядом)
9 Timon1405
 
25.07.24
13:02
10 Lepexa207
 
25.07.24
13:13
Другой вопрос. У меня всё работает, я начал делать расширение, я выполняю данный код через сам Регистр Сведений : Дополнительные Сведения, через его Модуль набора записи.

Я написал "Область", в ней процедуру "При записи", но в итоге с "Расширения" даже не идёт отладка.

Вот код:
#Область ОбработчикиСобытий

Процедура ПриЗаписи(Отказ)
	//
	
	// Мой код
	
	//	
КонецПроцедуры 

&Вместо("ПередЗаписью")
Процедура СДР_ПередЗаписью(Отказ, Замещение)
	Сообщить("Проверка"); // Причём, этот отрабатывает
КонецПроцедуры

#КонецОбласти


В самом регистре нет ничего кроме ПередЗаписью, так что я не могу понять в чём проблема🤦
11 Мультук
 
гуру
25.07.24
13:35
(10)

1) Просто восхитительно. Был/есть типовой  код? В топку его (с)

&Вместо("ПередЗаписью")

2) Я не знаю (сталкиваюсь без фанатизма) как работают расширения, но вот
-- почему у "ПередЗаписью" есть префикс и чудное &Вместо("ПередЗаписью")
-- а у "ПриЗаписи" ни префикса, ни чудесных магических слов ?


P.S.
Жизнь вам уже второй раз подсказывает "не делай это", а вы не слышите.


P.P.S.
Интересно, а Диадок с вашими изобретениями согласен ?
Ему не поплохеет ?
12 Lepexa207
 
25.07.24
13:46
(11) Да я видел эту штуку как &Вместо, я ж и описал, что кроме ПередЗаписью нет никаких других процедур. Следовательно как я могу обратиться к ПриЗаписи в обвёртке &Вместо если его нет в самой конфигурации

Так я думал, пока не попробовал и оно заработало, спасибо)

Да и к чему тут Диадок, я просто беру же его статус и обновляю его в других, в которых он не может.
13 Мультук
 
гуру
25.07.24
13:56
(12)

>> кроме ПередЗаписью нет никаких других процедур

Сейчас нет. В данном релизе нет.


А в будущем 1С добавит "ПриЗаписи", а работать оно не будет,
ибо вы уже написали "Вместо".

(0) Вопрос к тебе
Какие еще волшебные слова ("Аннотации") можно написать вместо "Вместо" ?
14 Lepexa207
 
25.07.24
14:04
(13) Ну так я и написал &После("ПриЗаписи")
Спасибо конечно)
Перед, После, Вместо)
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший