powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Сохранение данных в регистр сведений
18 сообщений из 18, страница 1 из 1
Сохранение данных в регистр сведений
    #35674656
TyShiSvEt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне необходимо все реквизиты справочника сохранить в регистре сведений. Редактирование и добавление элементов справочника делаю в ФормеЭлемента.
Как отследить были или нет внесены какие- нибудь изменения данных. Если изменения не вносились , то как сделать что бы в регистр сведений данные не помещались (сохранение происходит при вызове события "после записи").

Я пытаюсь сравнить 2 объекта

Объект1 = Ссылка.ПолучитьОбъект() - хранит изменяемую запись до записи в справочник

Объект2 = Ссылка.ПолучитьОбъект() - хранит измененную запись после записи в справочник

Если измененний не было, то Объект1=Объект2, но мне пишет что они не равны, хотя при просмотре в отладчике никакой разницы я не заметил Почему? ИЛИ подскажите другой способ сохранения данных в регистре.
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35674706
BestProgrammist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TyShiSvEt,
1) Изменен или нет объект относительно базы, проверять всегда в событиях "ПередЗАписью"
2) "Перед записью" для справочника элемент и его значения из базы доступны по ссылке
ЭтотОбъект.Ссылка
3) Следовательно сравниваешь значение Реквизитов из "ЭтотОбъект.ИмяРеквизита" с "ЭтотОбъект.Ссылка.ИмяРеквизита"

4) Если сравнивать со значениями хранимыми в регистре, тогда в "ПередЗаписью" нужно прочитать значения из регистра и так же сравнить их с новыми значениями элемента.
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35674741
TyShiSvEt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том что количество реквизитов изменения которых необходимо отслеживать 17 штук.
и проверять изменение каждого совсем не хочется.
С помощью Ссылка.ПолучитьОбъект() гораздо удобней.

Процедура ПередЗаписью(Отказ)
Объект1 = Ссылка.ПолучитьОбъект();
КонецПроцедуры

Процедура ПослеЗаписи()
Объект2 = Ссылка.ПолучитьОбъект();

Если Объект1 <> Объект2 тогда
Запись = РегистрыСведений.ШтатноеРасписание.СоздатьМенеджерЗаписи();
бла- бла- бла
Запись.Записать(Истина);
КонецПроцедуры

Объект1 <> Объект2 (если изменений не было), но как я уже писал что при отсутсвие изменений Объект1 и Объект2 всеравно не равны.
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35674743
TyShiSvEt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон
Объект1 <> Объект2 ЕСЛИ БЫЛИ ИЗМЕНЕНИЯ
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35674875
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Функция ОбъектыСправочникаРавны(Объект1,Объект2)

	Объект1 = Справочники.Банки.СоздатьЭлемент();
	Объект2 = Справочники.Банки.СоздатьЭлемент();
	
	Равны = (Объект1.Код=Объект2.Код) и (Объект1.Наименование=Объект2.Наименование) и (Объект1.Родитель=Объект2.Родитель) и (Объект1.Владелец=Объект2.Владелец) и (Объект1.ПометкаУдаления=Объект2.ПометкаУдаления);
	
	Если не Равны Тогда
	    Возврат Ложь;	
	КонецЕсли; 
	
	Для каждого Реквизит Из Объект1.Метаданные().Реквизиты Цикл
		ИмяРеквизита = Реквизит.Имя;
		Если не(Объект1[ИмяРеквизита]=Объект2[ИмяРеквизита]) Тогда
			Возврат Ложь;	
		КонецЕсли;     	
	КонецЦикла; 
	
	Для каждого ТабличнаяЧасть Из Объект1.Метаданные().ТабличныеЧасти Цикл
		ИмяТЧ = ТабличнаяЧасть.Имя;
		ТЧ1 = Объект1[ИмяТЧ];
		ТЧ2 = Объект2[ИмяТЧ];
		Если не(ТЧ1.Количество()=ТЧ2.Количество()) Тогда
			Возврат Ложь;	
		КонецЕсли;     	
		Для й= 0  По ТЧ1.Количество()- 1  Цикл
			Стр1 = ТЧ1[й];		
			Стр2 = ТЧ2[й];		
			Для каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
				ИмяРеквизита = Реквизит.Имя;
				Если не(Стр1[ИмяРеквизита]=Стр2[ИмяРеквизита]) Тогда
					Возврат Ложь;	
				КонецЕсли;     				
			КонецЦикла; 
		КонецЦикла; 
	КонецЦикла; 
	
	Возврат Истина;

КонецФункции
С уважением, Naf
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35674983
BestProgrammist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TyShiSvEt,
это ваша "хотелка", а не возможности 1С,
Naf привел код который допустим в 1С
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35676699
TyShiSvEt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf,
Спасибо заработало!

Но всетаки почему не работает?

Объект1 = Ссылка.ПолучитьОбъект() до записи
Объект2 = Ссылка.ПолучитьОбъект() после записи

Даже если изменений не было Объект1==Объект2 всегда ЛОЖЬ
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35676705
Reder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TyShiSvEt,

Потому что это разные экземпляры объектов.
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35678091
Dolter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RederTyShiSvEt,

Потому что это разные экземпляры объектов.

Даже не столько потому, что это разные экземпляры одного и того же объекта, а потому что у них как минимум один реквизит в базе разный: _Version (обновляется при каждой записи вне зависимости от наличия изменений).

Т.е. либо заблокировать на форме кнопку записи до внесения каких-либо изменений в реквизиты (Модифицированность) либо в ПередЗаписью() взводить какой-либо флаг при отсутствии это самой модифицированности и при его "взведенном" состоянии не отрабатывать кусок кода в ПослеЗаписи().
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35678749
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DolterRederTyShiSvEt,

Потому что это разные экземпляры объектов.

Даже не столько потому, что это разные экземпляры одного и того же объекта, а потому что у них как минимум один реквизит в базе разный: _Version (обновляется при каждой записи вне зависимости от наличия изменений).

Т.е. либо заблокировать на форме кнопку записи до внесения каких-либо изменений в реквизиты (Модифицированность) либо в ПередЗаписью() взводить какой-либо флаг при отсутствии это самой модифицированности и при его "взведенном" состоянии не отрабатывать кусок кода в ПослеЗаписи().

Может оказаться на форме элементы с галкой "изменяет данные". при его отработке взведется галка Модифицированность, хотя данные и не изменялись
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35686745
av.tor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Два объекта полученные при помощи вызова двух методов ПолучитьОбъект() всегда будут НЕ равны . Независимо ни от чего.

Код: plaintext
1.
2.
3.
с = Справочники.Валюты.НайтиПоКоду( 643 ); 
о1 = с.ПолучитьОбъект();
о2 = с.ПолучитьОбъект();
Сообщить(о1=о2); // здесь всегда будет Ложь


Как вариант можно при открытии формы сохранять значения в виде строки XML, при/после записи получать такую строку снова и сравнивать их. Если отличаются - значит есть отличия:

Код: plaintext
1.
2.
3.
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, Ссылка.ПолучитьОбъект());
xmlСтрока = ЗаписьXML.Закрыть();

Еще вариант

в процедуре ПередЗаписью делаем

Код: plaintext
1.
2.
3.
4.
5.
6.
Запрос = Новый Запрос("Выбрать * из "+ ИмяОбъекта + " Как Эл Где Эл.Ссылка = &Ссылка");
//читаем данные объекта до изменений
Для Каждого Реквизит Из МетаданныеОбъект.Реквизиты Цикл
	Если НЕ Выборка[Реквизит.Имя] = ЭтаФорма[Реквизит.Имя] Тогда
		//есть изменения
	КонецЕсли;
КонецЦикла;
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35686768
Фотография Deosfen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте метод "Модифицированность".
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35687510
TyShiSvEt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прбовал Ссылка.ПолучитьОбъект().Модифицированность(), при любом варианте = ложь
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35689401
Фотография Deosfen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы писали: "Мне необходимо все реквизиты справочника сохранить в регистре сведений. Редактирование и добавление элементов справочника делаю в ФормеЭлемента. "

- тогда в событии ПередЗаписью, используйте метод "Модифицированность"
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35689772
TyShiSvEt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deosfen,
Не совсем понятно как использовать этот метод, я уже писал что и после записи и до записи Объект.Модифицированность()=ложь, даже при наличии изменений.

Да и к слову у меня прекрасно работает код который предложил Naf.
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35690577
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TyShiSvEtDeosfen,
Не совсем понятно как использовать этот метод, я уже писал что и после записи и до записи Объект.Модифицированность()=ложь, даже при наличии изменений.

Да и к слову у меня прекрасно работает код который предложил Naf.

Сколько же еще раз нужно прямым текстом сказать, что разные экземпляры объектов - они РАЗНЫЕ,
и (в частности) у свежесозданного экземпляра Модифицированности быть не может.
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35690753
TyShiSvEt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pailTyShiSvEtDeosfen,
Не совсем понятно как использовать этот метод, я уже писал что и после записи и до записи Объект.Модифицированность()=ложь, даже при наличии изменений.

Да и к слову у меня прекрасно работает код который предложил Naf.

Сколько же еще раз нужно прямым текстом сказать, что разные экземпляры объектов - они РАЗНЫЕ,
и (в частности) у свежесозданного экземпляра Модифицированности быть не может.


То что экземпляры разные это понятно. Сейчас я хочу знать другое: можно ли в данном случае использовать метод Модифицированность(), если можно, то хотелось бы больше конкретики.
...
Рейтинг: 0 / 0
Сохранение данных в регистр сведений
    #35691434
Dolter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TyShiSvEtpailTyShiSvEtDeosfen,
Не совсем понятно как использовать этот метод, я уже писал что и после записи и до записи Объект.Модифицированность()=ложь, даже при наличии изменений.

Да и к слову у меня прекрасно работает код который предложил Naf.

Сколько же еще раз нужно прямым текстом сказать, что разные экземпляры объектов - они РАЗНЫЕ,
и (в частности) у свежесозданного экземпляра Модифицированности быть не может.


То что экземпляры разные это понятно. Сейчас я хочу знать другое: можно ли в данном случае использовать метод Модифицированность(), если можно, то хотелось бы больше конкретики.
Попробуйте в форме объекта, после изменения данных вывести следующее:
Модифицированность()
ЭтотОбъект.Модифицированность()
Ссылка.ПолучитьОбъект().Модифицированность()
и увидите в чем разница последнего перед двумя предыдущими...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Сохранение данных в регистр сведений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]