За основу к
написанию этой обработки взята обработка
"Универсальный OLE-перенос объектов
между БД с идентичными конфигурациями"
(wolfsoft) www.1partner.nnov.ru
и www.infostart.ru/projects/1120/.
Рекомендуется
почитать описание этой обработки по
указанному адресу или в прилагаемом
файле. Заслуга автора оригинальной
обработки не только в том, что она
качественно и быстро переносит данные,
но и в понятном, грамотно написанном
коде.
Некоторые изменения оригинальной
обработки:
Добавлена возможность
сравнить объекты базы источника и базы
приемника:
Результаты выводятся в
виде таблицы, где перечислены объекты
с разницей в реквизитах, а также значения
этих реквизитов в базе источнике и в
базе приемнике.
Прямо из таблицы о результатах
сравнения можно производить действия
над объектами базы приемника:
провести/сделать не проведенным,
удалить/снять пометку удаления или
перенести из базы источника.
При сравнении документов,
проверяется также существование в
базе приемнике документов, которых
нет на заданную дату в базе источнике.
Выгрузка объектов
Выгружаются не все объекты
подряд, а только те которых либо нет в
базе приемнике, либо реквизиты не
соответствуют реквизитам этого же
объекта в базе источнике. Все идентичные
объекты остаются нетронутыми.
После выгрузки Вашему
вниманию предстает отчет обо всех
изменениях, сделанных в базе приемнике
(выгруженных новых объектах, измененных
уже существующих, объектах сделанных
не проведенными, удаленными,
перепроведенными и т.д.) с указанием
что именно изменилось (какой реквизит
поменялся, как поменялось состояние
документа (проведен, не проведен).
Настройки:
Возможность загружать
схему при открытии и подключать приемник
при открытии. Для этого надо поставить
соответствующие галочки на закладке
"настройка", указать файл с схемой
и прописать параметры подключения
базы приемника. Далее надо сохранить
настройку (в смысле на панели инструментов
обработки).
Есть возможность проводить
документы после выгрузки только в
определенном периоде. Полезно, например,
при выгрузке большого числа новых
документов, которые
потом можно будет провести со сдвигом
ТА.
Изменен интерфейс
Возможность выгрузки
объектов после заполнения таблицы
объектов (кнопка "+++ с выгрузкой").
А также возможность выгрузки объектов
без заполнения таблицы.
Возможность заполнения
таблицы элементами справочника с
фильтром по родителю, по владельцу, по
группе владельцев.
Другие изменения.
Методология обмена данными
Мне понадобилось
произвести обмен данными для синхронизации
свернутой базы с рабочей. Пока я сворачивал
базу пользователи активно работали. В
результате, хотя я и просил их делать
как можно меньше изменений задним числом
или менять/создавать справочники, без
этого не обошлось. Отличия данных в
базах оказалось достаточно велико.
Создавались/изменялись
новые ТМЦ (а их всего около 10 000), новые
цены (на каждый ТМЦ около 20 цен и значение
цена — периодический элемент, который
очень часто меняется) и многие другие
справочники. Также оказалось, что
достаточно много документов изменялись
задним числом, переносились на другие
даты, кроме того было создано много
новых документов (1000 документов в день,
примерно). И все это теперь надо перенести
в свернутую базу, как можно более
качественно и быстро.
Настроим обработку:
Прописать параметры
подключение к приемнику (путь,
пользователь, пароль).
Указать имя файла для
сохранения схемы переноса.
На закладке «Настройка» -
нажать на «Загрузить структуру».
Просмотреть в таблице ниже
правила обмена. Проверить/изменить
ключи для справочников. Ключом
справочника может быть любой реквизит
с установленным флажком «Сортировка»,
а также Код или Наименование.
Нажать на «сохранить схему
переноса» и установить флажки на
«Загрузить схему при открытии» и
«Подключить приемник при открытии».
Так мы избавимся от лишних действий
при открытии/закрытии обработки.
Если документов придется
переносить много, то рекомендую
установить флажки «Проводить документы»,
«Удалять непроведенные» и определить
период новых документов (где их больше
всего). При этом, те документы
которые попадают в период новых не
будут проводится после выгрузки. Флажок
«Удалять непроведенные» позволяет
помечать на удаление документы, которые
попадают в период новых, но не проведены
в базе источнике. Таким образом после
выгрузки можно будет быстро провести
все непомеченые документы за период
новых документов со сдвигом ТА.
На панели инструментов
обработки сохраняем настройку с
установленным флажком «Использовать
при открытии».
На закладке «Выгрузка»
подключить приемник.
Выгрузка документов за
период свертки минус несколько дней.
На закладке «Выгрузка»
установить период переноса документов
и период переноса периодических
реквизитов справочников. Не обязательно
указывать обе границы периода.
Вид документа — выбрать -
<<все>>
и нажать «+++ с выгрузкой». Можно
нажать просто «+++», а потом «Выгрузить».
Тогда есть возможность указать какие
именно мы хотим выгружать документы,
а какие нет. Учтите, что после выгрузки
таблица с документами не очищается.
Это надо делать вручную (кнопка ХХХ).
Выгрузка объекта:
Документы в базе приемнике
ищутся по номеру в том периоде
нумератора, в котором находится
документ в базе источника. Справочники
- по ключу заданному в схеме переноса.
Если документ не найден,
то создается новый, если найден, то
обработка начинает перебор всех
реквизитов на предмет различий в них.
Если дата документа в базе
приемнике отличается от даты в базе
источнике, то документ в базе приемнике
делается не проведенным и изменяется
дата и время этого документа. Далее
если документ попадает в период
действия флажка «Проводить документы»,
то этот документ проведется.
Если объект ссылается на
документ, справочник или операцию, то
производится выгрузка значения этого
реквизита. Получаем рекурсию. Еще в
оригинальной обработке была встроена
защита от «бесконечной» рекурсии.
Потенциально существует опасность
бесконечной рекурсии только в случае,
если значение ключа элемента справочника
замыкается на этот же элемент (в
последующих версиях попробую устранить
эту проблему). При этом, в вашей базе
могут быть выгружены даже
документы годичной давности, даже
если они не попадают в период выгрузки.
Это происходит если есть какая-то
прямая или косвенная ссылка на них с
тех объектов, которые вы хотите
выгрузить. Однако если объекты одинаковы
в обеих базах, то никаких действий над
ними производится не будет и выгрузка
пройдет быстро.
После каждой выгрузки
просматривайте отчет о выгрузке на
предмет наличия красных строк. Так
отмечаются действия, которые не удалось
выполнить. Также такие сообщения
выводятся в табло.
Сравнение документов - с
помощью закладки «сравнение» можно
убедится, что все данные перенеслись
правильно и исправить, в случае если
это не так.
Выбор объектов для сравнения
производится аналогично как и на
закладке «Выгрузка».
После нажатия кнопки
«Сравнить» появляется отчет с
результатами. Колонка «состояние»
отражает состояние объекта в базе
источника и в базе применике. Галочка
— документ проведен, крестик — объект
помечен на удаление, пустая
ячейка — объект записан.
Можно перенести выборочный
объект в базу приемник прямо из отчета
по нажатию на кнопку «Перенести в
приемник». При этом вам будет предоставлен
отчет об сделанных изменениях, но в
таблице с результатами сравнения
изменений не будет (!).
Перенесение справочников
Сравнение справочников.
Сравнение итогов по регистрам
и/или бух. счетам.
Общие замечания по эксплуатации
обработки
Перенос значений тип «число».
Поскольку перенос значений построен
посредством ole есть
следующие ограничение: переносится
только 15 цифр в числе не считая знака
(+/-) и дробной точки. Остальные числа
после запятой обрезаются. Причем 1.87
может передать 1.86999999999999. В обработке
сравнение происходит с учетом этого.
При подключении базы
приемника обработка может надолго
«зависнуть» выкинув окно
«Подключиться/Повторить». В большинстве
случаев надо просто подождать. OLE
сервер автоматически начал
реиндексацию базы приемника. После
окончания (когда винчестера перестанут
шуметь и лампочки на блоке мигать) можно
нажать одну из этих кнопок.
Не следует сразу же после
выгрузки/сравнении выходить из обработки.
Практика показала, что надо минутку
подождать. Когда я выходил сразу же —
в база приемника требовала реиндексации.
Возможно это только у меня.
У меня иногда появляется
«Неизвестная ошибка» в строке, где
используется какой либо метод ole
объекта. Возможно это
из-за использования большого числа
внешних компонент. В таком случае я
повторяю выгрузку или выхожу и вновь
вхожу в 1С.
!!! Общие замечания по
функциональности программы !!!
В этом разделе
буду перечислять все недостатки
обработки, которые надеюсь будут выявлены
и со временем ликвидированы.
В отчетах
о сравнении и выгрузке значения
агрегатных типов данных приемника
выводятся просто как ”OLE”.[1.31.1.6]
При
сравнении документов, проверка
существования в базе приемнике документов
отсутствующих в базе источнике проводится
строго на дату документа в базе
приемнике.[1.31.1.2]
При сравнении
справочников не проверяется присутствие
в базе приемнике элементов, отсутствующих
в базе источнике, а также лишних
значений периодических реквизитов в
базе приемнике.[1.31.1.6]
Если в
базе приемника в периодическом реквизите
на некоторую дату есть значение введенное
вручную и значение введенное документом,
то, значение введенное вручную не будет
найдено. [1.31.1.6]
При
установленном флажке «Проводить
документы» результаты проведения не
попадают в отчет о выгрузке, а только
выводятся в окне сообщений.[1.31.1.4]
Потенциально
существует опасность бесконечной
рекурсии при переборе реквизитов
справочников только в случае, если
значение ключа элемента справочника
замыкается на этот же элемент (в
последующих версиях попробую устранить
эту проблему).
Возможен
случай, если при записи объекта происходит
ошибка и объект не будет записан. В этом
случае в отчет о выгрузке сообщение об
ошибке не попадет. (Чтобы исключить
данную ситуацию необходимо производить
сравнение баз).
История
[1.31.1.2] 08.05.2009
!!!
Не переносилась время
документов как новых, так и найденных
в приемнике при установленном флажке
«Только необходимое».
!!! Не
удалялись лишние строки документов и
проводки операций в базе приемнике,
которых нет в базе источнике
*** При
включенном флажке «Проводить документы»
обработка делает непровденные в базе
источнике документы такими же и в базе
приемнике.
***
При
сравнении документов, проверка
существования в базе приемнике документов
отсутствующих в базе источнике проводится
в периоде нумератора.
[1.31.1.3] 08.05.2009
***
Изменен
алгоритм вывода отчета о выгрузке. Отчет
стал более понятным и наглядным.
[1.31.1.4]
+++
Добавлен
флажок на закладку «Настройка» - «Помечать
на удаление не проведенные». При выгрузке
позволяет пометить на удаление в базе
приемнике те документы которые в базе
источнике не проведены. Полезно при
отключенном флажке - «Проводить
документы», чтобы потом не запутаться,
какие надо проводить, а какие нет.
!!! Иногда не переносились реквизиты
типа «Счет». Исправлено.
*** Удален флажок «Только необходимые».
Теперь в любом случае переносится будут
только измененные объекты.
+++ Добавлен реквизит «Период новых
документов». Документы с этой даты
включительно считаются новыми. При
установленном флажке «проводить
документы» будут проводится только
старые документы. При установленном
флажке «Удалять не проведенные», будут
удалятся только старые документы.
*** Если в документе был изменен какой-то
реквизит, то документ будет перепроведен
(если он попадает под действие флажка
«Проводить документы»).
***Документы перепроводятся, не в конце
обмена данными, а сразу после перенесения
каждого документа.
!!! В отчет о выгрузке строки с реквизитами
объекта, могли быть как ниже, так и выше
строки с наименованием объекта.
Исправлено.
*** Проведенные документы, у которых была
изменена дата и/или время, больше не
будут оставаться после этого изменения
непроведнными (если они попадают по
действие флажка «Проводить документы»).
*** Если документ в ходе выгрузки был
проведен, перепроведен (после замены
некоторых реквизитов), сделан не
проведенным, удален или восстановлен,
то результат этого будет показан в
отчете о выгрузке. Причем, если строка
выделена красным, то действие не было
произведено.
*** Изменено описание.
[1.31.1.5]
13.05.09
!!! При установленном флажке
«Помечать на удаление непроведенные
новые» старые документы не помечались
на удаление/не отменялись с удаления
вообще. Исправлено.
!!! В некоторых случаях не переносились
реквизиты типа «Счет».
[1.31.1.6]
22.05.09
+++
Периодические
реквизиты справочников полностью
синхронизируются (т.е. Из базы приемника
удаляются значения на даты, которых нет
в базе источнике и добавляются те,
которых нет в базе приемнике). При этом
учитывается также, что на одну дату
могут присутствовать значение введенное
вручную и несколько значений введенные
документами.
+++
В отчетах агрегатные объекты из базы
приемника выводятся не как ”OLE”,
а в
виде [владелец]
наименование
— для справочников и ВидДокумента
НомерДокумента ДатаДокумента для
документов.
!!! При выборе ключа справочника на
закладке «Настройка» можно было выбрать
реквизит без флага «сортировка», что
вызовет ошибку при сравнении или
выгрузке.
*** Убрал все лишние сообщения из табло.
Теперь в табло сообщений будет появляться
только сообщения об ошибках.
*** Изменено описание.
*** Много других мелких изменений и
исправлений ошибок.
Благодарности
1. Wolfsoft -
|