gifts2017

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

Опубликовал Игорь Колодин (KilloN) в раздел Программирование - Практика программирования

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

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

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Анянов Михаил (insurgut) 19.12.15 07:58
Текст можно и покорректнее сделать, как модераторы пропустили "хренова куча кода с хреновой кучей запросов"?
2. борян петров (TODD22) 19.12.15 14:48
Текст можно и покорректнее сделать, как модераторы пропустили "хренова куча кода с хреновой кучей запросов"?

+1
Оформление ужасное. Видимо и раскраска текста для компенсации бедности речи.
3. Игорь Колодин (KilloN) 19.12.15 18:15
(2) TODD22, Ты случаем не блондин для которого ВАЖНО какого цвета телефон, вместо самих характеристик?
Что ж посмотрел, я на твои публикации, у тебя оформления вообще нет!
4. Игорь Колодин (KilloN) 19.12.15 18:22
(1) insurgut, А что собственно Вам не нравится - этот сайт не научное издание и публикация не учебник. А материал - это опыт которым я поделился. Стиля РОБОТА я не придерживаюсь! Он скучен и нуден.

Текст можно и покорректнее сделать
- Что Вы имеете в виду под фразой поконкретнее?
5. Анянов Михаил (insurgut) 20.12.15 17:38
(4) KilloN, у вас не только с описанием, но и с чтением проблемы :)
6. Игорь Колодин (KilloN) 21.12.15 01:23
(5) insurgut, С чтением - это означает я не смог прочитать. Как то не правдоподобно звучит. Молодец - ничего поумнее не смог придумать?
А вот у тебя проблемы с русским языком, раз не можешь ответить на достаточно простой вопрос. ))
7. борян петров (TODD22) 21.12.15 07:33
(4) KilloN,
Стиля РОБОТА я не придерживаюсь! Он скучен и нуден.

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

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

Не зря же говорят что в 1С порог вхождения очень низкий. Писать не умеют, культура письменной речи отсутствует, читать внимательно не могут, элементарных знаний в теории оформления статей, текстов то же нет. Зато в конфигуратор научился и уже делится опытом.
insurgut; alest; baton_pk; +3 Ответить 1
8. Игорь Колодин (KilloN) 21.12.15 09:40
(7) TODD22,
Цыганский стиль весёлый и задорный....

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

Когда я ищу в какой либо ответ в интернете, то мне абсолютно наплевать как оформлен ответ, с каким стилем и другой чепухой. Потому что всё это мишура, которой цена 0!
Я лучше найду один правильный ответ, на сайте с фоном картинки в виде Ж*ПЫ, нежели 10 000 прекрасно оформленных с культурой письменной речи статей, которые ничего не дают, кроме как потраченного времени!
9. Кирилл Бондаренко (karapuzzzz) 23.12.15 17:32
Для того, чтобы писать сопровождаемый код, необходимо пользоваться общами паттернами программирования, которые были разработаны годами. Если программист знает, что стоит авторегистрация, то и будет уверен, что авторегистрация проходит успешно. Если авторегистрация по каким-либо признакам не подходит, то указывается ручная регистрация а дальше через подписку на событие проводятся нужные проверки и т.д. Это логично именно так надо поступать.
10. Игорь Колодин (KilloN) 23.12.15 22:08
(9) karapuzzzz, Все верно. Но, не зря же в есть возможность отключать "АвтоЗаполнение"? ))

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

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

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

Простыми словами — это заумность решения. Ненужная сложность может быть внесена в решение любой задачи. Это могут быть как и ненужные проверки, части кода, продуцированные мягким кодированием, отсутствие какой-либо оптимизации. Это приводит к усложнению понимания кода, понижению скорости работы. Причинами являются — отсутствие или некачественность рефакторинга, некомпетентность программиста. Бороться довольно просто — следует проводить тщательные code review, эффективный рефакторинг.
11. Анянов Михаил (insurgut) 28.12.15 08:48
(6) KilloN, на что мне отвечать, если корректнее <> конкретнее. Читайте внимательнее буквы. :)

P.S. И если вам несколько человек сделали замечание по поводу ненадлежащего оформления статьи - проблема вероятнее всего в оформлении статьи, а не в людях, сделавших замечание.
12. Fomix (fomix) 28.12.15 09:50
Здесь что клуб благородных девиц или все оппоненты разом стали ханжами?!
"Хренова куча кода с хреновой кучей запросов" - поддерживаю автора, все правильно написал! Очень часто типовые конфигурации "страдают" избыточным кодом
13. борян петров (TODD22) 28.12.15 10:08
(12) fomix,
Здесь что клуб благородных девиц или все оппоненты разом стали ханжами?!

Действительно чего это... давайте будем быдлом с низким культурным уровнем письменной речи.
14. Игорь Колодин (KilloN) 28.12.15 13:25
(13) TODD22,
Если хотите можете быть, Ваше право :)

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

Наверное Вы не служили в армии?
В армии ставится задача. Задача должна быть выполнена в конкретные сроки. И абсолютно не важно, с какой лексикой она была выполнена. Главное быстро и качественно!
Для меня главное на этом сайте не лексика, а нужная мне информация, которая затрагивает сферу моей работы.
15. борян петров (TODD22) 28.12.15 15:10
(14) KilloN,
Наверное Вы не служили в армии?

Дома по уставу живёшь? Строем на работе ходишь?
Если кто то где то матерится в публичном месте это не значит что нужно поступать так же.
16. Игорь Колодин (KilloN) 29.12.15 09:41
(15) TODD22, Значит не служил))
Про армию я вспомнил не потому что там кто то ругался матом, а потому что там акцентировали внимание только на главном.
В моем случае вопросах проблематики обменов. А вместо этого открыли кружёк брезгливых неженок.

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


Если так охота поговорить не по теме откройте ветку на форуме, а здесь попрошу не спамить.
17. Andrey Rusyn (nems) 13.01.16 14:47
Здраствуйте! Как правильно проверять на модифицированность при регистрации движений документов при перепроведении из списка (в ручном режиме регистрации)?
18. Игорь Колодин (KilloN) 26.01.16 09:22
(17) nems, Здравствуйте! Я сделал так:

Если Не Источник.Модифицированность() Тогда 
	Источник.ДополнительныеСвойства.Вставить("НеИзменен", Истина);
КонецЕсли;


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


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

П.С. Давно не заходил на сайт, надеюсь еще актуально =))
19. Анянов Михаил (insurgut) 26.01.16 11:22
(18) KilloN, ошибка может возникнуть в случае незаполненного значения источника (что теоретически маловероятно), поэтому достаточно добавить в условие проверку на заполненность...
Если ЗначениеЗаполнено(Источник) И Не (Источник.ДополнительныеСвойства.Свойство("НеИзменен") И Источник.ДополнительныеСвойства.НеИзменен) Тогда


Еще возможна ситуация когда регистрируется событие непосредственного удаления объекта - источник вроде как будет равен внутреннему идентификатору и метод ДополнительныеСвойства у него не отработает, хотя могу ошибаться.
20. Игорь Колодин (KilloN) 26.01.16 18:31
(19) insurgut,
Я имел в виду вот что: Когда пользователь создает новый или редактирует существующий документ он всегда будет Модифицирован, но если в документе в процедуре ПередЗаписью производятся какие либо изменения (например изменяется какой либо реквизит). То не будет зарегистрирован измененный документ. Но данная ошибка возникнет только в том случае, если реквизит может изменится от обычного переводоведения! Я лично такого пока не встречал.

Я проверку провожу в подписке "ПередЗаписью", "ПередУдалением" я не трогал. У меня механизм обмнена через универсальный формат EnterpriseData внедрен в комплексную автоматизацию 1.1. А дополнительная проверка уменьшает ненужные обмены =))
21. Анянов Михаил (insurgut) 26.01.16 19:23
(20) KilloN, я говорил не о проверке на модифицированность, просто расположение второго кода не знаю, предположил что он где-то в модулях стандартных процедур в плане обмена например :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа