Как перехватить момент перед записью...?

Автор Злоп, 05 сентября 2025, 13:38

« назад - далее »

item

Посмотри вк v7crypt от Щербакова (Вирта).
Там для документов много чего есть.
Практически перехват всех событий Перед/При/После  Записи/Проведения, причем работает для обьектов, а не форм.

Злоп

Цитата: Djelf от 05 сентября 2025, 16:23А как они смогли напечатать не измененный документ без записи а базу?
Можно тогда еще ПриПечатиТаблицы сниферить...

Но это реально глупость, прощать таки штучки и одновременно их мониторить.
Состояние0
Записали исправленное1 - напечатали - записали исправленное0 - состояние0 - выход.

Харлампий Дымба

Делал такое давным-давно. По памяти:

Завод ЖБИ. Бетономешалка заезжает на территорию, ей выписывают липовую накладную, заливают бетон, после выезда вместо липовой  делают настоящую накладную для следующей машины. Разово 6 кубов бетона - фигня, но аппетиты росли. Выход бетона по сравнению с расходом цемента был подозрительно низок)

Этап 1: Копия накладной остаётся на посту заливки, потом сверка: что в 1С, а что на посту заливки. По итогу - пост заливки берут в долю и липовая накладная исчезает из 1С синхронно с бумажной копией на посту заливки.

Этап 2: Ещё одна копия накладной остаётся на посту охраны (выездные ворота), потом сверка: что в 1С, а что на посту охраны. По итогу - пост охраны берут в долю и липовая накладная исчезает из 1С синхронно с бумажными копииями на посту охраны и на посту заливки.

Этап 3: Сохранение истории изменений накладных в 1С.
Важные моменты:
Всё негласно, чтобы не спугнуть отписчика-вора, ведь подготовить липу в другой базе/программе проще простого - так что о начале охоты знаю только я и главный бухгалтер.
Никакой жёсткости в плане запрета печати непроведенных/несохраненных! - именно для ловли на живца, единственное - запрет редактирования печатной формы.
Должно быть выявление именно подозрительных действий, т.е. распечатали повторно без изменения или распечатали повторно что-то добавив - не подозрительно, а распечатали и сохранили что-то удалив - подозрительно. Потому что просматривать глазами изменения в сотнях накладных в день - не работает.
Распечатали и не сохранили вообще - подозрительно вдвойне, т.е. контроль должен учитывать, что контролируемой накладной в базе 1С может вообще не оказаться.
Не забываем контролировать все возможности: печать из журнала,  печать несохраненного, изменение после печати, возможно даже изменение наименований товаров (если уж заморочиться), отрубаем другие возможности напечатать накладную.
Можно дублировать печать в пдф в папку - для анализа не пригодно, но для последующих разборок может пригодиться.
Технически делал через привязку к накладной mxl-файла куда скидывал действие/время/пользователя и при необходимости состояние документа с подсветкой измененного - так проще для быстрого анализа.
Так как делается под конкретную задачу и для конкретного документа, то всякие программные .Записать() - не проблема, достаточно также делать вызов процедуры фиксации состояния как и в ПриЗаписи().
В УРБД работать не будет.
При выявлении подозрительных действий - желательно сразу сообщение интересанту.
Цель - не спугнув выявить ворующие смены для принятия мер.

Итог 3 этапа: ворующие смены выявлены, я получил в качестве премии 2 месячные зарплаты, никаких административных мер не последовало, а, судя по продолжающим падать мне в список подозрительным накладным, доля начала делиться на большее количество частей.
А потом всего понемногу: чёрненькая из Тату, Великая рецессия, Батурина... в общем всё исчезло.

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

Arbuz

Цитата: Djelf от 05 сентября 2025, 14:52ПриЗаписи не перехватывается, на 1с++ это неоднократно обсуждали.
Точности ради: у wirth'а в V7Crypt всё перехватывается, у меня используется
Цитата
И так в чем суть. Помимо стандартных предопределений: «ОбработкаПроведения»
и «ОбработкаУдаленияПроведения», в модуле документа теперь можно определить
дополнительные процедуры для обработки событий:
"ПриЗаписи" или "OnWrite";
"ПередПроведением" или "BeforePosting";
"ПослеПроведения" или "AfterPosting";
"ПередУдалениемПроведения" или "BeforeUnposting";
"ПослеУдаленияПроведения" или "AfterUnposting";
"ПередУдалением" или "BeforeDelete";
"ПослеУдаления" или "AfterDelete";
"ПередОтменойУдаления" или "BeforeUnDelete";
"ПослеОтменыУдаления" или "AfterUnDelete".
Процедуры не имеют входящих аргументов и параметра возврата. В процедурах:
«ПриЗаписи», а также с префиксом «Перед», можно отменить выполняемое действие,
установив статус возврата в ноль, при этом будет брошено стандартное исключение языка
1С. Процедуры, с префиксом «После», действие отменить не могут и вызываются только
как уведомление.
Немаловажный факт, что события с префиксами «Перед» и «После» выполняются
вне рамок транзакции побуждающего действия, т.е. не блокируют базу данных.
События «Перед» и «После» выполняются в рамках одного контекста модуля
документа, т.е. в событии «Перед» можно выбрать данные (например, проводки) и сохранить их в переменной модуля документа, а в событии «После», сравнить эти данные
с результатом после выполнения действия, и произвести необходимые операции.
Это просто сказка (правда лютых фиче-глюков тоже хватает, но я уже их изучил)

Цитата: item от 05 сентября 2025, 20:40Посмотри вк v7crypt от Щербакова (Вирта).
Во-во, я про то. Но я бы не рекомендовал так просто ставить это в прод, там проблем добавится, на самом деле.

Злоп


alyuev

А для какого релиза 1С эта библиотека v7crypt ? 25й или 27й? И да, интересно было бы знать про реальные проблемы с этой компонентой.

item

Если родной blang.dll а релизах не поменялся, то имхо без разницы.

Arbuz

Эм... Вот с родными событиями, например. Бывает по нескольку раз вызываются, типа ПриЗавершенииРаботы, особенно забавно с параметрами которые, там каша. Там есть ещё возможность добавлять свои глоб.модули и вся событийная логика более-менее предсказуемо работает только при определённой конфигурации. У меня давно это используется, не могу отказаться, везде воркэраунды. Не знаю, может из-за этой компоненты бывает срывает стэк при невыясненных обстоятельствах, но всё время в одних и тех же условиях, слегка меняешь код и нет проблем. Бывает глючит поток исполнения байт-кода, пропускает, останавливается — тоже грешу на эту штуку. Бывают интересные интерференции с трассировкой формекса. Но, повторю, я давно её использую, в том числе, V7CryptLib и уже как крыса в стеклянном лабиринте знаю где повороты на выход, но начертить маршрут не могу ;D. Сейчас у меня очень стабильно работает — ошибки случаются не чаще чем в целом по операционке, т.е. никогда, в пределе.
Я бы вам не советовал её без крайнего любопытства пытаться быстро приспособить себе в прод.
Может ещё что... просто у меня сейчас корона, будь она неладна, ребят — голова не варит совершенно.

item

Пробовал, но отказался.
Добавлю, что помню.
ПриЗавершенииРаботыСистемы вызывается столько раз, сколько обьявишь глобальных модулей,
В каждом глобальном модуле вызывается (должна быть прописана) ОбработкаВнешнегоСобытия.
Функция СоздатьКонтекст работает только для внешних обработок.
Отказался про причине лени разбираться и подстраиваться. У меня ПриЗаписи доков было понатыкано Записать в транзакции, и периодически подвисало крепко на этом моменте. Возможно, если бы вынес логику в ФормаПослеЗаписи, то и работало бы.
А так то да, весчь многообещающая, но сырая.

Пс
Про Гобальные от АЛьФа и ФормуПослеЗаписи на то время не знал.
И да, на загруженныз базах логика ПередПроведением вне транзакции это сила.

Злоп


item

Цитата: Злоп от 12 сентября 2025, 00:57ПередПровндением?
Это где такая?
Да все там же, в v7crypt.
ПередПроведением, ПослеПроведения, ПриЗаписи и тд обьявляешь как а модуле документа, так и глобально.
Работают в обьектах
Вот не помню, можно ли обьявить для обьекта экспортный метод, надо глянуть.

trdm

А есть ссылка на компоненту, что-то гугл не гуглит..
Ну или мамыльте..

item

Сетап
V7Crypt_1.0.1.6.exe

Устанавливается в собственную папку.
При патче заменяет родной blang.dll на 1c_blang.dll.

Злоп

Репозиторий по 77 нужен ;-)
У себя на компе файловый архив, по папочкам разложено всякое...

item

Цитата: Злоп от 13 сентября 2025, 11:50Репозиторий по 77 нужен ;-)
...

2 года держу домен v77.by на эти цели, причем написать сервер исключительно на семерке.
Думаю, до 37-го справлюсь ))