Как получить список неоплаченных реализаций в 1С:Бухгалтерия 2.0 с помощью запроса?

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

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

Архитектурные особенности взаиморасчетов в «1С:Бухгалтерия 2.0»

Для того чтобы правильно построить запрос, нам необходимо понять, где и в каком виде хранятся нужные сведения. Проанализируем ключевые особенности конфигурации:

  1. Отсутствие регистров накопления: Все расчеты с покупателями и заказчиками отражаются в регистре бухгалтерии Хозрасчетный. Основными счетами для учета расчетов являются 62.01 («Расчеты с покупателями и заказчиками») и 62.02 («Расчеты по авансам полученным»).
  2. Роль аналитики (субконто): Чтобы детализировать задолженность до конкретных первичных документов, используется предопределенный вид субконто — ДокументыРасчетовСКонтрагентами. Обычно это третье субконто на счетах расчетов (после контрагентов и договоров).
  3. Влияние настроек договора:
    • Если в договоре установлен вид расчетов «По договору в целом», программа при проведении документов все равно пытается автоматически распределить оплаты по накладным (по методу ФИФО) и заполняет третье субконто. Однако при нарушении последовательности проведения документов («задним числом») зачет авансов может нарушаться, из-за чего по одному договору могут одновременно висеть дебетовый остаток на 62.01 и кредитовый на 62.02.
    • Если в договоре выбран вид расчетов «По расчетным документам», пользователи заполняют конкретные документы отгрузки в платежных поручениях вручную, что также требует регулярного контроля корректности ввода.

Шаг 1. Проектирование запроса к остаткам счета 62.01

Выяснив, что все необходимые данные находятся в регистре бухгалтерии, мы можем обратиться к его виртуальной таблице остатков. Наша цель — получить положительный дебетовый остаток по счету 62.01 в разрезе третьего субконто, отфильтровав только документы реализации.

Рассмотрим структуру запроса, который решает эту задачу:


ВЫБРАТЬ
	ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
	ХозрасчетныйОстатки.Субконто2 КАК Договор,
	ХозрасчетныйОстатки.Субконто3 КАК ДокументРеализации,
	ХозрасчетныйОстатки.СуммаОстатокДт КАК СуммаДолга
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Остатки(
		&Период,
		Счет = &СчетРасчетов,
		&ВидыСубконто,
		Организация = &Организация
	) КАК ХозрасчетныйОстатки
ГДЕ
	ХозрасчетныйОстатки.Субконто3 ССЫЛКА Документ.РеализацияТоваровУслуг
	И ХозрасчетныйОстатки.СуммаОстатокДт > 0

Разберем параметры, которые необходимо передать в этот запрос при его выполнении на встроенном языке 1С:

  1. Период — дата, на которую мы хотим получить остатки неоплаченных накладных.
  2. СчетРасчетов — счет учета задолженности. Передаем значение ПланыСчетов.Хозрасчетный.Покупатели (счет 62.01).
  3. ВидыСубконто — массив, содержащий виды аналитики в строго определенном порядке: ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты, ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры, ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами. Ограничение виртуальной таблицы по видам субконто гарантирует правильное развертывание итогов по колонкам Субконто1, Субконто2, Субконто3.

Шаг 2. Обход проблемы «грязного» учета (зачет авансов)

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

Для решения этой проблемы в запросе рекомендуется получать свернутый остаток по контрагенту и договору, объединяя счета 62.01 и 62.02, либо программно распределять имеющийся аванс по неоплаченным реализациям в коде обработки результата запроса по методу ФИФО. Проанализируем вариант запроса, который собирает общую задолженность с учетом возможных авансов:


ВЫБРАТЬ
	Взаиморасчеты.Субконто1 КАК Контрагент,
	Взаиморасчеты.Субконто2 КАК Договор,
	Взаиморасчеты.Субконто3 КАК ДокументРеализации,
	ВЫБОР
		КОГДА Взаиморасчеты.Счет = &СчетРасчетов КАК СуммаДебет
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаДолга,
	ВЫБОР
		КОГДА Взаиморасчеты.Счет = &СчетАвансов КАК СуммаКредит
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаАванса
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Остатки(
		&Период,
		Счет В (&МассивСчетов),
		&ВидыСубконто,
		Организация = &Организация
	) КАК Взаиморасчеты

В параметре &МассивСчетов мы передаем список, состоящий из счетов 62.01 и 62.02. После выполнения такого запроса мы сможем программно уменьшить сумму долга по накладным на сумму общего аванса по договору.

Возможные ограничения и риски

При использовании запросов к третьему субконто необходимо учитывать настройки конкретной информационной базы:

Альтернативные и стандартные способы решения

Если вам не требуется интеграция этой логики в ваш программный код, обратите внимание на стандартные инструменты 1С:Бухгалтерии 2.0:

← На главную