|
Как при записи элемента справочника определить, какие именно реквизиты изменены? | ☑ | ||
---|---|---|---|---|
0
Михаил Анянов
17.05.12
✎
10:01
|
Как при записи элемента справочника определить, какие именно реквизиты изменены?
Возможно ли это и как реализовать? |
|||
1
alextom81
17.05.12
✎
10:02
|
Через объект метаданных и элемент формы
|
|||
2
Михаил Анянов
17.05.12
✎
10:02
|
Суть задачи, при изменении только Родителя - никаких проверок при записи не делать, во всех остальных случаях осуществлять ряд проверок.
|
|||
3
Cube
17.05.12
✎
10:03
|
Если Наименование <> Ссылка.Наименование Тогда
Сообщить("Наименование изменено"); КонецЕсли; |
|||
4
Reset
17.05.12
✎
10:03
|
а) Хранить структуру реквизитов до измения
б) Взять предыдущие из БД ПередЗаписью (по ссылке) |
|||
5
НЕА123
17.05.12
✎
10:04
|
(3)+1
|
|||
6
Михаил Анянов
17.05.12
✎
10:04
|
(3) а как пробежаться по всем реквизитам?
|
|||
7
Reset
17.05.12
✎
10:05
|
(6)
а) Из метаданных б) Выбрать * |
|||
8
Cube
17.05.12
✎
10:07
|
(6) А тебе нужно конкретно знать, что изменено или пофиг?
|
|||
9
Reset
17.05.12
✎
10:09
|
Да, (8) прав, можно использовать модифицированность, при таковой сравнивать только Родителя (если (2))
|
|||
10
Михаил Анянов
17.05.12
✎
10:10
|
Для Каждого текРеквизит из СписокРеквизитов Цикл
Если // а вот как тут проверку написать? Тогда Сообщить("Реквизит " + текРеквизит + " изменен!"); КонецЕсли; КонецЦикла; |
|||
11
Михаил Анянов
17.05.12
✎
10:11
|
Забыл:
СписокРеквизитов = ЭтотОбъект.Метаданные().Реквизиты; |
|||
12
Reset
17.05.12
✎
10:11
|
(10) Что написать - зависит от того, что находится в СписокРеквизитов
|
|||
13
Михаил Анянов
17.05.12
✎
10:11
|
Мне нужно определить, что не изменилось ничего кроме родителя
|
|||
14
Михаил Анянов
17.05.12
✎
10:11
|
Т.е. перебрать все реквизиты надо
|
|||
15
Reset
17.05.12
✎
10:12
|
(11)
Если Ссылка[текРеквизит.Имя]<>ЭтотОбъект[текРеквизит.Имя] Хотя меня лично коробит множественное обращение по ссылке |
|||
16
Reset
17.05.12
✎
10:13
|
(13) и (14) - взаимоисключающие утверждения
|
|||
17
Maxus43
17.05.12
✎
10:13
|
(15) запросом вытащить предварительно можно
|
|||
18
Cube
17.05.12
✎
10:13
|
(13) Фигня какая-то... Информация может храниться в регистрах сведений и/или подчиненных справочниках... Как их проверять будешь?
|
|||
19
Reset
17.05.12
✎
10:13
|
(16) Поторопился -
|
|||
20
Reset
17.05.12
✎
10:14
|
(17) Я так и предлагаю :)
|
|||
21
Михаил Анянов
17.05.12
✎
10:14
|
(16) как же они взаимоисключающие? Мне нужно получить список измененных реквизитов, если он будет состоять только из Родителя - тогда Возврат, иначе - проверки.
|
|||
22
Михаил Анянов
17.05.12
✎
10:15
|
Интересуют только реквизиты! :)
|
|||
23
Михаил Анянов
17.05.12
✎
10:15
|
(18) Интересуют только реквизиты самого объекта!
|
|||
24
Михаил Анянов
17.05.12
✎
10:17
|
(15) ну а иначе никак... либо перед записью в таблицу все реквизиты текущего объекта просто выгружать... В результате обращение к объекту будет одно.
|
|||
25
Михаил Анянов
17.05.12
✎
10:17
|
Спасибо за советы, сейчас буду мудрить :)
|
|||
26
Reset
17.05.12
✎
10:20
|
(24) Можно оптимизировать
а) Получить запросом б) Создать временный объект - копию: ОбъектДоИзменения=Ссылка.ПолучитьОбъект() //блабла Если ОбъектДоИзменения[текРеквизит.Имя]<>ЭтотОбъект[текРеквизит.Имя] // Так читабельней и меня меньше коробит ;) |
|||
27
hhhh
17.05.12
✎
10:22
|
(26) не, там и так всё в порядке. По ссылке один раз получается объект и дальше уже он используется. То есть временный объект сам создается платформой. Не нужно заморачиваться.
|
|||
28
Maxus43
17.05.12
✎
10:23
|
(27) некрасиво просто. я за запрос!
|
|||
29
Михаил Анянов
17.05.12
✎
10:37
|
Всем спасибо большое! Сделал так в модуле ПередЗаписью()
Если НЕ ЭтоНовый() Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ * |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка); Результат = Запрос.Выполнить().Выбрать(); Если Результат.Количество() > 0 Тогда Результат.Следующий(); СписокРеквизитов = ЭтотОбъект.Метаданные().Реквизиты; Для Каждого текРеквизит из СписокРеквизитов Цикл Если Результат[текРеквизит.Имя] <> ЭтотОбъект[текРеквизит.Имя] Тогда Сообщить("Реквизит " + текРеквизит + " изменен!"); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; |
|||
30
Михаил Анянов
17.05.12
✎
10:44
|
Есть один косяк, СписокРеквизитов = ЭтотОбъект.Метаданные().Реквизиты - в список Родитель не попадает, и другие стандартные реквизиты
|
|||
31
Михаил Анянов
17.05.12
✎
10:45
|
СписокРеквизитов = ЭтотОбъект.Метаданные().СтандартныеРеквизиты;
Вопрос снят :) |
|||
32
Reset
17.05.12
✎
10:46
|
(29)(31) Нормально вполне себе, молодца :)
|
|||
33
AAlexandra
17.05.12
✎
10:48
|
(30) КолонкиИзЗапроса = Запрос.Выполнить().Колонки;
|
|||
34
Alex375
17.05.12
✎
10:48
|
А тебе надо отследить изменения в объекте при редактировании через форму или при любых изменениях объекта? Просто если через форму, тогда можно проще - завести флаг и его выставлять при изменении реквизитов в форме.
|
|||
35
Михаил Анянов
17.05.12
✎
10:52
|
(34) при любых, как обработкой, так и обменом
|
|||
36
hhhh
17.05.12
✎
10:53
|
(31) а чего у вас там постоянно родителя туда-сюда меняют у элементов? Может не стоит такую офигенную проверку устраивать каждый раз, а сделать с родителем так же.
|
|||
37
Михаил Анянов
17.05.12
✎
10:53
|
(34) тот флаг о котором ты говоришь итак есть стандартно, ЭтотОбъект.Модифицированность()
|
|||
38
Михаил Анянов
17.05.12
✎
10:54
|
(36) справочник обрабатывается как ручками, так и обработками различными. Если подскажешь как мне определить, что происходит событие смены родителя, то буду благодарен :)
|
|||
39
hhhh
17.05.12
✎
10:57
|
(38) ну легко:
ТабличноеПоле (TableBox) ПриСменеТекущегоРодителя (OnCurrentParentChange) Синтаксис: ПриСменеТекущегоРодителя() Описание: Возникает при изменении текущего родителя в режиме иерархического списка. |
|||
40
DrShad
17.05.12
✎
11:02
|
(38) подписку на событие не предлагать?
|
|||
41
Михаил Анянов
17.05.12
✎
11:57
|
Ага, только рассмотрите еще один момент, помимо родителя я одновременно могу например еще и наименование изменить, и т.п.
|
|||
42
Михаил Анянов
17.05.12
✎
12:00
|
(39) - собитие при записи все равно ведь выполнится с кучей проверок внутри?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |