Мы сталкиваемся с распространенной ситуацией в 1С:УПП, когда документ "Отчет производства за смену", несмотря на то что в его шапке четко указан склад, не формирует соответствующие движения по складу в регистре "Партии товаров на складах". Это может вызывать недоумение, особенно когда другие аналогичные документы работают корректно. Давайте подробно разберем, почему это происходит и как исправить данную проблему.
На первый взгляд кажется, что если склад указан в шапке документа, то этого должно быть достаточно для оприходования готовой продукции на этот склад. Однако, логика учета в 1С:УПП, особенно в части производственных операций, значительно глубже и учитывает множество нюансов, которые определяют, как именно продукция будет отражена в системе. Ключевым моментом здесь является не только наличие склада в шапке, но и детализация выпуска продукции в табличной части документа, а также программный код, который обрабатывает эти детали.
Главная причина отсутствия склада в движениях регистра "Партии товаров на складах" кроется в реквизите "Направление выпуска", который находится в табличной части "Продукция" документа "Отчет производства за смену". Этот реквизит определяет, куда именно направляется произведенная продукция после завершения производственного цикла.
Рассмотрим, что это означает. В системе 1С:УПП произведенная продукция может быть не только оприходована на склад готовой продукции, но и иметь другие судьбы, каждая из которых по-разному отражается в учете:
Таким образом, даже если в шапке документа "Отчет производства за смену" мы видим заполненное поле "Склад", это поле определяет предполагаемый или основной склад для выпуска, но окончательное решение о движении на склад принимается исходя из значения реквизита "Направление выпуска" для каждой отдельной номенклатурной позиции в табличной части. Это позволяет гибко управлять судьбой выпускаемой продукции в зависимости от производственных нужд.
Кроме того, в документе может присутствовать флаг "Использовать направления выпуска". Этот флаг регулирует, будет ли система вообще учитывать детализацию по направлениям выпуска для каждой строки табличной части. Если этот флаг установлен, то система будет строго следовать значению "Направление выпуска" в каждой строке. Если же этот флаг снят, то, как правило, вся продукция по умолчанию считается выпущенной на склад, указанный в шапке документа, игнорируя индивидуальные настройки в строках табличной части. Именно это условие мы увидим, когда приступим к анализу программного кода, и оно является важным контрольным механизмом в логике проведения документа.
Для полного понимания механизма, почему склад иногда не заполняется, нам необходимо обратиться к программному коду 1С:УПП. Большая часть логики по формированию движений по регистрам при проведении документов сосредоточена в общих модулях. В нашем случае, за движения по выпуску продукции на склад отвечает:
УправлениеПроизводствомДвиженияПоРегистрамСформироватьТекстЗапросаПоВыпускуПродукцииНаСкладОтчетПроизводстваЗаСмену()Эта функция формирует текст запроса, который затем выполняется для получения данных о выпущенной продукции, подлежащей оприходованию на склад. Данный запрос является своего рода фильтром, который отбирает из всех строк табличной части "Продукция" только те, что соответствуют определенным критериям для поступления на склад. Давайте внимательно рассмотрим ключевой фрагмент этого запроса, который определяет, какие строки табличной части документа будут формировать движения по складу, и подробно проанализируем каждое условие:
|ИЗ
| Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ТабличнаяЧасть
|
|ГДЕ
| ТабличнаяЧасть.Ссылка = &Ссылка
| И Не ТабличнаяЧасть.Номенклатура.Услуга
| И (ТабличнаяЧасть.НаправлениеВыпуска = &НаправлениеВыпускаНаСклад
| И ТабличнаяЧасть.Ссылка.ИспользоватьНаправленияВыпуска
| ИЛИ
| Не ТабличнаяЧасть.Ссылка.ИспользоватьНаправленияВыпуска)
Проанализируем этот фрагмент по частям, чтобы выяснить, какие условия должны быть выполнены для того, чтобы продукция попала в движения по складу:
ТабличнаяЧасть.Ссылка = &Ссылка: Это стандартное и базовое условие, которое фильтрует строки табличной части "Продукция" по текущему документу "Отчет производства за смену", который мы проводим. Переменная &Ссылка содержит уникальный идентификатор (ссылку) на проводимый документ. Это гарантирует, что мы работаем только с данными нашего конкретного документа, избегая выборки данных из других документов.И Не ТабличнаяЧасть.Номенклатура.Услуга: Это очень важное условие, касающееся типа номенклатуры. Оно исключает из выборки все позиции, номенклатура которых в справочнике "Номенклатура" имеет признак "Услуга" (например, если ее вид номенклатуры классифицирован как "Услуга" или имеет соответствующий флаг). Услуги по своей природе не являются материальными активами, не могут храниться на складе и, следовательно, не формируют движений по регистру "Партии товаров на складах". Даже если услуга ошибочно попала в табличную часть "Продукция", это условие не позволит сформировать по ней складские движения.И (ТабличнаяЧасть.НаправлениеВыпуска = &НаправлениеВыпускаНаСклад И ТабличнаяЧасть.Ссылка.ИспользоватьНаправленияВыпуска ИЛИ Не ТабличнаяЧасть.Ссылка.ИспользоватьНаправленияВыпуска): Это критически важное и наиболее комплексное условие, которое прямо влияет на нашу проблему с незаполнением склада. Разберем его по логическим блокам:
ТабличнаяЧасть.НаправлениеВыпуска = &НаправлениеВыпускаНаСклад И ТабличнаяЧасть.Ссылка.ИспользоватьНаправленияВыпуска:
ТабличнаяЧасть.НаправлениеВыпуска = &НаправлениеВыпускаНаСклад: Эта часть условия проверяет, равно ли значение реквизита "Направление выпуска" в текущей строке табличной части константе (или предопределенному значению перечисления) "На склад". Переменная &НаправлениеВыпускаНаСклад является параметром запроса, который содержит ссылку на предопределенное значение перечисления, указывающее на выпуск продукции на склад. Если продукция должна быть оприходована на склад, это условие должно быть истинным для данной строки.И ТабличнаяЧасть.Ссылка.ИспользоватьНаправленияВыпуска: Это условие проверяет значение флага "Использовать направления выпуска", который находится в шапке текущего документа (к нему обращаются через ссылку на документ). Если этот флаг установлен (то есть, его значение Истина), это означает, что система настроена на детальный учет направлений выпуска для каждой строки. В таком случае, для формирования движения по складу, одновременно с этим флагом, обязательно должно быть выполнено первое условие (т.е., НаправлениеВыпуска для строки должно быть "На склад"). Если флаг установлен, но в строке указано другое направление (например, "На затраты"), то эта часть условия будет ложной.ИЛИ Не ТабличнаяЧасть.Ссылка.ИспользоватьНаправленияВыпуска:
Ложь). Если флаг снят, это означает, что детализация по направлениям выпуска для каждой строки не используется или не является обязательной. В этом случае, независимо от того, что указано в реквизите "Направление выпуска" в строках табличной части (или даже если оно не заполнено), система по умолчанию считает, что вся продукция предназначена для оприходования на склад, указанный в шапке документа. Это условие предоставляет "обратный" механизм, позволяющий избежать необходимости прописывать "На склад" в каждой строке, если производственный процесс подразумевает единообразный выпуск всей продукции на один склад.Таким образом, продукция попадает в движения по регистру "Партии товаров на складах" только в двух основных случаях:
Если в вашем проблемном документе флаг "Использовать направления выпуска" установлен, но в табличной части для номенклатуры, по которой не формируются движения, "Направление выпуска" указано как "На затраты" или "В незавершенное производство", то именно это и является основной причиной отсутствия движений по складу. Также причиной может быть, что номенклатура, по которой нет движений, относится к типу "Услуга".
Помимо реквизита "Направление выпуска" и программной логики, существуют и другие аспекты, которые могут влиять на поведение документа "Отчет производства за смену" в 1С:УПП и вызывать неожиданное отсутствие движений по складу:
И Не ТабличнаяЧасть.Номенклатура.Услуга), категорически исключается из формирования движений по складам. Крайне важно убедиться, что тип номенклатуры, по которой вы ожидаете складские движения, правильно классифицирован в справочнике "Номенклатура" и не имеет признака услуги. Если номенклатура является услугой, то она никогда не будет формировать движения по регистру "Партии товаров на складах", поскольку услуги не имеют количественного или стоимостного складского учета в традиционном понимании товарно-материальных ценностей. Проверьте Вид номенклатуры, а также другие специфические настройки в карточке номенклатуры, которые могут влиять на ее учет.Для того чтобы окончательно решить проблему и понять причину отсутствия движений по складу конкретно в вашем случае, мы рекомендуем выполнить следующие диагностические и корректирующие шаги. Начнем с самых простых и перейдем к более сложным методам, включая отладку кода.
Начнем с самого очевидного, но часто упускаемого из виду. Откройте проблемный документ "Отчет производства за смену" в режиме просмотра или редактирования. Перейдите на вкладку или в табличную часть, которая содержит список выпущенной "Продукции". Внимательно просмотрите колонку "Направление выпуска" для всех позиций номенклатуры, по которым вы ожидаете движения на склад. Убедитесь, что для этих позиций установлено значение "На склад".
В том же документе "Отчет производства за смену", который вы анализируете, внимательно изучите поля в шапке или на основных вкладках. Найдите флаг (чекбокс) с названием "Использовать направления выпуска". Этот флаг определяет общий подход к учету выпуска продукции в данном документе.
Как мы выяснили из анализа кода, номенклатура типа "Услуга" исключается из движений по складу. Для каждой номенклатурной позиции в документе "Отчет производства за смену", по которой не формируются движения, откройте карточку элемента справочника "Номенклатура".
Если предыдущие шаги не помогли или вы хотите досконально разобраться в логике поведения документа в вашей конкретной конфигурации, выполните отладку. Это наиболее точный и эффективный способ определить, почему не формируются движения по складу.
УправлениеПроизводствомДвиженияПоРегистрам. Это можно сделать через дерево объектов конфигурации, раздел "Общие" -> "Общие модули".СформироватьТекстЗапросаПоВыпускуПродукцииНаСкладОтчетПроизводстваЗаСмену(). Используйте поиск по тексту модуля (Ctrl+F) для быстрого нахождения.&НаправлениеВыпускаНаСклад. Оно должно соответствовать предопределенному значению перечисления "На склад".ТабличнаяЧасть.НаправлениеВыпуска для каждой строки, а также состояние флага ТабличнаяЧасть.Ссылка.ИспользоватьНаправленияВыпуска, которые поступают из вашего документа.ГДЕ не выполняются для них.Если вы работаете в нетиповой или доработанной конфигурации 1С:УПП, всегда существует вероятность, что в процессе обновлений или кастомизации были внесены изменения в стандартную логику проведения документа "Отчет производства за смену" или в общие модули, отвечающие за формирование движений по регистрам.
УправлениеПроизводствомДвиженияПоРегистрам. Иногда даже небольшое изменение в условии запроса или в логике обработки данных может кардинально изменить его поведение и привести к таким проблемам. Если обнаружены нетиповые изменения, проанализируйте их назначение и оцените возможность отката или корректировки.Следуя этим всесторонним шагам, мы не только найдем причину отсутствия движений по складу, но и получим глубокое понимание логики работы документа "Отчет производства за смену" в части оприходования готовой продукции в 1С:УПП. Часто, кажущиеся "волшебными" расхождения в поведении документов, объясняются внимательным и методичным изучением настроек и программного кода. Это позволит вам эффективно решать подобные задачи в будущем и поддерживать корректный учет на вашем предприятии.