1с как узнать был ли модифицирован документ
Работа в программном комплексе 1С осуществляется как одним человеком, так и группой людей. Соответственно, существует необходимость проверки вносимых в документы изменений. Речь идет о том, чтобы посмотреть кто, когда и какие корректировки вносил в определенный объект данных. Даже если пользователь всего один, но при этом абсолютный новичок, он может совершать ошибки. И в данном случае также необходима возможность просмотра истории изменений. Как и где это можно сделать в 1С рассмотрим в статье.
- Механизмы отслеживания изменения данных в базах 1С
- Настройки хранения история изменений
- Просмотр истории изменения в документе
- Сравнение версий объекта данных
- Переход на предыдущую версию
- Как включить версионирование в различных решениях 1С
- Как узнать кто менял документ с помощью журнала регистрации
- Как узнать с какими объектами данных работал пользователь?
- Групповое изменение данных (ГИД)
- Просмотр ранее измененных реквизитов
1. Механизмы отслеживания изменения данных в базах 1С
В рассматриваемом программном продукте существуют 3 механизма, которые помогают отследить корректировки:
- журнал регистрации;
- платформенный механизм истории данных;
- версионирование
Для того чтобы каждый из этих механизмов правильно работал необходимо изначально провести настройки.
2. Настройки хранения история изменений
Стоит отметить, что настройку можно включить как для всего объекта данных, так и выборочно для каких-то его частей. Например, только для реквизитов. Тем самым экономится место объема сохраненных данных. Для того, чтобы сохраненные корректировки не занимали места больше, чем сами объекты, с которыми производилась эта работа, необходимо грамотно настраивать механизм версионирования. В противном случае произойдет замедление работы всей программы. Включить сам механизм может либо сотрудник предприятия, работающий в системе, либо разработчик в конфигураторе.
Для того чтобы настроить хранение истории изменений, следует перейти в левом меню в раздел «Администрирование», далее в раздел «Общие настройки» и затем «История изменений».
Google maps, поиск оптимального маршрута 5
В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; * Координаты начальной и коне Загрузка данных в 1С из PDF 4
В данной статье описан пример реализации загрузки данных накладных из PDF файлов для одного крупного Ритейла. И так у Нас есть несколько файлов в формате pdf, которые нам необходимо загрузить в 1С. Чтение PDF файлов из 1С Первым дело я стал Как выбрать записи из регистра сведений? 9
//ВНИМАНИЕ . // В качестве полей для отбора могут задаваться измерения или реквизиты, для которых // в конфигураторе признак индексирования установлен в значение " Индексировать" или // установлен признак " Ведущее" . Вид сравнения может бы Как добавить подписи в отчет СКД? 0
Во многих организациях сформированные отчеты заверяют подписями. В данном примере я покажу как можно вывести подписи для типового отчета ЗУП Свод начислений. Для начала создадим макет в котором и разместим подписи, макет я создам общий, т.к. он буд Как настроить автоматическую загрузку курсов валют при запуске программы 1С? 0
Курсы валют могут загружаться только при входе в программу какого-нибудь пользователя! Как в конфигурации Бухгалтерия 8 настроить автоматическую загрузку курсов валют при запуске программы? Необходимо открыть пункт меню «Сервис» - «Настройки польз Посмотреть все результаты поиска похожих
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 22
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 16
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма ~ Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Определяем модифицированность объекта на сервере.
Задача для примера:
При записи документа "Заказ клиента", если у него при редактировании изменилось значение реквизита "Пометка удаления", нужно выполнить какой-то программный алгоритм. Если значение не изменилось, то алгоритм выполнять не нужно. В общем, цель – определить, изменилось ли значение реквизита "Пометка удаления" перед тем, как документ будет записан.
У управляемой формы есть свойство Модифицированность . Но в данном случае оно вряд ли пригодится, так как пометка удаления может устанавливаться не из формы документа. Дальше приходит на ум использовать метод объекта метаданых "ДокументОбъект" Модифицированность () . Однако в отладчике видно, что даже если ничего не менять в документе, то при записи метод Модифицированность () всё равно принимает значение Истина .
Но выход есть. Отследить и обработать изменение реквизита "Пометка удаления" можно с помощью метода ДополнительныеСвойства . Для этого нам понадобится внести небольшие дополнения в процедуры модуля объекта документа.
В процедуре ПередЗаписью () мы сравниваем значение реквизита "Пометка удаления" редактируемого документа с значением, которое записано в базе. Если значения не равны, то записываем признак изменённости в дополнительные свойства, и далее используем его в процедуре ПриЗаписи () :
Комментарии
В своей статье Вы предлагаете не использовать свойство и/или метод 1C Модифицированность, а просто запоминаете тот реквизит или значение, которое Вам нужно проверить, а если надо проверить все реквизиты? Не перечислять же из все для запоминания старых значений?
//В модуле формы объекта:
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Экспорт
ТекущийОбъект.ДополнительныеСвойства.Вставить("Модифицированность", ЭтаФорма.Модифицированность);
КонецПроцедуры
В своей статье Вы предлагаете не использовать свойство и/или метод 1C Модифицированность, а просто запоминаете тот реквизит или значение, которое Вам нужно проверить, а если надо проверить все реквизиты? Не перечислять же из все для запоминания старых значений?
Довольно часто встречаются задачи, когда нужно организовать программное заполнение формы какого-то объекта. Скажем, у нас есть форма документа, на форме есть реквизиты, и нам нужно сделать команду, которая заполнит эти реквизиты. Данные для заполнения предполагается получать запросом.
Если конфигурация типовая, то, наверное, самый простой способ решения такой задачи – создать внешнюю обработку вида "Заполнение объекта".
Заполнение формы объекта с помощью внешней обработки
Строка с соответствующим параметром в модуле обработки:
Подключив обработку и указав, для какого документа она назначена, мы получим в форме документа команду. Тип команды задаётся при создании внешней обработки, и от него зависит, где и как будет выполняться обработчик команды. Для наших целей может подойти один из следующих типов команд:
- ВызовСерверногоМетода – обработчик команды располагается в модуле обработки;
- ВызовКлиентскогоМетода – обработчик команды располагается в модуле формы обработки;
- ЗаполнениеФормы – обработчик команды располагается в модуле обработки и позволяет работать с данными формы. Также позволяет вызвать серверную процедуру из модуля формы объекта. При этом можно заполнить форму не записывая объект.
Возможность заполнить форму не записывая объект – это то, что нужно. Ведь пользователь скорее всего ожидает, что по нажатию кнопки форма заполнится, а записываться будет позднее, после проверки результата заполнения. Поэтому выбираем тип команды – ЗаполнениеФормы.
В конечном итоге код в модуле обработки будет выглядеть примерно так:
В общем счёте задача решена. Однако, у такого способа есть небольшой недостаток – команда на форме размещается в определённом месте, а не там, где мы хотим её разместить. К примеру, на форме уже есть группа команд, включающая в себя команды заполнения, и мы хотели бы видеть новую команду в этой группе, но при подключении обработки команда на форме будет расположена отдельно от группы.
В связи с этим можно реализовать другой способ: добавить команду непосредственно в форму объекта – либо в основной конфигурации, либо в расширении – а обработчик команды организовать в модуле формы.
Заполнение формы объекта посредством обработчика команды в модуле формы
Итак, размещаем команду на форме объекта в том месте, которое нам нравится. В модуле формы добавляем клиентскую процедуру обработчика команды, из которой будем вызывать серверную процедуру. Серверную процедуру тоже создадим, она нам понадобится потому, что по условию задачи данные для заполнения получаются запросом.
Над серверной процедурой нужно подумать. В ней у нас будет объект формы с типом "ДанныеФормыСтуктура". Что-либо менять или заполнять в этом объекте не получится, возникнет ошибка "Объект недоступен для изменения".
Можно получить объект документа Объект . Ссылка . ПолучитьОбъект () , и заполнить его данными. Но тогда, чтобы увидеть данные в открытой форме, объект придётся записать, а это не очень хорошо.
Будет лучше, если данные добавятся без записи, и мы можем это сделать с помощью метода РеквизитФормыВЗначение . Этот метод преобразует реквизит формы в объект прикладного типа, и вот этот объект прикладного типа мы можем заполнить, а затем, уже заполненный, преобразовать обратно с помощью метода ЗначениеВРеквизитФормы . Выглядеть это будет примерно так:
Наша статья «Документ в 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С.
Как говорится: «Все гениальное – просто!». Экспериментируйте, используйте данный функционал программы и, главное, не бойтесь что-то испортить, ведь всегда можно вернуть версию объекта. Если вы сочтете это ненужным, то в любой момент вы сможете отключить данную настройку.
Читайте также: