Имя: Пароль:
1C
 
Небольшой фильтр в 7.7
,
0 Mt111
 
10.06.14
17:58
1с 7.7 Форт 2000 на дбф
В расходной накладной при выборе конрагента выполняется код:

    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, Контрагент, 1);
    Ит.ИспользоватьСубконто(ВидыСубконто.Документ,, 1);
    Ит.ВыполнитьЗапрос(, ДатаДок,СчетКлиента ,,, 1,, "С");
    Ит.ВыбратьСубконто(ВидыСубконто.Документ);
    Пока Ит.ПолучитьСубконто(ВидыСубконто.Документ) = 1 Цикл
        Док=Ит.Субконто(ВидыСубконто.Документ);
        //Сообщить("Док "+Док);
        Документ=Док;  
        ДатаДокумента=Док.ДатаДок;
        Если ПустоеЗначение(ДатаДокумента)=1 Тогда
            продолжить;
            //Сообщить("Дата проверено Документа 0");
        КонецЕсли;
        //Сообщить("Дата документа "+ДатаДокумента);
        ДолгДней=ДатаДок-ДатаДокумента;
        //Сообщить("Долг дней "+ДолгДней);
        Если ДолгДней>КонтрДата Тогда
            Предупреждение("Количество дней задолженности "+ДолгДней+" по накл от "+ДатаДокумента+ " в сумме "+Ит.СКД()+" превышает "+КонтрДата+" дней!!!");
            Контрагент=0;
            Прервать;
        КонецЕсли;
    КонецЦикла;

суть его в том чтобы не отпускать товар злостным неплательшикам.
проблема в том что работают 4 ТА и если есть долг хоть у одного  из них по данному контрагенту накладная не проведется у всех, а нужно  "забанить" только у того агета которому должны
1 Иешуа
 
10.06.14
18:04
(0) а у тя аналитика на счете по торговым есть?
и вообще она где-то есть?
2 Mt111
 
10.06.14
18:10
отдельно печатается дебиторка на каждого торгового
3 Fedor-1971
 
10.06.14
18:19
(2) посмотри как идёт выбор там, где печатается дебиторка по каждому торговому агенту и сделай то же самое в твоей процедуре.
4 Mt111
 
10.06.14
18:28
там я вообще ничего не пойму, вот код:

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

    Ит = СоздатьОбъект("БухгалтерскиеИтоги");  
    //Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты,  , 2);
    Ит.ИспользоватьСубконто(ВидыСубконто.Документ,, 1);
    Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "36.1",,, 1,, "С");
    Таб.ВывестиСекцию("Шапка");
    Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
    Ит.ВыбратьСубконто(ВидыСубконто.Документ);
    
    Пока Ит.ПолучитьСубконто(ВидыСубконто.Документ) = 1 Цикл
        
        Док=Ит.Субконто(ВидыСубконто.Документ);

        Если Док.Вид()="РасходнаяНакладная"  Тогда
        Иначе
            Продолжить;
        КонецЕсли;
        
        Если Агент.Выбран() = 1 Тогда             
            Если Док.Агент<>Агент Тогда
                Продолжить;
            КонецЕсли;    
        КонецЕсли;
        
        Если МФВыбКлиенты.РазмерСписка()>0 Тогда
            Если СписКонтр.НайтиЗначение(ДОк.Контрагент) = 0 Тогда
                Продолжить;
            КонецЕсли;    
        КонецЕсли;
        
        Если ТолькоНакладныеВПериоде=1 Тогда
            Если (Док.ДатаДок>=ВыбНачПериода)И(Док.ДатаДок<=ВыбКонПериода) Тогда
            Иначе
                Продолжить;
            КонецЕсли;                        
        КонецЕсли;
        
        ТЗ.НоваяСтрока();
        ТЗ.Документ=Док;  
        ТЗ.ДатаДокумента=Док.ДатаДок;
        ТЗ.НомерДокумента=Док.НомерДок;
        ТЗ.Контрагент=Док.Контрагент;
        ТЗ.ДолгНачало=Ит.СНД()-Ит.СНК();
        ТЗ.Закупка=Ит.ДО();
        ТЗ.Оплата=Ит.КО();
        ТЗ.ДолгКонец=Ит.СКД()-Ит.СКК();
        
    КонецЦикла;        
    
    ТЗ.Сортировать("+ Контрагент");
    
    ТЗ.ВставитьКолонку("ДолгДней");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
              //ТЗ.ДолгКонец=Ит.СКД()-Ит.СКК();
        Если ТЗ.ДолгКонец>0 Тогда
            ТЗ.ДолгДней=ТекущаяДата()-ТЗ.ДатаДокумента;
        КонецЕсли;
    КонецЦикла;
    
    
    ТЗ.ВыбратьСтроки();
    ВыбрКлиент="";

    ДолгНачало=0;
    Закупка=0;
    Оплата=0;            
    ДолгКонец=0;          
    
    ИтогДолгНачало=0;
    ИтогЗакупка=0;
    ИтогОплата=0;
    ИтогДолгКонец=0;
    
    ИтогДолгНачалоОбщий=0;
    ИтогЗакупкаОбщий=0;
    ИтогОплатаОбщий=0;
    ИтогДолгКонецОбщий=0;

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

        Таб.ВывестиСекцию("Субконто1");
    КонецЦикла;

    Таб.ВывестиСекцию("ИтогПредприятие");    
    
    Таб.ВывестиСекцию("ИтогОбщий");    

    //Таб.ВывестиСекцию("Подвал");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать","");
КонецПроцедуры
5 Mt111
 
10.06.14
18:31
таблица формируется такая
| дата документа | номер документа | дней долга по док.| сумма долга по докум. |
6 palpetrovich
 
10.06.14
18:33
сорьки, офтопик: Форт - это нечто "за гранью добра и зла", слава Богу я только один раз сталкивался, больше желания не имею :)
7 Fedor-1971
 
10.06.14
18:41
(4) ну и где вывод задолженности по торговому агенту?
Долг разбивается в разрезе документов и только.
8 Mt111
 
10.06.14
19:53
полностью ert залил сюда
http://www.ex.ua/936232431154
9 acanta
 
10.06.14
20:14
(7) похоже здесь
      Если Агент.Выбран() = 1 Тогда            
            Если Док.Агент<>Агент Тогда
                Продолжить;
            КонецЕсли;    
        КонецЕсли;
10 Mt111
 
11.06.14
16:50
а куда его вставить чтобы работало
11 acanta
 
11.06.14
16:53
Перед
ДолгДней=ДатаДок-ДатаДокумента;
12 Mt111
 
11.06.14
17:20
если сделать как предложил (11) то проверяет только агента в самой старой накладной
но если прописать немножко выше, перед:

Документ=Док;

то все работает как нужно.
Благодарю за помощь, очень помогли.