Поступила недавно от нашего бухгалтера такая задача : "При выполнении регламентной операции за декабрь 2020 года - "Расчет резервов по сомнительным долгам" по одной из организаций в графе "Сумма уменьшения на встречную задолженность перед контрагентом" не верно рассчитывается сумма и в итоге весь расчет не верный"
Приложила Анализ субконто по этому контрагенту, в котором видим Кредиторку по 60.01(4 415 812,87) и Дебиторку по 76.02 и 76.06 (65 234 + 1 014 810) . И справку-расчет по резервам в котором указана что сумма уменьшения встречной задолженности = 3 335 768, 87 Что путем нехитрых манипуляций на калькуляторе как раз и получается если из Кредиторки 60 счета вычесть Дебиторку 76 счета. В то же время видим по справке-расчету, что Дебиторка по 76 счету уже учтена и перекрыта.
В общем пришлось лезть в расчет данного показателя и он был обнаружен в общем модуле РезервыПоСомнительнымДолгам Функция ДанныеВстречнойЗадолженности(ОтчетнаяДата, МенеджерВременныхТаблиц)
Функция ДанныеВстречнойЗадолженности
// Получает из информационной базы данные по встречной (кредиторской) задолженности перед контрагентами.
// Данные используются для расчета резервов.
// Ст. 266 НК РФ (с 01.01.2017):
// При наличии у налогоплательщика перед контрагентом встречного обязательства (кредиторской задолженности)
// сомнительным долгом признается соответствующая задолженность перед налогоплательщиком в той части,
// которая превышает указанную кредиторскую задолженность налогоплательщика перед этим контрагентом.
//
// Параметры:
// ОтчетнаяДата - Дата - дата, на которую начисляется резерв. Обычно первое число месяца.
// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - содержит временные таблицы, используемые для отбора данных.
//
// Возвращаемое значение:
// ВыборкаИзРезультатаЗапроса
//
Функция ДанныеВстречнойЗадолженности(ОтчетнаяДата, МенеджерВременныхТаблиц)
// Определим счета расчетов.
// Кредиторская задолженность перед контрагентами может числиться как:
// - задолженность перед поставщиками на 60-х счетах
// - авансы покупателей на счетах 62.02
// - прочая задолженность перед поставщиками и покупателями
// - задолженность по полученным кредитам и займам
// Выбирается только кредиторская задолженность, номинированная в рублях.
// Отбираются счета
// - 60 (за исключением 60.02)
// - 62.02
// - 66
// - 67
// - 76.02
// - 76.05
// - 76.06
// - 76.09
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Хозрасчетный.Ссылка КАК Счет
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Ссылка В ИЕРАРХИИ
| (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками),
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным),
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоКраткосрочнымКредитамИЗаймам),
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоДолгосрочнымКредитамИЗаймам),
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоПретензиям),
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПрочимиПоставщикамиИПодрядчиками),
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПрочимиПокупателямиИЗаказчиками),
| ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами))
| И НЕ Хозрасчетный.Ссылка В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданным))
| И НЕ Хозрасчетный.Валютный";
СчетаРасчетов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Счет");
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
// Получение данных о дебиторской задолженности.
Запрос.УстановитьПараметр("ОтчетнаяДата", ОтчетнаяДата);
Запрос.УстановитьПараметр("СчетаРасчетов", СчетаРасчетов);
Запрос.Текст =
"ВЫБРАТЬ
| Задолженность.Организация КАК Организация,
| Задолженность.Субконто1 КАК Контрагент,
| СУММА(ЕСТЬNULL(Задолженность.СуммаОстатокКт, 0)) КАК Задолженность,
| СУММА(ЕСТЬNULL(Задолженность.СуммаНУОстатокКт, 0)) КАК ЗадолженностьНУ
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(
| &ОтчетнаяДата,
| Счет В (&СчетаРасчетов),
| ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты),
| (Организация, Субконто1) В
| (ВЫБРАТЬ
| Контрагенты.Организация,
| Контрагенты.Контрагент
| ИЗ
| Контрагенты КАК Контрагенты)) КАК Задолженность
|ГДЕ
| Задолженность.СуммаОстатокКт > 0
|
|СГРУППИРОВАТЬ ПО
| Задолженность.Организация,
| Задолженность.Субконто1
|
|УПОРЯДОЧИТЬ ПО
| Организация,
| Контрагент";
Возврат Запрос.Выполнить().Выбрать();
КонецФункции
Начинаем ловить данные второго запроса по интересующему нас контрагенту и получаем сумму 3 335 768, 87 руб. При этом изучаю более детально запрос №2 и вижу что есть условие ГДЕ Задолженность.СуммаОстатокКт > 0
Как так ? у нас Кредитовый остаток на конец года только по 60.01 счету, по счету 76.02 и 76.06 только Дебетовый остаток. Копирую текст второго запрос в консоль запросов и начинаю с ним экспериментировать.
Перечислил в нем свои счета, контрагента, период получения остатков (да он именно 01.01.2021 00-00-00 передается) , результат такой же 3 335 768,87
Добавляю в выбираемые параметры Счет и картина меняется, у нас нужная сумма в результате запроса
Пробую дальше, добавляю к счету ОстатокДТ и убираю условие по остатку и видим что все суммы на своих местах
Почему же тогда исходный запрос дает свернутый результат ???? Ответа у меня к сожалению нет. Пришлось запилить расширение, и поместить в него данную функцию &ИзменениеИКонтроль("ДанныеВстречнойЗадолженности")
с измененным запросом в котором выбирается еще и счет.
В результате перепроведя регламентную операцию получаем верные цифры в справке-расчете резервов по сомнительным долгам
Бухгалтер счастлива, поставленная задача выполнена.
Но вопросы остались... то ли это косяк в нашей базе с виртуальной таблицей остатков, то ли это баг 1С.
Конфигурация БП 3.0.87.28, Платформа 1С:Предприятие 8.3 (8.3.18.1208)
Может кто знает ответ, буду рад услышать. Или есть желающие повторить подобный вариант цифр на счетах в своей базе и сообщить результат.