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

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

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

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