Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Синхронизация двух баз... - как ?  (Прочитано 36710 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Skubent
Гость
« : 15-12-2003 10:22 » new

Исходные данные:
Есть основной сервер в офисе, на нем живет SQL-евская база. 1С ессно.
Есть один компьютер на складе, связь между объектами возможна только краткосрочная модемная либо флоппи-нетом Жаль
Задача - обеспечить документообмен между ними.

Исходные данные кончились, осталось определиться как это сотворить. Все неуказанные данные можно считать перемнными величинами...
Записан
Harry
Модератор

ua
Offline Offline

« Ответ #1 : 15-12-2003 21:00 » 

Если нет устойчивой связи - не получится нормальной синхронизации. Работа, я так понял, идет одновременно в обеих базах. Свои карточки товаров, приходно-расходные документы... года три назад пытались мы такое сделать для сети магазинов. Какой геморрой! Ужас!   Вот такой я вот  Недели через две мы это бросили и стали искать обходные пути. И это при том, что имелась постоянная модемная связь. Я так предполагаю, синхронизация нужна прежде всего для получения офисом отчетов по складу: чего, сколько, почем. Если так, легче привозить каждый день складскую базу на RW (ну и обратно, если на складе нужна офисная).
А если нужен просто документообмен (как сказано в постановке задачи) - да гонять перемещения товара между складами и все, зачем тогда вообще синхронизация? Ты поясни, для чего она, велик ли оборот - может малой кровью решить удастся. Потому как процесс весьма муторный.
Записан

Слабый пол силен в силу слабости сильного пола к слабому
Skubent
Гость
« Ответ #2 : 15-12-2003 21:11 » 

Harry, знаю, что муторный...
Итак - в офисе отбиваются заявки, накладные, продажи и т.п...
На складе - принятие, списание, перемещения и т.п...
Объем - до 2000 документов в день. (ну, это пиковая нагрузка, но все же бывает...)
Очень хочется иметь хотя бы раз в день одинаковые базы...
Записан
Дикий
Гость
« Ответ #3 : 16-12-2003 02:36 » 

А УРБД чем не нравится?
Записан
Skubent
Гость
« Ответ #4 : 16-12-2003 05:59 » 

Дикий, а ежели хочется чтобы по одному клику мышой все было ?
Записан
Дикий
Гость
« Ответ #5 : 16-12-2003 08:13 » 

Skubent, А для сего надо изучить компоненту 77plus, и написать много много кода Улыбаюсь
Записан
Skubent
Гость
« Ответ #6 : 16-12-2003 11:21 » 

Дикий, так я потому в топик программирование и кидал вопрос Улыбаюсь
Оконкретим задачу.
Надо предусмотреть достаточно простую процедуру выгрузки->загрузки документов, XML-обмен не предлагать...
Записан
Дикий
Гость
« Ответ #7 : 16-12-2003 11:47 » 

Skubent, есели знаешь структуру и язык, то могу тока метод предложить:
при помощи 77plus помойму можно контакт создавать модемный и передавать вплоть до внутренних объектов, а если речь идет о флопи нете то и того проще: ДБФ или текст.
Проще всего мне кажется пользоваться возможностью работы 1с с неограниченной длины строками.
Составляешь список значений из атрибутов объекта, список гонишь в строку, а строку добавляешь в текст. Главное чтоб в программе была уникальность объектов, чтобы не путать карты
если есть конкретные вопросы к этой методике, могу на мыло скинуть, тока вопросы на мыло кинь Улыбаюсь
Записан
Skubent
Гость
« Ответ #8 : 16-12-2003 12:04 » 

Дикий, пасиба за поддержку, н как-то не... возникает желания... Во Улыбаюсь Все изменения отслеживать и писать куда-бы то ни было...
Записан
Дикий
Гость
« Ответ #9 : 17-12-2003 02:08 » 

Skubent, вот и придумали УРБД, чеб ты сам не отслеживал изменения, там тоже все одной кнопкой делается, главное настроить правильно Улыбаюсь
Записан
Harry
Модератор

ua
Offline Offline

« Ответ #10 : 17-12-2003 21:45 » 

Вот как раз небольшая статейка про УРБД http://zone1c.narod.ru/docs/other/urbd.htm
Записан

Слабый пол силен в силу слабости сильного пола к слабому
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #11 : 05-05-2004 13:58 » 

У меня немного похожая ситуация.

Существует 2 базы в 1С.  В каждой из них выполнялись разноплановые операции (т.е. дублирования на происходило). Например: в первой обработывались кассовые операции.  Во второй выписывались счета (обрабатывались взаимозёчеты с заказчиками).

Мне надо объеденить эти две базы в одну, так чтобы в новой базе содержались данные из обеих баз.

Это можно сделать  :?:

И ешё, я что-то не нашла где в конфигураторе можно посмотреть в каком файле какая таблица находится. Или этого нет в 1С.
Записан

Стену можно пробить только головой. Все остальное орудия.
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 05-05-2004 18:19 » 

Цитата: Алёна
Это можно сделать?

Можно Улыбаюсь Но насколько сложно - зависит от того, как сильно разнятся конфигурации.
Цитата: Алёна
И ешё, я что-то не нашла где в конфигураторе можно посмотреть в каком файле какая таблица находится. Или этого нет в 1С.

В конфигураторе этой информации нет. Для dbf базы она находится в файле 1Cv7.DD, для SQL - 1Cv7.DDS
прошу простить за лаконичнось. Если будут более подробные вопросы - обязательно отвечу
Записан
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #13 : 06-05-2004 18:17 » 

Цитата

Если будут более подробные вопросы - обязательно отвечу
А вот и вопросы:
Цитата

Можно  Но насколько сложно - зависит от того, как сильно разнятся конфигурации.


1. 1С установлена одинаковая, базы по структуре идентичны, Отличается лищь информация хранящаяся в них.

2. Что понимается под конфигурацией  :?:

Цитата

Для dbf базы она находится в файле 1Cv7.DD


3. А как это просмотреть  :?:  У меня есть только 1С Предприятие+ Администратор(Естественно).

4. Вместе с файлами DBF используются какие файлы  :?:  (Например, в VFP я вместе с файлом базы данных DBF  использую файл индексов DCX, и если мне надо заменить пустую таблицу на заполненную, той же структуры, то я перемещала это два файла). А в 1С какие файлы используются ?

5. Как я понимаю в 1С собственный язык, как просмотреть програмный код и может быть изменить его.

Как я понимаю  существует такой модуль как 1С: Предприятие для работы с распределенными информационными базами Но это для ежедневного объединения баз, к тому же у меня его все равно нет...

p.s. 1С я воспринимаю на уровне пользователя, правда я не работаю несосредственно с ним, А вопросы приходится решать самой.
Записан

Стену можно пробить только головой. Все остальное орудия.
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 06-05-2004 18:48 » 

Цитата
1. 1С установлена одинаковая, базы по структуре идентичны, Отличается лищь информация хранящаяся в них.

Это уже хорошо, но все равно без кода на языке 1С не обойдешься (т.е. можно конешно, но сложнее)
Цитата
2. Что понимается под конфигурацией  :?:

Конфигурация - в понимании 1С это метаданные (структура справочников, документов, счетов, регистров и пр.) и программы для работы с ними. Конфигуратор - режим запуска штатной 1С:Предприятия для работы с конфигурацией.
Цитата
3. А как это просмотреть  :?:  У меня есть только 1С Предприятие+ Администратор(Естественно).

Просмотреть ее можно любым текстовым редактором. Я, например, использую всроенный редактов FAR`а. Т.е. *.dd & *.dds файлы - текстовые, с описанием привязки объектов метаданных (см. выше) к реальным таблицам базы.
Цитата
4. Вместе с файлами DBF используются какие файлы  :?:  (Например, в VFP я вместе с файлом базы данных DBF  использую файл индексов DCX, и если мне надо заменить пустую таблицу на заполненную, той же структуры, то я перемещала это два файла). А в 1С какие файлы используются ?

Индексация выполняется в файлах *.cdx, но на самом деле 1С умеет создавать их сама при запуске в монопольном режиме, потому сохранять их при переносе и/или backup`е базы не обязательно. Просто скопировать файлы таблиц из одной базы в другую не удастся, т.к. в некоторых служебных таблицах 1С содержит связи между объектами (как между самими объектами типа документ-документ, документ-справочник, так и ссылки на проводки и движения по регистрам)
Цитата
5. Как я понимаю в 1С собственный язык, как просмотреть програмный код и может быть изменить его.

Да - так и есть. Язык чем-то средний (ИМХО) между VB и C Улыбаюсь, причем - по-русски. Для просмотра и редактирования текстов программ и существует режим запуска - Конфигуратор (см. выше)
Цитата
Как я понимаю  существует такой модуль как 1С: Предприятие для работы с распределенными информационными базами Но это для ежедневного объединения баз, к тому же у меня его все равно нет...

Модуль называется УРБД (Управление Распределенной Базой Данных) - он в данном случае не поможет, ибо базу изначально нужно делать распределенной, а для слияния баз существует МОД (менеджер обмена данными), но порой проще самому написать процедуру обмена (особенно если базы похожи) чем разбиратся в настройках МОД.
Цитата
p.s. 1С я воспринимаю на уровне пользователя, правда я не работаю несосредственно с ним, А вопросы приходится решать самой.

Если есть желание разбираться - милости просим сюда. Чем получится - поможем. Но для переноса данных между конфигурациями уровня пользователя к сожалению не хватит (опять таки - ИМХО) - нужно учится дальше...
Записан
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #15 : 07-05-2004 15:39 » 

Цитата

Просто скопировать файлы таблиц из одной базы в другую не удастся, т.к. в некоторых служебных таблицах 1С содержит связи между объектами (как между самими объектами типа документ-документ, документ-справочник, так и ссылки на проводки и движения по регистрам)


А разве не в индексных файлах храняться данные по связям  между таблицами :?:

Данные в служебных таблицах по моему строятся на основании данных находящихся  в таблицах DBF. По моему в конфигураторе, в предпоследнем пункте меню, есть пункт в котором проверяется корректность ссылок. Как называется не помню, т.к. 1С установлен только на работе, а дома ничего нет. И если выявляются расхождения то заменяются данные в служебных таблицах.
 :idea:  Или я ошибаюсь.  :?:  

Просто я проводила подобную операцию в Парусе, заменила таблицы DBF, Востановила индексы, провела Ремонт базы данных, и у меня все работает.

А про 1С не знаю в каких таблицах, какие данные храняться, после праздников просмотрю как выглядит *.dd . И там появяться новые вопросы.
Цитата

Но для переноса данных между конфигурациями уровня пользователя к сожалению не хватит


Это я говорила относительно 1С.

Попробую разобраться с ним, ведь логика в нем такая же как в других базах данных  :?:  Или нет !

Цитата

для слияния баз существует МОД


А где увидеть настройки МОД ? В конфигураторе я ничего подобного не заметила.

Цитата

порой проще самому написать процедуру обмена (особенно если базы похожи)


А процедура получиться большой ? А то я пока не знаю ни одного оператора :oops:
Записан

Стену можно пробить только головой. Все остальное орудия.
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 08-05-2004 10:42 » 

Цитата
А разве не в индексных файлах храняться данные по связям  между таблицами :?:

Нет - в индексных таблицах содержатся индексы, т.е. данные для быстрого поска по таблице. Формат хранения dbf не предусматривает связей между таблицами на уровне БД вообще - связь выполняется только на уровне приложения.

Цитата
Данные в служебных таблицах по моему строятся на основании данных находящихся  в таблицах DBF. По моему в конфигураторе, в предпоследнем пункте меню, есть пункт в котором проверяется корректность ссылок. Как называется не помню, т.к. 1С установлен только на работе, а дома ничего нет. И если выявляются расхождения то заменяются данные в служебных таблицах. :idea:  Или я ошибаюсь.  :?:

Нет, не ошибаетесь - идея правильна, но :!: Не все данные можно получить исправлением базы:
Вы добавили новый элемент справочника в одну базу, добавили в другую точно такой же (по всем видимым параметрам) элемент, но внутренние идентификаторы у них разные! Если у вас в таблице документов идет ссылка на этот элемент, то скопировав таблицу документов и исправив базу вы получите или совершенно другой элемент, или (если вообще нет такого идентификатора) - поле просто очистится. Ели вы соберетесь просто совместить справочники - то или получите дубли элементов, или столкнетесь с невозможностью такой операции, т.к. объект с таким же внутренним кодом уже существует, но он совершенно другой.
Цитата
Просто я проводила подобную операцию в Парусе, заменила таблицы DBF, Востановила индексы, провела Ремонт базы данных, и у меня все работает.

К сожалению не знаком с Парусом. Попробуйте - может и получится. (в некоторых простых случаях должно получится) Только не забудьте резервную копию баз сделать предварительно Улыбаюсь
(Я подобным "хакерским" методом очищал базы для новой компании от всех документов, оставляя только заполненные справочники. Но моя задача - на порядок проще, чем объединение баз)
Цитата
А про 1С не знаю в каких таблицах, какие данные храняться, после праздников просмотрю как выглядит *.dd . И там появяться новые вопросы.

Ок. Ждем-с Улыбаюсь. Там много полезной информации...
Цитата
Это я говорила относительно 1С.
Попробую разобраться с ним, ведь логика в нем такая же как в других базах данных  :?:  Или нет !

Сложно говорить о одинаковой логике в "базах" dbf: как я писал выше вся связь между различными таблицами вынесена на уровень приложения, как не прискорбно. По идее - для анализа связей должно хватить именно *.DD(S) файла, а он в свою очередь создается из *.MD.
Цитата
А где увидеть настройки МОД ? В конфигураторе я ничего подобного не заметила.

МОД - это отдельная надстройка над 1С и продается она отдельно. Она меняет конфигурацию, добавляя свои объекты и меняя тексты модулей для отслеживания изменений объектов.
Цитата
А процедура получиться большой ? А то я пока не знаю ни одного оператора :oops:

Если задача разовая - не думаю, что процедура будет большой. Если хочется написать "универсальную" (для себя Улыбаюсь ) - то где-то месяц работы, но это очень хорошая практика если есть желание изучать программирование в 1С.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 08-05-2004 11:12 » 

Вкратце идея более-менее универсальной обработки такова:
1. Определяемся, какие объекты будем синхронизировать (виды документов, справочников)
2. Определяем для каждого видая объекта набор уникальный параметров синхронизации (первичный ключ в теории БД) - для документов это часто ДатаДок+НомерДок, для справчоников - ПолныйКод() (т.е. код с учетом иерархии объектов)
3. Если такого выделить не можем - тогда придется заводить справочник сопоставлений. Это уже сложнее.
4. Теперь кроме изначальных объектов синхронизации выделяем дополнительные объекты - те, которые фигурируют как реквизиты в начальных объектах. (Например - контрагент в документе розницы. Контрагентов лучше сопоставлять по уникальному коду регистрации, для Украины это ЕГРПОУ)
5. Подключаемся из одной базы ко второй через механизм OLE, выбираем список объектов, которые будем синхронизировать. Проверяем все их реквизиты, стоим таблицы соответствия вторичных объектов. Для ненайденных - создаем новые и добавляем в таблицы соответствия. Потом возвращаемся к первоначальным объектам и создаем/изменяем те, которые нужны.
Выглядит все не просто, но если с программированием вы знакомы - думаю поймете о чем речь.

К сожалению в некоторых случаях получается рекурсия: так например контрагент может иметь базовый договор, а соответственно в этом документе-договоре есть реквизит "контаргент". В этом случае я решал это динамическим методом, структура кода такая:
Код:

Процедура НовыйОбъект)ОлеОб: Далее;

Процедура НайтиОбъект)ОлеОб:
Об=НайтиСредиСопоставленных)ОлеОб:;
Если ПустоеЗначение)Об:=0 Тогда Возврат Об; КонецЕсли;

Возврат НовыйОбъект)ОлеОб:
КонецПроцедуры

Процедура НовыйОбъект)ОлеОб:
Об=СоздатьПустойОбъект)ОлеОб:;
ДобавитьВСопоставленные)ОлеОб, Об:; // Вот здесь - развязываем рекурсию
// Объект уже создан и мы можем ссылатся на него и даже найти среди
// сопоставленных объектов, но он еще пустой
ОлеРекв=""; // Возвращаемый параметр
Пока ПолучитьРеквизит)ОлеОб,ОлеРекв:=1 Цикл
Об.УстановитьАтрибут)ОлеРекв.Идентификатор, // для одинаковых баз
 НайтиОбъект)ОлеОб::;
КонецЦикла;
КонецПроцедуры
Записан
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #18 : 08-05-2004 15:34 » 

Цитата

Только не забудьте резервную копию баз сделать предварительно


Спасибо за напоминание Отлично

Теперь резервную копию буду делать не только вечером, но и в обед. Отлично

p.s. По существу напишу позже.
Записан

Стену можно пробить только головой. Все остальное орудия.
esergey
Гость
« Ответ #19 : 18-05-2004 14:14 » 

Базы объединяются очень легко  Жжешь
ЗДЕСЬ БЫЛА РЕКЛАМА. НЕХОРОШО!
Kivals:
О проблемах я писал выше. Ваша ссылка была на созданный недавно (13.05.2004 ?) компонент без отзывов покупателей - я сомневаюсь, что она действительно корректно работает во всех случаях. Если кого-то заинтересует - связывайтесь приватом.
Записан
esergey
Гость
« Ответ #20 : 19-05-2004 07:14 » 

Ок
речь шла о компоненте, объединяющем базы
спас меня, когда одна бухша на одной базе закрывала год, а вторая на второй вела дела дальше, потом они пришли и сказали "всё, теперь объедини их...".

в общем, эта штучка продаётся (за 5 баксов)
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 19-05-2004 08:20 » 

esergey
Это не совсем объединение баз, а объединение изменений одной и той же базы.
Т.е. в вашем случае, я так понимаю, как минимум в одной базе (закрытие года) справочники не менялись, что и дает возможность связывать общие объекты (на момент разделения баз) даже по внутреннему коду. А вот когда базы ведутся изначально раздельно - то в этом случае существуют одинаковые (с человеческой точки зрения) объекты, которые 1С при объединении будут пониматся как разные. Это предусмотрено в обработке?
Записан
esergey
Гость
« Ответ #22 : 20-05-2004 10:41 » 

это перенос данных из одной базы в другую (такую же или почти такую же)
год закрывался в одной базе, другая работа велась в другой (с обновленной конфигурацией). После закрытия года вторая база была обновлена. Таким образом получились две одинаковые конфигурации, но одна была с закрытым годом, а вторая с новыми данными (вводились договора).
 С помощью данной обработки и были перенесены данные (договора) в базу с закрытым годом.

Работает она так: из базы-источника обработкой берутся необходимые объекты и записывается в dbf. Затем из базы-приёмника этот dbf загружается и из него вносятся записанные объекты.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines