|
v7: Есть Просроченные долги,хочу получить еще и Общий долг(ТиС) | ☑ | ||
---|---|---|---|---|
0
bura_limon
01.09.11
✎
10:55
|
Подскажите как он получает(от куда) сумму из поля Сумма Долг,это не Общий долг(общий должен 17 млн.).Помогите получить общий долг из этой обработки:
http://clip2net.com/s/198AM Процедура КнМенеджер(Действие) Если Действие = 0 Тогда Если СписМенеджер.ТекущаяСтрока() = 0 Тогда Возврат; КонецЕсли; СписМенеджер.УдалитьЗначение(СписМенеджер.ТекущаяСтрока()); ИначеЕсли Действие = 1 Тогда ТекМенеджер = ""; Если ВвестиЗначение(ТекМенеджер,"Выберите менеджера:","Справочник.Менеджеры") = 0 Тогда Возврат ИначеЕсли СписМенеджер.НайтиЗначение(ТекМенеджер) <> 0 Тогда Возврат; Иначе СписМенеджер.ДобавитьЗначение(ТекМенеджер,ТекМенеджер.Наименование); СписМенеджер.Пометка(СписМенеджер.РазмерСписка(),1); КонецЕсли; КонецЕсли; КонецПроцедуры // КнМенеджер() //******************************************************* Процедура КнКонтрагент(Действие) Если Действие = 0 Тогда Если СписКонтрагент.ТекущаяСтрока() = 0 Тогда Возврат; КонецЕсли; СписКонтрагент.УдалитьЗначение(СписКонтрагент.ТекущаяСтрока()); ИначеЕсли Действие = 1 Тогда ТекКонтрагент = ""; Если ВвестиЗначение(ТекКонтрагент,"Выберите контрагента (группу):","Справочник.Контрагенты") = 0 Тогда Возврат ИначеЕсли СписКонтрагент.НайтиЗначение(ТекКонтрагент) <> 0 Тогда Возврат; Иначе СписКонтрагент.ДобавитьЗначение(ТекКонтрагент,ТекКонтрагент.Наименование); СписКонтрагент.Пометка(СписКонтрагент.РазмерСписка(),1); КонецЕсли; КонецЕсли; КонецПроцедуры // КнКонтрагент() //****************************************************** Функция КликСписКонтрагент() ТекСписок = Форма.АктивныйЭлемент(); Если ТекСписок = "СписМенеджер" Тогда ТекСписок = СписМенеджер; ИначеЕсли ТекСписок = "СписКонтрагент" Тогда ТекСписок = СписКонтрагент; Иначе Возврат ""; КонецЕсли; ТекСтрока = ТекСписок.ТекущаяСтрока(); Если ТекСтрока = 0 Тогда Возврат ""; КонецЕсли; ТекЗначение = ТекСписок.ПолучитьЗначение(ТекСтрока); СтрокаЗначение = ?(ТекСписок.Пометка(ТекСтрока) = 0,"Кроме ","") + ТекЗначение.Наименование; ТекСписок.УстановитьЗначение(ТекСтрока,ТекЗначение, СтрокаЗначение); Возврат ""; КонецФункции // КликСписКонтрагент() //******************************************* // СчетчикДок() // Функция СчетчикДок(ТекДокумент) Если ТипЗначенияСтр(ТекДокумент) <> "Документ" Тогда Возврат 0; ИначеЕсли ТекДокумент.Вид() <> "Реализация" Тогда Возврат 0; Иначе Возврат 1; КонецЕсли; КонецФункции // СчетчикДок() //******************************************* Процедура Сформировать() Если ПустоеЗначение(ДатаНачала) = 0 Тогда Если глПроверкаДаты(ДатаНачала,ДатаКонца) = 0 Тогда Возврат; КонецЕсли; ИначеЕсли глПроверкаДаты(ДатаКонца,ДатаКонца) = 0 Тогда Возврат; КонецЕсли; // Формирование черного и белого списка менеджеров СписМенеджерБелый = СоздатьОбъект("СписокЗначений"); СписМенеджерЧерный = СоздатьОбъект("СписокЗначений"); Для Инд = 1 По СписМенеджер.РазмерСписка() Цикл Если СписМенеджер.Пометка(Инд) = 1 Тогда СписМенеджерБелый.ДобавитьЗначение(СписМенеджер.ПолучитьЗначение(Инд)); Иначе СписМенеджерЧерный.ДобавитьЗначение(СписМенеджер.ПолучитьЗначение(Инд)); КонецЕсли; КонецЦикла; // Формирование черного и белого списка контрагентов СписКонтрагентБелый = СоздатьОбъект("СписокЗначений"); СписКонтрагентЧерный = СоздатьОбъект("СписокЗначений"); Для Инд = 1 По СписКонтрагент.РазмерСписка() Цикл Если СписКонтрагент.Пометка(Инд) = 1 Тогда СписКонтрагентБелый.ДобавитьЗначение(СписКонтрагент.ПолучитьЗначение(Инд)); Иначе СписКонтрагентЧерный.ДобавитьЗначение(СписКонтрагент.ПолучитьЗначение(Инд)); КонецЕсли; КонецЦикла; ТабЗапроса = СоздатьОбъект("ТаблицаЗначений"); ТабЗапроса.НоваяКолонка("Менеджер","Справочник.Менеджеры"); ТабЗапроса.НоваяКолонка("Контрагент","Справочник.Контрагенты"); ТабЗапроса.НоваяКолонка("Договор","Справочник.Договоры"); ТабЗапроса.НоваяКолонка("Долг","Число"); СпрДоговоры = СоздатьОбъект("Справочник.Договоры"); ТекРегистры = СоздатьОбъект("Регистры"); РегПокупатели = ТекРегистры.Покупатели; Если ДатаКонца < ПолучитьДатуТА() Тогда РегПокупатели.ВременныйРасчет(1); ТекРегистры.РассчитатьРегистрыПо(ДатаКонца); КонецЕсли; ТекГлубинаКредита = 0; СпрДоговоры.ВыбратьЭлементы(0); Пока СпрДоговоры.ПолучитьЭлемент() = 1 Цикл Состояние("Формирование таблицы долгов: " + ТабЗапроса.КоличествоСтрок()); ТекКонтрагент = СпрДоговоры.Владелец; ТекМенеджер = ТекКонтрагент.Менеджер; // Фильтры Если СписКонтрагентБелый.РазмерСписка() > 0 Тогда Если СписКонтрагентБелый.Принадлежит(ТекКонтрагент) = 0 Тогда Продолжить; КонецЕсли; КонецЕсли; Если СписКонтрагентЧерный.РазмерСписка() > 0 Тогда Если СписКонтрагентЧерный.Принадлежит(ТекКонтрагент) = 1 Тогда Продолжить; КонецЕсли; КонецЕсли; Если СписМенеджерБелый.РазмерСписка() > 0 Тогда Если СписМенеджерБелый.Принадлежит(ТекМенеджер) = 0 Тогда Продолжить; КонецЕсли; КонецЕсли; Если СписМенеджерЧерный.РазмерСписка() > 0 Тогда Если СписМенеджерЧерный.Принадлежит(ТекМенеджер) = 1 Тогда Продолжить; КонецЕсли; КонецЕсли; ТабЗапроса.НоваяСтрока(); ТабЗапроса.Менеджер = ТекМенеджер; ТабЗапроса.Контрагент = ТекКонтрагент; ТабЗапроса.Договор = СпрДоговоры.ТекущийЭлемент(); Если ПустоеЗначение(ВыбФирма) = 0 Тогда ТабЗапроса.Долг = РегПокупатели.СводныйОстаток(ВыбФирма,СпрДоговоры.ТекущийЭлемент(),,,,,,"СуммаВал"); Иначе ТабЗапроса.Долг = РегПокупатели.СводныйОстаток(,СпрДоговоры.ТекущийЭлемент(),,,,,,"СуммаВал"); КонецЕсли; ТекГлубинаКредита = Макс(ТекГлубинаКредита,СпрДоговоры.ГлубинаКредита); КонецЦикла; ТабЗапроса.Сортировать("Менеджер,Контрагент"); ТабЗапроса.НоваяКолонка("ДолгНепросрочен","Число"); // Долг по НЕпросроченным документам Если ФлГруппировка = 3 Тогда ТабЗапроса.НоваяКолонка("ДолгПросрочен","Число"); // Долг по просроченным документам ТабЗапроса.НоваяКолонка("Документы","СписокЗначений"); КонецЕсли; ДатаНачалаДокументы = Мин(ДатаНачала,ДатаКонца - ТекГлубинаКредита - 31); // минус месяц на отгрузку ДокРеализация = СоздатьОбъект("Документ.Реализация"); ДокРеализация.ОбратныйПорядок(1); ДокРеализация.ВыбратьДокументы(ДатаНачалаДокументы,ДатаКонца); Пока ДокРеализация.ПолучитьДокумент() = 1 Цикл Состояние("Обработка документов: " + ДокРеализация.ДатаДок); // условие на документ Если ДокРеализация.Проведен() = 0 Тогда Продолжить; КонецЕсли; Если ПустоеЗначение(ВыбФирма) = 0 Тогда Если ДокРеализация.Фирма <> ВыбФирма Тогда Продолжить; КонецЕсли; КонецЕсли; Если ДокРеализация.СуммаВзаиморасчетов = 0 Тогда Продолжить; КонецЕсли; // Поиск договора ТекСтрока = ""; Если ТабЗапроса.НайтиЗначение(ДокРеализация.Договор,ТекСтрока,"Договор") = 0 тогда Продолжить; КонецЕсли; ТабЗапроса.ПолучитьСтрокуПоНомеру(ТекСтрока); ТекГлубинаКредита = ТабЗапроса.Договор.ГлубинаКредита; Если ТекГлубинаКредита = 0 Тогда ТекГлубинаКредита = ВыбСрок; КонецЕсли; Если ПустоеЗначение(ДокРеализация.ДатаОтчета) = 1 Тогда // еще не отгружен ТабЗапроса.ДолгНепросрочен = ТабЗапроса.ДолгНепросрочен + ДокРеализация.СуммаВзаиморасчетов; Продолжить; //ИначеЕсли ТабЗапроса.Договор.НеКонтролироватьКредит = 1 Тогда // Это документы без срока давности // Продолжить; ИначеЕсли ДокРеализация.ДатаОтчета + ТекГлубинаКредита > ДатаКонца Тогда // еще не просрочен ТабЗапроса.ДолгНепросрочен = ТабЗапроса.ДолгНепросрочен + ДокРеализация.СуммаВзаиморасчетов; Продолжить; ИначеЕсли ФлГруппировка < 3 Тогда Продолжить; // не нужно подбиратьДокументы ИначеЕсли ДокРеализация.ДатаОтчета < ДатаНачала Тогда Продолжить; // за пределами выборки ИначеЕсли ТабЗапроса.ДолгНепросрочен + ТабЗапроса.ДолгПросрочен >= ТабЗапроса.Долг Тогда Продолжить; // уже набрано достаточно документов КонецЕсли; // Добавление документа Если ТипЗначенияСтр(ТабЗапроса.Документы) <> "СписокЗначений" Тогда ТабЗапроса.Документы = СоздатьОбъект("СписокЗначений"); КонецЕсли; ТабЗапроса.Документы.ДобавитьЗначение(ДокРеализация.ТекущийДокумент()); ТабЗапроса.ДолгПросрочен = ТабЗапроса.ДолгПросрочен + ДокРеализация.СуммаВзаиморасчетов; КонецЦикла; // Вывод данных в печатную форму ПечТаблица = СоздатьОбъект("Таблица"); ПечТаблица.ИсходнаяТаблица("Таблица"); ПечТаблица.ВывестиСекцию("Заголовок"); ПечФирма = ВыбФирма; ПечТаблица.ВывестиСекцию("СтрокаФирма"); ПечТаблица.ВывестиСекцию("Шапка"); Если ФлГруппировка = 3 Тогда ПечТаблица.ВывестиСекцию("ШапкаДокумент"); КонецЕсли; ИтогоДолг = 0; ИтогоПрДолг = 0; ПечМенеджер = 0; ТабЗапроса.ВыбратьСтроки(); Пока ТабЗапроса.ПолучитьСтроку() = 1 Цикл Если ПечМенеджер <> ТабЗапроса.Менеджер Тогда Если ТабЗапроса.НомерСтроки > 1 Тогда // Закрыть группировку по менеджерам ПечТаблица.ВывестиСекцию("СтрокаМенеджерИтог"); КонецЕсли; // Открыть группировку по менеджерам ПечМенеджер = ТабЗапроса.Менеджер; ПечТаблица.ВывестиСекцию("СтрокаМенеджер"); МенеджерДолг = 0; МенеджерПрДолг = 0; КонецЕсли; // Вывод секции контрагент ПечКонтрагент = ТабЗапроса.Контрагент; ПечДоговор = ТабЗапроса.Договор; ПечГлубинаКредита = ПечДоговор.ГлубинаКредита; Если ПечГлубинаКредита = 0 Тогда ПечГлубинаКредита = ВыбСрок; КонецЕсли; //Если ПечДоговор.НеКонтролироватьКредит = 1 Тогда // ПечГлубинаКредита = ""; //КонецЕсли; ПечДолг = ТабЗапроса.Долг; ПечПрДолг = ПечДолг - ТабЗапроса.ДолгНепросрочен; Если ПечПрДолг < 0 Тогда ПечПрДолг = 0; КонецЕсли; Если ПустоеЗначение(ПечГлубинаКредита) = 1 Тогда ПечПрДолг = 0; КонецЕсли; МенеджерДолг = МенеджерДолг + ПечДолг; МенеджерПрДолг = МенеджерПрДолг + ПечПрДолг; ИтогоДолг = ИтогоДолг + ПечДолг; ИтогоПрДолг = ИтогоПрДолг + ПечПрДолг; Если ФлГруппировка = 1 Тогда Продолжить; ИначеЕсли ФлГруппировка = 2 Тогда ПечТаблица.ВывестиСекцию("СтрокаКонтрагент"); Иначе // Если ФлГруппировка = 3 Тогда ПечТаблица.ВывестиСекцию("СтрокаЖирный"); СписДокументы = ТабЗапроса.Документы; Если ТипЗначенияСтр(СписДокументы) = "СписокЗначений" Тогда Для Инд = 1 по СписДокументы.РазмерСписка() Цикл Если ПечПрДолг <= 0 Тогда Прервать; КонецЕсли; ПечДокумент = СписДокументы.ПолучитьЗначение(Инд); ПечДолг = Мин(ПечПрДолг,ПечДокумент.СуммаВзаиморасчетов); ПечПрДолг = ПечПрДолг - ПечДолг; ПечДатаОтчета = ПечДокумент.ДатаОтчета; Если ПустоеЗначение(ПечГлубинаКредита) = 1 Тогда ПечДата = ""; Иначе ПечДата = ПечДокумент.ДатаОтчета + ПечГлубинаКредита; КонецЕсли; Если ПустоеЗначение(ПечДата) = 1 Тогда ПечПросроченоДней = ""; ИначеЕсли ДатаКонца <= ПечДата Тогда ПечПросроченоДней = ""; Иначе ПечПросроченоДней = ДатаКонца - ПечДата; КонецЕсли; ПечТаблица.ВывестиСекцию("СтрокаДокумент"); КонецЦикла; КонецЕсли; Если ПечПрДолг > 0 Тогда ПечДокумент = "РАНЕЕ " + ДатаНачала; ПечДолг = ПечПрДолг; ПечДатаОтчета = ""; ПечДата = ""; ПечПросроченоДней = ""; ПечТаблица.ВывестиСекцию("СтрокаДокумент"); КонецЕсли; КонецЕсли; КонецЦикла; // Закрыть последнюю группировку ПечТаблица.ВывестиСекцию("СтрокаМенеджерИтог"); ПечТаблица.ВывестиСекцию("СтрокаИтог"); ПечТаблица.ТолькоПросмотр(1); ПечТаблица.Показать("Должники"); КонецПроцедуры // Сформировать //************************************************ // Операторы основной программы ДатаКонца = ТекущаяДата(); ДатаНачала = ДобавитьМесяц(ДатаКонца,-12); ВыбСрок = 30; ФлГруппировка = 1; |
|||
1
zak555
01.09.11
✎
10:56
|
от ТиС тут явно ничего не соатлось
|
|||
2
zak555
01.09.11
✎
10:56
|
*не осталось
|
|||
3
ЧеловекДуши
01.09.11
✎
10:58
|
Просроченный долг = Дата предполагаемой оплаты по долгу + Сумма долга.
+ в типовой ТиС есть проблема с последовательностью и очень большая, т.к. восстановить её под час просто нереально. |
|||
4
ЧеловекДуши
01.09.11
✎
10:58
|
+ просроченный долг можно получить только по реализации.
|
|||
5
bura_limon
01.09.11
✎
11:00
|
(4)а от куда тогда такая сумма из поля "Сумма Долг"?!
|
|||
6
bura_limon
01.09.11
✎
11:03
|
(4)подожди, посмотри по ссылке,у меня просрочка из Реализации берет,меня же интересует возможность получения из оброботки которую я опубликовал,общий долг,мне нужно просто еще одно поле с Общим долгом
|
|||
7
bura_limon
01.09.11
✎
11:20
|
уважаемые 7.7-ки жду вашей помощи......
|
|||
8
PuhUfa
01.09.11
✎
11:35
|
(0) что-то у меня опера через поиск вообще не нашла в коде "поля Сумма Долг". Про какое поле речь то?
(3) нужно просто не запускать последовательность и тогда все с ней будет хорошо |
|||
9
bura_limon
01.09.11
✎
11:39
|
||||
10
PuhUfa
01.09.11
✎
11:45
|
(9)
Если ПустоеЗначение(ВыбФирма) = 0 Тогда ТабЗапроса.Долг = РегПокупатели.СводныйОстаток(ВыбФирма,СпрДоговоры.ТекущийЭлемент(),,,,,,"СуммаВал"); Иначе ТабЗапроса.Долг = РегПокупатели.СводныйОстаток(,СпрДоговоры.ТекущийЭлемент(),,,,,,"СуммаВал"); КонецЕсли; ПечДолг = ТабЗапроса.Долг; и что тебе тут не понятно? |
|||
11
bura_limon
01.09.11
✎
11:49
|
уже понял что Сумма Долг(ПечДолг)берется из Регистра.Покупателя,я прошу помочь получить Общий долг,нужно еще одно поле с Общим долгом..
|
|||
12
PuhUfa
01.09.11
✎
12:13
|
(11) Что в твоем понятии общий долг?
|
|||
13
bura_limon
01.09.11
✎
12:20
|
(12)Взаиморасчеты имел виду,вообщем вот так уже получил таблицу,и вот что я хотел получить Функция СуммаКонОст = КонОст(Сумма),теперь просто объединить надо
екстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Фирма = Регистр.Покупатели.Фирма, Регистр.Поставщики.Фирма; |Контрагент = Регистр.Покупатели.Договор.Владелец, Регистр.Поставщики.Договор.Владелец; |Договор = Регистр.Покупатели.Договор, Регистр.Поставщики.Договор; |Валюта = Регистр.Покупатели.Договор.ВалютаВзаиморасчетов, Регистр.Поставщики.Договор.ВалютаВзаиморасчетов; |КодОперации = Регистр.Покупатели.КодОперации, Регистр.Поставщики.КодОперации; |Док = Регистр.Покупатели.ТекущийДокумент, Регистр.Поставщики.ТекущийДокумент; |Сумма = Регистр.Покупатели.СуммаРуб, Регистр.Поставщики.СуммаРуб; |Функция СуммаНачОст = НачОст(Сумма); |Функция СуммаПриход = Приход(Сумма); |Функция СуммаРасход = Расход(Сумма); |Функция СуммаКонОст = КонОст(Сумма); |Группировка Контрагент; |Группировка Док; |Условие(Фирма в ВыбФирма); |Условие(Контрагент в ВыбКонтрагент); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |