Почему в 1С 7.7 документ Поступление (импорт) делает движения по регистру партий с нулевым количеством и отрицательной суммой

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При работе с конфигурацией «Торговля и Склад» (ТиС) версии 7.7 программисты часто сталкиваются с ситуацией, когда при анализе движений регистра ПартииНаличие обнаруживаются странные записи. Эти записи имеют вид прихода с нулевым количеством, но при этом содержат определенную сумму (часто отрицательную). В данной статье мы подробно разберем, почему это происходит, как это реализовано в коде и на какие механизмы платформы это опирается.

Природа «нулевых» движений в регистре партий

Для начала проанализируем ситуацию: регистр ПартииНаличие предназначен для учета остатков товаров в разрезе партий и их стоимости. Казалось бы, любое движение по этому регистру должно изменять количество товара. Однако в учете существуют операции, которые влияют только на себестоимость, не изменяя физический остаток. В 1С 7.7 это реализуется через движения с Количество = 0.

Рассмотрим основные причины появления таких движений в документе «Поступление (импорт)»:

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

Разбор механизма распределения таможенных платежей

Давайте изучим фрагмент кода, который отвечает за оприходование дополнительных расходов (сборов и пошлин) в документе импорта. Как правило, это происходит в модуле документа или в глобальном модуле в процедуре проведения.

Проанализируем пример кода, где происходит начисление таможенного сбора:


// Отразим таможенные сборы и пошлины
РегПартии = Регистр.ПартииНаличие;
ТаблицаДокумента.ВыбратьСтроки();
Пока ТаблицаДокумента.ПолучитьСтроку() = 1 Цикл
    // Пропускаем услуги, работаем только с ТМЦ
    
    // Заполняем измерения регистра (Фирма, Номенклатура, Партия)
    РегПартии.Фирма = Фирма;
    РегПартии.Номенклатура = ТаблицаДокумента.Номенклатура;
    РегПартии.Партия = ТаблицаДокумента.Партия;
    
    // Ключевой момент: обнуление количества для корректировки суммы
    РегПартии.Количество = 0; 
    
    // Рассчитываем сумму корректировки (пошлина + сбор + НДС, если включен)
    РегПартии.СуммаРуб = ТаблицаДокумента.СуммаПошлиныРуб + ТекСуммаСбора;
    РегПартии.СуммаБезНДС = ТаблицаДокумента.СуммаПошлиныРуб + ТекСуммаСбора;
    
    // Указываем код операции для отчетов
    РегПартии.КодОперации = глКО.ТаможенныеПлатежи;
    
    // Выполняем движение
    РегПартии.ДвижениеПриходВыполнить();
КонецЦикла;

В данном примере мы видим, что РегПартии.Количество = 0 устанавливается явно. Это позволяет системе увеличить (или уменьшить) общую стоимость партии в рублях, при этом количество товара на складе остается неизменным. Если бы мы указали количество, программа «раздула» бы остатки товара, что привело бы к ошибкам в инвентаризации.

Корректировка по авансам и валютные разницы

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

Рассмотрим алгоритм работы системы в этом случае:

  1. Документ «Поступление (импорт)» делает первичный приход товара по курсу, действующему на дату документа. Это необходимо для первичного формирования партии.
  2. Затем вызывается процедура СкорректироватьДвиженияПартийПоАвансам(Конт).
  3. Система анализирует остатки по счету или регистру взаиморасчетов. Если обнаружен аванс, вычисляется разница между курсом на дату аванса и курсом в документе поступления.
  4. Если курс на дату аванса был ниже курса поступления, возникает положительная разница в рублях, которую нужно «убрать» из себестоимости, чтобы привести её к курсу аванса.
  5. Формируется движение «Приход» с отрицательной суммой и нулевым количеством.

Для записи таких корректировок часто используется универсальная процедура глЗаписатьДвиженияРегистраПартийПоТаблице(ТаблицаКорректировкиПартий, Конт). Она берет подготовленную таблицу значений, в которой уже рассчитаны все «хвосты» и дельты, и транслирует их в регистр.

Почему это сложно отловить в отладчике?

Многие программисты пытаются найти эти движения в процедуре ПроведениеПоРегистрам() самого документа, но часто терпят неудачу. Это связано со структурой типовой конфигурации:

Чтобы отловить такие движения, рекомендуется установить точку останова в глобальном модуле, в процедуре глЗаписатьДвиженияРегистраПартийПоТаблице или искать в модуле документа вызов функции глПогашениеЗадолженности, так как именно она инициирует расчет курсовых разниц, влияющих на партии.

Влияние на отчетность и итоги

Проанализируем, как эти движения выглядят в отчетах. Если мы откроем отчет «Ведомость по партиям ТМЦ», мы увидим, что по одной и той же партии может быть несколько строк прихода. Одна строка — с количеством и основной суммой, а остальные — только с суммами.

Важный технический нюанс: при списании товара (документ «Реализация» или «Списание ТМЦ») система 1С 7.7 автоматически учитывает эти корректировки. При расчете себестоимости списания программа берет СуммаОстаток / КоличествоОстаток. Поскольку «нулевые» движения изменили СуммаОстаток, цена списания будет рассчитана корректно, с учетом всех доп. расходов и курсовых разниц.

Таким образом, «непонятные движения» являются штатной работой механизма партионного учета ТиС 7.7, обеспечивающего точное соблюдение методологии учета себестоимости импортных товаров.

← На главную