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

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

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

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

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

Обработка открывается как внешний файл в режиме 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 не будет опубликован. Обязательные поля помечены *