Как объединить проводки БУ и НУ в одном запросе в 1С:Комплексная автоматизация 1.1?

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

При разработке отчетов в конфигурации «1С:Комплексная автоматизация 1.1» (а также в аналогичной ей «1С:Управление производственным предприятием 1.3») разработчики часто сталкиваются с задачей вывода проводок бухгалтерского (БУ) и налогового (НУ) учета в одной строке отчета. Подобное представление является стандартным для конфигураций линейки «1С:Бухгалтерия», однако архитектура КА 1.1 имеет свои существенные особенности.

Попытка соединить движения двух регистров бухгалтерии напрямую по номеру строки в запросе обречена на неудачу. Количество проводок в налоговом учете, как правило, меньше, чем в бухгалтерском (например, операции по удержанию алиментов на счете 76 вообще не отражаются в НУ). Из-за этого нумерация строк в регистрах Хозрасчетный и Налоговый не совпадает.

В этой статье мы подробно разберем два эффективных способа решения этой задачи: простой (через табличную часть документа-первоисточника) и универсальный (через левое соединение регистров бухгалтерии с использованием правил соответствия счетов).

---

Способ 1. Запрос к табличной части документа (Рекомендуемый и самый простой)

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

Разработчики фирмы «1С» уже позаботились о сопоставлении БУ и НУ на этапе формирования документа. Вся информация по проводкам хранится в одной строке табличной части ОтражениеВУчете. Проанализируем структуру этой табличной части. В ней одновременно присутствуют реквизиты:

Рассмотрим пример запроса, который выбирает эти данные в удобном для отчета виде:


ВЫБРАТЬ
	ОтражениеВУчете.Ссылка КАК ДокументРегистратор,
	ОтражениеВУчете.НомерСтроки КАК НомерСтроки,
	
	// Данные бухгалтерского учета
	ОтражениеВУчете.СчетДт КАК СчетДтБУ,
	ОтражениеВУчете.СубконтоДт1 КАК СубконтоДт1БУ,
	ОтражениеВУчете.СубконтоДт2 КАК СубконтоДт2БУ,
	ОтражениеВУчете.СчетКт КАК СчетКтБУ,
	ОтражениеВУчете.СубконтоКт1 КАК СубконтоКт1БУ,
	ОтражениеВУчете.СубконтоКт2 КАК СубконтоКт2БУ,
	ОтражениеВУчете.Сумма КАК СуммаБУ,
	
	// Данные налогового учета
	ОтражениеВУчете.СчетДтНУ КАК СчетДтНУ,
	ОтражениеВУчете.СубконтоДтНУ1 КАК СубконтоДтНУ1,
	ОтражениеВУчете.СчетКтНУ КАК СчетКтНУ,
	ОтражениеВУчете.СубконтоКтНУ1 КАК СубконтоКтНУ1,
	ОтражениеВУчете.СуммаНУ КАК СуммаНУ,
	
	// Разницы по ПБУ 18/02
	ОтражениеВУчете.СуммаПР КАК СуммаПР,
	ОтражениеВУчете.СуммаВР КАК СуммаВР
ИЗ
	Документ.ОтражениеЗарплатыВРеглУчете.ОтражениеВУчете КАК ОтражениеВУчете
ГДЕ
	ОтражениеВУчете.Ссылка = &СсылкаНаДокумент

Преимущества данного подхода:

  1. Простота и быстродействие: Запрос выполняется мгновенно, так как обращается к одной физической таблице базы данных без сложных соединений.
  2. Идеальное сопоставление: Строки БУ и НУ сопоставлены алгоритмами заполнения документа, что исключает ошибки дублирования или потери данных.
  3. Полнота информации: В одном месте собраны данные бухгалтерского учета, налогового учета и разниц по ПБУ 18/02.

---

Способ 2. Левое соединение регистров БУ и НУ в запросе

Бывают ситуации, когда данные нужно получить непосредственно из движений регистров бухгалтерии. Например, если пользователи делают ручные корректировки движений (проводки созданы операцией вручную) или если отчет должен строиться в целом по периоду без привязки к конкретным документам отражения зарплаты.

Для реализации этого сценария мы должны использовать ЛЕВОЕ СОЕДИНЕНИЕ, где ведущей (левой) таблицей будет выступать регистр РегистрБухгалтерии.Хозрасчетный, а присоединяемой (правой) — РегистрБухгалтерии.Налоговый.

Выясним, по каким правилам и полям необходимо связывать эти таблицы, чтобы избежать дублирования строк ("картезианского произведения"):

  1. По регистратору: Связь по полю Регистратор гарантирует, что мы сопоставляем движения в рамках одного и того же хозяйственного документа.
  2. По правилам соответствия счетов: Напрямую сопоставить счет БУ со счетом НУ нельзя, так как используются разные планы счетов. Для связи необходимо использовать регистр сведений СоответствиеСчетовБУиНУ.
  3. По аналитике (субконто): Чтобы сопоставить проводки по одинаковым счетам внутри одного документа (например, при начислении зарплаты разным сотрудникам на счет 70), необходимо связать субконто дебета и кредита БУ и НУ соответственно.
  4. По подразделениям: Если на счетах ведется учет по подразделениям, их также необходимо включить в условия связи.

Рассмотрим, как выглядит пример построения такого запроса с учетом сопоставления аналитик:


ВЫБРАТЬ
	ДвиженияБУ.Регистратор КАК Регистратор,
	ДвиженияБУ.НомерСтроки КАК НомерСтрокиБУ,
	ДвиженияБУ.СчетДт КАК СчетДтБУ,
	ДвиженияБУ.СчетКт КАК СчетКтБУ,
	ДвиженияБУ.Сумма КАК СуммаБУ,
	
	ЕСТЬNULL(ДвиженияНУ.СчетДт, ЗНАЧЕНИЕ(ПланСчетов.Налоговый.ПустаяСсылка)) КАК СчетДтНУ,
	ЕСТЬNULL(ДвиженияНУ.СчетКт, ЗНАЧЕНИЕ(ПланСчетов.Налоговый.ПустаяСсылка)) КАК СчетКтНУ,
	ЕСТЬNULL(ДвиженияНУ.Сумма, 0) КАК СуммаНУ
ИЗ
	РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(,, Регистратор = &Регистратор) КАК ДвиженияБУ
	
	ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Налоговый.ДвиженияССубконто(,, Регистратор = &Регистратор) КАК ДвиженияНУ
		ПО ДвиженияБУ.Регистратор = ДвиженияНУ.Регистратор
		// Условия соответствия счетов (упрощенно или через связи с регистром соответствия)
		И (ДвиженияБУ.ПодразделениеДт = ДвиженияНУ.ПодразделениеДт ИЛИ (ДвиженияБУ.ПодразделениеДт ЕСТЬ NULL И ДвиженияНУ.ПодразделениеДт ЕСТЬ NULL))
		И (ДвиженияБУ.ПодразделениеКт = ДвиженияНУ.ПодразделениеКт ИЛИ (ДвиженияБУ.ПодразделениеКт ЕСТЬ NULL И ДвиженияНУ.ПодразделениеКт ЕСТЬ NULL))
		// Связь по первому субконто дебета
		И (ДвиженияБУ.СубконтоДт1 = ДвиженияНУ.СубконтоДт1 ИЛИ (ДвиженияБУ.СубконтоДт1 ЕСТЬ NULL И ДвиженияНУ.СубконтоДт1 ЕСТЬ NULL))
		// Связь по первому субконто кредита
		И (ДвиженияБУ.СубконтоКт1 = ДвиженияНУ.СубконтоКт1 ИЛИ (ДвиженияБУ.СубконтоКт1 ЕСТЬ NULL И ДвиженияНУ.СубконтоКт1 ЕСТЬ NULL))

Важные нюансы при работе с левым соединением регистров:

Таким образом, выбор метода зависит от архитектуры вашей задачи. Для отчетов по конкретным документам начисления заработной платы идеальным решением будет Способ 1. Если же требуется построить обобщенный отчёт по проводкам из базы данных за произвольный период — используйте Способ 2 с левым соединением таблиц и обязательным контролем пустых значений.

← На главную