Регистрация документов в последовательностях при работе с обменом данными

Есть скрытая опасность в распределенных базах данных, связанных обменами, последовательности документов не участвуют в обмене данными (это не рекомендовано фирмой 1С, см. подробное описание). Есть обработка проведения по партиям (которую запускают перед закрытием месяца, перед расчетом себестоимости), она восстанавливает последовательность партионного учета, НЕ УЧИТЫВАЯ ДОКУМЕНТЫ, которые пришли с обменом. Так как документы из другой базы в этой последовательности не зарегистрированы/отсутствуют себестоимость рассчитывается мягко говоря "криво". Здесь находится обработка по добавлению в последовательность отсутствующих документов. И описание ситуации, когда она применялась и вообщем-то является обязательной.

Представим ситуацию:

Две базы 1С:УПП, между которыми организован обмен данными по одной организации. В обоих базах колотятся документы. В одной из баз выполняется расчет себестоимости.

Утверждение: В текущей базе себестоимость будет рассчитана некорректно, так как не будет корректно восстановлена последовательность партионного учета, из-за отсутствия в последовательности партионного учета документов из связанной базы (не смотря на то, что сами документы из связанной базы есть в текущей) .

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

Выход: Выход был найден в создании обработки, которая отдана бухгалтеру. Перед восстановлением по партиям он запускает сначала её, а потом типовую «Проведение по партиям». Тогда при восстановлении партий все документы корректно учитываются.

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

Вот примерная выдержка мнения фирмы 1С: «Особенности использования последовательности документов в распределенной информационной базе (РИБ) Механизм последовательностей документов позволяет отслеживать правильный порядок проведения документов и производить восстановление этого порядка. Чтобы  механизм последовательностей учел документ при своей работе, этот документ должен быть зарегистрирован в последовательности. При организации работы механизма последовательностей в распределенной информационной базе, как правило, следует придерживаться следующего принципа: документ должен регистрироваться в последовательности только в одном узле распределенной информационной базы. Это может быть либо узел, в котором документ был создан, либо другой узел, но узел должен быть один. Нарушение данного принципа может привести к различным проблемам в процессе работы с системой, например, невозможности восстановления последовательности документов. Сами последовательности документов не должны участвовать в обмене данных. Иначе записи регистрации документа будут переданы в другой узел РИБ, тем самым будет нарушен принцип регистрации документа в последовательности только в одном узле РИБ. Для реализации этого принципа документ должен содержать информацию, по которой в момент записи документа можно было бы принять решение, следует ли регистрировать его в последовательности в данном узле или нет. Например, документ может содержать реквизит с кодом того узла РИБ, в котором он (документ) был создан. При записи документа, основываясь на информации о принадлежности документа текущему узлу РИБ,  следует либо очистить набор записей регистрации документа в последовательности, либо заполнить его. Из изложенного принципа возможны исключения. Например, если необходимо в каждом из узлов РИБ вести свой партионный учет номенклатуры: стоимость партий в каждом узле формируется только по тем документам, которые есть в узле. Предположим, что в периферийном узле есть документы только конкретного филиала, а в центральном узле есть еще и другие документы, например по затратам, которые не должны быть известны филиалу и т.п. Поэтому стоимость партий, рассчитанная в филиальном и центральном узлах, должна различаться. Для этого в каждом узле должна быть своя последовательность партионного учета, движения по регистрам партий должны формироваться в каждом узле отдельно, и эти движения не должны передаваться между узлами РИБ.»

 

9 Comments

  1. lsp71

    Спасибо за информацию.

    Reply
  2. kogon

    Сейчас решаю аналогичную задачу — создал новую последовательность и хочу зарегить в ней существующие движения документов(без проведения).

    Дима, пришли мне пож. твою обработку на почту kogon50@mail.ru

    Reply
  3. Zabba

    А я вот никак не могу до конца логику 1С понять — почему разная себестоимость в периферии и в Центре — это нормально?

    Reply
  4. sapervodichka

    (3) Zabba, Если РАУЗ то надо тянуть ключи аналитики, а так всегда документы сразу с движениями — и ! не перепроводить.

    Reply
  5. Zabba

    Да нет РАУЗ, обычная УТ

    Reply
  6. chesnokov-a-v

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

    Reply
  7. chesnokov-a-v

    И еще одна ситуация: документ создан в дочерней базе, потом по обмену пришел в родительскую. Обработкой был занесен в последовательность, последовательность восстановили. А потом документ исправили в дочерней базе. Он снова пришел в родительскую, но обработка его уже не увидит и последовательность не сдвинется.

    По-моему, здесь нужно в базе делать новую подписку на событие ПриЗаписи и там смотреть.

    Взял часть Вашего кода за основу и написал такую проверку:

     Если Источник.ОбменДанными.Загрузка и Источник.Проведен Тогда
    //не важно проведен документ в базе-приемнике или еще нет,
    //св-во Проведен берется из базы-источника
    //он и проводится при загрузке не будет, все движения то же загрузятся с обменом
    ЕстьВПоследовательности = Ложь;
    Доки = Метаданные.Последовательности.ПартионныйУчет.Документы;
    Для Каждого СтрДоки Из Доки Цикл
    Если СтрДоки = Источник.Метаданные() Тогда
    ЕстьВПоследовательности = Истина;
    прервать;
    КонецЕсли;
    КонецЦикла;
    Если Не ЕстьВПоследовательности Тогда
    Возврат;
    КонецЕсли;
    НаборЗаписей = Последовательности.ПартионныйУчет.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Значение = Источник.Ссылка;
    НаборЗаписей.Отбор.Регистратор.Использование = Истина;
    
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Период = Источник.Ссылка.Дата;
    НоваяЗапись.Регистратор = Источник.Ссылка;
    НаборЗаписей.Записать();
    
    ТекГраница = Последовательности.ПартионныйУчет.ПолучитьГраницу();
    МВСсылки = Источник.Ссылка.МоментВремени();
    Если ТекГраница.Сравнить(МВСсылки) = 1 Тогда
    Последовательности.ПартионныйУчет.УстановитьГраницу(МВСсылки);
    КонецЕсли;
    КонецЕсли;
    

    Показать

    Reply
  8. sapervodichka

    (7) chesnokov-a-v, такую ситуацию решали датой запрета изменения документов в дочерней базе (запрещали менять), а восстановление последовательностей выполняли только в основной базе. (Организация на две базы была одна + для пользователя обмена запрет на дату редактирования не ставили). А так решение через подписку на событие согласен с вами — неплохое решение.

    Reply
  9. fuel56

    (7) chesnokov-a-v, так как фирма 1С рекомендует нам регистрировать доки в последовательности только в одном узле, я бы дописал

    Если Источник.ОбменДанными.Загрузка и Источник.Проведен и

    ПланыОбмена.ГлавныйУзел() = Неопределено Тогда // только для центральной базы

    ……………….

    Reply

Leave a Comment

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