|
Была где-то Функция... | ☑ | ||
---|---|---|---|---|
0
Два вопроса
09.10.13
✎
09:48
|
Есть такая функция долгая и нудная, по метаданным написанная, типовая, вроде. Она вызывается "приЗаписи и возвращает список реквизитов, которые были поредактированы. По метаданным обходит все реквизиты и табличные части построчно.
Вызывается примерно так: Если СписокИзменившихсяРеквизитов(Источник) = "Дата,Номер" ИЛИ СписокИзменившихсяРеквизитов(Источник) = "Дата" ИЛИ СписокИзменившихсяРеквизитов(Источник) = "Номер" Тогда Только не могу найти её. |
|||
1
Нуф-Нуф
09.10.13
✎
09:49
|
поиск не предлагать?
|
|||
2
Два вопроса
09.10.13
✎
09:56
|
Предлагать... Желательно с указанием в какой конфигурации....
|
|||
3
Рэйв
09.10.13
✎
09:59
|
(0)Может тебе текст кода дать?:-)
У меня самописная есть. |
|||
4
Рэйв
09.10.13
✎
09:59
|
похожая
|
|||
5
Два вопроса
09.10.13
✎
10:03
|
Она не глючная? Можно.
|
|||
6
Рэйв
09.10.13
✎
10:08
|
(5)Чему там гдючить? Простая как табуретка.
у меня 2 функции для проверки измененных реквизитов и записи истории на подписках лежат. На справочники и на документы. Все давно работает. Тебе я так понял на доки надо. Подправишь под свои нужды если что. //---------------- Процедура ЗаписьИсторииИзмененийДляДокументовПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт Мета=Источник.Метаданные(); Если Мета.Реквизиты.Найти("История")=Неопределено Тогда Возврат;//значит для объекта ведение истории не предесмотрено КонецЕсли; ЭтотОбъект=Источник; Ссылка=Источник.Ссылка; //<-------------- Мониторинг изменений документа ЕстьИзменения=Ложь; тПроверка=""; Если ЗначениеЗаполнено(ЭтотОбъект.История) Тогда //Если уже есть, то будем добавлять Попытка тПроверка=ЗначениеИзСтрокиВнутр(ЭтотОбъект.История); Исключение тПроверка=Новый ТаблицаЗначений; тПроверка.Колонки.Добавить("Автор"); тПроверка.Колонки.Добавить("Реквизит"); тПроверка.Колонки.Добавить("СтароеЗначение"); тПроверка.Колонки.Добавить("НовоеЗначение"); тПроверка.Колонки.Добавить("Время"); КонецПопытки; Иначе //начнем новую запись тПроверка=Новый ТаблицаЗначений; тПроверка.Колонки.Добавить("Автор"); тПроверка.Колонки.Добавить("Реквизит"); тПроверка.Колонки.Добавить("СтароеЗначение"); тПроверка.Колонки.Добавить("НовоеЗначение"); тПроверка.Колонки.Добавить("Время"); КонецЕсли; Если ТипЗнч(тПроверка)<>Тип("ТаблицаЗначений") Тогда //если поднялось криво из строки, то тоже начнем новую тПроверка=Новый ТаблицаЗначений; тПроверка.Колонки.Добавить("Автор"); тПроверка.Колонки.Добавить("Реквизит"); тПроверка.Колонки.Добавить("СтароеЗначение"); тПроверка.Колонки.Добавить("НовоеЗначение"); тПроверка.Колонки.Добавить("Время"); КонецЕсли; Если ЗначениеЗаполнено(Ссылка) Тогда //если документ уже был записан раньше //дата и номер не являются реквизитами, поэтому их отследим отдельно Если Ссылка.Дата<>ЭтотОбъект.Дата Тогда НовСтр=тПроверка.Добавить(); НовСтр.Автор=Строка(глТекущийПользователь); НовСтр.Реквизит="Дата"; НовСтр.СтароеЗначение=Строка(Ссылка.Дата); НовСтр.НовоеЗначение=Строка(ЭтотОбъект.Дата); НовСтр.Время=Строка(ТекущаяДата()); ЕстьИзменения=Истина; КонецЕсли; Если Ссылка.Номер<>ЭтотОбъект.Номер Тогда НовСтр=тПроверка.Добавить(); НовСтр.Автор=Строка(глТекущийПользователь); НовСтр.Реквизит="Номер"; НовСтр.СтароеЗначение=Строка(Ссылка.Номер); Если НЕ ЗначениеЗаполнено(ЭтотОбъект.Номер) Тогда НовСтр.НовоеЗначение="Назначен новый системой"; Иначе НовСтр.НовоеЗначение=Строка(ЭтотОбъект.Номер); КонецЕсли; НовСтр.Время=Строка(ТекущаяДата()); ЕстьИзменения=Истина; КонецЕсли; //проверка реквизитов шапки Для Каждого Рек Из Мета.Реквизиты Цикл ИмяРек=Рек.Имя; Если ИмяРек="История" Тогда Продолжить; КонецЕсли; Если Ссылка[ИмяРек]<>ЭтотОбъект[ИмяРек] Тогда НовСтр=тПроверка.Добавить(); НовСтр.Автор=Строка(глТекущийПользователь); НовСтр.Реквизит=Рек.Имя; НовСтр.СтароеЗначение=Строка(Ссылка[ИмяРек]); НовСтр.НовоеЗначение=Строка(ЭтотОбъект[ИмяРек]); НовСтр.Время=Строка(ТекущаяДата()); ЕстьИзменения=Истина; КонецЕсли; КонецЦикла; //проверка таб частей Для Каждого ТЧ Из Мета.ТабличныеЧасти Цикл ИмяТЧ=ТЧ.Имя; Если Ссылка[ИмяТЧ].Количество()<>ЭтотОбъект[ИмяТЧ].Количество() Тогда НовСтр=тПроверка.Добавить(); НовСтр.Автор=Строка(глТекущийПользователь); НовСтр.Реквизит="ТЧ."+ИмяТЧ; НовСтр.СтароеЗначение="--->"; НовСтр.НовоеЗначение="Изменено кол.строк"; НовСтр.Время=Строка(ТекущаяДата()); ЕстьИзменения=Истина; Продолжить; //если количество строк не совпадает уже наш клиент КонецЕсли; КолСтр=Ссылка[ИмяТЧ].Количество(); ЕстьИзм=Ложь; Для НомСтр=0 По КолСтр-1 Цикл ДЛя Каждого РекТЧ Из Мета.ТабличныеЧасти[ИмяТЧ].Реквизиты Цикл ИмяРек=РекТЧ.Имя; Если Ссылка[ИмяТЧ][НомСтр][ИмяРек]<>ЭтотОбъект[ИмяТЧ][НомСтр][ИмяРек] Тогда НовСтр=тПроверка.Добавить(); НовСтр.Автор=Строка(глТекущийПользователь); НовСтр.Реквизит="ТЧ."+ИмяТЧ; НовСтр.СтароеЗначение="--->"; НовСтр.НовоеЗначение="Изменен реквизит Таб части"; НовСтр.Время=Строка(ТекущаяДата()); ЕстьИзм=Истина; ЕстьИзменения=Истина; Прервать;//все изменения таб частей детално отслеживать не будем.Просто фиксируем факт КонецЕсли; КонецЦикла; Если ЕстьИзм Тогда Прервать; КонецЕсли; КонецЦикла; КонецЦикла; //проведение и отмену проведения тоже мониторим отдельно, как и пометку удаления Если Ссылка.ПометкаУдаления<>ЭтотОбъект.ПометкаУдаления Тогда НовСтр=тПроверка.Добавить(); НовСтр.Автор=Строка(глТекущийПользователь); НовСтр.Реквизит="ПометкаУдаления"; НовСтр.СтароеЗначение=Строка(Ссылка.ПометкаУдаления); НовСтр.НовоеЗначение=Строка(ЭтотОбъект.ПометкаУдаления); НовСтр.Время=Строка(ТекущаяДата()); КонецЕсли; Если РежимЗаписи=РежимЗаписиДокумента.Проведение Тогда НовСтр=тПроверка.Добавить(); НовСтр.Автор=Строка(глТекущийПользователь); НовСтр.Реквизит="Проведение"; НовСтр.СтароеЗначение="--->"; НовСтр.НовоеЗначение="Проведен"; НовСтр.Время=Строка(ТекущаяДата()); КонецЕсли; Если РежимЗаписи=РежимЗаписиДокумента.ОтменаПроведения Тогда НовСтр=тПроверка.Добавить(); НовСтр.Автор=Строка(глТекущийПользователь); НовСтр.Реквизит="Проведение"; НовСтр.СтароеЗначение="<---"; НовСтр.НовоеЗначение="Отмена"; НовСтр.Время=Строка(ТекущаяДата()); КонецЕсли; Иначе //Если документ только что создан и еще не записан, то просто отметим факт его создания тПроверка=Новый ТаблицаЗначений; тПроверка.Колонки.Добавить("Автор"); тПроверка.Колонки.Добавить("Реквизит"); тПроверка.Колонки.Добавить("СтароеЗначение"); тПроверка.Колонки.Добавить("НовоеЗначение"); тПроверка.Колонки.Добавить("Время"); НовСтр=тПроверка.Добавить(); НовСтр.Автор=Строка(глТекущийПользователь); НовСтр.Реквизит="<Документ создан>"; НовСтр.СтароеЗначение="---"; НовСтр.НовоеЗначение="---"; НовСтр.Время=Строка(ТекущаяДата()); КонецЕсли ; ЭтотОбъект.История=ЗначениеВСтрокуВнутр(тПроверка);//все данные в архив КонецПроцедуры |
|||
7
Два вопроса
09.10.13
✎
10:21
|
Точно, как табуретка. Спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |