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

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 документ превращается в строку
и остается сравнить всего две строки, текущего документа и сохраненного.
Оставьте свое сообщение

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