Утилита управления распределенных баз данных для программ 1С-Предприятия 7.7 (1С-Бухгалтерия 7.7 , 1С-Торговля и Склад 7.7)
Назначение утилиты управления БД (далее утилита или программа):
Поддержание единой автоматизированной системы в нескольких территориально удаленных
точках (подразделениях, филиалах, складах и т.д.) путем автоматической или
полуавтоматической синхронизации справочников и переноса операций и документов.
Обмен данными ведется посредством специального генерируемого файла переноса, который упаковывается автоматически внешним архиватором. Далее этот файл транспортируется на другие компьютеры с системой 1С пользователем самостоятельно(т.е. по сети, по электронной почте или же через дискету). Ввод данных в информационных базах распределенной системы ведется независимо. Утилита обеспечивает полную или выборочную выгрузку данных для всех информационных баз, входящих в распределенную систему. Утилита устанавливается на всех компьютерах пользователя. Работа утилиты не зависит от того - является эта программа сетевой, локальной или SQL-версией.
Поставка:
Утилита поставляется в качестве внешнего отчета (обработки) и может использоваться через команду 1С-Предприятия "Открыть файл". Написана на языке 1С-Предприятие 7.7 в русском варианте языка. Может использоваться для любых конфигураций в связи с использованием новых команд языка 7.7 т.е. объекта Метаданные, в результате чего утилита заранее не зная количество и имя реквизитов документов, справочников и т.д. может корректно работать с ними. Текст модуля программы может быть свободно изменен и доработан пользователем (конечно же имеющего квалификацию программиста !)
Отличия программы от стандартного продукта фирмы 1С компоненты "Управление распределенными информационными базами" (далее компонента 1С):.
1. Запуск и работа утилиты ведется в программе 1С-Предприятие, а не в Конфигураторе, что позволяет более проще организовать обмен - не нужно прерывать работу 1С-Предприятия, заходить в Конфигуратор искать нужное меню и прочее (для обычных пользователей это сложно и просто лишнее). Достаточно вызвать эту программу в самом 1С-Предприятии, Например - с помощью заранее вставленной кнопки в панели интерфейса.
2. Компонента 1С требует предварительного создания Центральной базы и подчиненных Периферийных баз, причем если Центральная база еще может создаваться на основе уже введенной информации, то Периферийная база не может так создаться и в итоге пользователю приходится заново вводить Периферийную базу.
3. Утилита устанавливается на уже существующую базу данных без какой-либо потери информации В компоненте 1С Центральная база должна быть только одна и обмен информацией между Периферийными базами ведется только через нее.
4. В утилите смысл Центральных и Периферийных баз более прозрачен, в ней любая база одновременно может являться и Периферийной и Центральной т.е. выгрузка и загрузка может производится в любые базы, которые нужны пользователю и вообще говоря в ней не используются понятия Периферийных и Центральных баз - все базы равноправны. (Очень часто пользователь сам хочет сконфигурировать документооборот и поэтому навязка определенной жесткой схемы передачи данных только осложняет работу. Смысл , принцип и техническая реализация движения документов должны быть понятны пользователю (причем на интуитивном уровне) и без загромождения какими-то новыми терминами не имеющими никакого отношения к его непосредственным обязанностям).
5. В утилите Документы и Операции можно передавать в любые базы без ограничения причем выборочно по виду документа, по датам и одновременно по конкретным номерам.
Также можно передавать данные в РАЗНЫЕ конфигурации, но при условии достаточной между ними совместимости т.е. из программы Торговля и Склад в Комплексную конфигурацию - в таком случае реквизиты справочников могут незначительно отличаться, а обмен затронет только одинаковые реквизиты , но при этом реквизиты и смысл документов, которые выгружаются, должны быть обязательно одинаковыми. Кроме того если названия видов справочников отличаются в разных конфигурациях, а смысл их один и тот же (и даже совпадают реквизиты) как например справочник Товары в конф.Торговля и Склад ред 5 и справочник Номенклатура в конф.Торговля и Склад 6 ред или в конф. Бухгалтерии, то можно их перенаправлять - для этого программа предложит список текущих справочников, существующих в данной конфигурации для выбора (программа определяет есть ли такой справочник автоматически). Если вы откажитесь от перенаправления, то этот справочник загружаться в текущем сеансе не будет. Т.е. для повтора загрузки (если все-таки решите загружать перенаправленный справочник) надо будет нажать кнопку Загрузка.
6. Открытость системы, т.е. внутренний язык 1С-Предприятия 7.7 следовательно можно оперативно подстраивать утилиту для нестандартных функций . Например перенос оборотов, остатков и справочников из программы 1С-Бухгалтерия 6.0 в программу 1С Бухгалтерия 7.7 причем с сохранением новой настройки конфигурации. Это бывает когда хочется перейти на новую современную настройку, но в тоже время хочется сохранить всю введенную информацию в старой программе. Это делается следующим образом :с помощью встроенных возможностей конфигуратора конвертируется 6.0 в 7.7 в итоге образуются операции и справочники, которые выгружаются этой утилитой. Здесь все просто - далее сложнее: справочники в старой базе по названию не совпадают в новой конфигурации , а также отличаются планы счетов. Поэтому при загрузке перехватываются обращения к кодам счетов и видам справочника и подставляются нужные значения. Аналогично в случае переноса реквизитов справочников. Вот и все !!
7. Аналогично как и в компоненте 1С производится слежение за изменением информации в справочниках и если информация в них не изменялась со времени последней выгрузке, то они не выгружаются. Т.е. в итоге будет передаваться только та информация, которая реально изменялась пользователем. Но в программе , в отличии от компоненты, слежение за изменяющейся информацией в документах не производится.
8. В Компоненте 1С потеря файла переноса информации (т.е. тот самый файл, в котором содержится информация за период работы) имеет фатальный характер, т.е. после этого последующие файлы система загружать не будет, а значит никакой речи о передачи данных идти не может. В утилите в случае такой потери вы можете принудительно заставить выгрузить информацию о справочниках в другие базы и просто повторить выгрузку требуемых документов.
Описание работы:
Программа для своей работы в каталоге базы данных создает 5 файлов
base_inf.dbf - список периферийных баз с которых информация поступала в текущую базу (центральную базу)
base_tab.dbf - специальная таблица соответствий данных (идентификация производится по полному коду и с учетом справочников владельцев)
base_tab.cdx - индексный файл предыдущей таблицы
base_out.dbf - таблица запоминающая какие справочники выгружались и какое имели значение на момент выгрузки, чтобы определить выгружать этот справочник или нет.
base_out.cdx - индексный файл предыдущей таблицы
При загрузке справочников и документов используется транзакция , причем для выполнения транзакции перечисленных выше 3-х первых файлов производится их копирование во временный каталог, где с ними работает программа, а затем в случае успешного завершения они обратно переносятся в рабочий каталог базы данных.
Замечания:
В отдельных случаях - в основном из-за сбоев компьютера или во время прерывании работы программы могут появиться ошибки т.к. программа не успела закончить обработку до конца (иными словами ,например, элемент справочника записан в таблицу соответствий (файл base_tab.dbf), но в справочнике 1С создаться не успел т.к. произошел сбой и транзакция была отменена) и поэтому можно удалить все вышеперечисленные файлы и при новой обработке они создадутся заново.
При отсутствии файла base_tab.dbf и наличии данных в справочниках прграмма будет заполнять таблицу поиска по полному имени для того, чтобы новые справочники загружаемые с других баз, вначале искались по этой таблице и в случае совпадения отождествлялись с найденным элементом, а не создавались заново - т.е. чтобы не производилось дублирование имен справочников.
Если проставлен флаг 'При загр. нов. эл. идентиф. по справочнику', то такой файл создаваться не будет (будет происходить только проверка кодов с пустыми или нулевыми значениями), а идентификация будет также происходить по полному имени но уже поиск совпадений будет происходить в справочнике.
Основная идентификация данных производится по типу информации : документ, справочник, другие стандартные типы (число, строка и пр. - в этом случае информация записывается во внутреннем формате 1С ); по виду справочника или документа; по дате документа или коду родителя и алвдельца справочника и наконец по номеру документа или коду справочника
При загрузке по умолчанию (т.е. если не проставлены соответствующие флаги код числового типа не загружается, а присваивается новый - именно поэтому нужна автоматическая нумерация кода).
Смысл флагов на основной закладке полностью соответствует своим названиям и в дополнительных пояснениях не нуждается.
ВАЖНО:
а) По возможности все справочники должны иметь числовой тип кода. Все справочники
б) ОБЯЗАТЕЛЬНО должны иметь автоматическую нумерацию и контроль уникальности кода
в)- Подчиненные справочники в конфигураторе должны идти после их владельцев(т.е. не надо сортировать справочники по алфавиту).
- При вводе новых справочников они должны помещаться последними.
- Запрещается изменять название вида справочника.
ЗАМЕЧАНИЕ:
Вообще говоря пункт в) можно нарушить, но после этого нужно будет удалить старый файл соответствия (т.е. - base_tab.dbf)
г)Документы во всех вместе взятых базах обязательно должны иметь уникальные номера (что можно добиться введя например разные префиксы). Кроме того длина кода обязательно должна быть отличной от нуля даже в таких справочниках как склады или фирмы, поэтому в конфигурации Торговля и Склад № 8 перед занесением новой информации надо установить длины кодов справочников на нужную длину (не меньше 1) ,ввести автоматическую нумерацию и уникальность (но в случае если данные уже были, то контроль уникальности можно ввести лишь после исправления кодов - это будет производится автоматически при первой выгрузке. Алгоритм работы такой: берется код каждого элемента и сравнивается со значением пусто или ноль и если истина присваивается новый код).
д) Базы не должны иметь имя "CENTER" - т.к. это слово является зарезервированным.
НЕКОТОРЫЕ ПОДРОБНОСТИ ПО РАБОТЕ ПРОГРАММЫ:
а)Как было уже сказано прграмма запоминает информацию , которую выгружала в другие базы, для того чтобы не дублировать выгрузку. Но при этом понимается , что она запоминает состояние о выгружаемой информации ВООБЩЕ - без привязки к конкретной другой базе, т.е. если вы выгружали справочники в базу А и будете выгружать в базу Б , то без проставки дополнительных опций флажков (т.е. флажок 'Выгружать все элементы справочника') справочники вообще-то выгружаться не будут. Потому что подразумевается,что вы выгружали справочники сразу для всех баз , а нетолько базы А. Т.е. подразумевается , что файл переноса отправлялся сразу на все удаленные компьютеры. Файл в котором запоминается выгружаемя информация, называется base_out.dbf.
б)При загрузке справочников происходит их идентификация, т.к. они могут иметь различные коды в разных базах, и создается таблица соответствия для перевода из одних кодов в другие. В программе основная идентификация строится по коду (полному или не полному в зависимости от того : уникальность кода справочника производится только внутри групп или по всему справочнику). Файл запоминающий такое соответствие кодов баз называется base_tab.dbf.
Для перехода из одних кодов в другие используются функции :
НайтиКодПерифБазы_ПоКодуТекущБазы(КодТекущБазы) и
НайтиКодТекущБазы_ПоКодуПерифБазы(КодПерифБазы)
кроме того перед этим надо открыть вышеназванный файл с помощью процедуры ОткрытьБазуТаблицы() и в качестве глобальных параметров заполнить переменные:
ИмяПерифБазы - имя базы с которой хотим получить код
ТекущСправочник - номер справочника по порядку как он задан в конфигураторе или его можно получить так:
НомСпр=СписокНомеровСпр.НайтиЗначение(ИмяВида), где переменная СписокНомеровСпр имеет тип СписокЗначений и заполняется автоматически в предопределенной процедуре ПриОткрытии.
в)Для ускоренной выгрузки используйте флажок 'Выгр. только справочники, исп. в документах' , в этом случае выгружаются только те справочники (и конечно же вышестоящие группы), которые исрользуются в документах.
ver. от 17.10.99г
Автор Юрий Иванов: пейджер (812) 118-33-33 аб.78-56-92
Новые программы,утилиты и версии в Internet:
http://users.50megs.com/yuridno/
Эл. почта yuridno@mail.ru , yuridno@chat.ru