Перепроведение изменённых документов. Часть II.

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

П ервая статья принесла один отклик, однако он оказался настолько концептуальным, что пришлось сесть за написание второй части. У новой технологии нет ни одного из недостатков, упомянутых в первой статье. Кроме того, описанную идею можно использовать и в других целях. Например, для организации детального журналирования изменений БД, совершенных пользователем.

автор статьи: Фёдор Езеев
fe@alterplast.ru
опубликовано: апрель 2003

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

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

Однако, уважаемый Mx@mail.ru и здесь проявил могучий разум, он предложил еще одну здравую мысль (просто результат он знал заранее ;-). Мысль такая: в момент записи у нас есть один документ в двух состояниях, которые можно довольно просто сравнить. Первое состояние – Контекст документа. Это то, что получилось после внесения изменений. Второе состояние –- записанный документ в базе данных.

Теория кончилась – берем в руки клавиатуру и пишем код. Начнем с анализа реквизитов шапки.

//Берем документ из БД
Д=СоздатьОбъект("Документ");
Д.НайтиДокумент(ТекущийДокумент());

МетаД=Метаданные.Документ(Вид());

//Определим, изменился реквизит, или нет
Для С=1 По МетаД.РеквизитШапки() Цикл
   РеквИД=МетаД.РеквизитШапки(С).Идентификатор;
   СтароеЗначение=Д.ПолучитьАтрибут(РеквИД);
   НовоеЗначение=ПолучитьАтрибут(РеквИД);
   Если СтароеЗначение<>НовоеЗначение Тогда
      Сообщить("Изменился реквизит шапки "+РеквИД);
      Сообщить("Старое значение: "+СтароеЗначение);
      Сообщить("Новое значение: "+НовоеЗначение);
      Сообщить("===============================");
   КонецЕсли;
КонецЦикла;

Теперь я хочу понять, насколько критичны сделанные изменения. И сообщить только о критичных.

// В список значений занесем идентификаторы тех реквизитов,
// изменение которых нас не волнует


Косметика=СоздатьОбъект("СписокЗначений");
Косметика.ДобавитьЗначение("Комментарий");
Косметика.ДобавитьЗначение("Автор");

Д=СоздатьОбъект("Документ");
Д.НайтиДокумент(ТекущийДокумент());

МетаД=Метаданные.Документ(Вид());

Для С=1 По МетаД.РеквизитШапки() Цикл
   РеквИД=МетаД.РеквизитШапки(С).Идентификатор;
Если Косметика.НайтиЗначение(РеквИД)>0 Тогда
      Продолжить;
   КонецЕсли;

   СтароеЗначение=Д.ПолучитьАтрибут(РеквИД);
   НовоеЗначение=ПолучитьАтрибут(РеквИД);
   Если СтароеЗначениеНовоеЗначение Тогда
      Сообщить("Изменился реквизит шапки "+РеквИД);
      Сообщить("Старое значение: "+СтароеЗначение);
      Сообщить("Новое значение: "+НовоеЗначение);
      Сообщить("===============================");
   КонецЕсли;
КонецЦикла;

Ну и в заключение на основании сделанного анализа примем нужное нам решение.

Процедура ПриЗаписи()

Если Выбран()=0 Тогда
Возврат;
КонецЕсли;

Косметика=СоздатьОбъект("СписокЗначений");
Косметика.ДобавитьЗначение("Комментарий");
Косметика.ДобавитьЗначение("Автор");
ИзменениеКритично=0;

Д=СоздатьОбъект("Документ");
Д.НайтиДокумент(ТекущийДокумент());
МетаД=Метаданные.Документ(Вид());

Для С=1 По МетаД.РеквизитШапки() Цикл
   РеквИД=МетаД.РеквизитШапки(С).Идентификатор;
   Если Косметика.НайтиЗначение(РеквИД)>0 Тогда
      Продолжить;
   КонецЕсли;
   СтароеЗначение=Д.ПолучитьАтрибут(РеквИД);
   НовоеЗначение=ПолучитьАтрибут(РеквИД);
   Если СтароеЗначение<>НовоеЗначение Тогда
      ИзменениеКритично=1;
//Одного критичного изменения вполне достаточно
      Возврат;

   КонецЕсли;
КонецЦикла;

Если ИзменениеКритично=0 Тогда
   ПриЗаписиПерепроводить(0);
   Записать();
   ПриЗаписиПерепроводить(1);
   СтатусВозврата(0);Возврат;
КонецЕсли;


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

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

Кусочек, сравнивающий строки, будет выглядеть примерно так (предполагаем, что любое изменение табличной части требует перепроведения):

Если КоличествоСтрок()<>Д.КоличествоСтрок() Тогда
   ИзменениеКритично=1;
   Возврат;
Иначе
   ВыбратьСтроки();
   Пока ПолучитьСтроку()=1 Цикл
      Д.ПолучитьСтрокуПоНомеру(НомерСтроки);
      Для С=1 По МетаД.РеквизитТабличнойЧасти() Цикл
         РеквИД=МетаД.РеквизитТабличнойЧасти(С).Идентификатор;
         СтароеЗначение=Д.ПолучитьАтрибут(РеквИД);
         НовоеЗначение=ПолучитьАтрибут(РеквИД);
         Если СтароеЗначение<>НовоеЗначение Тогда
            ИзменениеКритично=1;
            Возврат;
         КонецЕсли;
      КонецЦикла;
   КонецЦикла;
КонецЕсли;

Преимуществами этого метода можно признать:

  1. Прозрачность для пользователя.
  2. Размещение кода, ответственного за одну задачу в одном месте.
  3. Отсутствие "каскада записей" при изменении сразу нескольких "неважных" реквизитов.
Ну и еще раз хочется упомянуть, что данную методику можно с успехом применять для детального журналирования действий пользователя.

Начать дискуссию

Как налоговая реформа-2025 изменит работу бухгалтера — обсудим на конференции «Клерка»

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

Маркировку импортного алкоголя перенесут в Россию

С 1 марта 2026 года импортеры будут оплачивать маркировку иностранного алкоголя в РФ. Это снизит зависимость предпринимателей от маркировочных центров других государств.

📴 Минцифры: сбой Microsoft говорит о важности импортозамещения иностранного ПО. Время настало, подтверждает гендиректор «Северсталь – ЦЕС»

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

Курсы повышения
квалификации

18
Официальное удостоверение с занесением в госреестр Рособрнадзора

Как повысить продуктивность в компании: метод канбан

Канбан — это способ управления задачами. В чем его особенность, зачем его придумали, какие проблемы решаются с его помощью? Давайте разбираться.

Как повысить продуктивность в компании: метод канбан

Что делать, если вы приближаетесь к лимиту по УСН 

Если компания вплотную подходит к лимитам по упрощенке, нужно быстро делать выбор: удерживаться на УСН или переходить на ОСНО, временно или навсегда. Разбираем преимущества и недостатки каждого варианта и даем лайфхаки по сохранению спецрежима. 

Что делать, если вы приближаетесь к лимиту по УСН 
Общество

Роспотребнадзор подготовил изменения в санитарные правила для торговых объектов и рынков

На фоне участившихся массовых отравлений Роспотребнадзор подготовил проект изменений в СП 2.3.6.3668-20 «Санитарно-эпидемиологические требования к условиям деятельности торговых объектов и рынков, реализующих пищевую продукцию».

Опытом делятся эксперты-практики, без воды

Санатории будут реконструировать на деньги частных инвесторов

Чтобы повысить спрос на санаторно-курортный отдых, власти собираются привлекать средства частных инвесторов на обновление туристической инфраструктуры.

Автоматизировать «хаос» невозможно. А роботизировать?

Что мешает неработающей системе? Правильно — заказчики! У которых то бизнес-процессы плохо выстроены, то персонал.. гхм.. «криворук» — по мнению некоторых поставщиков, конечно же. Но, всегда ли нужно болезненное изменение бизнес-процессов компании для «автоматизационного счастья»?

Автоматизировать «хаос» невозможно. А роботизировать?

Как отражать в учете строительство офиса своими силами

При возведении объекта основных средств собственными силами все затраты, связанные с этими капвложениями, согласно требованиям ФСБУ 26/2020 надо отражать на счете 08.

Объемы госзакупок сократились до 5,69 трлн рублей

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

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

Представители бизнеса считают инициативу использования стейблкойнов для трансграничных расчетов перспективной. Это поможет проведению платежных операций со странами БРИКС и трансграничных платежей на фоне санкций.

Как применять машиночитаемые доверенности в системе «Честный ЗНАК»

Машиночитаемая доверенность (МЧД) позволяет сдавать электронную отчетность, оформлять документы через электронный документооборот, а также работать в системе маркировки.

Тот, кто много шумит, привлекает много внимания

Речь не о качестве. Речь не о смысле. Речь о победе в гонке вооружения в информационной войне.

Тот, кто много шумит, привлекает много внимания

ТПП: инвестиционное законодательство нужно обновить

Вице-президент Торгово-промышленной палаты (ТПП) Дмитрий Курочкин заявил, что инвестиционное законодательство нуждается в обновлении.

Бесплатно с УСН

Как уменьшить платеж по УСН за полугодие 2024 года на взносы: примеры

Во 2 квартале аванс может быть к доплате, к уменьшению или его может не быть вообще.

Как уменьшить платеж по УСН за полугодие 2024 года на взносы: примеры
6-НДФЛ

В 6-НДФЛ допустима погрешность в налоге при умножении дохода на ставку

В строке 140 раздела 2 формы 6-НДФЛ отражают исчисленный налог нарастающим итогом. И эта сумма не обязательно должна быть ровно «копейка в копейку» равняться сумме дохода, умноженному на 13%.

Как повысить доверие и интерес аудитории к вашему бизнесу? Читайте на «Клерке» блог компании SmartWidgets!

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

Как повысить доверие и интерес аудитории к вашему бизнесу? Читайте на «Клерке» блог компании SmartWidgets!

Как списать бракованный товар в налоговом учете

Когда реализация и возврат бракованного товара происходят в разных налоговых периодах, то непонятно, как это отразить в отчетности. При этом не всегда нужно восстанавливать НДС за бракованный товар. Рассказываем, как правильно списать бракованный товар в налоговом учете.

Как списать бракованный товар в налоговом учете

Недобросовестные участники ООО исключаются из компании: практика ЮК «Генезис»

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

Интересные материалы

НДС

🛀 За СПА, фитнес и Wi-Fi в отеле с 1 сентября будет ставка НДС 0%

Проживание в гостинце облагается НДС 0%. Под эту ставку попадают услуги, которые включаются в стоимость номера и перечислены в правилах предоставления гостиничных услуг.