Имя: Пароль:
1C
1С v8
Сбор данных из нескольких баз 1С
0 Viverna
 
08.10.13
09:37
Думаю проблема довольно общая. Задача обычная - есть несколько одинаковых баз 1С 8.2 SQL, нужно собрать из них данные для отчетности (сбор данных каждый день).
Период хоть и закрывается - но с опозданием и "не для всех".
Здесь я вижу две стандартные проблемы:
1. Если документ поменяли задним числом.
2. Если документ удалили задним числом.
Как можно это решить? Поля ВерсияДанных в конфигурации нет.
Есть ли какой то универсальный способ? Можно ли полностью полагаться на журнал регистрации событий - вылавливать событие изменения или удаления объекта?
1 Asmody
 
08.10.13
09:38
планы обмена для как раз для этого придуманы
2 1Сергей
 
08.10.13
09:40
главная проблема - это синхронизация
3 Viverna
 
08.10.13
09:50
(1) мне данные не в 1С выгружать надо, в стороннюю программу
4 Viverna
 
08.10.13
09:51
(1) как в планах обмена решается эта проблема? за счет чего?
5 andreymongol82
 
08.10.13
09:52
(4) Там есть табличка где накапливаются изменения объектов
6 1Сергей
 
08.10.13
09:52
(4) фиксируются все факты изменения объектов
7 1Сергей
 
08.10.13
09:53
(5) не совсем изменения
8 andreymongol82
 
08.10.13
09:56
(7) Ну эт да. Если быть точным.
9 Viverna
 
08.10.13
13:08
(5) А где это волшебное "там"?
Т.е. я вот создам план обмена получается в базе источнике. Значит в ней в какой то табличке будут сохраняться все изменения объектов, которые я задам в настройках плана обмена.
Все верно?
10 Viverna
 
08.10.13
14:48
Аха. Поняла примерно.
_AccumRegChangeRec - тут список измененных документов.
Он видимо очищается после обмена.
Только вот даты там изменения нет.
_Node<n> - таблица плана обмена. Даты видимо где то здесь.
11 ptiz
 
08.10.13
14:49
(10) Дат нет. Есть список измененных объектов.
12 ДенисЧ
 
08.10.13
14:50
ТОлько учтите....
Прямое обращение к таблицам SQL запрещено лицензией....
13 Галахад
 
гуру
08.10.13
14:55
(10) А зачем дата? Выгрузили данные, очистили таблицу изменений.
Если, что-то появилось в таблице, значит нужно грузить снова.
14 andreymongol82
 
08.10.13
14:58
(9) Для начала пример из СП

ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла);
ЗаписьСообщения.НачатьЗапись(Запись, Узел);
Выб = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель,
        ЗаписьСообщения.НомерСообщения);
Пока Выб.Следующий() Цикл
    Объект = Выб.Получить();
    ЗаписатьXML(Запись, Объект);
КонецЦикла;
ЗаписьСообщения.ЗакончитьЗапись();
Запись.Закрыть();
15 Viverna
 
08.10.13
15:13
(13) Аха. Как то слабо себе представляется внешней программой чистить данные в таблице 1С...
Тем более с учетом (12)
16 pwei
 
08.10.13
15:19
(15) данные очищаются методом УдалитьРегистрациюИзменений()
17 wms
 
08.10.13
15:23
(0)добавь в каждую базу 1С один РС ИзмененныеСсылкиДляВыгрузки
измерение- ОбъектСсылка
ну и в реквизиты всякую инфу например дата изменения

и подписке при записи пиши в него, а после выгрузки  удаляй записи
18 badboychik
 
08.10.13
15:26
(15) Почему слабо представляется? Про СОМ-соединение не слышали что ли?
19 wms
 
08.10.13
15:27
(15)если по Com не получится, то удаляй из 1С. регламентное задание крутится и читает данные из внешнего файла что удалить в (17) в РС
20 badboychik
 
08.10.13
15:28
(19) Нет, пусть регламентное задание само готовит файл изменений, передает во внешнюю программу и ждет ответа что данные приняты, потом удаляет изменения
21 wms
 
08.10.13
15:39
(20)или так. от задачи/данных плясать
22 Jump
 
08.10.13
15:41
(12)Шутишь?