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

#91
7.7 / Re: Как перехватить момент пер...
Последний ответ от Djelf - 05 сентября 2025, 15:17
Ну и хорошо что при выходе изменений нет, зачем логгировать?
#92
7.7 / Re: Как перехватить момент пер...
Последний ответ от Злоп - 05 сентября 2025, 15:11
Цитата: Djelf от 05 сентября 2025, 15:02
Цитата: Злоп от 05 сентября 2025, 14:54Или сделать тупо просто
В Приоткрытии() запоминаем содержимое документа, а формексом Послезакрытия() сравниваем с уже текущим состоянием документа.
...
?
Так должно сработать. Попробуй. А ограничения я уже написал выше.
Ну и лучше в json в таблику sqlite писать, или сериализировать туда тз или итз, а вот в длинные строки этот так себе вариант. Плохой вариант...

Но тут засада
Во например ЗБ
Открыл - поправил - провел (тут выполняется запись) - поправил назад - провел (тут запись) - закрыл.

При записи зарегистрируется бы два факта изменения, а при выходе - ищменений нет...
#93
7.7 / Re: Как перехватить момент пер...
Последний ответ от Злоп - 05 сентября 2025, 15:09
Цитата: Djelf от 05 сентября 2025, 15:02
Цитата: Злоп от 05 сентября 2025, 14:54Или сделать тупо просто
В Приоткрытии() запоминаем содержимое документа, а формексом Послезакрытия() сравниваем с уже текущим состоянием документа.
...
?
Так должно сработать. Попробуй. А ограничения я уже написал выше.
Ну и лучше в json в таблику sqlite писать, или сериализировать туда тз или итз, а вот в длинные строки этот так себе вариант. Плохой вариант...
Знаю что плохой вариант.
Костыли все это.
Можно тупо в файло писать, но как его закрыть что 1с может писать, а интерактивно ось пользователь ручками - не может. Хз.
#94
7.7 / Re: Как перехватить момент пер...
Последний ответ от Злоп - 05 сентября 2025, 15:08
Цитата: Djelf от 05 сентября 2025, 14:52ПриОткрытии не сработает при программной записи.
ПриЗаписи не перехватывается, на 1с++ это неоднократно обсуждали.
ПриПроведении работает стабильно, но надо получить данные до  момента измения, а получить ты их не можешь.

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

Но первоначальное состояние точно и надежно никак не получить.

P.S. АльФ! С какой частотой тебя гугл сниферит? Я даже не нажал кнопку отправить, а он уже этот пост засниферил  :o

Программную запись извне не рассматриваем.
#95
7.7 / Re: Как перехватить момент пер...
Последний ответ от Djelf - 05 сентября 2025, 15:02
Цитата: Злоп от 05 сентября 2025, 14:54Или сделать тупо просто
В Приоткрытии() запоминаем содержимое документа, а формексом Послезакрытия() сравниваем с уже текущим состоянием документа.
...
?
Так должно сработать. Попробуй. А ограничения я уже написал выше.
Ну и лучше в json в таблику sqlite писать, или сериализировать туда тз или итз, а вот в длинные строки этот так себе вариант. Плохой вариант...
#96
7.7 / Re: Как перехватить момент пер...
Последний ответ от Злоп - 05 сентября 2025, 14:54
Или сделать тупо просто
В Приоткрытии() запоминаем содержимое документа, а формексом Послезакрытия() сравниваем с уже текущим состоянием документа.
...
?
#97
7.7 / Re: Как перехватить момент пер...
Последний ответ от Djelf - 05 сентября 2025, 14:52
ПриОткрытии не сработает при программной записи.
ПриЗаписи не перехватывается, на 1с++ это неоднократно обсуждали.
ПриПроведении работает стабильно, но надо получить данные до  момента измения, а получить ты их не можешь.

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

Но первоначальное состояние точно и надежно никак не получить.

P.S. АльФ! С какой частотой тебя гугл сниферит? Я даже не нажал кнопку отправить, а он уже этот пост засниферил  :o
#98
7.7 / Re: Как перехватить момент пер...
Последний ответ от Злоп - 05 сентября 2025, 13:50
Изменения фиксируются в базе документом "Протокол". Где в свободном виде в строку неограниченной длины пишется было-стало
#99
7.7 / Как перехватить момент перед з...
Последний ответ от Злоп - 05 сентября 2025, 13:38
Обычная задача ведения лога изменений документа. Если нормально написано - то вкорячиапешь в ПриЗаписи() и норм. Но конфига самопальная, извращенная, запросто в коде формы документа встречается Записать(), ПриЗаписи() не отрабатывает. И прочие заморочки.
.
Поэтому куда можно вклиниться чтобы получить состояние контекста формы документа (изменений, но не записанный), самого документа через ТекущийДокумент() (без изменений еще), при этом чтобы после отработки моего кода пошла запись измененного документа.

И как вообще аннулировать запись в базу об изменениях если по какой-то причине запись измененного документа не прошла?

Мысли есть, но как-то некрасиво, извращенно получается.

Или может какой другой вариант/метод записи изменений документа по всем его реквизитам шапки и тч по типу "было-стало"
#100
7.7 / Re: COM соединение с базой
Последний ответ от Ветер в поле - 05 сентября 2025, 09:55
Хотя вот нашел пример вызова хранимой процедуры, возвращающая набор строк. Но писал это "специалист" ПервогоБита, которые те еще студенты, но некоторое представление о коде дает.
Попытка
	ADOСоединение  = Новый COMОбъект("ADODB.Connection");
	ADOСоединение.ConnectionString = "Driver={SQL Server};Server=192.168.1.163;Database=EC;Uid=v8;Pwd=123456;";
	ADOСоединение.Open();
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

Command = Новый COMObject("ADODB.Command");
Command.ActiveConnection = ADOСоединение;
ТекстЗапроса = "v8_getAnalysisListByPatient";
Command.CommandText = ТекстЗапроса;
Command.CommandType = 4;

Command.Parameters(1).value = Структура.ИД;

Результат = Command.Execute(); 
Массив = Новый массив;
Если НЕ Результат.EOF() Тогда
	МассивСтруктур = Новый Массив;
	Пока Результат.EOF() = 0 Цикл
		КолКолонок = Результат.Fields.Count();
		Строка  = Новый Структура;
		Для Инд = 0 По КолКолонок-1 Цикл
			Строка.Вставить(Строка(Результат.Fields(Инд).Name),Строка(Результат.Fields(Инд).Value));
		КонецЦикла;
		Массив.Добавить(Строка);
		Результат.MoveNext();
		
	КонецЦикла;
КонецЕсли;