Заметка о процедуре ОбработкаУдаленияПроведения() из модуля документа "ЗаявкаНаОткрытиеСчетов" типового 1С:ЗУП (2.5.80.2)

Включил замер производительности при тестировании обмена с банками заявками на открытие лицевых счетов и…

И увидел постоянный вызов ОбработкаУдаленияПроведения модуля документа «ЗаявкаНаОткрытиеСчетов» при попытке перезаписи ранее проведенных документов «ЗаявкаНаОткрытиеСчетов».
С чего это вдруг? Ведь документ как был проведенным, так и остается. В табличке документа программно редактируется реквизит и далее он просто перезаписывается.
Стек вызов быстро дает ответ. Собственно код из модуля документа «ЗаявкаНаОткрытиеСчетов»:

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

Становится очевидно, что обработка ОбработкаУдаленияПроведения() вызывается при любых действиях с уже проведенным документом.
В том числе и когда мы хотим просто перезаписать документ программно.
По ряду причин лучше переписать в типовой код так:

 Если НЕ РежимЗаписи = РежимЗаписиДокумента.ЗаписьТогда    

 // 

 ОбработкаУдаленияПроведения(Ложь);
КонецЕсли;

вместо 
  Если Проведен Тогда

//

ОбработкаУдаленияПроведения(Ложь);
КонецЕсли;

 

Дожидаться выпуска обновления, если конфа снята с поддержки не имеет смысла.

Если делаете частую перезапись «ЗаявокНаОткрытиеСчетов», то рекомендую.

6 Comments

  1. TMV

    (0) Для документов при обмене обычно включают ОбменДанными.Загрузка в Истина, тем более что:

    Если ОбменДанными.Загрузка Тогда
    Возврат;
    КонецЕсли;

    Только если вам не нунжо, чтобы выполнялся код, следуемый далее.

    В общем, заметка ни о чем.

    Reply
  2. RailMen

    (1) TMV, речи об обмене данными нет. Речь о перезаписи проведенных документов при обмене с банком, когда типовой документ ЗаявкаНаОткрытиеСчетов неоправдано удаляет записи РС и снова добавляет точно такие же. Речь о нарушенной методологии.

    З.Ы. Не советую злоупотреблять конструкцией

    Если ОбменДанными.Загрузка Тогда

    там, где в этом нет необходимости и смысла.

    Reply
  3. TMV

    (2) Какой сакральный смысл неиспользования этого механизма в вашем конкретном случае?

    Я вижу противоречие здесь:

    речи об обмене данными нет. Речь о перезаписи проведенных документов при обмене с банком

    Вы нет?

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

    З.Ы.

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

    Reply
  4. RailMen

    (3) TMV, я просто за методологическую правильность типового кода в типовых конфигурациях. И еще раз: методологическую. Надеюсь вы еще раз сравните 2 варианта кода ) Конструкция : «ОбменДанными.Загрузка=Истина» — должна использоваться только по назначению при реализации обменов данными. Обмен с банками — это конечно же тоже «обмен» данными, только суть то не в этом. Имел ввиду другое: при перезаписи документов «Заявка на открытие счетов» типовая логика удаляет набор записей, а затем снова создает. Что если захотим воспользоваться типовой же групповой обработкой документов? А где гарантия, что в новых релизах не измениться код ОбработкиПроведения и ее повторный запуск даст весьма неожиданный результат? Просто факт остается фактом: нарушена методология.

    Reply
  5. Scop

    (4) полностью согласен. Проверил УПП 1.3.55.1 — та же самая ситуация.

    Reply
  6. A_Max
    Просто факт остается фактом: нарушена методология.

    А по момему вы странного хотите. Где гарантия, что при повторной загрузке содержимое документа будет соответсвовать проводкам? Потому и делается перепроведение, что документ мог измениться.

    Если вы уверены, что в вашем конкретном случае ничего не менялось, то тогда логичней использовать ОбменДанными.Загрузка

    Reply

Leave a Comment

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