Последние сообщения

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

Цитата: item от 05 сентября 2025, 20:40Посмотри вк v7crypt от Щербакова (Вирта).
Во-во, я про то. Но я бы не рекомендовал так просто ставить это в прод, там проблем добавится, на самом деле.
#52
Глюки форума / Re: Перенос домена к другому р...
Последний ответ от Arbuz - 08 сентября 2025, 15:51
Цитата: АЛьФ от 02 сентября 2025, 13:05Хостинг остался у меня дома
Хорошо работает. N100 на своих 6Вт великолепен, конечно. А что за линк, если не секрет?
#53
Дружественные проекты / Re: v7DBNet + 1Sqlite = ?
Последний ответ от Arbuz - 08 сентября 2025, 15:41
Цитата: Djelf от 29 августа 2025, 15:223. Можно включить монопольный режим доступа в sqlite
Это что имеется в виду?
#54
7.7 / Re: Как перехватить момент пер...
Последний ответ от Харлампий Дымба - 08 сентября 2025, 11:17
Делал такое давным-давно. По памяти:

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

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

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

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

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

Если нужно, могу поискать код в закромах, но вряд ли там какие-то прям откровения по сравнению с уже написанным в теме.
#55
7.7 / Re: Как перехватить момент пер...
Последний ответ от Злоп - 05 сентября 2025, 20:48
Цитата: Djelf от 05 сентября 2025, 16:23А как они смогли напечатать не измененный документ без записи а базу?
Можно тогда еще ПриПечатиТаблицы сниферить...

Но это реально глупость, прощать таки штучки и одновременно их мониторить.
Состояние0
Записали исправленное1 - напечатали - записали исправленное0 - состояние0 - выход.
#56
7.7 / Re: Как перехватить момент пер...
Последний ответ от item - 05 сентября 2025, 20:40
Посмотри вк v7crypt от Щербакова (Вирта).
Там для документов много чего есть.
Практически перехват всех событий Перед/При/После  Записи/Проведения, причем работает для обьектов, а не форм.
#57
7.7 / Re: Как перехватить момент пер...
Последний ответ от Ветер в поле - 05 сентября 2025, 18:54
У меня это решено так. ПриОткрытии запоминаем текущее состояние документа. ПриЗакрытии сравниваем и записываем в базу.
С одной стороны тут есть бонус - промежуточные сохранения не забивают базу. С другой - если из документа не вышли, то информация об изменении не отразится в базе. Также в шапке документа есть счетчик перепроведений. В большинстве документов стоит запрет печати незаписанного документа. Точнее при нажатии на кнопку печати, документ записывается и проводится.
Данные изменений хранятся иерархически. Справочник ДокументыИзменения содержит все документы, для которых отслеживается история. Подчиненный ему справочник ИзмененияВДокументе содержит факты изменения, когда, где, кто изменил, тип изменения (провел, пометил на удаление, записал и т.д). Уже этому справочнику подчинен ИзмененияРеквизитовДокумента - тут содержатся измененные реквизиты шапки. Также для каждого документа с табличной частью сделаны справочники типа ИзмененныеСтрокиПоступлениеМатериала, которые содержат изменения в строках.
Такое хранение позволяет очень точно находить всякие специфические ситуации, потому что позволяет запросом поднять нужные данные. С помощью специального класса все манипуляции по поддержанию истории делается просто.
Были идеи по созданию отдельной базы, в которую будут периодически переноситься данные истории, но не понадобилось. Просто создал архивную базу, в которую раз в год переносились все данные за прошедший год. Поэтому есть архив за 14 лет и рабочая база за 1-2 года.

В каждом документе есть примерно такие строки:
Перем ОбъектФормаДокумента;

//*****************************************************************************
Процедура ПриОткрытии() //предопределенная
	
	Если ОбъектФормаДокумента.ПриОткрытии("кнХПредставитель", 1, 1, 1) = 0 Тогда //тут запоминается начальное состояние
		Возврат;
	КонецЕсли;
	
	Если Форма.ТолькоПросмотр() = 0 Тогда
		Если глПолучитьПолномочие("РазрешитьИзменятьДатуДокумента") = 0 Тогда
			глДоступностьРеквизитов(Контекст, "ДатаДок", 0);
		КонецЕсли;
	КонецЕсли;
	
	глАктивизироватьРеквизит(Контекст, "Статус", "ДатаДок", 1);
	
КонецПроцедуры //ПриОткрытии

//*****************************************************************************
Процедура ПриЗаписи() //предопределенная
	
	Если ОбъектФормаДокумента.ПриЗаписи_ВНачале("") = 0 Тогда //тут стандартные проверки на заполненность реквизитов и возможность записи
		Возврат;
	КонецЕсли;
	
	Если ОбъектФормаДокумента.ПриЗаписи() = 0 Тогда //тут взводится флаг записи документа
		Возврат;
	КонецЕсли;
	
КонецПроцедуры //ПриЗаписи

//*****************************************************************************
Процедура ПриЗакрытии() //предопределенная
	
	Если ОбъектФормаДокумента.ПриЗакрытии() = 0 Тогда //здесь анализируем изменения и записываем в базу
		Возврат;
	КонецЕсли;
	
КонецПроцедуры //ПриЗакрытии

////////////////////////////////////////////////////////////////////////////////
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ

ОбъектФормаДокумента = СоздатьОбъект("Форма.Документ");
ОбъектФормаДокумента.Инит(Контекст, 1);
//ОбъектФормаДокумента.ДобавитьПечФорму("Печатная форма", "Печать");
#58
7.7 / Re: Как перехватить момент пер...
Последний ответ от Djelf - 05 сентября 2025, 16:23
А как они смогли напечатать не измененный документ без записи а базу?
Можно тогда еще ПриПечатиТаблицы сниферить...

Но это реально глупость, прощать таки штучки и одновременно их мониторить. 
#59
7.7 / Re: Как перехватить момент пер...
Последний ответ от Злоп - 05 сентября 2025, 16:13
Я тоже согласен но персоналом рулю не я
#60
7.7 / Re: Как перехватить момент пер...
Последний ответ от Djelf - 05 сентября 2025, 16:05
Цитата: Злоп от 05 сентября 2025, 15:51
Цитата: Djelf от 05 сентября 2025, 15:17Ну и хорошо что при выходе изменений нет, зачем логгировать?
поправили - напечатали - поправили, вышли. Печатное и в базе - разное...
.
Приправильнрй конструкции документов/процессов все это можно обойти, но рефакторить туеву хучу всего не вариант

Товарищь Берия с таким бы справился...