Отличается строка ТЧ. Не пойму чем...?

1. user1559729 20.12.21 21:23 Сейчас в теме
Вывел ТЧ документа на форму. Мне нужно контролировать Модифицированность. Делаю:

	ОбъектФормы = РеквизитФормыВЗначение("ДокументОбъект");
	ОбъектСервера = МойДокумент.ПолучитьОбъект();

	Если ОбъектФормы <> ОбъектСервера Тогда
		Возврат Истина;
	Иначе
		Возврат Ложь;
	КонецЕсли;
Показать


1Ска говорит, что есть отличия в ТЧ, остальные реквизиты - одинаковые. В ТЧ одна единственная строка, которую я не трогаю, только вывожу. Не пойму, в чем отличие ОбъектФормы.МояТЧ[0] и ОбъектСервера.МояТЧ[0] ? Сравнил все колонки через "=" - значения колонок совпадают...
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 20.12.21 21:41 Сейчас в теме
(1) Так нельзя сравнивать разные объекты, даже если они содержат одинаковые данные. Сами объекты разные. Условие "Если ОбъектФормы <> ОбъектСервера Тогда" всегда будет Истина.

Если хотите определить, изменился документ или нет, то сравнивайте их Ссылки.
3. user1559729 20.12.21 22:07 Сейчас в теме
(2) Мне нужно узнать, были ли изменения в ТЧ документа, выведенной на форму, чтобы выполнить сохранение документа, если данные изменились. Причем тут ссылки?
4. spacecraft 20.12.21 22:27 Сейчас в теме
(3) Вот в каком месте вышеприведенного кода "1Ска говорит, что есть отличия в ТЧ"?
Комментарий был про сам код.
Хотите сравнивать ТЧ?
Сравнивайте каждое значение каждой строки ТЧ объекта формы с данными ссылки.
Только вот зачем? Если изменения вносились оперативно, то флаг модифицированности устанавливается автоматически.
Если изменяли вне контекста модуля формы, то по хорошему делается оповещение и устанавливается тот флаг программно.
5. user1559729 20.12.21 22:32 Сейчас в теме
(4) Начал сравнивать - громоздко. Искал решение попроще. Пока что обошелся признаком Модифицированности и флагом Сохранять данные. Спс за комменты.
Если что - похожая тема тут - https://forum.infostart.ru/forum9/topic133387/
6. dehro 12 21.12.21 07:17 Сейчас в теме
(5) Перебор по метаданным.

Цикл по реквизитам.
Цикл по табличным частям с вложенным циклом по реквизитам табличных частей.

Делов-то: на полчаса, ежели ещё и кофию попить.
7. VZyryanov 21.12.21 09:35 Сейчас в теме
Функция КоллекцияРазличаются(ТЗ1,ТЗ2,ИсключаемыеКолонки="") Экспорт
	ИсклКол=СтрокаВМассив(ИсключаемыеКолонки);
	Если ТЗ1.Количество()<>ТЗ2.Количество() Тогда
		Если ТЗ1.Количество()=1 И ТЗ2.Количество()=0 Тогда
			Для К=0 По ТЗ1.Количество()-1 Цикл
				Стр1=ТЗ1[К];
				Для М=0 По ТЗ1.Колонки.Количество()-1 Цикл
					Имя=ТЗ1.Колонки[М].Имя;
					Если ИсклКол.Найти(Имя)<>Неопределено Тогда
						Продолжить;
					КонецЕсли;
					Если ЗначениеЗаполнено(Стр1[Имя]) Тогда
						Возврат Истина;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			Возврат Ложь;
		ИначеЕсли ТЗ1.Количество()=0 И ТЗ2.Количество()=1 Тогда
			Для К=0 По ТЗ2.Количество()-1 Цикл
				Стр2=ТЗ2[К];
				Для М=0 По ТЗ1.Колонки.Количество()-1 Цикл
					Имя=ТЗ1.Колонки[М].Имя;
					Если ИсклКол.Найти(Имя)<>Неопределено Тогда
						Продолжить;
					КонецЕсли;
					Если ЗначениеЗаполнено(Стр2[Имя]) Тогда
						Возврат Истина;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			Возврат Ложь;
		Иначе
			Возврат Истина;
		КонецЕсли;
	КонецЕсли;
	Для К=0 По ТЗ1.Количество()-1 Цикл
		Стр1=ТЗ1[К];
		Стр2=ТЗ2[К];
		Для М=0 По ТЗ1.Колонки.Количество()-1 Цикл
			Имя=ТЗ1.Колонки[М].Имя;
			Если ИсклКол.Найти(Имя)<>Неопределено Тогда
				Продолжить;
			КонецЕсли;
			Если Стр1[Имя]<>Стр2[Имя] Тогда
				Возврат Истина;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	Возврат Ложь;
КонецФункции
Показать
8. soft_wind 21.12.21 10:18 Сейчас в теме
(5) есть другой вариант, документ объект со всеми своими ТЧ отлично сериализуется (что это такое - знаете?)
с помощью 3-4 команд XDTO документ превращается в строку
и остается сравнить всего две строки, текущего документа и сохраненного.
Оставьте свое сообщение

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