Имя: Пароль:
1C
1C 7.7
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
(8)ПечДолг

http://clip2net.com/s/198Tx
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)Взаиморасчеты имел виду,вообщем вот так уже получил таблицу,и вот что я хотел получить Функция СуммаКонОст = КонОст(Сумма),теперь просто объединить надо
екстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Фирма = Регистр.Покупатели.Фирма, Регистр.Поставщики.Фирма;
   |Контрагент = Регистр.Покупатели.Договор.Владелец, Регистр.Поставщики.Договор.Владелец;
   |Договор = Регистр.Покупатели.Договор, Регистр.Поставщики.Договор;
   |Валюта = Регистр.Покупатели.Договор.ВалютаВзаиморасчетов, Регистр.Поставщики.Договор.ВалютаВзаиморасчетов;
   |КодОперации = Регистр.Покупатели.КодОперации, Регистр.Поставщики.КодОперации;
   |Док = Регистр.Покупатели.ТекущийДокумент, Регистр.Поставщики.ТекущийДокумент;
   |Сумма = Регистр.Покупатели.СуммаРуб, Регистр.Поставщики.СуммаРуб;
   |Функция СуммаНачОст = НачОст(Сумма);
   |Функция СуммаПриход = Приход(Сумма);
   |Функция СуммаРасход = Расход(Сумма);
   |Функция СуммаКонОст = КонОст(Сумма);
   |Группировка Контрагент;
   |Группировка Док;
   |Условие(Фирма в ВыбФирма);
   |Условие(Контрагент в ВыбКонтрагент);