Как проверить, что было изменено значение определенной колонке в ТЧ документе

1. Metabos 28 12.09.23 15:35 Сейчас в теме
Добрый день!
Есть самописная конфа. Надо записывать в регистр если поменяли значение в определенной колонке. Как это сделать?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. aka Любитель XML 12.09.23 15:48 Сейчас в теме
(1) есть событие ПриИзменении у ТЧ и у колонки ТЧ. Второй вариант: перед записью сравнивай данные ТЧ ЭтотОбъект.ТвояТЧ (измененные данные) и ЭтотОбъект.Ссылка.ТвояТЧ (первоначальные данные).
3. Metabos 28 12.09.23 16:11 Сейчас в теме
(2)Я думаю лучше проверять перед записью. Но вот как сравнивать ТЧ? Могли же какую-то удалить или новую добавить и переместить. Построчно не получится.
4. пользователь 12.09.23 16:15
Сообщение было скрыто модератором.
...
12. Metabos 28 12.09.23 18:33 Сейчас в теме
13. пользователь 12.09.23 18:35
Сообщение было скрыто модератором.
...
5. aka Любитель XML 12.09.23 16:16 Сейчас в теме
(3) методов куча для сравнения, вот например: https://infostart.ru/1c/tools/326983/
14. Metabos 28 18.09.23 13:35 Сейчас в теме
Попробовала по этой ссылке, выбрала 3.3. Соединение по индексу.
Но у меня не работает. В ТЧ 3 строки, если я меняю в последней, то все ок. А если в предпоследней, то не работает. Может быть дело в том, что я не правильно Измерения обозначила. В данном случае Измерения это что?
Функция РазницаТаблицЗначений(Таблица0, Таблица1, Измерения) Экспорт
    
    Отбор = Новый Структура(Измерения);
    
    Ресурсы = Новый Массив;
    Для ИндексКолонки = 0 По Таблица0.Колонки.Количество() - 1 Цикл
        Если НЕ Отбор.Свойство(Таблица0.Колонки[ИндексКолонки].Имя) Тогда
            Ресурсы.Добавить(ИндексКолонки)
        КонецЕсли
    КонецЦикла;
    
    Таблица1.Колонки.Добавить("Знак", Новый ОписаниеТипов("Число"));
    Таблица1.ЗаполнитьЗначения(1, "Знак");
    НовыйИндекс = Таблица1.Индексы.Добавить(Измерения);
    
    Разница = Таблица1.СкопироватьКолонки();
    
    Для Каждого Строка0 Из Таблица0 Цикл
        ЗаполнитьЗначенияСвойств(Отбор, Строка0); 
        Строки1 = Таблица1.НайтиСтроки(Отбор);
        Если Строки1.Количество() = 0 Тогда     
            ЗаполнитьЗначенияСвойств(Разница.Добавить(), Строка0)     
        Иначе
            Строка1 = Строки1[0];
            Для Каждого Ресурс Из Ресурсы Цикл 
                Если Строка0[Ресурс] <> Строка1[Ресурс] Тогда    
                    ЗаполнитьЗначенияСвойств(Разница.Добавить(), Строка0);
                    ЗаполнитьЗначенияСвойств(Разница.Добавить(), Строка1);
                    Прервать 
                КонецЕсли 
            КонецЦикла;
            Строка1.Знак = 0 
        КонецЕсли 
    КонецЦикла;
    
    Для Каждого Строка1 Из Таблица1.НайтиСтроки(Новый Структура("Знак", 1)) Цикл 
        ЗаполнитьЗначенияСвойств(Разница.Добавить(), Строка1); 
    КонецЦикла;
    
    Таблица1.Колонки.Удалить("Знак");
    Таблица1.Индексы.Удалить(НовыйИндекс);
        
    Возврат Разница
    
КонецФункции
Показать
15. пользователь 18.09.23 14:08
Сообщение было скрыто модератором.
...
16. Metabos 28 18.09.23 17:16 Сейчас в теме
(15)Не знаю зачем. Просто скопипастила код из той статьи.
17. пользователь 18.09.23 17:17
Сообщение было скрыто модератором.
...
6. aka Любитель XML 12.09.23 16:17 Сейчас в теме
Мне когда нужно было сравнить - меняли что-то или нет - я использовал что-то типа ОбщегоНазначения.КоллекцииИдентичны (за точное название не отвечаю, по памяти пишу)
7. Metabos 28 12.09.23 16:19 Сейчас в теме
(6)Это в типовых такое есть. А тут какая то древняя самописка без бсп.
8. aka Любитель XML 12.09.23 16:21 Сейчас в теме
(7) см (5) - там полно вариантов решения твоей задачи
9. soft_wind 12.09.23 16:40 Сейчас в теме
ни кто не заморачивается такими проверками!!!,
просто переписываютданные регистра текущими данными (как обработка проведения)

а если актуально анализировать кто и что именно менял в документе, то включают историю изменения
10. aka Любитель XML 12.09.23 16:46 Сейчас в теме
(9) то, что у вас еще не было еще такой задачи - не обозначает, что никто не заморачивается. Я уже в 3 проектах подобные проверки делал, и не вариант там писать весь регистр
11. soft_wind 12.09.23 16:54 Сейчас в теме
так я г..код не пишу, это же не говорит о том что его нет!
просто без вашего анализа, перезаписать данные регистра
это 2-3 команды, а с анализом изменений 123 команды,
вот радости потом этот г...код дорабатывать....
Оставьте свое сообщение
Вакансии
Аналитик
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб.
Полный день

Ведущий программист 1С
Москва
зарплата от 180 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 220 000 руб. до 300 000 руб.
Полный день

Аналитик 1C
Москва
зарплата от 200 000 руб. до 240 000 руб.
Полный день