Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 сен 2021, 15:34

Подсчет конечной суммы с ошибкой в отчете "дебиторы"

Автор Stanislav Gareev, 08 авг 2019, 09:40

0 Пользователей и 1 гость просматривают эту тему.

Stanislav Gareev

Здравствуйте, такая проблема, в сформированном отчете по дебитором перечисляются контрагенты. В столбцах "Задолженность" и "В т.ч просроченная " конечная сумма выводиться с ошибкой. Я отдельно подсчитал всех контрагентов, сумма отличается. Подскажите как исправить, ошибку в коде не нахожу. В сообщении прикладываю, сылку на скриншот макета, а так же полный код. Готов предоставлять по вашим запросам дополнительную информацию.
https://yadi.sk/i/Lgmz-JQFuuFh-Q

Процедура ДебиторыНаСервере()
Таб.Очистить();

// Арсансофт Идиятуллина 20190725 (
СписокСчетов = Новый Массив;
Для Каждого СтрокаСчета Из Отчет.СчетаРасчетов Цикл
Если ЗначениеЗаполнено(СтрокаСчета.Счет) Тогда
СписокСчетов.Добавить(СтрокаСчета.Счет);
КонецЕсли;
КонецЦикла;

Если СписокСчетов.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru='Не задан список счетов.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , "Объект.СчетаРасчетов");
Возврат;
КонецЕсли;

СписокДебиторов = Новый Массив();
Для Каждого Строка Из Отчет.СписокДебиторов Цикл
Если ЗначениеЗаполнено(Строка.Контрагент) Тогда
СписокДебиторов.Добавить(Строка.Контрагент);
КонецЕсли;
КонецЦикла;

Если НЕ Отчет.ПоВсемКонтрагентам И СписокДебиторов.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru='Не задан список дебиторов.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , "Объект.СписокДебиторов");
Возврат;
КонецЕсли;
// Арсансофт Идиятуллина 20190725 )

Запрос = Новый Запрос;
Если НЕ Отчет.ПоВсемКонтрагентам Тогда
//если Отчет.Контрагент.Значение.ЭтоГруппа тогда
усл0 = " и  ХозрасчетныйОстаткиИОбороты.Субконто1 в иерархии(&Контрагент)  ";
//иначе
// усл0 = " и  ХозрасчетныйОстаткиИОбороты.Субконто1 = &Контрагент  ";
//конецЕсли;
Запрос.УстановитьПараметр("Контрагент", СписокДебиторов);
КонецЕсли;
Если ЗначениеЗаполнено(Отчет.Ответственный) Тогда
Усл = "и  ХозрасчетныйОстаткиИОбороты.Субконто3.Ответственный = &Отв ";
Запрос.УстановитьПараметр("Отв",Отчет.Ответственный);
КонецЕсли;
    Если ЗначениеЗаполнено(Отчет.ГО) тогда
Если Отчет.Без = Истина тогда
УсГО = " и  ХозрасчетныйОстаткиИОбороты.Субконто1.ГоловнойКонтрагент <> &Наименование";
иначе
усГО = "и  ХозрасчетныйОстаткиИОбороты.Субконто1.ГоловнойКонтрагент = &Наименование ";
КонецЕсли;
Иначе
усГО = "";
КонецЕсли;
    Запрос.УстановитьПараметр("Наименование",Отчет.ГО);
        Запрос.Текст = "ВЫБРАТЬ
                       | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
                       | ХозрасчетныйОстаткиИОбороты.Субконто1.НаименованиеПолное КАК Субконто1Наименование,
                       | ХозрасчетныйОстаткиИОбороты.Субконто1.ИНН КАК ИНН,    
                       | ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
                       | ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СНД,
                       | ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК ДО,
                       | ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК КО,
                       | ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СКД,
   |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СКК,
                       | ВЫБОР
                       | КОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт - ХозрасчетныйОстаткиИОбороты.СуммаОборотДт > 0
                       | ТОГДА ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт - ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
                       | ИНАЧЕ 0
                       | КОНЕЦ КАК Просроченная
                       |ИЗ
                       | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Счет В (&СписокСчетов), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
                       |ГДЕ
                       | (ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт <> 0 ИЛИ ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт<>0)
   |    "+усл0+"
       |    "+усГО+"
       |    "+Усл+"
                       |"
   ;
   Если Элементы.СортировкаНаименование=0 Тогда
   Запрос.Текст=Запрос.Текст+"   
   |УПОРЯДОЧИТЬ ПО
   | Субконто1Наименование
   |ИТОГИ
   | СУММА(СНД),
   | СУММА(ДО),
   | СУММА(КО),
   | СУММА(СКД),
   | СУММА(Просроченная)
   |ПО
   | ОБЩИЕ,
   | Субконто1";
   Иначе
   Запрос.Текст=Запрос.Текст+"   
   |УПОРЯДОЧИТЬ ПО
   | СКД УБЫВ
   |ИТОГИ
   | СУММА(СНД),
   | СУММА(ДО),
   | СУММА(КО),
   | СУММА(СКД),
   | СУММА(Просроченная)
   |ПО
   | ОБЩИЕ,
   | Субконто1";
   
   КонецЕсли;

ДатаНач = ДобавитьМесяц(Отчет.ДатаОтчета, -Отчет.ГлубинаАнализа);
Запрос.УстановитьПараметр("ДатаНач", НачалоМесяца(ДатаНач));
Запрос.УстановитьПараметр("ДатаКон", КонецМесяца(Отчет.ДатаОтчета));
Запрос.УстановитьПараметр("Организация", Отчет.Организация);

Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
Макет = ОтчетОбъект.ПолучитьМакет("МакетД");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
Если Отчет.Расшифровать Тогда
ОбластьКонтрагент = Макет.ПолучитьОбласть("СтрокаКонтрагент2");
Иначе
ОбластьКонтрагент = Макет.ПолучитьОбласть("СтрокаКонтрагент");
КонецЕсли;
ОбластьДоговор = Макет.ПолучитьОбласть("СтрокаДоговор");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьЗаголовок.Параметры.Организация = Отчет.Организация.НаименованиеПолное;
ОбластьЗаголовок.Параметры.ДатаОтчета = Формат(Отчет.ДатаОтчета, "ДЛФ=DD");
ОбластьЗаголовок.Параметры.ГлубинаАнализа = Отчет.ГлубинаАнализа;
Таб.Вывести(ОбластьЗаголовок);
Таб.Вывести(ОбластьШапка);
ОбластьИтогов = Макет.ПолучитьОбласть("ОбластьИтогов");
НПП = 0;
СуммаКредит = 0;
СуммаДебет  = 0;
СуммаПросроченная = 0;
Пока Выборка.Следующий() Цикл
ОбластьПодвал.Параметры.Заполнить(Выборка);
ВыборкаКонтрагент = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаКонтрагент.Следующий() Цикл
Если ЗначениеЗаполнено(Отчет.Поиск) Тогда
ВыборкаДоговор = ВыборкаКонтрагент.Выбрать();
Пока ВыборкаДоговор.Следующий() Цикл
  стрдляпоиска=Нрег(Строка(ВыборкаДоговор.Договор.Наименование));
  стрпоиска   =Нрег(Строка(Отчет.Поиск));
  Если  СтрЧислоВхождений(стрдляпоиска,стрпоиска) > 0 тогда
    нашли = 1; прервать;
  иначе нашли = 0;
  конецесли;
КонецЦикла;
Если нашли = 1 тогда

Если ВыборкаДоговор.СКД=0 Тогда
Продолжить;
КонецЕсли;

СуммаДебет  = СуммаДебет  + ВыборкаДоговор.СКД;
СуммаПросроченная = СуммаПросроченная + ВыборкаДоговор.Просроченная;
НПП = НПП+1;
ОбластьИтогов.Параметры.СуммаДебет = СуммаДебет;
ОбластьИтогов.Параметры.СуммаПросроченная =СуммаПросроченная;
ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКонтрагент);
ОбластьКонтрагент.Параметры.НПП = НПП;
ОбластьКонтрагент.Параметры.Контрагент = ВыборкаКонтрагент.Субконто1Наименование;
ОбластьКонтрагент.Параметры.ИНН = ВыборкаКонтрагент.ИНН;
    Таб.Вывести(ОбластьКонтрагент);
Если Отчет.Расшифровать Тогда
ВыборкаДоговор = ВыборкаКонтрагент.Выбрать();
Пока ВыборкаДоговор.Следующий() Цикл
Если ЗначениеЗаполнено(Отчет.Поиск) Тогда
  стрдляпоиска=Нрег(Строка(ВыборкаДоговор.Договор.Наименование));
  стрпоиска   =Нрег(Строка(Отчет.Поиск));
Если  СтрЧислоВхождений(стрдляпоиска,стрпоиска) > 0 тогда

   Если ВыборкаДоговор.СКД=0 Тогда
  Продолжить;
   КонецЕсли;
                                   
    СуммаДебет  = СуммаДебет  + Выборкадоговор.СКД;
                                    ОбластьДоговор.Параметры.Заполнить(ВыборкаДоговор);
Таб.Вывести(ОбластьДоговор);
Иначе продолжить; конецесли;
иначе
//СуммаД  = СуммаД  + ВыборкаДоговор.СКД;
                                ОбластьДоговор.Параметры.Заполнить(ВыборкаДоговор);
Таб.Вывести(ОбластьДоговор);
Конецесли;
КонецЦикла;
                 //
КонецЕсли;
иначе продолжить;
КонецЕсли;
иначе
//СуммаКредит = СуммаКредит + ВыборкаКонтрагент.СКК;
Если ВыборкаКонтрагент.СКД=0 Тогда
Продолжить;
КонецЕсли;
               
СуммаДебет  = СуммаДебет  + ВыборкаКонтрагент.СКД;
СуммаПросроченная = СуммаПросроченная + ВыборкаКонтрагент.Просроченная;
НПП = НПП+1;
//ОбластьИтогов.Параметры.Суммакредит = СуммаКредит;
ОбластьИтогов.Параметры.СуммаДебет = СуммаДебет;
ОбластьИтогов.Параметры.СуммаПросроченная =СуммаПросроченная;
ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКонтрагент);
ОбластьКонтрагент.Параметры.НПП = НПП;
ОбластьКонтрагент.Параметры.Контрагент = ВыборкаКонтрагент.Субконто1Наименование;
ОбластьКонтрагент.Параметры.ИНН = ВыборкаКонтрагент.ИНН;
    Таб.Вывести(ОбластьКонтрагент);
Если Отчет.Расшифровать Тогда
ВыборкаДоговор = ВыборкаКонтрагент.Выбрать();
Пока ВыборкаДоговор.Следующий() Цикл
//   ОбластьДоговор.Параметры.Заполнить(ВыборкаДоговор);
//   Таб.Вывести(ОбластьДоговор);

Если ЗначениеЗаполнено(Отчет.Поиск) Тогда
  стрдляпоиска=Нрег(Строка(ВыборкаДоговор.Договор.Наименование));
  стрпоиска   =Нрег(Строка(Отчет.Поиск));
Если  СтрЧислоВхождений(стрдляпоиска,стрпоиска) > 0 тогда
//СуммаД  = СуммаД  + ВыборкаДоговор.СКД;
ОбластьДоговор.Параметры.Заполнить(ВыборкаДоговор);
Таб.Вывести(ОбластьДоговор);
Иначе продолжить; конецесли;
иначе
ОбластьДоговор.Параметры.Заполнить(ВыборкаДоговор);
Таб.Вывести(ОбластьДоговор);
Конецесли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;

КонецЦикла;
//Если Расшифровать тогда
// СуммаДебет = СуммаД;
//иначе
// ОбластьИтогов.Параметры.Суммадебет = СуммаДебет;
//конецесли;
// ОбластьИтогов.Параметры.Суммадебет = СуммаДебет;


Таб.Вывести(ОбластьИтогов);
Таб.Вывести(ОбластьПодвал);
    Таб.ПовторятьПриПечатиСтроки = ОбластьШапка;
Таб.ФиксацияСверху = 7;
РедактироватьНаСервере(Таб);
КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск