В конфигурации "Управление производственным предприятием" (УПП 1.3) при использовании режима РАУЗ (Расширенная аналитика учета затрат) часто возникает задача сверки данных между контуром учета затрат и стандартным бухгалтерским учетом. Данные в этих регистрах могут расходиться из-за ручных операций, особенностей закрытия месяца или ошибок в последовательности проведения документов.
Разберем подробно, как программно соединить регистр накопления УчетЗатратРегл и регистр бухгалтерии Хозрасчетный, учитывая специфику хранения аналитики в УПП.
Главная сложность заключается в том, что регистр накопления УчетЗатратРегл (как и управленческий УчетЗатрат) не содержит привычных измерений, таких как "Номенклатура", "Склад" или "Счет учета". Вместо этого используются ссылочные ключи аналитики.
Чтобы получить понятные данные, нам необходимо соединить таблицу остатков регистра накопления с двумя регистрами сведений:
Сначала сформируем запрос к регистру накопления, расшифровав ключи аналитики. Мы будем использовать временную таблицу для дальнейшего соединения. Обратите внимание на соединение по полям Ссылка регистров сведений.
ВЫБРАТЬ
РегистрАналитикаВидаУчета.Склад КАК Склад,
РегистрАналитикаУчетаЗатрат.Затрата КАК Номенклатура,
РегистрАналитикаВидаУчета.СчетУчета КАК СчетУчета,
УчетЗатратРеглОстатки.КоличествоОстаток КАК КоличествоРАУЗ,
УчетЗатратРеглОстатки.СтоимостьОстаток КАК СуммаРАУЗ
ПОМЕСТИТЬ ВТ_ДанныеРАУЗ
ИЗ
РегистрНакопления.УчетЗатратРегл.Остатки(&Период, ) КАК УчетЗатратРеглОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК РегистрАналитикаВидаУчета
ПО УчетЗатратРеглОстатки.АналитикаВидаУчета = РегистрАналитикаВидаУчета.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК РегистрАналитикаУчетаЗатрат
ПО УчетЗатратРеглОстатки.АналитикаУчетаЗатрат = РегистрАналитикаУчетаЗатрат.Ссылка
ГДЕ
РегистрАналитикаВидаУчета.РазделУчета = ЗНАЧЕНИЕ(Перечисление.РазделыУчета.МПЗ)
И РегистрАналитикаВидаУчета.Склад = &ВыбСклад
И РегистрАналитикаВидаУчета.СчетУчета = &ВыбСчет
;
Важные моменты:
РазделУчета = МПЗ, чтобы исключить затраты и незавершенное производство, оставив только товарно-материальные ценности.Затрата в аналитике имеет составной тип, поэтому при необходимости можно добавить ВЫРАЗИТЬ(....Затрата КАК Справочник.Номенклатура).Теперь получим данные бухгалтерского учета. Здесь важно помнить, что аналитика (Субконто) хранится в полях Субконто1, Субконто2 и т.д. Порядок субконто зависит от настроек Плана счетов. Для большинства счетов учета ТМЦ (10, 41, 43) обычно Номенклатура — это Субконто1, а Склад — Субконто2 (или наоборот, нужно проверять настройки конкретной базы).
ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто2 КАК Склад, -- Предполагаем, что Склад это Субконто2
ХозрасчетныйОстатки.Субконто1 КАК Номенклатура, -- А Номенклатура это Субконто1
ХозрасчетныйОстатки.КоличествоОстаток КАК КоличествоБУ,
ХозрасчетныйОстатки.СуммаОстаток КАК СуммаБУ
ПОМЕСТИТЬ ВТ_ДанныеБУ
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &ВыбСчет, ,
Субконто2 = &ВыбСклад) КАК ХозрасчетныйОстатки
;
Самая распространенная ошибка при сверке — использование ЛЕВОЕ СОЕДИНЕНИЕ одной таблицы к другой. Если товара нет в РАУЗ, но он есть в БУ (например, введен "Операцией вручную"), левое соединение не покажет эту разницу.
Наиболее надежный и производительный способ в 1С — использовать объединение запросов (метод ОБЪЕДИНИТЬ ВСЕ) с инверсией знака для одной из таблиц. Затем мы сгруппируем данные и оставим только те строки, где итоговая сумма не равна нулю.
Сформируем итоговый запрос, объединяющий две временные таблицы:
ВЫБРАТЬ
СводнаяТаблица.Склад,
СводнаяТаблица.Номенклатура,
СУММА(СводнаяТаблица.КоличествоРАУЗ) КАК КоличествоРАУЗ,
СУММА(СводнаяТаблица.СуммаРАУЗ) КАК СуммаРАУЗ,
СУММА(СводнаяТаблица.КоличествоБУ) КАК КоличествоБУ,
СУММА(СводнаяТаблица.СуммаБУ) КАК СуммаБУ,
СУММА(СводнаяТаблица.КоличествоРАУЗ - СводнаяТаблица.КоличествоБУ) КАК РазницаКоличество,
СУММА(СводнаяТаблица.СуммаРАУЗ - СводнаяТаблица.СуммаБУ) КАК РазницаСумма
ИЗ
(
-- Выбираем данные РАУЗ
ВЫБРАТЬ
Т1.Склад,
Т1.Номенклатура,
Т1.КоличествоРАУЗ,
Т1.СуммаРАУЗ,
0 КАК КоличествоБУ,
0 КАК СуммаБУ
ИЗ
ВТ_ДанныеРАУЗ КАК Т1
ОБЪЕДИНИТЬ ВСЕ
-- Выбираем данные БУ
ВЫБРАТЬ
Т2.Склад,
Т2.Номенклатура,
0,
0,
Т2.КоличествоБУ,
Т2.СуммаБУ
ИЗ
ВТ_ДанныеБУ КАК Т2
) КАК СводнаяТаблица
СГРУППИРОВАТЬ ПО
СводнаяТаблица.Склад,
СводнаяТаблица.Номенклатура
ИМЕЮЩИЕ
(СУММА(СводнаяТаблица.КоличествоРАУЗ - СводнаяТаблица.КоличествоБУ) <> 0
ИЛИ СУММА(СводнаяТаблица.СуммаРАУЗ - СводнаяТаблица.СуммаБУ) <> 0)
Если запрос показал данные, проанализируем возможные причины:
УчетЗатратРегл. В УПП следует избегать ручных операций по счетам учета МПЗ.Стоимость может включать или не включать НДС в зависимости от настроек учетной политики ("Оценка МПЗ при выбытии"). Проверьте, корректно ли вы сравниваете суммы.