Как не регистрировать стопку документов в планах обмена с включенной авторегистрацией при групповом перепроведении

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

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

Для начала я вкратце расскажу, как ручная регистрация происходит в типовой конфигурации:

  1. Перед записью документа вызывается событие «МеханизмРегистрацииОбъектовПередЗаписьюДокумента«, которое, собственно, и отвечает за регистрацию. Я пропущу большую часть всех условий, а перейду к сути.
  2. А именно к функции «ОбъектМодифицированДляПланаОбменаПопыткаИсключение«. Функция получает «ТаблицаРеквизитовРегистрации«, которая, по-видимому, берется из правил регистрации объектов. После чего для каждого реквизита или таблицы регистрации идет запрос (ЗАПРОС В ЦИКЛЕ) для значения реквизита до изменений. И идет сравнение с текущим значением реквизита. 
  3. В результате перед записью одного документа выполняется хренова куча кода с хреновой кучей запросов.

Скажу честно, такой подход мне показался не слишком оптимальным, и при этом достаточно МНОГОВРЕМЕНИЗАТРАЧИВАЕМЫМ для моей простой небольшой базы. Поэтому я и решил поискать способ попроще.

  1. Чтобы отменить авторегистрацию, нужно написать где-нибудь:
    Источник.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;
  2. Я создал подписку перед записью документа и решил добавить простенькую проверку на модифицированность
    Если Не Источник.Модифицированность() Тогда
    Источник.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;
    КонецЕсли; 
  3. Каково же было моё удивление, что она не работает))) Причем, даже есть проверять модифицированность в самом начале в модуле объекта. Решением стал вызов подписчика на процедуру «ОбработкаПроверкиЗаполнения«. Но и это не все! если проведение происходит из списка документов, то проверка на модифицированность даёт ЛОЖЬ, а если через форму документа (даже если ты просто нажал ОК) ИСТИНА.

В результате я спокойно при групповом перепроведении перепровожу документы, не опасаясь, что вся эта МАССА полезет обмениваться. 

П.С. Я не думаю, что была бы гораздо эффективнее ручная регистрация. В моём случае.))) Небольшое количество лишних документов не компенсирует весть тот код, который выполняется перед записью для каждого документа.

21 Comments

  1. insurgut

    Текст можно и покорректнее сделать, как модераторы пропустили «хренова куча кода с хреновой кучей запросов»?

    Reply ↓
  2. TODD22
    Текст можно и покорректнее сделать, как модераторы пропустили «хренова куча кода с хреновой кучей запросов»?

    +1

    Оформление ужасное. Видимо и раскраска текста для компенсации бедности речи.

    Reply ↓
  3. KilloN

    (2) TODD22, Ты случаем не блондин для которого ВАЖНО какого цвета телефон, вместо самих характеристик?

    Что ж посмотрел, я на твои публикации, у тебя оформления вообще нет!

    Reply ↓
  4. KilloN

    (1) insurgut, А что собственно Вам не нравится — этот сайт не научное издание и публикация не учебник. А материал — это опыт которым я поделился. Стиля РОБОТА я не придерживаюсь! Он скучен и нуден.

    Текст можно и покорректнее сделать

    — Что Вы имеете в виду под фразой поконкретнее?

    Reply ↓
  5. insurgut

    (4) у вас не только с описанием, но и с чтением проблемы 🙂

    Reply ↓
  6. KilloN

    (5) insurgut, С чтением — это означает я не смог прочитать. Как то не правдоподобно звучит. Молодец — ничего поумнее не смог придумать?

    А вот у тебя проблемы с русским языком, раз не можешь ответить на достаточно простой вопрос. ))

    Reply ↓
  7. TODD22

    (4)

    Стиля РОБОТА я не придерживаюсь! Он скучен и нуден.

    Цыганский стиль весёлый и задорный….

    С чтением — это означает я не смог прочитать. Как то не правдоподобно звучит. Молодец — ничего поумнее не смог придумать?

    Очень даже правдоподобно….

    Не зря же говорят что в 1С порог вхождения очень низкий. Писать не умеют, культура письменной речи отсутствует, читать внимательно не могут, элементарных знаний в теории оформления статей, текстов то же нет. Зато в конфигуратор научился и уже делится опытом.

    Reply ↓
  8. KilloN

    (7) TODD22,

    Цыганский стиль весёлый и задорный….

    Цыганам лучше знать про цыганский стиль веселый и задорный! ))

    Не зря же говорят что в 1С порог вхождения очень низкий. Писать не умеют, культура письменной речи отсутствует, читать внимательно не могут, элементарных знаний в теории оформления статей, текстов то же нет. Зато в конфигуратор научился и уже делится опытом.

    Когда я ищу в какой либо ответ в интернете, то мне абсолютно наплевать как оформлен ответ, с каким стилем и другой чепухой. Потому что всё это мишура, которой цена 0!

    Я лучше найду один правильный ответ, на сайте с фоном картинки в виде Ж*ПЫ, нежели 10 000 прекрасно оформленных с культурой письменной речи статей, которые ничего не дают, кроме как потраченного времени!

    Reply ↓
  9. karapuzzzz

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

    Reply ↓
  10. KilloN

    (9) karapuzzzz, Все верно. Но, не зря же в 1С есть возможность отключать «АвтоЗаполнение«? ))

    Допустим есть 1000 яблок в корзине. Нужно отобрать свежие. Свежих 999. Зачем перебирать 999 яблок в другую корзину, если можно выбросить одно гнилое?

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

    На ХабраХабре наткнулся на статью про паттерны. Один из них такой:

    Ненужная сложность (Accidental complexity)

    Простыми словами — это заумность решения. Ненужная сложность может быть внесена в решение любой задачи. Это могут быть как и ненужные проверки, части кода, продуцированные мягким кодированием, отсутствие какой-либо оптимизации. Это приводит к усложнению понимания кода, понижению скорости работы. Причинами являются — отсутствие или некачественность рефакторинга, некомпетентность программиста. Бороться довольно просто — следует проводить тщательные code review, эффективный рефакторинг.

    Reply ↓
  11. insurgut

    (6) на что мне отвечать, если корректнее <> конкретнее. Читайте внимательнее буквы. 🙂

    P.S. И если вам несколько человек сделали замечание по поводу ненадлежащего оформления статьи — проблема вероятнее всего в оформлении статьи, а не в людях, сделавших замечание.

    Reply ↓
  12. fomix

    Здесь что клуб благородных девиц или все оппоненты разом стали ханжами?!

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

    Reply ↓
  13. TODD22

    (12) fomix,

    Здесь что клуб благородных девиц или все оппоненты разом стали ханжами?!

    Действительно чего это… давайте будем быдлом с низким культурным уровнем письменной речи.

    Reply ↓
  14. KilloN

    (13) TODD22,

    Если хотите можете быть, Ваше право 🙂

    Однако мнения, что все кто написал «не культурное слово» к месту считать «быдлом с низким культурным уровнем письменной речи», я не придерживаюсь)))

    Наверное Вы не служили в армии?

    В армии ставится задача. Задача должна быть выполнена в конкретные сроки. И абсолютно не важно, с какой лексикой она была выполнена. Главное быстро и качественно!

    Для меня главное на этом сайте не лексика, а нужная мне информация, которая затрагивает сферу моей работы.

    Reply ↓
  15. TODD22

    (14)

    Наверное Вы не служили в армии?

    Дома по уставу живёшь? Строем на работе ходишь?

    Если кто то где то матерится в публичном месте это не значит что нужно поступать так же.

    Reply ↓
  16. KilloN

    (15) TODD22, Значит не служил))

    Про армию я вспомнил не потому что там кто то ругался матом, а потому что там акцентировали внимание только на главном.

    В моем случае вопросах проблематики обменов. А вместо этого открыли кружёк брезгливых неженок.

    Ой как не красиво написано… Как грубо фууууууууууууу… Плохая публикация….

    Если так охота поговорить не по теме откройте ветку на форуме, а здесь попрошу не спамить.

    Reply ↓
  17. nems

    Здраствуйте! Как правильно проверять на модифицированность при регистрации движений документов при перепроведении из списка (в ручном режиме регистрации)?

    Reply ↓
  18. KilloN

    (17) nems, Здравствуйте! Я сделал так:

    Если Не Источник.Модифицированность() Тогда
    Источник.ДополнительныеСвойства.Вставить(«НеИзменен», Истина);
    КонецЕсли;
    Если Не (Источник.ДополнительныеСвойства.Свойство(«НеИзменен») И Источник.ДополнительныеСвойства.НеИзменен) Тогда
    МеханизмРегистрацииОбъектовПередЗаписьюДокумента(«СинхронизацияДанныхЧерезУниверсальныйФормат», Источник, Отказ, РежимЗаписи, РежимПроведения);
    КонецЕсли;

    Хотя в очень редких случаях может возникнуть ошибка, но с т.з. тер. вер. она ничтожно мала, по сравнению с преимуществами по оптимизации. ))

    П.С. Давно не заходил на сайт, надеюсь еще актуально =))

    Reply ↓
  19. insurgut

    (18) ошибка может возникнуть в случае незаполненного значения источника (что теоретически маловероятно), поэтому достаточно добавить в условие проверку на заполненность…

    Если ЗначениеЗаполнено(Источник) И Не (Источник.ДополнительныеСвойства.Свойство(«НеИзменен») И Источник.ДополнительныеСвойства.НеИзменен) Тогда

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

    Reply ↓
  20. KilloN

    (19) insurgut,

    Я имел в виду вот что: Когда пользователь создает новый или редактирует существующий документ он всегда будет Модифицирован, но если в документе в процедуре ПередЗаписью производятся какие либо изменения (например изменяется какой либо реквизит). То не будет зарегистрирован измененный документ. Но данная ошибка возникнет только в том случае, если реквизит может изменится от обычного переводоведения! Я лично такого пока не встречал.

    Я проверку провожу в подписке «ПередЗаписью«, «ПередУдалением» я не трогал. У меня механизм обмнена через универсальный формат EnterpriseData внедрен в комплексную автоматизацию 1.1. А дополнительная проверка уменьшает ненужные обмены =))

    Reply ↓
  21. insurgut

    (20) я говорил не о проверке на модифицированность, просто расположение второго кода не знаю, предположил что он где-то в модулях стандартных процедур в плане обмена например 🙂

    Reply ↓

Leave a Comment

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