При работе с системой 1С пользователи часто сталкиваются с ситуацией, когда необходимо оформить частичное поступление товаров по предварительно созданному Заказу поставщику. Особенно сложным этот процесс становится, когда поставка содержит большое количество позиций (около 1000), и товар поступает не полностью, а лишь частично, причем в хаотичном порядке. Типовой механизм создания документа Приобретение товаров и услуг на основании Заказа поставщику автоматически переносит все строки заказа в табличную часть поступления, что требует трудоемкой ручной корректировки каждой позиции.
Основная проблема возникает при попытке оптимизировать этот процесс путем удаления всех строк в документе приобретения и последующей загрузки фактически поступившего товара из внешнего файла. В этом случае программа 1С «отвязывает» загруженные строки от исходного Заказа поставщику, даже если артикулы товаров совпадают. Мы с вами разберем, почему это происходит, какие последствия имеет такая «отвязка» и как можно решить эту задачу, сохраняя необходимую логику «заказ – поставка – поставка».
Выясним причину этого поведения системы 1С. Связь между позициями Заказа поставщику и Приобретения товаров и услуг поддерживается не только по наименованию или артикулу номенклатуры, но и по внутреннему уникальному идентификатору – так называемому «коду строки». Этот код не отображается на форме документа для пользователя, но он критически важен для корректной работы механизмов привязки. Когда мы создаем Приобретение товаров и услуг на основании Заказа поставщику, система автоматически передает этот «код строки» каждой позиции из заказа в поступление.
Однако, при попытке удалить все строки из табличной части поступления и затем загрузить их из внешнего файла, эти внутренние «коды строк» теряются. Несмотря на то, что артикулы и наименования товаров могут совпадать, для системы это будут уже новые, независимые строки, не имеющие прямой связи с исходными строками Заказа поставщику. Таким образом, программа не может корректно установить привязку, и в результате мы получаем «отвязанные» строки.
Мы должны понимать, чем чревато оставление документа Приобретение товаров и услуг с отвязанными строками:
Заказу поставщику в полном объеме, даже если товар фактически уже пришел (но был оформлен отвязанными строками). Это затрудняет управление закупками, планирование складских запасов и формирование точных отчетов по товарам к поступлению.Заказ поставщику, по которому поступил товар (но строки были «отвязаны»), не будет считаться полностью выполненным или выполненным частично корректным образом. Это может влиять на автоматическое изменение статусов заказов и отчетность по исполнению обязательств поставщиками.Таким образом, мы видим, что сохранение истории «заказ – поставка – поставка» критически важно для полноценного управленческого учета и эффективного планирования.
Прежде чем переходить к доработкам, рассмотрим стандартные механизмы 1С, которые могут помочь в управлении частичными поступлениями:
Заказы поставщикам как полноценный инструмент для контроля выполнения обязательств.Приобретение товаров и услуг может быть оформлен на основании заказа только после установки статуса, который разрешает его выполнение.Приобретение товаров и услуг на основании Заказа поставщику, табличная часть поступления автоматически заполняется содержимым заказа. Если товар поступает частично, пользователю необходимо скорректировать количество фактически поступивших позиций в документе Приобретение товаров и услуг. Программа автоматически отслеживает оставшееся количество к поступлению по заказу. Этот метод, хоть и трудозатратен для больших объемов, является стандартным и сохраняет все необходимые связи.Заказ поставщику, по которым накладная не оформлена или оформлена частично. Информационные пиктограммы позволяют нам контролировать состояние оформления накладных (например, одна стрелка может означать частичное поступление, две — невыполненный заказ). После проведения частичного поступления статус заказа поставщику не устанавливается как «Закрыт», что позволяет нам отслеживать оставшееся количество к поступлению.Приобретение товаров и услуг по нескольким заказам поставщикам. Для этого необходимо включить функциональную опцию Поступление по нескольким заказам в разделе НСИ и администрирование – Настройка НСИ и разделов – Закупки – Заказы поставщикам. При установке флага «Поступление по заказу» в документе приобретения программа автоматически пытается привязать строки к заказам поставщикам, по которым ожидается поступление, подбирая по совпадающим реквизитам и дате поступления.Для решения проблемы с отвязкой строк при частичной загрузке данных, мы можем рассмотреть несколько подходов:
Если объем позиций относительно небольшой и нежелательна разработка, самый простой способ – это оформить Приобретение товаров и услуг на основании Заказа поставщику, а затем вручную удалить или скорректировать количество тех позиций, которые не поступили. Несмотря на то, что это трудоемко для 1000 позиций, это гарантирует сохранение всех связей с заказом. Программа автоматически зафиксирует частичное поступление и остаток по заказу.
Это наиболее надежное и рекомендуемое решение для ситуаций с большим объемом данных и частыми частичными поставками. Мы разработаем внешнюю обработку заполнения документа, которая будет учитывать специфику привязки строк:
Заказе поставщику. Для этого обработка должна:
Заказе поставщику по номенклатуре (возможно, по артикулу или другим уникальным полям).Приобретения товаров и услуг использовать этот «код строки» для каждой позиции, чтобы программа корректно установила связь с Заказом поставщику.Примерная логика работы такой обработки:
// Предполагается, что у нас есть ссылка на документ ПриобретениеТоваровУслуг
// и ссылка на исходный ЗаказПоставщику
// А также ТаблицаПоступившихТоваров с колонками: Номенклатура, Количество
// Очищаем табличную часть поступления (если нужно)
ДокументОбъект.Товары.Очистить();
Для Каждого СтрокаПоступленияИзФайла Из ТаблицаПоступившихТоваров Цикл
// Ищем соответствующую строку в Заказе поставщику
НайденнаяСтрокаЗаказа = Неопределено;
Для Каждого СтрокаЗаказа Из ЗаказПоставщику.Товары Цикл
Если СтрокаЗаказа.Номенклатура = СтрокаПоступленияИзФайла.Номенклатура Тогда
// Можно добавить дополнительные проверки, например, по дате или характеристикам
НайденнаяСтрокаЗаказа = СтрокаЗаказа;
Прервать;
КонецЕсли;
КонецЦикла;
Если НайденнаяСтрокаЗаказа <> Неопределено Тогда
// Создаем новую строку в табличной части поступления
НоваяСтрокаПоступления = ДокументОбъект.Товары.Добавить();
НоваяСтрокаПоступления.Номенклатура = СтрокаПоступленияИзФайла.Номенклатура;
НоваяСтрокаПоступления.Количество = СтрокаПоступленияИзФайла.Количество;
// Заполняем остальные поля...
// КЛЮЧЕВОЙ МОМЕНТ: ПРИВЯЗКА К СТРОКЕ ЗАКАЗА
НоваяСтрокаПоступления.ЗаказПоставщику = ЗаказПоставщику.Ссылка;
НоваяСтрокаПоступления.КлючСвязиСтрокиЗаказа = НайденнаяСтрокаЗаказа.КлючСвязиСтрокиЗаказа;
// Или другой механизм привязки, зависящий от конфигурации (например, это может быть
// НоваяСтрокаПоступления.СсылкаНаДокументОснование или НоваяСтрокаПоступления.НомерСтрокиДокументаОснования)
// В некоторых конфигурациях 1С (например, УТ 11) механизм привязки реализован через поле
// "КлючСвязиСтрокиЗаказа", которое не всегда есть в обычных ТЧ, но используется системой.
// Для корректного заполнения этого поля, возможно, потребуется использование типовых процедур
// заполнения на основании или доработка, которая вызывает эти типовые процедуры.
Иначе
// Обработка ситуации, когда товар из файла не найден в заказе
Сообщить("Товар " + СтрокаПоступленияИзФайла.Номенклатура + " не найден в заказе!");
// Добавляем как "сверх заказа" или игнорируем
КонецЕсли;
КонецЦикла;
Важно: Поле КлючСвязиСтрокиЗаказа или аналогичный механизм привязки может быть недоступен напрямую для записи в пользовательской обработке или требовать особых методов заполнения, которые используются типовыми механизмами 1С при создании на основании. В некоторых случаях придется имитировать вызов типовых процедур заполнения или использовать специализированные методы обмена данными, если они доступны в вашей конфигурации.
В Заказе поставщику мы можем закладываться на разные планируемые даты поступлений для каждой позиции. Это позволяет более детально контролировать ожидаемые поставки. В дальнейшем, этот подход может быть использован для:
Приобретение товаров и услуг только теми позициями, у которых наименьшая (или ближайшая) дата планируемого поступления совпадает с текущей датой или датой поступления.Заказ поставщику и дату или диапазон дат поступления, после чего перенесет в Приобретение товаров и услуг только те строки заказа, которые соответствуют выбранным критериям.В случае, если поступило товара больше или меньше, чем по заказу, для проведения документа Приобретение товаров и услуг мы можем использовать функционал отражения расхождений. Превышающее количество товара можно пометить как «сверх заказа». Система также позволяет оформлять корректировки приобретений для отражения изменений количества или стоимости уже после проведения документа, если расхождения были выявлены позднее.
В некоторых случаях, для сложных схем закупок, возможно оформление раздельной закупки, когда переход права собственности и фактическое поступление товаров на склад регистрируются разными документами. Мы можем использовать схемы «Товары в пути» или «Неотфактурованные поставки товаров и услуг». Это позволяет более гибко управлять процессом, но усложняет учетную схему.
Мы видим, что проблема «отвязки» строк при частичном поступлении по Заказу поставщику в 1С при использовании загрузки из внешних файлов является типовой и обусловлена внутренней логикой системы, требующей сохранения уникального «кода строки» для привязки. Наиболее правильным и масштабируемым решением для больших объемов данных является разработка специализированной внешней обработки заполнения. Эта обработка должна не просто загружать данные, но и корректно сопоставлять их с исходными строками Заказа поставщику, используя механизмы внутренней привязки 1С.
Перед тем как приступать к доработкам, всегда рекомендуется проверить поведение системы на копии базы данных. Это позволит нам избежать непредвиденных последствий в рабочей базе и убедиться в корректности выбранного решения.
В отсутствие доработок, мы должны либо вручную корректировать количество в документе Приобретение товаров и услуг, созданном на основании заказа, либо мириться с тем, что система будет некорректно отслеживать доступность товаров и статусы заказов. Мы рекомендуем инвестировать в разработку качественной обработки, которая автоматизирует этот процесс и обеспечивает точность учета.