Вход | Регистрация
 

Дайте код, как отловить изменение в ТЧ объекта?

Дайте код, как отловить изменение в ТЧ объекта?
Я
   Novichok VX
 
23.04.21 - 13:51
Дайте код, как отловить изменение в ТЧ объекта? при записи
   Михаил Козлов
 
1 - 23.04.21 - 13:53
Запрос по сравнению значений в БД и в объекте. Только ПередЗаписью.
   Novichok VX
 
2 - 23.04.21 - 13:55
У меня такая функция перед записью, там всегда значения до изменеия, что не так?

Функция ПроверитьИзмененаЛиКИ()
    
    КИИзменена = Ложь;
    
    МассивКОлонокКИ = Новый Массив;
    МассивКОлонокКИ.Добавить("Тип");
    МассивКОлонокКИ.Добавить("Вид");
    МассивКОлонокКИ.Добавить("Представление");
    МассивКОлонокКИ.Добавить("ЗначенияПолей");
    МассивКОлонокКИ.Добавить("Страна");
    МассивКОлонокКИ.Добавить("Регион");
    МассивКОлонокКИ.Добавить("Город");
    МассивКОлонокКИ.Добавить("АдресЭП");
    МассивКОлонокКИ.Добавить("ДоменноеИмяСервера");
    МассивКОлонокКИ.Добавить("НомерТелефона");
    МассивКОлонокКИ.Добавить("НомерТелефонаБезКодов");
    МассивКОлонокКИ.Добавить("ВидДляСписка");
    МассивКОлонокКИ.Добавить("Значение");
    
    Для Н = 0 По Объект.Ссылка.КонтактнаяИнформация.Количество() - 1 Цикл
        Для Каждого Колонка ИЗ МассивКОлонокКИ Цикл
            Если Объект.Ссылка.КонтактнаяИнформация[Н][Колонка] <> Объект.КонтактнаяИнформация[Н][Колонка] Тогда
                КИИзменена = Истина;
            иначе
                сообщить("до "+строка(Объект.Ссылка.КонтактнаяИнформация[Н][Колонка])+" после "+строка(Объект.КонтактнаяИнформация[Н][Колонка]));
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
    Возврат КИИзменена;

КонецФункции
   Михаил Козлов
 
3 - 23.04.21 - 14:00
И что отладчик говорит? Запросом не пробовали? Сообщать в модуле объекта некому.
   Novichok VX
 
4 - 23.04.21 - 14:10
(3)
что значит запросом, куда ссылаться?
   Kassern
 
5 - 23.04.21 - 14:18
(2) наверное потому что у тебя Объект.Ссылка не? Пока объект в базу не запишется, в ссылке будут храниться данные до изменений. Обращайся к объекту а не к ссылке.
   Novichok VX
 
6 - 23.04.21 - 14:27
(5)
Да, в одном случает объект.ссылка, а в другом объект, значение при сообщить совпадают, как до изменения
 сообщить("до "+строка(Объект.Ссылка.КонтактнаяИнформация[Н][Колонка])+" после "+строка(Объект.КонтактнаяИнформация[Н][Колонка]));
   Kassern
 
7 - 23.04.21 - 14:29
(6) у вас точно перед записью сравнение проходит? в модуле формы или в модуле объекта?
   Novichok VX
 
8 - 23.04.21 - 14:30
(7)
в модуле формы
   piter3
 
9 - 23.04.21 - 14:31
Бац и поменяли без открытия дока
   Serg_1960
 
10 - 23.04.21 - 15:03
(8) В модуле формы ловите при редактирование строки. А перед записью документа Цикл по Объект.Ссылка - неверный подход - Вы проигнорируете добавленные в конец новые строки в Объекте.
   Serg_1960
 
11 - 23.04.21 - 15:05
КИИзменена  = Объект.Ссылка.КонтактнаяИнформация.Количество() <> Объект.КонтактнаяИнформация.Количество();
   BeerHelpsMeWin
 
12 - 23.04.21 - 15:12
В модуле объекта перед записью
Если НЕ ЭтоНовый() Тогда
 Если ТЗИдентичны(ЭтотОбъект.ТЗ,Ссылка.ТЗ) Тогда
...
   Serg_1960
 
13 - 23.04.21 - 15:20
Просто о сложном :) Порядок строк в ТЧ КонтактнаяИнформация может быть изменён, но это не означает, что контактная информация изменена.
   1Сергей
 
14 - 23.04.21 - 15:23
(11) если они равны, не факт что ничего не изменилось
   Serg_1960
 
15 - 23.04.21 - 15:30
(14) Я просто прокомментировал вышесказанное - перед обходом по строкам есть смысл сравнить их количество. Тогда, возможно, не потребуется обход строк городить. Но, учитывая Ваше замечание, исправляюсь:

КИИзменена  = Объект.Ссылка.КонтактнаяИнформация.Количество() <> Объект.КонтактнаяИнформация.Количество();
Если НЕ КИИзменена Тогда
    Для Н = 0 По Объект.Ссылка.КонтактнаяИнформация.Количество() - 1 Цикл
        Для Каждого Колонка ИЗ МассивКОлонокКИ Цикл
...
   Serg_1960
 
16 - 23.04.21 - 15:32
PS: если в конфигурации есть версионирование, то  есть и соответствующий отчет, где ТС может "подсмотреть" нужные ему алгоритмы.
   Novichok VX
 
17 - 23.04.21 - 16:22
ничего конкретного не вижу, как решить проблему то?
   программистище
 
18 - 23.04.21 - 16:29
если объект не записан или табличная часть пуста
Объект.Ссылка.КонтактнаяИнформация.Количество() будет равна нулю
цикл не выполнится ни разу
   программистище
 
19 - 23.04.21 - 16:31
при том что строки могут менять положение, удаляться, добавляться, твой код вызовет исключение
   Novichok VX
 
20 - 23.04.21 - 17:07
(18)
у меня по названию колонок сравнение, пофигу на порядок. Нулю не равно в перед записью количество, 100 раз проверял
   Serg_1960
 
21 - 23.04.21 - 17:27
(20) Верю, Вам - пофигу :) Но: у Вас сравнение значений по строкам и колонкам (КонтактнаяИнформация[Н][Колонка]) - Вашему алгоритму не пофигу на порядок.
   программистище
 
22 - 23.04.21 - 17:32
судя по заголовку темы, Дайте код
ТС вникать не собирается
   dmt
 
23 - 23.04.21 - 18:17
(0) пример вызова: ВывестиРасхождения(ДокОбъект, ДокОбъект.Ссылка)
Функция ВывестиРасхождения(Об1, Об2) Экспорт

    стрРезультат = "";
    
    Мета1 = Об1.Ссылка.Метаданные();
    Для каждого Реквизит Из Мета1.Реквизиты Цикл
        ИмяРеквизита = Реквизит.Имя;
        Если Об1[ИмяРеквизита] <> Об2[ИмяРеквизита] Тогда
            стрРезультат = стрРезультат + ?(стрРезультат="", "", Символы.ПС)
                + СтрШаблон("Реквизит %1: %2 --> %3", ИмяРеквизита, Об1[ИмяРеквизита], Об2[ИмяРеквизита]);
        КонецЕсли; 
    КонецЦикла; 
    Для каждого ТЧ Из Мета1.ТабличныеЧасти Цикл
        ИмяТЧ = ТЧ.Имя;
        Если Об1[ИмяТЧ].Количество() <> Об2[ИмяТЧ].Количество() Тогда
            стрРезультат = стрРезультат + ?(стрРезультат="", "", Символы.ПС)
                + СтрШаблон("ТЧ %1.Количество(): %2 --> %3", ИмяТЧ, Об1[ИмяТЧ].Количество(), Об1[ИмяТЧ].Количество());
            //Продолжить;

        КонецЕсли;
        Для к=0 По Мин(Об1[ИмяТЧ].Количество()-1, Об2[ИмяТЧ].Количество()-1) Цикл
            ИмяРеквизита = Реквизит.Имя;
            Для каждого Реквизит Из ТЧ.Реквизиты Цикл
                ИмяРеквизита = Реквизит.Имя;
                Если Об1[ИмяТЧ][к][ИмяРеквизита] <> Об2[ИмяТЧ][к][ИмяРеквизита] Тогда
                    стрРезультат = стрРезультат + ?(стрРезультат="", "", Символы.ПС)
                        + СтрШаблон("ТЧ %1[%2].%3: %4 --> %5", ИмяТЧ, к, ИмяРеквизита, Об1[ИмяТЧ][к][ИмяРеквизита], Об2[ИмяТЧ][к][ИмяРеквизита]);
                КонецЕсли; 
            КонецЦикла; 
        КонецЦикла; 
    КонецЦикла; 
    
    Возврат стрРезультат;
    
КонецФункции
   xXeNoNx
 
24 - 23.04.21 - 19:46
(0) и квартиру где деньги лежат


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.