Имя: Пароль:
1C
1C 7.7
v7: Ведомость По Контрагентам с условием
0 Popkorm
 
26.09.11
12:51
Хочу вывести в отчетов только по новым контрагентам начиная с 2010 года.Хочу реализовать условие(строю еще один Запрос до 2010):когда в отчет задаю Период с 01.01.2010 по 30.08.2011,то я иду в ЗапросДо2010 и проверяю нет ли у меня записей по Контрагенту до 2010,если есть,то пропускаю этого Контрагента и иду дальше.Только вот в какой процедуре строить это условие не понимаю,Запрос2010 лежит в Процедуре Сформировать.Кидаю всю обработку:


// ПЕРЕМЕННЫЕ МОДУЛЯ
//
Перем ТекСтрокаВТаблице; // текущая строка в таблице значений  МФ

// используются для стандартного механизма кнопок "Обновить" и "Настройка"
Перем Таб;        
Перем Обновить;
Перем Расшифровка;

Перем СписокГруппировок;
Перем КоличествоГруппировок;
Перем НомерГруппировкиПоДоговору;
Перем НомерГруппировкиПоКонтрагенту;

// списки значений, в которых определены возможные типы операций
Перем СписокОперДебет, СписокОперКредит;

Перем ВалютаОтчета;

Процедура ВывестиГруппировку(Запрос,Ном) Далее

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ        
//******************************************************************************
// ВыбратьПоФильтру()
//
// Параметры:
//  Нет
//
// Описание:
//  Открывает обработку отбора элементов по произвольному фильтру
//
Процедура ВыбратьПоФильтру()
   
   Перем  ВидЗначенияПодбора;
   
   ВидЗначенияПодбора=СокрЛП(ТаблицаМФ.Вид);
   
   Если ПустоеЗначение(ВидЗначенияПодбора)=1 Тогда
       Возврат;
   КонецЕсли;
   
   СписокПараметров=СоздатьОбъект("СписокЗначений");
   СписокПараметров.ДобавитьЗначение("",                "ИмяВызвавшейФормы");
   СписокПараметров.ДобавитьЗначение(ТаблицаМФ.Тип,     "Тип");
   СписокПараметров.ДобавитьЗначение(ВидЗначенияПодбора,"Вид");
   СписокПараметров.ДобавитьЗначение(СписокЭлементовМФ, "Объекты");
   ТаблицаМФ.ФлВкл=2;
   ОткрытьФорму("Обработка.ПодборОбъектов#",СписокПараметров);
   
КонецПроцедуры    // ВыбратьПоФильтру

//******************************************************************************
// ПерерисовкаНазванийЗакладок
//
// Параметры:
//    Нет
//
// Описание:
//  Добавляет "(!)" в заголовок закладки с множественным фильтром, когда этот фильтр задан
//
Функция ПерерисовкаНазванийЗакладок()      
   
   Форма.Закладки.УстановитьЗначение(2,?(глМножественныйФильтрЗадан(ТаблицаМФ)=1,"(!) ","")+"Множественный фильтр");
   
КонецФункции // ПерерисовкаНазванийЗакладок    

//******************************************************************************
// УправлениеДиалогом()
//
// Параметры:
//    Нет
//
// Возвращаемое значение:
//    Нет
//
// Описание:
//    Управление доступностью элементов диалога.
//
Процедура УправлениеДиалогом()
   
   Если Форма.Закладки.ТекущаяСтрока() = 1 Тогда          
       Форма.ИспользоватьСлой("Шапка,Подвал,Основной1,Основной2,Разделитель"+СокрЛП(ВидРазделителя));
   Иначе    
       Форма.ИспользоватьСлой("Шапка,МФ,Подвал");
   КонецЕсли;
   
КонецПроцедуры //УправлениеДиалогом()  

//******************************************************************************
// РасшифровкаОбновить(Обновить)
//
// Параметры:
//  Обновить =    1 - нажата кнопка "Обновить"
//                2 - нажата кнопка "Настройка"    
//
// Возвращаемое значение:
//    Расшифровка (список значений)
//
// Вызывается из формул элементов диалога:
//  из таблицы, кнопки "Обновить" и "Настройка"
//
// Описание:  
//    функция для стандартного механизма кнопок ""Обновить" и "Настройка""
//  помещает значение параметра в список Расшифровка  и возвращает этот список
//
Функция РасшифровкаОбновить(Обновить)
   
   Расшифровка.Установить("Обновить", Обновить);
   
   Возврат Расшифровка;
   
КонецФункции //РасшифровкаОбновить()                                            

//******************************************************************************
// ИзменениеПорядкаГрупп(НаправлениеСдвига)
//
// Параметры:
//  НаправлениеСдвига =    -1 - вниз
//                             1 - вверх
// Возвращаемое значение:
//    Нет
//
// Вызывается из формул элементов диалога:
//  кнопки "вверх" и "вниз" рядом со списком группировок
//
// Описание:  
//    Процедура производит сдвиг текущей группировки в общем
//    списке группировок на "НаправлениеСдвига" позиций
//
Процедура ИзменениеПорядкаГрупп(НаправлениеСдвига)
   ТекСтр = Группировки.ТекущаяСтрока();
   ПослСдвигСтр = Группировки.РазмерСписка() - 1;
   Если ТекСтр <= ПослСдвигСтр Тогда
       Если не((НаправлениеСдвига = 1) и (ТекСтр = ПослСдвигСтр)) Тогда
           Группировки.СдвинутьЗначение(НаправлениеСдвига, ТекСтр);
       КонецЕсли;
   Иначе
       Предупреждение("Группировка ""По документам движения"" всегда находится
                      |в конце списка и не перемещается.",60);
   КонецЕсли;
КонецПроцедуры // ИзменениеПорядкаГрупп()

//******************************************************************************
// УстановитьГруппировкиЗапроса(ТекстЗапроса, ТекстЗагол)
//
// Параметры:  ТекстЗапроса - переданный по ссылке текст запроса
//               ТекстЗагол   - переданный по ссылке текст заголовка
//
// Возвращаемое значение:
//    Нет
//
// Описание:
//    Дополняет строку запроса и заголовка в соответствии с выбранными группировками.
//    
Процедура УстановитьГруппировкиЗапроса(ТекстЗапроса, ТекстЗагол)
   СписокГруппировок = СоздатьОбъект("СписокЗначений");
   
   Для Сч=1 По Группировки.РазмерСписка() Цикл
       
       Если Группировки.Пометка(Сч)=1 Тогда
           ПредставлениеГрупп="";
           ТекстГрупп=Группировки.ПолучитьЗначение(Сч,ПредставлениеГрупп);
           Если  (ТекстГрупп = "Контрагент") Тогда
               ТекстБезГрупп = " без групп";
           Иначе
               ТекстБезГрупп = "";
           КонецЕсли;
           Если (ТекстГрупп = "СтавкаНП") и (СписокВидовОтчетов.ТекущаяСтрока()<>1) Тогда
               Предупреждение("Группировка по ставкам НП возможна только в отчете по покупателям!",60);
               Продолжить;
           КонецЕсли;
           ТекстЗапроса    = ТекстЗапроса    + "Группировка "+ТекстГрупп+ТекстБезГрупп+";";
           ТекстЗагол        = ТекстЗагол    + ?(ТекстЗагол="",""," / ")+ПредставлениеГрупп;
           СписокГруппировок.ДобавитьЗначение(ТекстГрупп,ПредставлениеГрупп);
           Если ТекстГрупп = "Договор" Тогда
               НомерГруппировкиПоДоговору = СписокГруппировок.РазмерСписка();
           ИначеЕсли ТекстГрупп = "Контрагент" Тогда
               НомерГруппировкиПоКонтрагенту = СписокГруппировок.РазмерСписка();
           КонецЕсли;    
       КонецЕсли;
   КонецЦикла;
   
КонецПроцедуры  //УстановитьГруппировкиЗапроса()

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

КонецПроцедуры // ПечатьСтроки()

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

КонецПроцедуры // ПечатьСтрокиДокумента()

//******************************************************************************
// ВывестиГруппировку(Запрос,Ном)
//
// Параметры:
//  Запрос - объект "Запрос"
//    Ном - номер выводимой группировки
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
//  Выводит в печатную форму одну группировку запроса. Если
//    Есть нижележащие группировки, они выводятся также с использованием рекурсивного
//    вызова этой же процедуры.
//
Процедура ВывестиГруппировку(Запрос,Ном)
     
   Если Ном <= КоличествоГруппировок Тогда    
       
       НазваниеГруппировки = СписокГруппировок.ПолучитьЗначение(Ном);
       Если НазваниеГруппировки = "Документ" Тогда
           ТекОст    = Запрос.НачОст;
           ТекОстВ = Запрос.НачОстВ;
       КонецЕсли;  
       
       Пока Запрос.Группировка(Ном) = 1 Цикл
           
           Если НазваниеГруппировки = "Документ" Тогда
               НазваниеСекции="Документ";  
           Иначе                          
               НазваниеСекции="Строка"+Ном;
           КонецЕсли;      
           
           Если (Ном >= НомерГруппировкиПоДоговору) Тогда
               Если Запрос.Договор.ВалютаВзаиморасчетов<>ВалютаОтчета Тогда
                   НазваниеСекции = НазваниеСекции + "В";
               КонецЕсли;
           КонецЕсли;      
           
           ПечТекстСтроки = Запрос.ПолучитьАтрибут(НазваниеГруппировки);
           Если (ТипЗначенияСтр(ПечТекстСтроки) = "Документ") или
                (ТипЗначенияСтр(ПечТекстСтроки) = "Справочник") Тогда
               ТекРасшифровка = ПечТекстСтроки;
           Иначе
               ТекРасшифровка = "";
           КонецЕсли;
           ПечТекстСтроки = ?(ПустоеЗначение(ПечТекстСтроки)=1,глПредставлениеПустогоЗначения(НазваниеГруппировки),ПечТекстСтроки);
           
           Если (НазваниеГруппировки = "Договор") и (Ном < НомерГруппировкиПоКонтрагенту) Тогда
               ПечТекстСтроки = ""+СокрП(ТекРасшифровка.Владелец.Наименование)+"; "+ПечТекстСтроки;
           ИначеЕсли НазваниеГруппировки = "Документ" Тогда
               ПечТекстСтроки = ""+глНазваниеДокументаВЖурнале(ПечТекстСтроки)+" № "+ПечТекстСтроки.НомерДок;
               Если глЕстьРеквизитШапки("НомерДокВходящий",Запрос.Документ.Вид()) = 1 Тогда
                   ПечТекстСтроки = ПечТекстСтроки + РазделительСтрок + "Вх.№ " + сокрлп(Запрос.Документ.НомерДокВходящий) + " от " + Запрос.Документ.ДатаДокВходящий; // Климов 02.04.2003
               КонецЕсли;
           ИначеЕсли НазваниеГруппировки = "КредДокумент" Тогда
               ПечТекстСтроки = глПредставлениеДокумента(ПечТекстСтроки);
           КонецЕсли;
           
           Если НазваниеГруппировки = "Документ" Тогда
               ПечатьСтрокиДокумента(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка,ТекОст,ТекОстВ);
           Иначе
               ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка);
           КонецЕсли;
       
           // если есть более детальная группировка - выведем ее
           Если КоличествоГруппировок > Ном Тогда
               ВывестиГруппировку(Запрос,Ном+1);
           КонецЕсли;          
       
       КонецЦикла;
   КонецЕсли;

КонецПроцедуры // ВывестиГруппировку()                                          

//******************************************************************************
// ЗаполнитьСпискиОпераций()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
//  В этой процедуры в списки операций прописываются значения кодов операций,
//    движения по которым мы хотели бы показать в отдельных колонках.
//    Операции задаются раздельно по дебету и кредиту
//
Процедура ЗаполнитьСпискиОпераций()

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

//******************************************************************************
// ДобПеремЗапроса(ТекстЗапроса,НазвПерем,НазвПеремРег)
//
// Параметры:    ТекстЗапроса    - текст запроса
//                НазвПерем        - название переменной запроса
//                НазвПеремРег    - название ресурса, измерения запроса
//
// Возвращаемое значение:
//    Нет
//
// Описание:
//    Добавляет в текст запроса описание переменных запроса.
//
Процедура ДобПеремЗапроса(ТекстЗапроса,НазвПерем,НазвПеремРег)
                   
   ТекстЗапроса = ТекстЗапроса + РазделительСтрок;
   ВидОтчета = СписокВидовОтчетов.ТекущаяСтрока();
   Если (ВидОтчета=1) Тогда // покупатели
       ТекстЗапроса = ТекстЗапроса +
       НазвПерем+"    = Регистр.Покупатели."+НазвПеремРег+";";
   КонецЕсли;
   
   Если (ВидОтчета=2) Тогда // поставщики
       ТекстЗапроса = ТекстЗапроса +
       НазвПерем+"    = Регистр.Поставщики."+НазвПеремРег+";";
   КонецЕсли;
   
   Если (ВидОтчета=3) Тогда // оба
       ТекстЗапроса = ТекстЗапроса +                                    
       НазвПерем + "= Регистр.Покупатели."+НазвПеремРег+","+
                     "Регистр.Поставщики."+НазвПеремРег+";";
   КонецЕсли;
   
КонецПроцедуры  //ДобПеремЗапроса()
//******************************************************  


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

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

   Если Запросов.Выполнить(ТекстЗапросов) = 0 Тогда
       Возврат;
   КонецЕсли;
//Пока Запросов.Группировка(1) = 1 Цикл
//       Контрагенты=Запросов.Контрагент;
   //до 2010 (Конец)
   
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонца;";
   ДобПеремЗапроса(ТекстЗапроса,"Фирма",        "Фирма");
   ДобПеремЗапроса(ТекстЗапроса,"УпрАналитика","Фирма.УпрАналитика");
   ДобПеремЗапроса(ТекстЗапроса,"ЮрЛицо",        "Фирма.ЮрЛицо");
   ДобПеремЗапроса(ТекстЗапроса,"Контрагент",    "Договор.Владелец");
   ДобПеремЗапроса(ТекстЗапроса,"СвойствоКонтр","Договор.Владелец.ОсновноеСвойство.ЗначениеСвойства");
   ДобПеремЗапроса(ТекстЗапроса,"Договор",        "Договор");
   ДобПеремЗапроса(ТекстЗапроса,"КодОперации",    "КодОперации");
   ДобПеремЗапроса(ТекстЗапроса,"Менеджер",    "Договор.Владелец.Менеджер");
   ДобПеремЗапроса(ТекстЗапроса,"МенеджерКанц","Договор.Владелец.МенеджерКанц"); // Климов 16.04.2003
   //ДобПеремЗапроса(ТекстЗапроса,"Менеджер",    "Менеджер");
   ДобПеремЗапроса(ТекстЗапроса,"Аналитика",    "Аналитика"); // Климов 02.04.2003
   Если СписокВидовОтчетов.ТекущаяСтрока()=1 Тогда // по покупателям
       ДобПеремЗапроса(ТекстЗапроса,"СтавкаНП","СтавкаНП");
   КонецЕсли;
   ДобПеремЗапроса(ТекстЗапроса,"ВидДолга","ВидДолга");
   ДобПеремЗапроса(ТекстЗапроса,"КредДокумент","КредДокумент");
       
   ДобПеремЗапроса(ТекстЗапроса,"СуммаВ","СуммаВал");
   
   Если ВыбВидВалюты = 1 Тогда
       ДобПеремЗапроса(ТекстЗапроса,"Сумма","СуммаРуб");
   Иначе
       ДобПеремЗапроса(ТекстЗапроса,"Сумма","СуммаУпр");
   КонецЕсли;
   
   ТекстЗапроса = ТекстЗапроса +
   "Функция НачОст = НачОст(Сумма);
   |Функция Приход = Приход(Сумма);
   |Функция Расход = Расход(Сумма);
   |Функция ВозвратОтПокупателя = Расход(Сумма)Когда (КодОперации = глКО.ВозвратОтПокупателя);
   |Функция ВозвратПоставщику = Приход(Сумма)Когда (КодОперации = глКО.ВозвратПоставщику);
   |Функция КонОст = КонОст(Сумма);";
   
   ТекстЗапроса = ТекстЗапроса +
   "Функция НачОстВ = НачОст(СуммаВ);
   |Функция ПриходВ = Приход(СуммаВ);
   |Функция РасходВ = Расход(СуммаВ);
   |Функция КонОстВ = КонОст(СуммаВ);
   |Функция ВозвратОтПокупателяВ = Расход(Сумма)Когда( КодОперации = глКО.ВозвратОтПокупателя);
   |Функция ВозвратПоставщикуВ = Приход(Сумма)Когда (КодОперации = глКО.ВозвратПоставщику);
   |Условие (КодОперации <> глКО.ЗачтенАвансПоставщику);
   |Условие (КодОперации <> глКО.ЗачтенАвансПокупателя);
   |Условие (КодОперации <> глКО.СторнированАванс);
   |Условие (КодОперации <> глКО.ЗачтенВозвратПокупателя);
   |Условие (КодОперации <> глКО.СторнированВозврат);";
   
   Для СчЦикла =1 по СписокОперДебет.РазмерСписка() Цикл
       НазвОперации = СписокОперДебет.ПолучитьЗначение(СчЦикла).Идентификатор();
       ТекстЗапроса = ТекстЗапроса + РазделительСтрок+
       "Функция "+НазвОперации+"Приход  = Приход(Сумма)  когда (КодОперации = глКО."+НазвОперации+");"+
       "Функция "+НазвОперации+"ПриходВ = Приход(СуммаВ) когда (КодОперации = глКО."+НазвОперации+");";
   КонецЦикла;
   Для СчЦикла=1 по СписокОперКредит.РазмерСписка() Цикл
       НазвОперации = СписокОперКредит.ПолучитьЗначение(СчЦикла).Идентификатор();
       ТекстЗапроса = ТекстЗапроса + РазделительСтрок+
       "Функция "+НазвОперации+"Расход  = Расход(Сумма)  когда (КодОперации = глКО."+НазвОперации+");"+
       "Функция "+НазвОперации+"РасходВ = Расход(СуммаВ) когда (КодОперации = глКО."+НазвОперации+");";
   КонецЦикла;
   
   Загол="";
   НетОш = 1; // нет ошибок при наложении фильтров
   Если ВидРазделителя = 1 Тогда
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол);
   ИначеЕсли ВидРазделителя = 2 Тогда                                                  
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол);
   ИначеЕсли ВидРазделителя = 3 Тогда                                                  
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол);
   КонецЕсли;
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Менеджер",ВыбМенеджер,"ВыбМенеджер",ТекстЗапроса,Загол,"СвойстваКонтрагентов"); // Климов 18.07.2002
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "МенеджерКанц",ВыбМенеджерКанц,"ВыбМенеджерКанц",ТекстЗапроса,Загол,"СвойстваКонтрагентов"); // Климов 19.04.2003
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Аналитика",ВыбАналитика,"ВыбАналитика",ТекстЗапроса,Загол,"Аналитика"); // Климов 02.04.2003
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Контрагент",ВыбКонтрагент,"ВыбКонтрагент",ТекстЗапроса,Загол,"СвойстваКонтрагентов");
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Договор",ВыбДоговор,"ВыбДоговор",ТекстЗапроса,Загол);
   
   Если НетОш = 0 Тогда
       Возврат;
   КонецЕсли;
                             
   НомерГруппировкиПоДоговору        = 9999; // невозможно большое значение
   НомерГруппировкиПоКонтрагенту    = 9999; // невозможно большое зна
1 zak555
 
26.09.11
12:53
новые это по которым не было никогда движений ?
2 zak555
 
26.09.11
12:53
если да, то нужно смотреть на справочник договоры и скать там реквизит дата начала договора
и условие в запросе написать
3 Popkorm
 
26.09.11
13:15
(2)у договора нет помоему Реквизит дата,есть у Контрагент Дата Создания,я по нему делал,но у меня куча контрагентов у которых Дата Создания пустой.По этому по записям хочу пойти
4 Eugeneer
 
26.09.11
13:16
(3) Есть!
5 FIXXXL
 
26.09.11
13:17
(3) не проще дату проставить по самому первому доку в базе?
6 Eugeneer
 
26.09.11
13:17
Если там пусто. Напиши обработку которая по всем заполнит. Например по первому доку по контрагенту установит дату.
7 Eugeneer
 
26.09.11
13:20
Или сделай запрос с условием.

Ляляля
ИЗ Между Начало КОнец.
ГДЕ Контр В (выбрать ляляляля
из движенийвзаиморасчетов МЕЖДУ НачалоПрошлогоПериода КОнецПрошлогопериолда
ГДЕ Рег.Суммаоборот <> 0)
8 Eugeneer
 
26.09.11
13:22
епт. у тебя семерка. а в теме стоит восьмерка
9 Popkorm
 
26.09.11
13:24
(8)Упс....по умолчанию стоит 8-ка походу,
10 Popkorm
 
26.09.11
13:26
(5)что та не понял, что имеешь ввиду:"по самому первому доку в базе?"
11 zak555
 
26.09.11
13:39
(5) фигня
вдруг базу обрезали, а движения раньше были
12 zak555
 
26.09.11
13:42
добавить реквизит в договор или контрагента
13 zak555
 
26.09.11
13:43
(7) что за "между" ?
ты про параметры виртуальной таблицы обороты сьлыхал ?
14 Eugeneer
 
26.09.11
13:46
(13) я от балды написал чтобы только суть была. Но у автора семерка.
15 Popkorm
 
26.09.11
13:48
так,по моему у меня в 7.7 в теме
16 Popkorm
 
26.09.11
13:50
(12)еще самое интересное что ДатаСоздания 01.02.2010 а доки есть с этим Контрагентом на 12.11.2009(лазяли в прошлом периодом)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.