gifts2017

Поиск изменившихся объектов в базе 1Сv7.7

Опубликовал Владимир Фомин (фокусник) в раздел Администрирование - Поиск данных

Анализ и сохранение во внешней базе (SQLite) списка измененых документов и справочников. Полезна при синхронизации различных баз 1Cv77

Данная обработка анализирует столбец "штамп" DBF файлов справочников и журнала документов. В данном столбце содержится версия объекта, которая меняется, даже при программном изменении объекта. Эти данные регистрируются в SQLite базе. В дальнейшем проводится сравнение текущего состояния базы с базой SQLite. И изменения сохраняются на текущуюдату(). В обработке есть функция Получить_ТЗ_Изменений которая возвращает ТЗ с изменившимися объектами. Можно сделать отбор по видам справочников, документы по ДатамДок.

Необходима компонета 1SQLite.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Изменения_В_БД.ert
.1234191755 114,00Kb
25.09.09
90
.1234191755 114,00Kb 90 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Евгений Мартыненков (JohnyDeath) 12.02.09 10:08
Звучит красиво. Ща попробуем
2. Евгений Мартыненков (JohnyDeath) 12.02.09 10:17
Автор, может опишешь вкратце как ей пользоваться и за что отвечают каждый элемент формы.
3. Епрст (Ёпрст) 12.02.09 10:20
запСоздЖурнала.ВыполнятьВТранзакции =1;
{ИЗМЕНЕНИЯ_В_БД.ERT(96)}: Поле агрегатного объекта не обнаружено (ВыполнятьВТранзакции)
запросСправочников.ВыполнитьЗапрос(ТекстЗапроса,тзСправочники,2);
{ИЗМЕНЕНИЯ_В_БД.ERT(407)}: Слишком много параметров передано при вызове функции/процедуры объекта
4. Епрст (Ёпрст) 12.02.09 10:22
(2) при беглом просмотре, на сколько я понял, делается "слепок" базы и при повторном запросе сравнивается "слепок" с тем что есть сейчас...
и если надо, "слепок" обновляется текущими данными...

Могу и ошибаться :)
5. Евгений Мартыненков (JohnyDeath) 12.02.09 10:22
(3) по первой ошибке - качай последнюю версию 1sqlite
6. Епрст (Ёпрст) 12.02.09 10:23
(5) спсб. ща попробуем, после того как hogik поправил dbeng32 забил на sqllite ...
7. Евгений Мартыненков (JohnyDeath) 12.02.09 10:26
Тоже сейчас бегло просматриваю. Практически сразу меня смутили строчки:
Код
// Создаем временную таблицу журнала документов
   ЗапросВрт      = базаДанных.НовыйЗапрос();
   Если ЕстьТакаяТаблица(базаДанных,"ДокЖурналВирт") <> 0 Тогда
      ЗапросВрт.ВыполнитьЗапрос("DROP table ДокЖурналВирт");
   КонецЕсли;
   ЗапросВрт.ВыполнитьЗапрос("create virtual table ДокЖурналВирт using dbeng(_1С.JOURN)");
   
   // Создаем виртуальную таблицу журнала документов чтобы не мешать в транзакции народу
   Если ЕстьТакаяТаблица(базаДанных,"ДокЖурналВрем") <> 0 Тогда
      ЗапросВрт.ВыполнитьЗапрос("DROP table ДокЖурналВрем");
   КонецЕсли;

   запСоздЖурнала   = базаДанных.НовыйЗапрос();
   запСоздЖурнала.ВыполнятьВТранзакции =1;
   запСоздЖурнала.ВыполнитьЗапрос("Create table ДокЖурналВрем (
   |idjournal TEXT,
   |iddoc TEXT,
   |iddocdef TEXT,
   |date TEXT,
   |docno TEXT,
   |verstamp TEXT,
   |ISMARK VARCHAR(1))");
Показать полностью

Я так понимаю здесь: таблица удаляется, если была, потом создаётся, потом опять удаляется, потом опять создаётся.
Или я ещё не проснулся?

П.С.
1) В 1sqlite уже давно есть автоподключение таблиц, поэтому "ЗапросВрт.ВыполнитьЗапрос("create virtual table ДокЖурналВирт using dbeng(_1С.JOURN)");" можно и не писАть.
2) в sqlite есть такое: "drop table IF EXISTS" и "creat table IF EXISTS"
8. Евгений Мартыненков (JohnyDeath) 12.02.09 10:27
9. Евгений Мартыненков (JohnyDeath) 12.02.09 10:37
Всё-таки описания очень не хватает (

По поводу фильтра по виду документа. Примерно так:
Код
WHERE Журнал.iddocdef = :ВидДокумента.ТвойВидДокумента_Например_Реализация
Показать полностью
10. Епрст (Ёпрст) 12.02.09 10:49
(8) пытаюсь, хотя что-то на sqllite осталось.. в общем зоопарк еще тот..
:)
11. Владимир Фомин (фокусник) 12.02.09 16:17
(JohnyDeath) 7 По пункту 2) в sqlite есть такое: "drop table IF EXISTS" и "creat table IF EXISTS"
Знаю что есть. Но почему то у меня выдает ошибку при работе с виртуальной таблицей.
12. Владимир Фомин (фокусник) 12.02.09 16:28
По поводу описания.
В обработке есть функция Получить_ТЗ_Изменений(), параметры передаваемые в которую являются реквизитами формы. Но это так сказать в виде примера.

Вызов функции создает внешнюю БД. В неё записываются в виде таблиц все справочники и отдельно журнал документов. В базе 1С в ДБФ файлах соответствующих таблиц есть столбец "VERSTAMP", в котором при практически любом изменении записывается номер версии соответствующего объекта. Не записывается если специально использовать команду из УРБД "РегистрацияИзменений". Эти версии записываются в отдельные таблицы подчиненые таблицам справочников на соответствующую дату. В дальнейшем идет анализ сравнения текущего сотояния базы с этими данными. Им ожно получит список измененых объектов за интервал времени. Возможны отборы по виду справочников и по периоду документов.
13. Владимир Фомин (фокусник) 12.02.09 16:29
Назначение реквизитов формы дано в описании функции Получить_ТЗ_Изменений()
14. Сергей (Che) Коцюра (CheBurator) 15.03.10 17:23
ай маладца! то что мне надо!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа