Как в 1С:Бухгалтерия 3.0 запросом получить проданные товары и материалы из регистра бухгалтерии

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

При разработке отчетов и аналитических выборок в конфигурации 1С:Бухгалтерия предприятия 3.0 часто возникает задача извлечь данные по реализованным за период позициям номенклатуры — товарам и материалам. Рассмотрим, как правильно составить запрос к регистру бухгалтерии Хозрасчетный, какие виртуальные таблицы и параметры использовать, а также разберем важные методологические особенности учета.

Особенности отражения продаж в бухгалтерском учете

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

  1. Товары учитываются на счете 41 (включая его субсчета, например, 41.01, 41.02). При продаже товаров их учетная стоимость списывается в дебет счета 90.02 («Себестоимость продаж») с кредита счета 41.
  2. Материалы учитываются на счете 10 (субсчета 10.01, 10.06 и др.). При реализации материалов на сторону списание себестоимости обычно оформляется проводкой в дебет счета 91.02 («Прочие расходы») с кредита счета 10.

Таким образом, для получения себестоимости и количества списанных при продаже позиций нам необходимы проводки с кредитом счетов 10, 41 и дебетом счетов 90.02, 91.02.

Построение оптимального запроса к таблице ОборотыДтКт

Для выборки данных по корреспонденциям счетов в платформе 1С:Предприятие предназначена виртуальная таблица РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт. Разберем по шагам, как настроить параметры этой таблицы, чтобы запрос работал максимально быстро и корректно.

Отбор по счетам необходимо накладывать строго в параметрах виртуальной таблицы, а не в секции ГДЕ. Конструкция В ИЕРАРХИИ позволяет перечислить несколько счетов через запятую непосредственно в тексте запроса либо передать список значений через параметр.

Посмотрим на готовый пример текста запроса:


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

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


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

СчетаРасходов = Новый СписокЗначений;
СчетаРасходов.Добавить(ПланыСчетов.Хозрасчетный.СебестоимостьПродаж);
СчетаРасходов.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеРасходы);

СчетаЗапасов = Новый СписокЗначений;
СчетаЗапасов.Добавить(ПланыСчетов.Хозрасчетный.Товары);
СчетаЗапасов.Добавить(ПланыСчетов.Хозрасчетный.Материалы);

Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(ПериодС));
Запрос.УстановитьПараметр("КонецПериода", КонецДня(ПериодПо));
Запрос.УстановитьПараметр("СчетаРасходов", СчетаРасходов);
Запрос.УстановитьПараметр("СчетаЗапасов", СчетаЗапасов);

Результат = Запрос.Выполнить();

Важные методологические и технические нюансы

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

  1. Себестоимость против Выручки: По проводкам Дт 90.02 (91.02) — Кт 41 (10) списывается исключительно себестоимость запасов. На счетах 90.01 («Выручка») и 90.02 субконто Номенклатура в типовой конфигурации не ведется (аналитика представлена видами «Номенклатурные группы» и «Ставки НДС»). Поэтому получить продажную стоимость (выручку) в разрезе конкретных позиций номенклатуры только из регистра бухгалтерии невозможно. Для выручки по номенклатуре следует обращаться к табличным частям документов реализации или регистру накопления НДСПродажи.
  2. Исключение регламентных операций: При закрытии месяца документ Регламентная операция с типом «Корректировка стоимости номенклатуры» доначисляет или сторнирует суммы по проводкам списания (без изменения количества), приводя среднюю скользящую оценку к средневзвешенной. Если исключить эти документы через фильтр по регистратору, итоговая себестоимость проданных товаров окажется недостоверной.
  3. Ошибки фильтрации по регистратору: Наложение условий вида ГДЕ НЕ Регистратор ССЫЛКА ... в секции ГДЕ запроса ухудшает производительность, так как СУБД вынуждена соединять таблицы всех видов документов и выполнять полное сканирование. Корректная фильтрация по счетам дебета и кредита автоматически отсекает лишние хозяйственные операции (производство, внутреннее перемещение и др.) без необходимости ручного исключения типов документов.
  4. Учет возвратов: Возвраты товаров от покупателей отражаются сторнирующими записями по дебету 90.02 и кредиту 41 с отрицательными значениями сумм и количества, что позволяет автоматически уменьшать оборот реализации на величину возвращенных позиций.
← На главную