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

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

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

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

  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, Все верно. Но, не зря же в есть возможность отключать «АвтоЗаполнение«? ))

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