Синхронизация движений документов в идентичных информационных базах

Синхронизация движений документов между различными состояниями одной информационной базы

Обработка поможет в ситуации, когда в рабочей информационной базе происходит нарушение движений документов, например, за прошедший период, и нужно восстановить эти движения из ранее сформированной резервной копии.

В результате выполнения обработки движения в документах базы-приемника становятся идентичными движениям документов базы-источника. При этом внешне документы могут отличаться (разные табличные части и т.д.).

Важным условием синхронизации является наличие всех элементов справочников, использованных в движениях документов. Если часть элементов была удалена, синхронизации по документу не произойдет.

Обработка открывается как внешний файл в режиме 1С:Предприятие. В поле необходимо прописать путь к файлу информационной базы-источника в соответствии с правилами запуска командной строки:

 

Каждый параметр представляет собой фрагмент вида =, где Имя параметра — имя параметра, а Значение — его значение. Фрагменты отделяются друг от друга символами «;». Если значение содержит пробелы, его необходимо заключить в двойные кавычки.

Для файлового варианта информационной базы задается параметр:

 

· File — каталог информационной базы

 

Для клиент-серверного варианта:

 

· Srvr — имя сервера,
· Ref — имя информационной базы на сервере 1С:Предприятия,
· SQLSrvr — имя Microsoft SQL Server,
· SQLDB — имя базы данных Microsoft SQL Server,
· SQLUID — имя пользователя Microsoft SQL Server,
· SQLPwd — пароль пользователя Microsoft SQL Server,

 

Для всех вариантов задаются параметры:

 

· Usr — имя пользователя
· Pwd — пароль

 

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

По кнопке «Выполнить синхронизацию» происходит замена движений по регистрам выбранных документов движениями аналогичных документов базы-источника.

21 Comments

  1. Loader_1C

    Спасибо!

    Полезный инструмент. Особенно для тех кто работает и дома и на работе. Часто приходится такие базы корректировать.

    Reply ↓
  2. Tanis

    Добрый день!

    Можете пояснить действие данной обработки?

    Как происходит синхронизация? Как происходит замен в базе приемника?

    И самое главное, на сколько этот метод безопасный для приемника, чтоб в нем ничего не затерлось и не сбилось.

    Reply ↓
  3. 33lab

    (2) Tanis, Добрый день. Принцип действия очень простой — обработка синхронизирует движения документов (из базы источника в базу приемник) по регистрам (регистры накопления, регистры бухгалтерии, регистры сведений):

    кусок кода из обработки:

    Если стрТипРегистра=»РегистрНакопления» Тогда
    НаборЗаписейИсточник=БазаИсточник.РегистрыНакопления[стрВидРегистра].СоздатьНаборЗаписей();
    НаборЗаписейПриемник=РегистрыНакопления[стрВидРегистра].СоздатьНаборЗаписей();
    ИначеЕсли стрТипРегистра=»РегистрСведений» Тогда
    НаборЗаписейИсточник=БазаИсточник.РегистрыСведений[стрВидРегистра].СоздатьНаборЗаписей();
    НаборЗаписейПриемник=РегистрыСведений[стрВидРегистра].СоздатьНаборЗаписей();
    ИначеЕсли стрТипРегистра=»РегистрБухгалтерии» Тогда
    НаборЗаписейИсточник=БазаИсточник.РегистрыБухгалтерии[стрВидРегистра].СоздатьНаборЗаписей();
    НаборЗаписейПриемник=РегистрыБухгалтерии[стрВидРегистра].СоздатьНаборЗаписей();
    КонецЕсли;
    
    

    Показать

    если какой-то регистр синхронизировать не надо — просто закоментарьте его.


    И самое главное, на сколько этот метод безопасный для приемника, чтоб в нем ничего не затерлось и не сбилось.

    есть золотое правило — любые подобные действия всегда лучше проверить на тестовой базе.

    Reply ↓
  4. Tanis

    Смотрю обработка производит обмен через mxl?

    Если настроить определенный отбор по документам, то РБ именно по ним будет синхронизироваться?

    Так как когда я делаю выгрузку xml с отбором, то выгружается почему-то весь РБ…

    И как будет происходить запись? Целиком строчки перезаписывать, или дописывать потерянное субконто?

    И что будет с документами, они не перепроводятся? Но видимо перезаписываются?

    Это для того чтоб не слетело закрытие месяца.

    Reply ↓
  5. Tanis

    Выбираю док операция бух, выдает ошибку.

    {Форма.Форма.Форма(88)}: Значение не является значением объектного типа (Filter)

    НаборЗаписейИсточник.Filter.Регистратор.Установить(ДокументИсточникСсылка);

    В обработке закомментировал РС и РН, оставил только РБ.

    Reply ↓
  6. Tanis

    Подскажите как быть?

    Может не там закомментировал?

    Почему-то док.объект не распознает.

    Reply ↓
  7. Tanis

    некоторые объекты пишет «Ошибка чтения значения»

    Reply ↓
  8. 33lab

    (7) Tanis, Обработка работает без ошибок — возможно что-то лишнее закоментарили…Можете написать в аську — помогу разобраться.

    Reply ↓
  9. Tanis

    Спасибо! Уже вроде разобрался.

    Условие чуть надо было изменить, сделал так

    // Если стрТипРегистра=»РегистрНакопления» Тогда

    // НаборЗаписейИсточник=БазаИсточник.РегистрыНакопления[стрВидРегистра].СоздатьНаборЗаписей();

    // НаборЗаписейПриемник=РегистрыНакопления[стрВидРегистра].СоздатьНаборЗаписей();

    // ИначеЕсли стрТипРегистра=»РегистрСведений» Тогда

    // НаборЗаписейИсточник=БазаИсточник.РегистрыСведений[стрВидРегистра].СоздатьНаборЗаписей();

    // НаборЗаписейПриемник=РегистрыСведений[стрВидРегистра].СоздатьНаборЗаписей();

    Если стрТипРегистра=»РегистрБухгалтерии» Тогда

    НаборЗаписейИсточник=БазаИсточник.РегистрыБухгалтерии[стрВидРегистра].СоздатьНаборЗаписей();

    НаборЗаписейПриемник=РегистрыБухгалтерии[стрВидРегистра].СоздатьНаборЗаписей();

    КонецЕсли;

    не работало.

    Изменил на

    Если НЕ стрТипРегистра=»РегистрБухгалтерии» Тогда Продолжить;

    Иначе

    НаборЗаписейИсточник=БазаИсточник.РегистрыБухгалтерии[стрВидРегистра].СоздатьНаборЗаписей();

    НаборЗаписейПриемник=РегистрыБухгалтерии[стрВидРегистра].СоздатьНаборЗаписей();

    КонецЕсли;

    Так вроде работает.

    Так же работала если оставить все регистры. Но мне нужен был только РБ.

    Reply ↓
  10. Tanis

    Теперь надо запрос написать на заполнение только нужных доков.

    И еще вопрос, обратка ищет по ссылке или UUID или GUID, я так понял UUID переходит в COM объект. А дальше сверяет ссылки?

    И проведение документов вроде не слетает? Доки как бы перезаписываются только?

    Reply ↓
  11. 33lab

    (10) Tanis,


    И проведение документов вроде не слетает? Доки как бы перезаписываются только?

    Документы не перепроводятся (следовательно движения слететь не могут).

    Reply ↓
  12. koklobok

    То же самое может сделать ВыгрузкаЗагрузкаДанныхXML82.epf. Зачем изобретать велосипед?

    Reply ↓
  13. Tanis

    (12) В данном случае xml мне не выгодна.

    Мне нужно в РБ заполнить субконто, которое сохранилось в копии.

    А xml почему-то выгружает весь РБ, не смотря на отбор.

    Reply ↓
  14. Tanis

    (11) Понятно.

    А на остальные подскажите поиск в РБ происходит по регистратор.ссылка? Или же нет?

    Reply ↓
  15. Tanis

    Дописал форму подбора документов по условию, теперь вообще отлично все получается!

    Спасибо!

    Reply ↓
  16. Tanis

    Хотя, нет… выдал ошибку

    {Форма.Форма.Форма(15)}: Значение не является значением объектного типа (TypeName)

    стрТип=БазаИсточник.XMLТипЗнч(СтрокаКоллекции.Значение).TypeName;

    Reply ↓
  17. Tanis

    Странно.

    Reply ↓
  18. Tanis

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

    Хотя в названии сказано, что идентичных баз, а не типовых. Но однако получается не типовые может не взять.

    Возможно ошибка при использовании xml, т.к. останавливается именно на нем.

    И еще такой вопрос. Синхронизацию проводить лучше в монопольном режиме, или можно с работающими пользователями? Если при работающих пользователях, то это не повлияет на данные в базе?

    Reply ↓
  19. 33lab

    (18) Tanis,


    Хотя в названии сказано, что идентичных баз, а не типовых. Но однако получается не типовые может не взять.

    В описание все правильно написано — для идентичных…Почему появляется ошибка -надо смотреть в отладчике…Лучше все таки написать мне в аську — помогу разобраться.


    Синхронизацию проводить лучше в монопольном режиме, или можно с работающими пользователями? Если при работающих пользователях, то это не повлияет на данные в базе?

    Не имеет значения работают пользователи или нет (если конечно они не правят документ движения которого перегружаются)

    Reply ↓
  20. Tanis

    (19) Спасибо. Тогда сегодня сверю оборотку, и буду грузить в рабочую.

    В отладчике когда доходит до этой строчки, то не может распознать тип.

    Номер аськи в профиле закрыт.

    Reply ↓
  21. nkp14108

    Нормуль, но для регистров накопления не переносит вид движения. Пришлось допилить.

    (12)

    То же самое может сделать ВыгрузкаЗагрузкаДанныхXML82.epf. Зачем изобретать велосипед?

    Минус типовой обработки — необходимо было восстановить движения документа КорректировкаРегистраНакопления(как пропали движения и чьими корявыми руками рассказывать не буду). Но стандартная выгружала долго(около часа) просматривая все регистры где делает движения данный документ(почти все) и ссылки в полях регистра), обработкой из данной статьи + чуть допил 2 мин.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *