Почему после обновления УПП 1.3.173.3 не проводятся документы «Передача материалов в эксплуатацию»?

Программист 1С v8.3 (Обычные формы) Налоговый учет Промышленность, строительство и АПК
← На главную

Рассмотрим ситуацию, с которой столкнулись пользователи конфигурации «Управление производственным предприятием» (УПП) ред. 1.3. После последовательного обновления до релиза 1.3.173.3 возникла проблема: документ Передача материалов в эксплуатацию перестал формировать движения по регистрам. При этом сам документ успешно проводился и получал статус «Проведен», но в регистрах бухгалтерии (Материалы на складах, Материалы в эксплуатации и других) не появлялось ни одной записи. Эта проблема может возникнуть независимо от того, какие виды учета (управленческий, бухгалтерский, налоговый) используются при проведении.

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

Анализ проблемы: ошибка в запросе получения данных

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

Ключевая причина — ошибка в логике запроса внутри функции СформироватьЗапросПоТабличнойЧастиМатериалы, которая находится в модуле объекта документа ПередачаМатериаловВЭксплуатацию. Запрос некорректно соединяет данные табличной части документа с виртуальной таблицей остатков регистра бухгалтерии по налоговому учету.

Посмотрим на фрагмент кода из типовой конфигурации релиза 1.3.173.3:


|ВЫБРАТЬ
...
|ИЗ
|   Документ.ПередачаМатериаловВЭксплуатацию.Материалы КАК Док
|
|   ЛЕВОЕ СОЕДИНЕНИЕ
|       СпособыОтраженияРасходов КАК СпособыОтраженияРасходов
|   ПО
|       Док.НазначениеИспользования.СпособОтраженияРасходов = СпособыОтраженияРасходов.СпособОтраженияРасходов
|   ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Налоговый.Остатки(&ДатДок, , , ) КАК НалоговыйОстатки
|       ПО Док.СчетУчетаНУ = НалоговыйОстатки.Счет
|       И Док.Номенклатура = НалоговыйОстатки.Субконто1
|       И Док.Ссылка.Склад = НалоговыйОстатки.Субконто2
|   ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатДок, , , ) КАК ХозрасчетныйОстатки
|       ПО Док.СчетУчетаБУ = ХозрасчетныйОстатки.Счет
|       И Док.Номенклатура = ХозрасчетныйОстатки.Субконто1
|       И Док.Ссылка.Склад = ХозрасчетныйОстатки.Субконто2
|ГДЕ
|   Док.Ссылка = &ДокументСсылка
|   И НалоговыйОстатки.ВидУчета = &НУ
|
|УПОРЯДОЧИТЬ ПО
|   Док.НомерСтроки

Ошибка заключается в строке И НалоговыйОстатки.ВидУчета = &НУ, которая находится в секции ГДЕ. Когда условие накладывается на поля таблицы, присоединяемой через ЛЕВОЕ СОЕДИНЕНИЕ (в данном случае это НалоговыйОстатки), в секции ГДЕ, такое соединение фактически превращается во ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Это означает, что если для какой-либо строки из табличной части документа не будет найдено остатка в регистре налогового учета (НалоговыйОстатки), то вся эта строка будет исключена из итоговой выборки. В результате запрос возвращает пустую таблицу, и обработка проведения документа завершается без создания движений.

Способ 1: Корректировка кода запроса (рекомендуемый)

Чтобы исправить такое поведение, необходимо перенести условие фильтрации по виду учета из секции ГДЕ в условия соединения ПО для таблицы НалоговыйОстатки. Это позволит сохранить все строки из табличной части документа в результате запроса, даже если для них нет остатков по налоговому учету.

Разберем по шагам, как внести исправления:

  1. Откройте конфигуратор и найдите документ ПередачаМатериаловВЭксплуатацию.
  2. Откройте модуль объекта этого документа.
  3. Найдите в модуле функцию СформироватьЗапросПоТабличнойЧастиМатериалы(СтруктураШапкиДокумента).
  4. В тексте запроса внутри этой функции найдите секцию ГДЕ и удалите из нее строку: И НалоговыйОстатки.ВидУчета = &НУ.
  5. Найдите секцию соединения с таблицей ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Налоговый.Остатки(...) и добавьте удаленное условие в конец блока ПО.

Фрагмент кода до исправления:


...
|   ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Налоговый.Остатки(&ДатДок, , , ) КАК НалоговыйОстатки
|       ПО Док.СчетУчетаНУ = НалоговыйОстатки.Счет
|       И Док.Номенклатура = НалоговыйОстатки.Субконто1
|       И Док.Ссылка.Склад = НалоговыйОстатки.Субконто2
...
|ГДЕ
|   Док.Ссылка = &ДокументСсылка
|   И НалоговыйОстатки.ВидУчета = &НУ
...

Фрагмент кода после исправления:


...
|   ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Налоговый.Остатки(&ДатДок, , , ) КАК НалоговыйОстатки
|       ПО Док.СчетУчетаНУ = НалоговыйОстатки.Счет
|       И Док.Номенклатура = НалоговыйОстатки.Субконто1
|       И Док.Ссылка.Склад = НалоговыйОстатки.Субконто2
|       И НалоговыйОстатки.ВидУчета = &НУ // ++ Условие перенесено сюда
...
|ГДЕ
|   Док.Ссылка = &ДокументСсылка
// -- Строка отсюда удалена
...

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

Способ 2: Возврат модуля из предыдущей версии

Если внесение изменений в код по каким-то причинам затруднительно, можно воспользоваться более простым, но менее гибким решением — заменить весь модуль объекта документа ПередачаМатериаловВЭксплуатацию на версию из предыдущего релиза (например, 1.3.167), где этой ошибки не было.

Этот способ имеет существенный недостаток: вы потеряете все остальные исправления и нововведения, которые были внесены в этот модуль в обновлении 1.3.173.3. Применять его стоит только как временную меру до выхода официального исправления от разработчика.

Дополнительная информация и альтернативные решения

Стоит отметить, что описанная проблема является официально зарегистрированной ошибкой в релизе УПП 1.3.173.3. Она связана с некорректной логикой списания количества в налоговом учете, особенно при работе с несущественными активами.

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

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

Таким образом, наиболее правильным решением является исправление кода запроса, так как оно точечно устраняет причину проблемы, сохраняя при этом все остальные изменения релиза.

← На главную