|   |   | 
| 
 | Дайте код, как отловить изменение в ТЧ объекта? | ☑ | ||
|---|---|---|---|---|
| 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) и квартиру где деньги лежат     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |