1с отследить изменение реквизита документа

Как отследить изменение реквизита?

Я
   Андрей_Н

18.01.08 — 15:28

Есть ли какая-то предопределенная процедура или метод, чтобы отследить модифицированность конкретного реквизита формы, а не всей формы?

  

Партнерская программа EFSOL Oblako

   Ёпрст2

1 — 18.01.08 — 15:30

(0) Да.

   Андрей_Н

2 — 18.01.08 — 15:34

какая?

   zenik

3 — 18.01.08 — 15:35

Формула на конкретный реквизит

   Ёпрст2

4 — 18.01.08 — 15:36

Сообщить(?(НужныйРеквизит = ТекущийДокумент().НужныйРеквизит,» не меняли»,»изменили гады :(«)); //для документа

Сообщить(?(НужныйРеквизит = ТекущийЭлемент().НужныйРеквизит,» не меняли»,»изменили гады :(«)); //для справочника

   Ёпрст2

5 — 18.01.08 — 15:37

(3) И чего в ней писать будешь? :)))

   Рэйв

6 — 18.01.08 — 15:40

Как вариант

Перем МодифицированностьРеквизит1;

Процедура ОбработкаВыбораЗначения(ВыбЗн,Идент,ФлСтОб)

   //в самом конце процедуры

   Если Идент=»Реквизит1″ Тогда

      Если ВыбЗн<>Реквизит1 Тогда

         МодифицированностьРеквизит1=1;

      КонецЕсли;

   КонецЕсли;

КонецПроцедуры;

МодифицированностьРеквизит1=0;

   Хоменко Валерий

7 — 18.01.08 — 15:41

А «ВыполнятьФормулуТолькоПриИзменении» не хочешь попробовать?

   GrayT

8 — 18.01.08 — 15:41

(4)С точки зрения модифицированности тоже немного не корректно — могли модифицировать на такое же значение :)

   Ёпрст2

9 — 18.01.08 — 15:41

(6) Ну и нафига ему это знать? А если значение не менялось? …

   Vlad_1717

10 — 18.01.08 — 15:43

Так тебе не модифицированность нужна, а именно изменение….

   GrayT

11 — 18.01.08 — 15:43

+9 Кстати да…. (0)А нафига?

   Рэйв

12 — 18.01.08 — 15:44

(9)Если не менялось —значит и модифицированности не буит

   Ёпрст2

13 — 18.01.08 — 15:44

(8) Та нафига обычная модифицированность сдалась то?, мало ли юзверь шарится по реквизитам :)

   GrayT

14 — 18.01.08 — 15:49

(13)А если чел ищет причину постоянного «Сохранить» после открытия?
Помниться как то в хитровымученном документе несколько дней искал — как результат нашел три места где модифицировались реквизиты. к сожалению просто отладчиком это дело отследить было тяжело.

   Андрей_Н

15 — 18.01.08 — 15:51

Мне нужно знать — был ли изменен конкретный реквизит или нет.
Я не понимаю разницы между модифицированностью и измененностью.

   Андрей_Н

16 — 18.01.08 — 15:52

(7) пробовал. Формула элемента срабатывает даже в том случае, если я выбираю то значение, которое было до этого. А это не подходит.

   Андрей_Н

17 — 18.01.08 — 15:53

(13) короче стоит задача менять цвет поля элемента, который был изменен.

   Ёпрст2

18 — 18.01.08 — 15:54

(16) Смотри (4)  — это ответ на твой вопрос …

   kvm

19 — 18.01.08 — 15:55

(17) А, извините, форма чего?

   Ёпрст2

20 — 18.01.08 — 15:55

+18 А обычная модифицированность — это просто реквизит «потрогали» … :)

   GrayT

21 — 18.01.08 — 16:00

Хм. Вот с цветом интересно будет

   Андрей_Н

22 — 18.01.08 — 16:17

(19) документа

   Андрей_Н

23 — 18.01.08 — 16:19

(4) Не понял суть.

С чем мы сравиниваем ТекущийДокумент().НужныйРеквизит ?

   Андрей_Н

24 — 18.01.08 — 16:20

(21) вернее цвет надписи возле элемента

   GrayT

25 — 18.01.08 — 16:21

(23)Прокатит для ранее записанного документа — сравнивается текущий реквизит на форме с тем что ранее сохранено в базе.

   Ёпрст2

26 — 18.01.08 — 16:22

+25 а если не был  сохранен — проверку на Выбран() воткнешь …

   Андрей_Н

27 — 18.01.08 — 16:23

(25) теперь понял

   GrayT

28 — 18.01.08 — 16:25

(24)А ну тогда другое дело. Кстати, дамал что если реально выделять нужно измененный реквизит. Как вариант картинку на форму — цветной прямоугольник под реквизит и играться видимостью — получиться цветная рамка :)

   Андрей_Н

29 — 18.01.08 — 16:28

(28) вариант. Только у меня на форме реквизиты расположены как рижский шпроты, подустану под каждый прямоугольник лепить :)

   Андрей_Н

30 — 18.01.08 — 16:32

Посетила мысль: при открытии документа выгрести в таблицу значений значения всех реквизитов документа и сравнивать текущие значения реквизитов с записанными в ТЗ. Если обнаружено изменение, то менять цвет.

Только как в цикле получить значения всех реквизитов? Как-то может через Метаданные?

   Ёпрст2

31 — 18.01.08 — 16:50

(30) Через метаданные получишь только реквизиты документа, реквизиты формы — только с ВК, или заранее где-то хранить их список …

   Андрей_Н

32 — 18.01.08 — 17:21

(31) так мне и надо реквизиты документа.
Как их получить через метаданные?

   G-Re

33 — 19.01.08 — 14:36

Я это сделал напролом, то есть написал глПротокол(р1,р2), которая заносит данные в стандартный протокол.

в документе в ПриЗаписи() ставлю глПротокол(Контекст,ТекущийДокумент())

и все доступно и видно стандартными средствами просмотра протокола.

Алгоритм, как в (4) с обходом реквизитов по Метаданным, в Комментарий ставлю идентификатор, было, стало(преобразованные в текст).

Сам тект модуля длинноватый(обработка особенностей), но основу могу показать.

   Дядя Васька

34 — 19.01.08 — 14:45

(32) Уверен? Реквизит формы может влиять на невидимый реквизит документа. Например у тебя наформе список «Цена включает НДС/Цена без НДС», а в реквизит ЦенаВклНДС пишется 0 или 1, в зависимости от того что выбрали. Придется тебе тогда обратно все просчитывать, в зависимости от того какое значение в реквизите дока выяснять что есть в списке. Для каждого отдельно. Опять же цвет текста не поменяешь обходом через метаданные, только по каждому в отдельности.

   Дядя Васька

35 — 19.01.08 — 14:47

+(34) Ну, в смысле узнал ты какой реквизит изменен, а вот какой текст разукрасить только через череду ИначеЕсли. Ну и что тогда толку от метаданных, если все равно все реквизиты в модуле перепишешь.

  

G-Re

36 — 19.01.08 — 15:01

Вот очень сокращенній текст модуля(только для реквизитов шапки) и без всяких извращений.

//*******************************************

Функция глПротокол(Конт,бДок) Экспорт

   Если ПустоеЗначение(бДок)=1 Тогда

       Возврат(«»);

   КонецЕсли;    

   
   ВидДок=бДок.Вид();

   
   тДок=Конт;

   
   Для ц=1 по  Метаданные.Документ(ВидДок).РеквизитШапки() Цикл

       
       ид=Метаданные.Документ(ВидДок).РеквизитШапки(ц).Идентификатор;    

       
       Попытка

           Было    =бДок.ПолучитьАтрибут(ид);

           Стало    =тДок.ПолучитьАтрибут(ид);

           Если Было<>Стало Тогда

               ТхТ=»»+Ид+», Было=»+СокрЛП(«»+Было)+», Стало=»+СокрЛП(«»+Стало);

               ЗаписьЖурналаРегистрации(ТхТ,»МодификацияДок»,»Модификация реквизита»,бДок,2);

           КонецЕсли;

       Исключение

       КонецПопытки;

       
   КонецЦикла;

   
КонецФункции

1

Как програмно отследить изменения на форме?

26.06.2005, 14:01. Показов 46739. Ответов 10


Как можно програмно определить произошла ли смена значений в элементах диалога (поле со списком, поле ввода и т.д.)? Можно ли вообще отследить изменения на форме?
Положим на форме обработки есть поле ввода А. При его изменении нужно выдать Предупреждение(«Элемент был изменен»), как это сделать???

Положим в окне ввода есть какоето значение… Если мы тыкнулись в него (нажали Enter) то сработает процедура, заданная в окне Дополнительно, для этого поля… Дак вот мне нужно проверить было ли изменено значение в поле, или пользователь просто навел на него курсор, а потом тыкнул Ентер ничего не меняя (или ввел тоже значение)… Если было изменено, то вывести сообщение…

0 / 0 / 0

Регистрация: 28.03.2004

Сообщений: 1,913

26.06.2005, 14:24

2

Иногда очень полезно почитать ЖКК:
Процедура ПриНачалеВыбораЗначения(<?>,)
КонецПроцедуры
Синтаксис:
ПриНачалеВыбораЗначения(<ИдентЭлемДиалога>,<ФлагСт андОбр>)
Назначение:
Предопределенная процедура после выбора значения в форме выбора (выбор может быть инициирован в немодальном режиме интерактивно, при помощи элемента диалога с педалькой).
<ИдентЭлемДиалога> — идентификатор элемента диалога, которым инициализирован выбор значения.
<ФлагСтандОбр> — флаг, изначально, при вызове процедуры равен 1, если в теле процедуры значение этого параметра поменять на 0, то стандартный процесс выбора значения не будет происходить.
Замечание:
Данная процедура может располагаться только в программном модуле формы.



0



26.06.2005, 14:28

3

Любой формы? Я в Обработке работаю…
Тыб примерчик привел, ценыб тебе небыло… Я уж все входные параметры дал… =)

26.06.2005, 14:36

4

Был бы этот ЖЖК, у меня вообще док нормальных нету блин… =

26.06.2005, 14:39

5

Ну и опятьже из твоего примера непонять как узнать старое значение и как сравнивать с новым… =

0 / 0 / 0

Регистрация: 10.05.2004

Сообщений: 209

27.06.2005, 09:48

6

Модифицированность()

Синтаксис:
Модифицированность()

Назначение:
Возвращает признак изменения реквизитов текущей формы:
1 — если реквизиты текущей формы документа были изменены, 0 — иначе.

Замечание:
Метод доступен только в Модуле формы и работает с документом доступным в локальном контексте.

Вроде бы этим все сказано!



0



27.06.2005, 16:15

7

Это только выдержка из хелпа, без примера она не имеет реальной ценности… =

0 / 0 / 0

Регистрация: 10.05.2004

Сообщений: 209

27.06.2005, 17:20

8

Иногда можно самим дойти до простых основ!



0



28.06.2005, 10:09

9

Можно, но это если есть литература, а если ее нет, то даже догадки непомогут… =
Блин, еслиб у меня была инфа думаете я бы задавал такие вопросы???

0 / 0 / 0

Регистрация: 09.11.2003

Сообщений: 283

28.06.2005, 17:23

10

Да ладно не обижайся. Просто в обработке да и в остальных формах стандартными средствами 1с отследить изменение (модификацию) реквизита — НЕВОЗМОЖНО!



0



29.06.2005, 09:36

11

Блин, а я сижу мучаюсь… =
Обошел я короче эту тему, взял и при открытие формы просто сохранил все значения в элементах ввода… А потом просто сравниваю новое значение со старым… =
Но мог бы быть метод и поэлегантней… = 1С — лажа… =

Определяем модифицированность объекта на сервере.

Задача для примера:

При записи документа «Заказ клиента», если у него при редактировании изменилось значение реквизита «Пометка удаления», нужно выполнить какой-то программный алгоритм. Если значение не изменилось, то алгоритм выполнять не нужно. В общем, цель – определить, изменилось ли значение реквизита «Пометка удаления» перед тем, как документ будет записан.

У управляемой формы есть свойство Модифицированность. Но в данном случае оно вряд ли пригодится, так как пометка удаления может устанавливаться не из формы документа. Дальше приходит на ум использовать метод объекта метаданых «ДокументОбъект» Модифицированность(). Однако в отладчике видно, что даже если ничего не менять в документе, то при записи метод Модифицированность() всё равно принимает значение Истина.

Но выход есть. Отследить и обработать изменение реквизита «Пометка удаления» можно с помощью метода ДополнительныеСвойства. Для этого нам понадобится внести небольшие дополнения в процедуры модуля объекта документа.

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если НЕ Ссылка.ПометкаУдаления = ПометкаУдаления Тогда
		ДополнительныеСвойства.Вставить("ПометкаУдаленияИзменена", Истина);
	КонецЕсли;
	
КонецПроцедуры

В процедуре ПередЗаписью() мы сравниваем значение реквизита «Пометка удаления» редактируемого документа с значением, которое записано в базе. Если значения не равны, то записываем признак изменённости в дополнительные свойства, и далее используем его в процедуре ПриЗаписи():

Процедура ПриЗаписи(Отказ)
	
	Если ДополнительныеСвойства.Свойство("ПометкаУдаленияИзменена", Истина) Тогда
		// Произвольная обработка условия...
	КонецЕсли;
	
КонецПроцедуры
Информация о материале
Категория: Программирование 1С

Опубликовано: 12 сентября 2018

Опубликовано 12.08.2021 10:30
Просмотров: 8919

Наша статья «Документ в 1С изменен. Как узнать, кто это сделал?» очень популярна среди пользователей. Благодаря ей вы можете узнать общие данные: кто и когда создал документ, изменил его или удалил. Но вот что именно удалил либо поменял пользователь в конкретном документе, вы не увидите. А хотелось бы, правда? Для решения этого вопроса разработчики внедрили в программу 1С специальный механизм хранения версий объектов, так называемое версионирование, с помощью которого вы как раз можете увидеть всю конкретику измененных документов. В этой статье мы расскажем обо всех плюсах и минусах версионирования, а также покажем на конкретном примере в 1С: Зарплата и управление персоналом ред. 3.1 как именно работает этот механизм. 

Начиная с платформы 8.3.11, механизм версионирования встроен в систему и называется «История данных». Он имеется во всех конфигурациях, работающих на основе библиотеки стандартных подсистем (БСП). Например, в 1С: Бухгалтерии предприятия он реализован начиная с версии 3.0.35.

Использование данного механизма актуально как на этапах начала работы с программой, так и при дальнейшем ее использовании, когда имеются пользователи «новички», которые могут что-то «подпортить» в учете.

Версионирование – это механизм хранения истории изменения объектов в 1С, который позволяет:

• просматривать, какие изменения внес пользователь в объект (справочник, документ);

• анализировать версии объектов;

• сравнивать эти версии между собой;

• восстанавливать любую из версий объекта.

Механизм версионирования позволяет пользователю выполнять гибкую настройку хранения данных, выборочно применять к объектам или табличным частям, сохранять данные лишь в определенный пользователем момент, например, при проведении документов.

Плюсов данного функционала, конечно, много.

Но есть и минусы, их тоже нужно учитывать. Важно грамотно подходить к настройке версионирования, т.к. использование данного функционала однозначно приводит к замедлению работы 1С. Это связано с тем, что история данных занимает какое-то место и при неправильной, беспорядочной настройке она может занимать больше места, нежели чем сам объект.

Как включить версионирование в 1С?

Данный механизм может включить как разработчик в конфигураторе, так и сам пользователь в пользовательском режиме.

Для включения версионирования объектов выполните следующие пункты.

Шаг 1. Перейдите в раздел «Администрирование» — «Общие настройки».

Пример раздела в 1С: Зарплата и управление персоналом, ред. 3.1. 

Пример раздела в 1С: Бухгалтерия предприятия ред. 3.0.

Шаг 2. Разверните подраздел «История изменений» и установите галочку «Хранить историю изменений». Для перехода к настройкам нажмите гиперссылку «Настроить».

Как видите, в 1С: ЗУП и 1С: Бухгалтерии предприятия эти пункты выглядят совершенно одинаково. Соответственно, и настройка версионирования во всех конфигурациях 1С выполняется аналогично, т.к. это одна подсистема.

Настройки истории хранения изменений

Рассмотрим основные настройки подсистемы «Версионирование» и механизма «Хранение данных» на примере программы 1С: Зарплата и управление персоналом ред. 3.1.

В составе объектов настройки два пункта: справочники и документы.

Настройку можно выполнить для каждого справочника отдельно, задав срок хранения и указав, когда сохранять версии.

В разделе «Документы» перечислены все имеющиеся в конфигурации документы, для которых также отдельно выполняется настройка хранения данных.

Параметр «Когда сохранять версии»

Для изменения параметра выделите ячейку и нажмите стрелочку. В выпадающем списке выберите нужное значение.

Значение параметра «Когда сохранять версии» может принимать значение:

«При записи» — версия сохраняется при создании или изменении справочника либо документа.

«При проведении» — применима для документов, для которых предусмотрено проведение. Запись производится при их проведении.

«Никогда» — запись истории изменения объекта не ведется.

Применить настройки можно и к группе объектов.

Выберите несколько объектов с помощью кнопки Shift (в указанном диапазоне «с какого по какой») или Ctrl (выборочное выделение) и, нажав кнопку «Установить когда сохранять версии», выберите нужное значение для указанных объектов.

В данном пункте, кроме описанных выше вариантов, доступна настройка «По умолчанию». В данном случае устанавливаются рекомендуемые настройки. Для справочников это – «Никогда», для документов – «При проведении».

Для справочников варианты значений параметров отличаются от значений параметров для документов.

Параметр «Срок хранения версий»

Аналогично задается параметр «Срок хранения версий».

Выделите ячейку и выберите вариант срока хранения заданного элемента.

Он может принимать значение:

• «За последнюю неделю»;

• «За последний месяц»;

• За последние три месяца»;

• «За последний год»;

• «Бессрочно».

Для выбранной группы объектов изменить данные параметр также можно с помощью кнопки «Установить срок хранения версий».

Выделите объекты, нажмите вышеуказанную кнопку и выберите нужное значение.

Рассмотрим настройку на примере.

Пример настройки версионирования в 1С: ЗУП ред. 3.1

Установите настройки хранения истории изменений для документа «Начисление зарплаты и взносов». Значение параметра «Когда сохранять версии» — При проведении», «Срок хранения» — «За последнюю неделю» (для примера).

После того, как активировано версионирование, в объектах 1С станут доступны кнопки в виде карандаша с часиками – «Перейти к истории изменений».

В нашем примере она расположена в журнале документов на панели инструментов, а также по нажатию кнопки «Еще».

Во втором варианте она выглядит как строка – «История изменений».

При открытии документа, в нем также присутствует такая кнопка и команда по нажатию кнопки «Еще».

Рассмотрим пример, когда бухгалтер вносила изменения в документ «Начисление зарплаты и взносов».

Конечно, когда изменения производились по одному сотруднику, проще исправить и пересмотреть начисления этого сотрудника. Но предположим, что возникла ситуация, когда «массово напортачили» в программе и данные изменены.

Для иллюстрации примера изменим заработную плату Булочкиной О.И. с 67000 руб. на 75000 руб. и посмотрим, как программа сохранит версии документов и сможем ли мы, используя механизм хранения данных, вернуться к прежней версии.

Нажмите «кнопку-карандашик» — «Перейти к истории изменений».

Становится видно информацию о версиях документа «Начисление зарплаты и взносов»: кто изменил данный объект, а также дату и время изменения.

Для просмотра версии выделите строку и нажмите кнопку «Открыть версию».

В отчете представлены вся информация, показатели и данные документа выделенной версии. Кнопками «+» и «-» можно свернуть и развернуть блоки для удобства чтения.

В нашем примере мы знаем, что пользователь изменил зарплату по окладу Булочкиной О.И. на 75000 руб.

Но как же пользователь проанализирует такой объем информации и определит, какие изменения произведены в какой версии?

Для этого есть функция сравнения с помощью одноименной кнопки «Сравнить».

Для сравнения версий выделите нужные строки (с помощью Shift или Ctrl) и нажмите кнопку «Сравнить».

Обратите внимание, при выделении нескольких версий другие команды неактивны, т.к. предназначены для работы с одной строкой-версией.

В отчете отобразится таблица по выделенным версиям объекта. Голубым цветом выделены измененные данные, пролистав и проанализировав которые, пользователь может сопоставить произведенные изменения и при необходимости вернуться к той версии, которая его более устроит.

Пролистав таблицу, мы видим, что пользователем Кругловой О. были изменены данные по Булочкиной О.И. Сохраненные версии №1 и №2 идентичные, а в версии №3 прослеживаются изменения.

Обратите внимание на значение поля «Изменения в реквизитах». По умолчанию установлено – «Все». Поэтому отчет получился объемным. Нажав кнопку выбора с тремя точками, пользователь может задать выводимые реквизиты, отметив нужные галочками.

Главный бухгалтер, проанализировав ситуацию, приняла решение восстановить данные документа «Начисления зарплаты и взносов» до внесения изменений зарплаты.

Как это сделать?

Выделите версию объекта, на который хотите перейти и нажмите кнопку «Перейти на версию».

В моделируемом примере нас устроит версия №2 (до внесения изменений). На нее и перейдем.

В результате проведенных манипуляций в таблице «История изменений: Начисление зарплаты и взносов от 31.08.2021» появилась четвертая версия документа с пометкой – «Выполнен переход к версии №2 от 10.08.2021 18:32:49» (пример моделировался 10.08.2021).

Откройте документ и проверьте, что в нем изменилось.

Документ перешел к варианту до внесения в него изменений. В нашем примере зарплата сотрудника Булочкиной О.И. автоматически изменилась на 67000 руб. (напомним, она была изменена ранее на 75000 руб.). Начисление НДФЛ и страховых взносов также приняло прежние значения. Т.е. документ полностью принял первоначальный вид.

Этот способ очень удобен. Он позволяет не только отслеживать, когда и кем были произведены изменения, но и «откатывать» состояние объекта в предшествующее состояние. Перейдя на версию объекта и не получив результата, пользователь может повторить операцию снова. Переходы от версии к версии не ограничены и их можно выполнять в пределах хранящихся версий.

Напоминаем, единственный минус версионирования – это то, что хранящиеся данные занимают место и при больших объемах накопленной информации программа может начать притормаживать и подвисать, особенно при работе на слабых компьютерах. Поэтому возможно имеет смысл устанавливать версионирование только для конкретных документов в программе, по которым могут быть спорные моменты.

Объем хранимых версий объектов и их удаление в 1С

Вернемся к разделу «Настройка и хранение истории изменений».

Нажмите гиперссылку «Количество и объем хранения версий объектов».

Нажмите «Сформировать».

В отчете представлена информация в графическом и в табличном варианте, где пользователь видит структуру данных версий хранения объектов.

В нашем примере видно, что объект – документ «Начисление зарплаты и взносов» имеет четыре версии и этот объем данных занимает 0,01Мб.

Но это всего лишь один документ. Поэтому, если вы настраиваете версионирование и активно им пользуетесь, смотрите какой объем занимают данные.

Обратите внимание на строку «Очистка устаревших версий». У нас пока таковых не имеется, но при их появлении появится кнопка «Очистить». Здесь также выводится информация об их количестве и объеме. Нажав на эту кнопку старые, неактуальные версии удаляются.

Для автоматизации процесса удаления устаревших версий, установите одноименную галочку «Автоматически удалять устаревшие версии» и вам не придется постоянно отвлекаться на контроль этого процесса.

Теперь вы знаете что такое версионирование и как настроить хранение истории изменения справочников и документов в программах 1С.

Как говорится: «Все гениальное – просто!». Экспериментируйте, используйте данный функционал программы и, главное, не бойтесь что-то испортить, ведь всегда можно вернуть версию объекта. Если вы сочтете это ненужным, то в любой момент вы сможете отключить данную настройку.

Автор статьи: Ольга Круглова

Понравилась статья? Подпишитесь на рассылку новых материалов

Добавить комментарий

Обычная задача — перед записью поймать изменение реквизита (пусть это будет реквизит ВремяНачала)и выполнить некоторое действие.
Раньше оно было совсем просто в процедуре ПередЗаписью

Если Ссылка.ВремяНачала <> Объект.ВремяНачала Тогда
// реквизит изменен - выполняем нужные действия
КонецЕсли

Сейчас такой фокус не пройдет — придется написать чуть побольше кода.

&НаСервере
Функция ИзменениеВРасписании(ВремяНачалаАктуальное)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОказаниеУслуг.ВремяНачала
|ИЗ
| Документ.ОказаниеУслуг КАК ОказаниеУслуг
|ГДЕ
| ОказаниеУслуг.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Если Выборка.Следующий() Тогда
ВремяНачалаСохраненное = Выборка.ВремяНачала;
Если ВремяНачалаСохраненное <> ВремяНачалаАктуальное Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции

Ну и используем новую функцию в процедуре ПередЗаписью

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ИзменениеВРасписании(Объект.ВремяНачала) Тогда
// реквизит изменен - выполняем нужные действия
КонецЕсли;
КонецПроцедуры

Контроль изменений реквизитов справочников и документов

16.05.2017

Контроль изменения всех реквизитов любых справочников и документов в любой конфигурации

Очень часто бывает необходимость выяснить, кто же изменил значение реквизита или каким оно было на определенную дату. Поискал недолго на сайте, не нашел и решил написать что-то свое. 

Обработка использует внешние компоненты FormEx.dll и 1sqlite.dll. Легко подключается к любой конфигурации без доработок. Данные хранятся во внешнем файле.

При открытии формы справочника или документа делается снимок его состояния на момент открытия. После закрытия формы опять делается снимок состояния объекта и сравнение с предыдущим снимком. Если были изменения реквизитов, предлагает ввести причину изменений.

Снимки состояния и изменения реквизитов пишутся в БД history.sdb в каталоге базы. Для того, чтобы посмотреть изменения, нужно открыть форму интересующего справочника или документа и нажать на кнопку F4.

Подключение: в процедуре ПриНачалеРаботыСистемы добавить

парам=СоздатьОбъект("СписокЗначений");
парам.ДобавитьЗначение(1,"Режим");
ОткрытьФорму("Отчет",парам,КаталогИБ()+"ExtFormsИсторияОбъекта.ert");

22.10.2023г Добавил настройки контроля. В любом случае изменения фиксируются все, но запрос комментария и отражение изменений в карточке можно настраивать. Изменил сам интерфейс просмотра истории.

Понравилась статья? Поделить с друзьями:
  • 3 группа инвалидности сколько часов работы
  • 1с очистить реквизиты документа программно
  • 3 карточки с реквизитами любых организаций
  • 1с получить значение реквизита объекта бсп
  • 3 работа за 3 часа собирают 10 компьютеров