Обработка для сравнения данных документов между базами УТ 10.3 и Розницы 1.0

Для сравнения остатков при работе с взаимосвязанными базами УТ 10.3 и Розницы 1.0 стоит задача сверить документы, например "Перемещения товаров", на их идентичность и присутствие в обеих базах. Перевыгружать все документы через обработку "Регистрация изменений" долго и не всегда удобно, тем более, когда обмен двухсторонний. Искать вручную расхождения тоже долго. В таком случае поможет эта обработка.

Кратко: Обработка отбирает документы «Перемещения товаров» в одной базе, подключатеся через COM-соединение к другой базе и сравнивает их по нескольким реквизитам. Если находит различие — ругается и выдает списко «кривых» или «подозрительных» документов.

Переделать эту обработку под другой вид документов — минутное дело, изменить список сравниваемых параметров документов — тоже.

Теперь разверутый пример из жизни

Предмет: организация использует на главном складе совместно конфигурации «Управление торговлей 10.3» и «Розница 1.0». Розница в свою очередь является центральной базой РИБ. Товар приходуется, назначаются цены, формируются перемещения в УТ, потом данные выгружаются в центральный узел Розницы, потом обмен с удаленными розничными точками. Розничные точки могут в свою очередь тоже формировать перемещения между собой.

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

Описание самой обработки

В конфигурациях УТ и Розница есть регистр сведений «Соответствие объектов для обмена». Он содержит соответствие между ссылками на объекты (документы, справочники и пр.) в текущей базе (например УТ) и во внешней базе, с которой он обменивается  (Розница). Соответствие хранится в виде ссылок GUID на объекты. GUID (уникальный идентификатор) представляет из себя случайный набор символов (букв и цифр) типа «0ce964df-1351-c11e-:a6b-cf7387ca0737»

Это полбеды. Разработчики зачем-то (видимо чтобы никто не догадался:)) части этого GUID в регистре перемешали, перставили местами и добавили еще кучу служебных символов. Поэтому просто вытащить ссылку из регистра не получится, нужно расшифровывать.

В обработке формируется запрос в этот регистр по документам «ПермещениеТоваров» (с отбором по интервалу дат) и получаются уже «выпрямленные» ссылки на эти же документы в другой базе (в Рознице в нашем случае). Помимо ссылок получаем данные документов для сравнения: номер, дату, статус проведения, склад-отправитель, склад-получатель.

Коннектимся к другой базе (для использования обработки под 8.1 достаточно в этой строке заменить «V82.COMConnector» на «V81.COMConnector»):

     cntr = Новый COMObject(«V82.COMConnector»);
     connection = cntr.Connect(«File=»»»+СтрокаПодключения+»»»;Usr=»»»+Пользователь+»»»;»);

Перебираем в цикле результат запроса с GUID документов в другой базе, и сравниваем документы по необходимым параметрам (фрагмент):

     Если Не Выборка.СкладОтправитель.Код = connection.Документы.ПеремещениеТоваров.ПолучитьСсылку(connection.NewObject(«УникальныйИдентификатор»,Строка(ГУИД))).СкладОтправитель.Код Тогда
          Сообщить («Отличается Склад-отправитель перемещения №»+Выборка.Номер+ » от » + Выборка.Дата);
     КонецЕсли;

 

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

Также можно доработать и не только сравнивать данные, но и изменять их. 

По подобию этой обработки были написаны обработки, которые «вытаскивали» артикул из базы УТ и присваивали его номенклатуре в базе Бухгалтерии (когда-то, до релиза 2.0.25 в типовой бухглатерии реквизита «артикул» не было вообще… ). Или унифицировали коды номенклатуры между базами Ут и Розницы: в типовых правилах обмена между этими конфигруациями нет поля «Код» в номенклатуре и поэтому при одна и та же номенклатура в разных базах имеет разный код — очень неудобно.

5 Comments

  1. Dimka74

    Любопытно. А какие ещё косяки вылезают при работе такой схемы?

    Reply
  2. ermakov_ivan

    Их слишком много, чтобы все описать ))))

    Из того, с чем сталкивался:

    — в УТ больше видов операций для документов «Приходный кассовый ордер» и «Расходный кассовый ордер», поэтому при загрузке в УТ очень много реквизитов в ПКО и РКО оказываются не заполнены, документы не проводятся. Потом садится бухгалтер и руками правит документы. А потом самое интересное: перепроводятся документы в Рознице (специально или нет), попадают в регистрацию, естественно выгружаются повторно — и опять нихрена не заполнено)))))). Бухгалтер Вам благодарен!)) Приходится исправлять правила обмена, прописывать выбор реквизитов принудительно

    — по правилах обмена между УТ и Розницы по умолчанию для номенклатуры не выгружается поле «код», поэтому у дних и тех же элементов номенклатуры в базах УТ и Розницы код разный… Ужасно неудобно. Надо исправлять правила обмена, чтобы вновь создаваемые объекты имели одинаковый код. А для тех, элементов, которые уже выгрузились нужно писать обработку, которая уравняет коды для уже существующих объектов. Если будет нужно — обращайтесь, есть готовая, поделюсь

    — в некоторых случаях, при использовании документов «Перемещение денежных средств», они выгружаются проведенными, не без движений… надо править конфигурацию, чтобы проводились принудительно при загрузке

    Это далеко не все, написал что сразу вспомнилось. Но в принципе ничего смертельного, схема вполне работоспособная. Многое зависит от задач и дотошности бухгалтеров и менеджеров))

    Reply
  3. Dimka74

    ermakov_ivan, можно узнать как вы исправили правила обмена, как понять «прописывать выбор реквизитов принудительно», если не сложно хотя бы вкратце объясните, что Вы правили в правилах обмена?

    Reply
  4. ermakov_ivan

    В Рознице в документе РКО, например, при выборе вида операции «Оплата поставщику» отсутствуют реквизиты «Статья движения денежных средств» и «Договор контрагента», а в УТ они есть. И если без статьи движения документ проведется, то без договора — нет. В стандартных правилах был такой косяк — при загрузке каждого новой документа в УТ у контрагент формировался новый договор с наименованием «Договор создан из «1С:Розница 8″… Пришлось исправлять правила, искать в каком обработчике создается договор, убирать создание нового, а вместо этого дописывать выбор существующего (основного как вариант). Со статьей движения — необязательное условие, но бухгалтер очень просил — не хотелось каждый документ руками править

    Reply
  5. Dimka74

    Проблему с реквизитами «Статья движения денежных средств» и «Договор контрагента» планирую решить запретом оформления РКО документов в РТ, можно будет только в УТ.

    «»Перемещение денежных средств», они выгружаются проведенными, не без движений» — это как?

    Т.е. есть проведенные документы в УТ, а движений по регистрам не происходит? Так?

    Reply

Leave a Comment

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