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