Внезапное исчезновение движений документа

02.04.21

Разработка - Механизмы типовых конфигураций

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

Вводная: конфигурация УПП 1.3.153.1 с доработками.

Имеется типовой документ «Требование накладная" с типовыми же настройками УПП:

  • Удаление движений: Не удалять автоматически.
  • Запись движений при проведении: Записывать модифицированные.

 

 

Визуальное описание проблемы:

При первичном проведении документа движения по нетиповому (добавленному) регистру накопления выполняются успешно и корректно. При повторном проведении документа движения исчезают «загадочным образом». При последующем перепроведении документа движения опять появляются и т.д. То есть, то нет…

Доработок, связанных «непосредственно» с механизмом проведения в целом и конкретно по данному регистру накопления выполнено не было.

Анализ проблемы:

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

 

 

Однако же точно известно, что до недавнего времени перепроведение документа НЕ приводило к стиранию движений по этому регистру накопления.

Дальнейший анализ показал, что в модуль объекта документа в процедуру «ПередЗаписью()» недавно был добавлен код:

 

 

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

Несмотря на то, что очевидно неправильное выполнение движений, написанное одним из разработчиков, очень хотелось разобраться с тем, почему одна, казалось бы, безобидная строчка кода, привела к таким «катастрофическим» последствиям, как затирание движений. Поиск информации в интернете не дал каких-либо ответов на поставленный вопрос, поэтому и было принято решение оформить небольшую статью – может кому поможет не совершать подобных ошибок.

 

В Обработчике «ОбработкаПроведения()» имеется типовой вызов процедуры «ОбщегоНазначения.УдалитьДвиженияРегистратора(), который очищает все движения регистратора:

 

 

Процедура «ОчисткаКоллекцийДвиженийДокумента()» общего модуля «ОбщегоНазначения» очищает те коллекции движения, в которых количество больше 0:

 

 

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

Как результат мы видим, что вернувшись в обработку проведения модифицированность набора записей нашего регистра накопления осталась в значении «Ложь». Это значит, что движения выполнены НЕ будут типовым образом. Но мы уже выяснили, что разработчик внесет изменения в данные регистра накопления позже, используя метод «СоздатьНаборЗаписей()».

Теперь же перепроведем документ.

Перед выходом из процедуры «ПередЗаписью()» модифицированность набора записей стоит «Ложь»:

 

 

Теперь в процедуре ОчисткаКоллекцийДвиженийДокумента()» наш набор записей содержит количество больше 0 и очищается:

 

 

Абсолютно логично, что теперь модифицированность нашего набора записей взведена в положение «Истина»:

 

 

После этого мы до окончания транзакции проведения зайдем в отдельную процедуру, выполняющую движения по нашему регистру накопления «вручную», а не посредством набора движений, и произведем эти самые движения. Однако набор записей, содержащийся в объекте документа НЕ станет заполнен (мы его сами только что очистили на предыдущем скриншоте):

 

 

Результат теперь очевиден – мы запишем пустые движения, т.к. согласно настройкам должны записывать модифицированные наборы. А наши «ручные» усилия пропадут, т.к. будут стерты пустым набором записей…

После анализа всё становится логично и понятно, кроме одного момента – почему, если убрать конструкцию «Набор.Прочитать()» в процедуре «ПередЗаписью()», то проблема «исчезновения движений» отсутствует??

Ответ оказался следующим:

Если мы не читаем набор записей принудительно подобной конструкцией, то все движения в объекте документа у нас пустые:

 

 

Абсолютно все. Получается, что в отсутствие принудительного чтения мы как будто бы «первый раз проводим» наш девственно чистый документ. Действия по очистке движений в процедуре «Обработка проведения» в данном случае не выполняются, т.к. наборы не прочитаны (они пустые) и модифицированность не взводится. Движения заполнятся и модифицированность взведется дальше в логике ОбработкиПроведения.

 

Выводы:

  1. Движения в подчиненные регистраторам регистры нужно выполнять через движения объекта документа, а не «вручную».
  2. Мистики не бывает – на все есть причина – главное ее найти.

 

P.S.

Возможно, для большинства написанное покажется «детским садом», поэтому заранее прошу их реагировать поспокойнее. При написании данной статьи хотелось в первую очередь для себя уложить в голове причину «загадочного поведения» документа. Надеюсь, что кому-то это будет полезно.

См. также

Ценовая власть. Выносим из цикла схему СКД

Механизмы типовых конфигураций Ценообразование, анализ цен Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    499    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    385    tango    5    

3

Ценовая власть. Второй сезон

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    628    tango    0    

2

Ценовая власть (УТ 11.5) - 2

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    445    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    531    tango    12    

2

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

07.02.2024    2607    YA_418728146    11    

43

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1149    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4972    mrXoxot    11    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. timeforlive 15 19.01.22 22:23 Сейчас в теме
После прочтения в начале статьи: "УПП 1.3.153.1 с доработками", не захотел разбираться в чужой магии.
Своей хватает.
EvgeniyOlxovskiy; +1
Оставьте свое сообщение