Итак возникла необходимость перевести отчет по ДЗ на прямые запросы. Главной функцией существующего является функция :
Функция _сформироватьДолгКлиента(контрагент,сум,дат) // _тз = СоздатьОбъект("ТаблицаЗначений"); _тз.НоваяКолонка("Контрагент" , "Справочник.Контрагенты"); _тз.НоваяКолонка("НТО" , "Справочник.АдресаТорговыхТочек"); _тз.НоваяКолонка("Супервайзер", "Справочник.АдресаТорговыхТочек"); _тз.НоваяКолонка("Менеджер" , "Справочник.АдресаТорговыхТочек"); _тз.НоваяКолонка("АдресТочки" , "Справочник.АдресаТорговыхТочек"); _тз.НоваяКолонка("Накладная" , "Документ.Т_РасходнаяНакладная" ); _тз.НоваяКолонка("Дистриб" , "Справочник.Дистрибьюция"); _тз.НоваяКолонка("Просрочка" , "Число"); _тз.НоваяКолонка("ДолгК" , "Число"); _тз.НоваяКолонка("Форма" , "Число"); _тз.НоваяКолонка("СуммаН" , "Число"); _тз.НоваяКолонка("СуммаД" , "Число"); _тз.НоваяКолонка("СуммаП" , "Число"); _тз.НоваяКолонка("ВидТорговли", "Перечисление.ВидыТорговли"); _тз.НоваяКолонка("Просрочена" , "Число"); // _датаБи = КонецПериодаБИ(); // //_би = СоздатьОбъект("БухгалтерскиеИтоги"); //_би.ИспользоватьСубконто(ВидыСубконто.Контрагенты,контрагент); //_би.ВыполнитьЗапрос(,_датаБи,"36.1"); //_би.ВыбратьСубконто(1); //// //_дебет = _би.СКД(); //_кредит = _би.СКК(); //_долг = _дебет - _кредит; //// //// _спр = СоздатьОбъект("СписокЗначений"); // _спрП = СоздатьОбъект("Справочник.Производители"); _спрП.ВыбратьЭлементы(); Пока _спрП.ПолучитьЭлемент() = 1 Цикл _спр.ДобавитьЗначение(_спрП.ТекущийЭлемент()); КонецЦикла; // Для _огонёк = 1 По _спр.РазмерСписка() Цикл //-------------------- _производитель2 = _спр.ПолучитьЗначение(_огонёк); // _долг =""; // _тзДпроиз.ВыбратьСтроки(); Пока _тзДпроиз.ПолучитьСтроку() = 1 Цикл // Если (_тзДпроиз._контрагент = контрагент) и (_тзДпроиз._производитель = _производитель2) Тогда // _долг = _тзДпроиз._СКД; Прервать; // Иначе _долг = 0; КонецЕсли; // КонецЦикла; // Если _долг = 0 Тогда Продолжить; КонецЕсли; Если _долг < 0 Тогда Сообщить("У клиента " + контрагент + " по бренду переплата!!! " + Строка(_производитель2) + " " + _долг); Продолжить; КонецЕсли; // _долг = _тз2._СКД; //// _док = СоздатьОбъект("Документ"); _док.ОбратныйПорядок(1); //_док.ВыбратьПоЗначению(,_датаБи,"Контрагент",_би.Субконто(1)); _док.ВыбратьПоЗначению(,_датаБи,"Контрагент",контрагент); Пока _док.ПолучитьДокумент() = 1 Цикл Если (Найти(_док.Вид(),"Т_РасходнаяНакладная")=1) тогда // Если НЕ (_док.Проведен() = 1) Тогда Продолжить; КонецЕсли; Если _док._производитель <> _производитель2 Тогда Продолжить; КонецЕсли; // Состояние("Веду расчёт долга клиента "+контрагент+" по накладной "+ _док ); // _долгНакл = 0; _оплата = _ПроверитьОплатуДок(_док.ТекущийДокумент()) ; _суммаНакл = _док.ТекущийДокумент().Итог("СуммаСНДС") - _оплата; // Если _долг >= _суммаНакл тогда _долгНакл = _суммаНакл; КонецЕсли; Если _долг < _суммаНакл тогда _долгНакл = _долг; КонецЕсли; // Если _долгНакл = 0 Тогда Продолжить; КонецЕсли; Если _долгНакл < сум Тогда Продолжить; КонецЕсли; // _датаОплаты = _док.ТекущийДокумент().ДатаФактОтгрузки + _док.ТекущийДокумент().Отсрочка; _днейПросрочки = дат - _датаОплаты; // _тз.НоваяСтрока(); _тз.Контрагент = ""; _тз.ДолгК = _долг; _тз.Просрочка = _днейПросрочки; _тз.НТО = _док.ТекущийДокумент().АдресТорговойТочки.Родитель.Родитель.Родитель; _тз.Супервайзер = _док.ТекущийДокумент().АдресТорговойТочки.Родитель.Родитель; _тз.Менеджер = _док.ТекущийДокумент().АдресТорговойТочки.Родитель; _тз.АдресТочки = _док.ТекущийДокумент().АдресТорговойТочки; _тз.Накладная = _док.ТекущийДокумент(); _тз.Дистриб = _док.ТекущийДокумент().Дистрибьюция; _тз.Форма = _док.ТекущийДокумент().НеПроводить; _тз.СуммаН = _док.ТекущийДокумент().Итог("СуммаСНДС"); _тз.СуммаД = _долгНакл; _тз.СуммаП = _оплата; _тз.ВидТорговли = _док.ВидТорговли; Если _днейПросрочки > 0 Тогда _тз.Просрочена = _долгНакл; Иначе _тз.Просрочена = 0; КонецЕсли; // // _долг = _долг - _долгНакл; Если _долг = 0 Тогда Прервать; КонецЕсли; // КонецЕсли; // // КонецЦикла; //-------------------- КонецЦикла; // // //_тз.ВыбратьСтроку(1); Возврат _тз; // КонецФункции -
Почиитал на тему нарастающих итогов в запросах для восьмёрки однако ввиду недостатка знаний есть сложности с реализацией алгоритма на 7.7. У кого есть какие соображения по поводу перевода её на скуль?! буду благодарен любым советам.
|