Почему документ «Приобретение товаров и услуг» не делает движения по товарам в 1С:ERP и Комплексная автоматизация 2.4

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Управленческий учет IT и автоматизация бизнеса
← На главную

При обновлении конфигураций 1С:Комплексная автоматизация или 1С:ERP Управление предприятием до версии 2.4 технические специалисты и пользователи иногда сталкиваются с ситуацией, когда документ ПриобретениеТоваровУслуг проводится без ошибок, однако списываемый или поступающий товар не появляется на остатках. В результате в отчетах появляются отрицательные остатки, а движения по регистрам Товары на складах, Свободные остатки и Товары организаций отсутствуют.

Рассмотрим подробно причины возникновения этой проблемы, связанные с обновлением структуры метаданных и переносом данных из прошлых редакций (например, КА 1.1), а также разберем сопутствующие нюансы работы серверного контекста при выгрузках метаданных.

Причина 1. Незаполненный реквизит «Вариант оформления закупок» в договоре

Проанализируем механику работы документа ПриобретениеТоваровУслуг. При проведении документа алгоритмы конфигурации проверяют параметры договора с поставщиком или соглашения об условиях закупок. В версии 2.4 в справочнике ДоговорыКонтрагентов появилось обязательное поле ВариантОформленияЗакупок (перечисление ВариантыОформленияЗакупок).

Если данные переносились из старых конфигураций (например, 1С:Комплексная автоматизация 1.1) или загружались сторонней обработкой обмена, данный реквизит в существующих договорах остается пустым (Неопределено или пустая ссылка).

Из-за незаполненного реквизита происходят следующие сбои:

  1. При попытке перевыбрать договор в документе может возникать критическая ошибка вызова модуля объекта:
    
    {Документ.ПриобретениеТоваровУслуг.МодульОбъекта(232)}: Индекс находится за границами массива
    ХозяйственнаяОперация = ХозяйственныеОперацииДоговора[0];
    
    Это происходит потому, что логика программы не может определить допустимые хозяйственные операции для договора с неопределенным вариантом закупки.
  2. Процедура ИнициализироватьДанныеДокумента() в модуле объекта при формировании наборов записей регистров накопления просто пропускает генерацию движений по товарному учету, так как система считает, что финансовый документ оформляется отдельно от складского приема или закупка выполняется по специальной схеме.

Способ решения проблемы с договорами

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

  1. Визуальная проверка: В интерфейсе реквизит может казаться заполненным или вовсе отсутствовать на форме. Настоятельно рекомендуется проверить реквизиты объекта через консоль запросов или групповое изменение реквизитов.
  2. Установка значения по умолчанию: Для всех договоров, перенесенных из старых систем, необходимо установить реквизит ВариантОформленияЗакупок в значение Не разделять закупку по договорам (или Закупка по документам / Пречисление.ВариантыОформленияЗакупок.НеРазделять в зависимости от нужной бизнес-логики).
  3. Перепроведение документов: После обновления договоров необходимо отменить проведение и заново провести проблемные документы Приобретение товаров и услуг. Движения по регистрам Товары на складах и Свободные остатки начнут формироваться корректно.

Причина 2. Ордерный учет и схемы «Товары в пути»

Если реквизиты договора заполнены корректно, однако движений по складам все равно нет, проанализируем настройки склада и логику закупки:

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

Особенности работы с файлами в серверном режиме (ошибка «Каталог не обнаружен»)

При отладке и диагностике метаданных через внешние обработки (например, MD83Exp.epf для 1С:Конвертации данных) разработчики часто сталкиваются с ошибкой при попытке сохранить файл на сервере:


{ВнешняяОбработка.ВыгрузкаМетаданных.МодульОбъекта(44)}: Ошибка при вызове метода контекста (ОткрытьФайл)
мЗаписьXML.ОткрытьФайл(ИмяФайлаВыгрузки, "UTF-8");
по причине:
Ошибка при выполнении файловой операции '\\ИмяСервера\Каталог\ИмяФайла.xml'

Выясним причину такого поведения 1С:Предприятия:

  1. При запуске кода на сервере контекст исполнения переходит к службе сервера 1С (обычно под пользователем USR1CV83).
  2. Локальные диски клиента (например, C:\ или D:\) на сервере не существуют или указывают на локальные диски самого сервера.
  3. Сетевые папки (`\\Server\Share`) недоступны службе сервера 1С, если у пользователя Windows, от имени которого запущен сервер, нет прав на чтение и запись в эту сетевую шару.

Для корректной работы с файлами на сервере следует использовать временный каталог сервера или механизм временного хранилища:


// Формирование файла во временном каталоге сервера
ИмяВременногоФайла = КаталогВременныхФайлов() + "ExportMetadata.xml";
мЗаписьXML = Новый ЗаписьXML;
мЗаписьXML.ОткрытьФайл(ИмяВременногоФайла, "UTF-8");
// ... запись данных XML ...
мЗаписьXML.Закрыть();

// Передача файла на клиент через временное хранилище
АдресХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла));

На клиенте файл принимается из временного хранилища методом ПолучитьИзВременногоХранилища() и сохраняется в каталог, выбранный пользователем.

← На главную