Я расскажу про свой выход из подобной ситуации.
Конечно, сейчас мода на ручную регистрацию изменений в планах обмена, но до сих пор остается много старых и самописных конфигураций, которым, может быть, сможет помочь моя публикация.
Для начала я вкратце расскажу, как ручная регистрация происходит в типовой конфигурации:
- Перед записью документа вызывается событие «МеханизмРегистрацииОбъектовПередЗаписьюДокумента«, которое, собственно, и отвечает за регистрацию. Я пропущу большую часть всех условий, а перейду к сути.
- А именно к функции «ОбъектМодифицированДляПланаОбменаПопыткаИсключение«. Функция получает «ТаблицаРеквизитовРегистрации«, которая, по-видимому, берется из правил регистрации объектов. После чего для каждого реквизита или таблицы регистрации идет запрос (ЗАПРОС В ЦИКЛЕ) для значения реквизита до изменений. И идет сравнение с текущим значением реквизита.
- В результате перед записью одного документа выполняется хренова куча кода с хреновой кучей запросов.
Скажу честно, такой подход мне показался не слишком оптимальным, и при этом достаточно МНОГОВРЕМЕНИЗАТРАЧИВАЕМЫМ для моей простой небольшой базы. Поэтому я и решил поискать способ попроще.
- Чтобы отменить авторегистрацию, нужно написать где-нибудь:
Источник.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;
- Я создал подписку перед записью документа и решил добавить простенькую проверку на модифицированность
Если Не Источник.Модифицированность() Тогда Источник.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; КонецЕсли;
-
Каково же было моё удивление, что она не работает))) Причем, даже есть проверять модифицированность в самом начале в модуле объекта. Решением стал вызов подписчика на процедуру «ОбработкаПроверкиЗаполнения«. Но и это не все! если проведение происходит из списка документов, то проверка на модифицированность даёт ЛОЖЬ, а если через форму документа (даже если ты просто нажал ОК) ИСТИНА.
Текст можно и покорректнее сделать, как модераторы пропустили «хренова куча кода с хреновой кучей запросов»?
+1
Оформление ужасное. Видимо и раскраска текста для компенсации бедности речи.
(2) TODD22, Ты случаем не блондин для которого ВАЖНО какого цвета телефон, вместо самих характеристик?
Что ж посмотрел, я на твои публикации, у тебя оформления вообще нет!
(1) insurgut, А что собственно Вам не нравится — этот сайт не научное издание и публикация не учебник. А материал — это опыт которым я поделился. Стиля РОБОТА я не придерживаюсь! Он скучен и нуден.
— Что Вы имеете в виду под фразой поконкретнее?
(4) у вас не только с описанием, но и с чтением проблемы 🙂
(5) insurgut, С чтением — это означает я не смог прочитать. Как то не правдоподобно звучит. Молодец — ничего поумнее не смог придумать?
А вот у тебя проблемы с русским языком, раз не можешь ответить на достаточно простой вопрос. ))
(4)
Цыганский стиль весёлый и задорный….
Очень даже правдоподобно….
Не зря же говорят что в 1С порог вхождения очень низкий. Писать не умеют, культура письменной речи отсутствует, читать внимательно не могут, элементарных знаний в теории оформления статей, текстов то же нет. Зато в конфигуратор научился и уже делится опытом.
(7) TODD22,
Цыганам лучше знать про цыганский стиль веселый и задорный! ))
Когда я ищу в какой либо ответ в интернете, то мне абсолютно наплевать как оформлен ответ, с каким стилем и другой чепухой. Потому что всё это мишура, которой цена 0!
Я лучше найду один правильный ответ, на сайте с фоном картинки в виде Ж*ПЫ, нежели 10 000 прекрасно оформленных с культурой письменной речи статей, которые ничего не дают, кроме как потраченного времени!
Для того, чтобы писать сопровождаемый код, необходимо пользоваться общами паттернами программирования, которые были разработаны годами. Если программист знает, что стоит авторегистрация, то и будет уверен, что авторегистрация проходит успешно. Если авторегистрация по каким-либо признакам не подходит, то указывается ручная регистрация а дальше через подписку на событие проводятся нужные проверки и т.д. Это логично именно так надо поступать.
(9) karapuzzzz, Все верно. Но, не зря же в 1С есть возможность отключать «АвтоЗаполнение«? ))
Допустим есть 1000 яблок в корзине. Нужно отобрать свежие. Свежих 999. Зачем перебирать 999 яблок в другую корзину, если можно выбросить одно гнилое?
Так и получается у меня. что проще сделать одно исключение из правила с размером кода в 3 строчки которое актуально для всех планов обмена, нежели переделывать все на ручную регистрацию.
На ХабраХабре наткнулся на статью про паттерны. Один из них такой:
Простыми словами — это заумность решения. Ненужная сложность может быть внесена в решение любой задачи. Это могут быть как и ненужные проверки, части кода, продуцированные мягким кодированием, отсутствие какой-либо оптимизации. Это приводит к усложнению понимания кода, понижению скорости работы. Причинами являются — отсутствие или некачественность рефакторинга, некомпетентность программиста. Бороться довольно просто — следует проводить тщательные code review, эффективный рефакторинг.
(6) на что мне отвечать, если корректнее <> конкретнее. Читайте внимательнее буквы. 🙂
P.S. И если вам несколько человек сделали замечание по поводу ненадлежащего оформления статьи — проблема вероятнее всего в оформлении статьи, а не в людях, сделавших замечание.
Здесь что клуб благородных девиц или все оппоненты разом стали ханжами?!
«Хренова куча кода с хреновой кучей запросов» — поддерживаю автора, все правильно написал! Очень часто типовые конфигурации «страдают» избыточным кодом
(12) fomix,
Действительно чего это… давайте будем быдлом с низким культурным уровнем письменной речи.
(13) TODD22,
Если хотите можете быть, Ваше право 🙂
Однако мнения, что все кто написал «не культурное слово» к месту считать «быдлом с низким культурным уровнем письменной речи», я не придерживаюсь)))
Наверное Вы не служили в армии?
В армии ставится задача. Задача должна быть выполнена в конкретные сроки. И абсолютно не важно, с какой лексикой она была выполнена. Главное быстро и качественно!
Для меня главное на этом сайте не лексика, а нужная мне информация, которая затрагивает сферу моей работы.
(14)
Дома по уставу живёшь? Строем на работе ходишь?
Если кто то где то матерится в публичном месте это не значит что нужно поступать так же.
(15) TODD22, Значит не служил))
Про армию я вспомнил не потому что там кто то ругался матом, а потому что там акцентировали внимание только на главном.
В моем случае вопросах проблематики обменов. А вместо этого открыли кружёк брезгливых неженок.
Если так охота поговорить не по теме откройте ветку на форуме, а здесь попрошу не спамить.
Здраствуйте! Как правильно проверять на модифицированность при регистрации движений документов при перепроведении из списка (в ручном режиме регистрации)?
(17) nems, Здравствуйте! Я сделал так:
Хотя в очень редких случаях может возникнуть ошибка, но с т.з. тер. вер. она ничтожно мала, по сравнению с преимуществами по оптимизации. ))
П.С. Давно не заходил на сайт, надеюсь еще актуально =))
(18) ошибка может возникнуть в случае незаполненного значения источника (что теоретически маловероятно), поэтому достаточно добавить в условие проверку на заполненность…
Еще возможна ситуация когда регистрируется событие непосредственного удаления объекта — источник вроде как будет равен внутреннему идентификатору и метод ДополнительныеСвойства у него не отработает, хотя могу ошибаться.
(19) insurgut,
Я имел в виду вот что: Когда пользователь создает новый или редактирует существующий документ он всегда будет Модифицирован, но если в документе в процедуре ПередЗаписью производятся какие либо изменения (например изменяется какой либо реквизит). То не будет зарегистрирован измененный документ. Но данная ошибка возникнет только в том случае, если реквизит может изменится от обычного переводоведения! Я лично такого пока не встречал.
Я проверку провожу в подписке «ПередЗаписью«, «ПередУдалением» я не трогал. У меня механизм обмнена через универсальный формат EnterpriseData внедрен в комплексную автоматизацию 1.1. А дополнительная проверка уменьшает ненужные обмены =))
(20) я говорил не о проверке на модифицированность, просто расположение второго кода не знаю, предположил что он где-то в модулях стандартных процедур в плане обмена например 🙂