Имя: Пароль:
1C
1C 7.7
v7: прямой запрос в DBF
,
0 Geroy
 
28.01.14
11:39
Процедура ПолучитьДокументДвижения(Док1, Строк)
Перем тз;

pc = СоздатьОбъект("OLEDBData");
Соединение = .......
Рез = рс.Соединение(Соединение);
Запрос = рс.СоздатьКоманду();
ТекстЗапроса = "
|SELECT
|ДокументПунктИсполнения.ID AS[Ссылка $Справочник.ДокументПунктИсполнения],
|   ДокументПунктИсполнения.PARENTID AS[Рлдитель $Справочник.ДокументПунктИсполнения],
|   ДокументПунктИсполнения.ISFOLDER ЭтоГруппа,
|   ДокументПунктИсполнения.CODE Код,
|   ДокументПунктИсполнения.DESCR Наименование,
|   $ДокументПунктИсполнения.Автор AS[Автор $Справочник],
|   $ДокументПунктИсполнения.ДатаВыполнения ДатаВыполнения,
|   $ДокументПунктИсполнения.ДатаИсполнения ДатаИсполнения,
|   $ДокументПунктИсполнения.ОсновнойДокумент AS[ОсновнойДокумент $Документ]
|FROM $Справочник.ДокументПунктИсполнения AS ДокументПунктИсполнения
|";

тз = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
т = СоздатьОбъект("ИндексированнаяТаблица");
т.Загрузить(тз , );


т.ВыбратьСтроки();
Пока т.ПолучитьСтроку()=1 Цикл

.............
    КонецЦикла;

КонецПроцедуры



Справочник имеет такую стукруту

Документы
Сидоров В.В
      |
      -> Выполненные
         НаИсполнении
         Просроченные
         Отсрочка
         Снятые
Иванов И.В.
      |
      -> Выполненные
         НаИсполнении
         Просроченные
         Отсрочка
         Снятые


в папках Выполненые,НаИсполнении,Просроченные,Отсрочка,Снятые  расположены тоже документы

Что нужно  мне нужно найти мой документ  по таким условиям
    Если т.Ссылка.ОсновнойДокумент=Док1 Тогда
       Если  т.Ссылка.Номерстроки=Строк Тогда
         Дат1=т.ДатаИсполнения;
       КонецЕсли;
    КонецЕсли;

Не могу понять как это правильно организовать Индексированная таблица
1 Geroy
 
28.01.14
11:43
Вообщем нужно перебрать справочник
Справочник.ДокументыПунктыИсполнения

и найти нужный мне документ
2 Ёпрст
 
28.01.14
11:46
Условие на сам документ - тупо
where right($ДокументПунктИсполнения.ОсновнойДокумент) = :ВыбДокумент

На счет второго условия
>>>  Если  т.Ссылка.Номерстроки=Строк Тогда

- это явная бредятина, её смысл не ясен.
3 Geroy
 
28.01.14
11:52
(2)
Насчёт условия оно почему-то ОсновнойДокумент не находит пустая колонка ,хотя смотрел xthtp DBFRead записи имеются в колонке документов

По поводу
Второго условия   в Документе Док1 имеются строки , которые отличаются номеромстроки
И чтобы мне найти нужную мне дату я должен найти документ соответсвующий этим условия

Это не тот номер строки о котором вы подумали
4 Морозов Александр
 
28.01.14
11:54
че, документы в справочнике храните?
5 Ёпрст
 
28.01.14
11:57
(3) о Каком НомереСтроки я подумал ?
:))))))))))))))))))))))))))))))))))))))))))))))
6 Ёпрст
 
28.01.14
11:58
НомерСтроки - служебная предопределенная колонка табличной части документа.
Писать условие на  т.Ссылка.Номерстроки=Строк - явная бредятина, без перебора самих строк табличной части
7 КонецЦикла
 
28.01.14
12:05
В справочнике ссылка на документ?
Тогда соединение с журналом и условие на ДокументВид
8 Ёпрст
 
28.01.14
12:13
(7) зачем ?
9 Ёпрст
 
28.01.14
12:13
журнал то зачем ?
10 КонецЦикла
 
28.01.14
12:16
(9) Найти именно по виду документа
Нужен, например, именно "НаИсполнении"
Или это не разных видов документы?
11 Ёпрст
 
28.01.14
12:20
(10) " "НаИсполнении"  - это у него так группа справочника называется
:))

А так, есть просто реквизит с типом <Документ>.. вот на него и нужен фильтр.. а это просто
where right($ДокументПунктИсполнения.ОсновнойДокумент) = :ВыбДокумент
12 КонецЦикла
 
28.01.14
12:22
Да, верно щ_Щ
13 Geroy
 
28.01.14
12:26
Процедура ПолучитьДокументДвижения(Док1, Строк)

Перем Запрос, текстЗапроса, Таб;

Запрос = СоздатьОбъект ("Запрос");
ТекстЗапроса=
"//{{ЗАПРОС(Сформироватьи)
|ТекущийЭлемент = Справочник.ДокументПунктИсполнения.ТекущийЭлемент;
|НомерСтр = Справочник.ДокументПунктИсполнения.ТекущийЭлемент.НомерСтроки;
|ОсновнойДокумент = Справочник.ДокументПунктИсполнения.ОсновнойДокумент;
|Группировка ТекущийЭлемент;
|Условие (ОсновнойДокумент = Док1);
|Условие (НомерСтр = Строк);
|";

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
КонецЕсли;

Дат1="";

Пока Запрос.Группировка(1) = 1 Цикл
      Дта1=Запрос.ТекущийЭлемент.ДатаИсполнения;
      Исполнитель=СокрЛП(Запрос.ТекущийЭлемент.Замещение);

КонецЦикла;
КонецПроцедуры
  

Вот так у меня всё нормально работает , но отчёт строится минут так 9

Мне надо его ускорить
Поэтому и хочу сделать через прямой запрос
14 Ёпрст
 
28.01.14
12:30
(13) не удивительно
15 Ёпрст
 
28.01.14
12:34
тест на вшивость:

Запрос = СоздатьОбъект ("Запрос");
ТекстЗапроса=
"//{{ЗАПРОС(Сформироватьи)

|ТекущийЭлемент = Справочник.ДокументПунктИсполнения.ТекущийЭлемент;
|НомерСтр = Справочник.ДокументПунктИсполнения.НомерСтроки;
|ОсновнойДокумент = Справочник.ДокументПунктИсполнения.ОсновнойДокумент;
|ДатаИсполнения = Справочник.ДокументПунктИсполнения.ДатаИсполнения;
|Исполнитель = Справочник.ДокументПунктИсполнения.Замещение;
|Группировка ТекущийЭлемент;
|Условие (ОсновнойДокумент = Док1);
|Условие (НомерСтр = Строк);
|";

Запрос.Выполнить(ТекстЗапроса);


Пока Запрос.Группировка(1) = 1 Цикл
    Дта1=Запрос.ДатаИсполнения;
    Исполнитель=Запрос.Исполнитель;
КонецЦикла;
16 Ёпрст
 
28.01.14
12:35
Отчет ?

Ага, этот запрос еще и в цикле поди выполняется, так ?
:)))))))))))))))))))))))))))))))))))))
17 Geroy
 
28.01.14
12:40
(16)  знаю что смешно)
Но по другому не знал как сделать
Да в цикле поэтому и долго так)

До меня нахимичили в отчёте и он не работает так как документы которые с которых он тянет информацию не работают уже как 3 года
а отчёт понадобился только щас
и приходится выкручиваться
18 Ёпрст
 
28.01.14
12:42
Переписать всё не предлагать ?
19 Mikeware
 
28.01.14
12:46
и где люди такую траву берут....
20 Geroy
 
28.01.14
12:46
(18)Отчёт строится 1 раз в месяц  
И переписывать времени особо нету

Я сам в шоке с того , что в нем ничерта не работает
Вот думал как-то разобраться с индексированной таблицей
Но не могу понять как сделать(
21 Ёпрст
 
28.01.14
12:57
(20) Подумать-подумать..еще раз подумать и переписать всё.
22 Geroy
 
28.01.14
13:08
(21) время будет перепишу
а если надо щас ...
Может скинете пару примеров работы
Прямой запрос и индексированная таблица
ближе к моему случаю , если вас это не затруднит
23 Ёпрст
 
28.01.14
13:10
ОсновнойДокумент - какой тип реквизита ?

процедура ПолучитьДокументДвижения.. может надо функцию ?

смысл от перебора запроса группировок ?
У тя в справочнике запрос может возвращать несколько записей с одним документом ?
24 Ёпрст
 
28.01.14
13:11
Покажи кусок кода, где идёт вызов ПолучитьДокументДвижения.
25 Geroy
 
28.01.14
13:26
(24)

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

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

            
    
    рс = СоздатьОбъект("OLEDBData");
    Соединение = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""";
    Рез = рс.Соединение(Соединение);
    Запрос = рс.СоздатьКоманду();
    ТекстЗапроса = "
    |SELECT
    |ДокументПунктИсполнения.ID AS[Ссылка $Справочник.ДокументПунктИсполнения],
    |  
    |     ДокументПунктИсполнения.PARENTID AS[Родитель $Справочник.ДокументПунктИсполнения],
    |     ДокументПунктИсполнения.ISFOLDER ЭтоГруппа,
    |     ДокументПунктИсполнения.CODE Код,
    |     ДокументПунктИсполнения.DESCR Наименование ,
    |     $ДокументПунктИсполнения.Автор AS[Автор $Справочник] ,
    |     $ДокументПунктИсполнения.ДатаВыполнения ДатаВыполнения,
    |    $ДокументПунктИсполнения.ДатаИсполнения ДатаИсполнения,
    |    $ДокументПунктИсполнения.ДатаКонтроля ДатаКонтроля,
    |    $ДокументПунктИсполнения.Номерстроки Номерстроки,
    |    $ДокументПунктИсполнения.Замещение Замещение,
    |     $ДокументПунктИсполнения.ОсновнойДокумент AS[ОсновнойДокумент $Документ]
    |FROM $Справочник.ДокументПунктИсполнения AS ДокументПунктИсполнения
    |";
    
    тз = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    т=СоздатьОбъект("ИндексированнаяТаблица");
    т.Загрузить(тз , );
    //т.Показать();
    т.ВыбратьСтроки();
    
    
    Пока т.ПолучитьСтроку()=1 Цикл
        Если ПустоеЗначение(т.Ссылка.ОсновнойДокумент)=1 Тогда
            Продолжить;
        КонецЕсли;
        тзСпис.НоваяСтрока();
        тзСпис.ТекущийДок=т.Ссылка;
        тзСпис.Документ=т.ОсновнойДокумент;
        тзСпис.Замещение=т.Замещение;
        тзСпис.ДатаВыполнения=т.ДатаВыполнения;
        тзСпис.ДатаИсполнения=т.ДатаИсполнения;
    КонецЦикла;
    
    тзСпис.ВыбратьСтроки();
    Пока тзСпис.ПолучитьСтроку()=1 Цикл
        
        Если ТзСпис.ТекущийДок.ОсновнойДокумент=Док1 Тогда
            Если ТзСпис.ТекущийДок.Номерстроки=Строк Тогда
                Дат1=ТзСпис.ДатаИсполнения;
                Исполнитель=СокрЛП(тзСпис.ТекущийДок.Замещение);
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;
    

           //т1=СоздатьОбъект("ИндексированнаяТаблица");
        //рд=т.Ссылка;
        //Запрос1 = рс.СоздатьКоманду();
        ////Данный фрагмент построен конструктором.
        ////При повторном использовании конструктора внесенные вручную изменения будут потеряны!!!
        //ТекстЗапроса1 = "-- qryMaker:Отчет1.2008.01.16.14.00.05
        //|SELECT
        //|ДокументПунктИсполнения.ID AS[Ссылка $Справочник.ДокументПунктИсполнения],
        //|     ДокументПунктИсполнения.PARENTID AS[Родитель $Справочник.ДокументПунктИсполнения],
        //|     ДокументПунктИсполнения.ISFOLDER ЭтоГруппа,
        //|     ДокументПунктИсполнения.CODE Код,
        //|     ДокументПунктИсполнения.DESCR Наименование ,
        //|     $ДокументПунктИсполнения.Автор AS[Автор $Справочник] ,
        //|     $ДокументПунктИсполнения.КтоСмотрел AS КтоСмотрел,
        //|
        //|     $ДокументПунктИсполнения.ДатаВыполнения ДатаВыполнения,
        //|    $ДокументПунктИсполнения.ДатаИсполнения ДатаИсполнения,
        //|    $ДокументПунктИсполнения.ДатаКонтроля ДатаКонтроля,
        //|
        //|    $ДокументПунктИсполнения.Замещение Замещение,
        //|     $ДокументПунктИсполнения.ОсновнойДокумент AS[ОсновнойДокумент $Документ],
        //|    $ДокументПунктИсполнения.Номерстроки AS Номерстроки
        //|FROM $Справочник.ДокументПунктИсполнения AS ДокументПунктИсполнения
        //|WHERE (ДокументПунктИсполнения.PARENTID IN (:род))
        //|AND (ДокументПунктИсполнения.ISMARK = '')
        //|";
        //
        //Запрос1.УстановитьТекстовыйПараметр("род", рд);
        //тз1 = Запрос1.ВыполнитьИнструкцию(ТекстЗапроса1);
        //т1.Объединить(тз1, , );
        ////т1.Показать();
        //
        //т1.ВыбратьСтроки();
        //Пока т1.ПолучитьСтроку()=1 Цикл
        //        
        //КонецЦикла;
        
        
        //************************************************************
КонецПроцедуры

//*******************************************  
Процедура   ПолучитьДокументДвижения1(Док1,Строк)
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформироватьи)
    |ТекущийЭлемент = Справочник.ДокументПунктИсполнения.ТекущийЭлемент;
    |НомерСтр = Справочник.ДокументПунктИсполнения.ТекущийЭлемент.НомерСтроки;
    |ОсновнойДокумент = Справочник.ДокументПунктИсполнения.ОсновнойДокумент;
    |Группировка ТекущийЭлемент;
    |Условие(ОсновнойДокумент = Док1);
    |Условие(НомерСтр = Строк);
    |";

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


//*******************************************
//*******************************************
Процедура Вид()
    Если (НеВыполненые=1) ИЛИ (просроченные=1)  Тогда
        Форма.тА.Видимость(1);
        Форма.тП.Видимость(1);
        Форма.Адресат.Видимость(1);
        Форма.Подписал.Видимость(1);
    ИначеЕсли (НеВыполненые=0) ИЛИ (просроченные=0) Тогда
        Форма.тА.Видимость(0);
        Форма.тП.Видимость(0);
        Форма.Адресат.Видимость(0);
        Форма.Подписал.Видимость(0);
    КонецЕсли;
КонецПроцедуры
//*******************************************  
Процедура Печать()
    Перем Реж;
    Сообщить("Конец: "+ТекущееВремя());
    Меню=СоздатьОбъект("СписокЗначений");
    Меню.ДобавитьЗначение(1,"СПРАВКА-НАПОМИНАНИЕ");
    Меню.ДобавитьЗначение(2,"Невыполненые");
    Меню.ДобавитьЗначение(3,"Просроченные");
    Если Меню.ВыбратьЗначение(Реж,,,,1)=0 Тогда
        Возврат;
    КонецЕсли;
    Таб=СоздатьОбъект("Таблица");
    Если Реж=1 Тогда
        Таб.ИсходнаяТаблица(СокрЛП(Константа.ПодключениеПутиОтчетов)+"ПоискПоручений2.mxl");
    ИначеЕсли Реж=2 Тогда
        Таб.ИсходнаяТаблица(СокрЛП(Константа.ПодключениеПутиОтчетов)+"ПоискПорученийНевыполненные2.mxl");
        Если ПустоеЗначение(Адресат)=0 Тогда
            Таб.ВывестиСекцию("Адресат");
        КонецЕсли;
    ИначеЕсли Реж=3 Тогда
        Таб.ИсходнаяТаблица(СокрЛП(Константа.ПодключениеПутиОтчетов)+"ПоискПорученийПросроченные2.mxl");
        Если ПустоеЗначение(Адресат)=0 Тогда
            Таб.ВывестиСекцию("Адресат");
        КонецЕсли;
    КонецЕсли;
    Таб.ВывестиСекцию("Шапка");
    //глПечатьТаблицыЗначений(ТЗ);
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
        
    
        //ДатВып=ПолучитьПустоеЗначение();
        //ДокДвиж_= СоздатьОбъект("Документ.ДокументДвижения");
        //Если ДокДвиж_.НайтиДокумент(ТЗ.ДокДвиж)=1 Тогда
        //Если Реж=3 Тогда
        //        ДокДвиж_.ВыбратьСтроки();
        //        Пока ДокДвиж_.ПолучитьСтроку() = 1 Цикл
        //            Если ДокДвиж_.ДокументДвижения.Вид()="Д_Отсрочка" Тогда
        //                //Сообщить(СокрЛП(ДокДвиж_.ДокументДвижения.ДатаПереноса));
        //                
        //                ТЗ.СрокВыполнения=СокрЛП(ТЗ.СрокВыполнения)+РазделительСтрок+СокрЛП(ДокДвиж_.ДокументДвижения.ДатаПереноса);
        //            КонецЕсли;
        //        КонецЦикла;
        //                ////Сообщить(ТЗ.СрокВыполнения);
        //    КонецЕсли;
        //    //Сообщить(ДокДвиж_.НомерДок);
        //    Если ДокДвиж_.ПолучитьСтрокуПоНомеру(ДокДвиж_.КоличествоСтрок())=1 Тогда
        //        ДатВып=ДокДвиж_.ДокументДвижения.ДатаДок;
        //    КонецЕсли;
        //КонецЕсли;
        
        
        
        
        Дат='';
        Если ПустоеЗначение(ТЗ.Снятие)=0 Тогда  
            Дат=ТЗ.Снятие;
        ИначеЕсли (ПустоеЗначение(ТЗ.ДатаВыполнения)=0) Тогда  
            Дат=ТЗ.ДатаВыполнения;
        ИначеЕсли (ПустоеЗначение(ТЗ.Отсрочка)=0) Тогда  
            Дат=ТЗ.Отсрочка;
        КонецЕсли;
        Если  ПустоеЗначение(ТЗ.Отсрочка)=0 Тогда
            Дат=СокрЛП(Формат(дат,"ДДДММГГГГ"))+""+ПодтвОтчета(ТЗ.Отсрочка);
        Иначе  
            Дат=СокрЛП(Формат(дат,"ДДДММГГГГ"))+""+ПодтвОтчета(ТЗ.СрокВыполнения);
        КонецЕсли;
            Если Реж=3 Тогда
            Если  ПустоеЗначение(ТЗ.Отсрочка)=0 Тогда
                ТЗ.СрокВыполнения=СокрЛП(Формат(ТЗ.СрокВыполнения,"ДДДММГГГГ"))+""+ДатаПереноса(ТЗ.Ссылка,ТЗ.Исп1);   //+РазделительСтрок+(Формат(ТЗ.Отсрочка,"ДДДММГГГГ"));
            Иначе
                ТЗ.СрокВыполнения=СокрЛП(Формат(ТЗ.СрокВыполнения,"ДДДММГГГГ"));
            КонецЕсли;
        КонецЕсли;
    
        
        Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    Если (Реж=2)ИЛИ (Реж=3) Тогда
        Если ПустоеЗначение(Подписал)=0 Тогда
            Таб.ВывестиСекцию("Подпись");        
        КонецЕсли;
        Таб.ПовторятьПриПечатиСтроки(10,11);
    Иначе
        Таб.ПовторятьПриПечатиСтроки(6,7);
    КонецЕсли;
    
    Таб.ПараметрыСтраницы(1,,,15,15,20,3,5,,1,,);  
    Таб.ТолькоПросмотр(1);
    Таб.Показать();
КонецПроцедуры
//*******************************************  
Процедура Сформировать()
    Сообщить("Начало: "+ТекущееВремя());
    //Выбор="(ПустоеЗначение(СрокВыполнения)=0)";
    
    Если ПустоеЗначение(НачДата)=1 Тогда
        Предупреждение("Не выбран интервал построения отчета");
    Иначе
        Если НеВыполненые=1 Тогда    
        Выбор="((СрокВыполнения<=КонДата) и (СрокВыполнения>=НачДата))";
        ИначеЕсли просроченные=1 Тогда  
        Выбор="((ДатаВыполнения<=КонДата) и (ДатаВыполнения>=НачДата)) или ((ПустоеЗначение(ДатаВыполнения)=1) и (ПустоеЗначение(Отчет)=0))";
        Иначе
        Выбор="((СрокВыполнения<=КонДата) и (СрокВыполнения>=НачДата))";
            
        КонецЕсли;
    КонецЕсли;
    
    Если ПустоеЗначение(Исп)=0 Тогда
        Выбор=Выбор+" и (Исполнитель = Исп)";
    КонецЕсли;
    
    Если ПустоеЗначение(СрокВып)=0 Тогда
        Выбор=Выбор+" и (СрокВыполнения = СрокВып)";
    КонецЕсли;
    
    Если НеВыполненые=1 Тогда
        Выбор=Выбор+" и ((ПустоеЗначение(ДатаВыполнения)=1) и (ПустоеЗначение(Снятие)=1) и (ПустоеЗначение(Отчет)=1) и ((ПустоеЗначение(Отсрочка)=1) ИЛИ (Отсрочка<РабочаяДата())))";
    КонецЕсли;
    
    Если просроченные=1 Тогда  
        //Выбор=Выбор+" и (((СрокВыполнения < РабДата) или (Отсрочка < РабДата) )и (ПустоеЗначение(ДатаВыполнения)=1) и(ПустоеЗначение(Снятие)=1))";
        Выбор=Выбор+
        "и (((ПустоеЗначение(Отсрочка)=0) и (Отсрочка<ДатаВыполнения) и (ПустоеЗначение(ДатаВыполнения)=0)) или ((ПустоеЗначение(Отсрочка)=1) и (СрокВыполнения<ДатаВыполнения)) или ((ПустоеЗначение(ДатаВыполнения)=1) и (ПустоеЗначение(Отчет)=0))
        |или ((ПустоеЗначение(Отсрочка)=0) и (Отсрочка>СрокВыполнения))
        |или ((ПустоеЗначение(Снятие)=0) и (Снятие>СрокВыполнения)))";  
    КонецЕсли;
    
    Если сн=1 Тогда  
        Выбор=Выбор+" и (ПустоеЗначение(Снятие)=0)";
    КонецЕсли;
    
    Если отс=1 Тогда  
        Выбор=Выбор+" и (ПустоеЗначение(Отсрочка)=0)";
    КонецЕсли;
    
    Если вып=1 Тогда  
        Выбор=Выбор+" и (ПустоеЗначение(ДатаВыполнения)=0)";
    КонецЕсли;

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

//*******************************************
тз=СоздатьОбъект("ТаблицаЗначений");
Тз.НоваяКолонка("НомерСтроки","число",,,"№ п/п");  
Тз.НоваяКолонка("НомерДокумента","строка",,,"Рег.номер");
Тз.НоваяКолонка("ДатаДокумента","Дата",,,"дата");
Тз.НоваяКолонка("Кратко","Строка",,,"Краткое содержание");
Тз.НоваяКолонка("СрокВыполнения",,,,"Дата Исполнения");
Тз.НоваяКолонка("ДатаВып","Дата",,,);
Тз.НоваяКолонка("ДатаВыполнения","Дата",,,);  
Тз.НоваяКолонка("Снятие","Дата",,,);  
Тз.НоваяКолонка("Отсрочка","Дата",,,);
Тз.НоваяКолонка("Исп1",,,,"ИспИзначальный");
Тз.НоваяКолонка("Исполнитель",,,,"Исполнитель");
Тз.НоваяКолонка("Отчет",,,,);
ТЗ.НоваяКолонка("Ссылка");
ТЗ.НоваяКолонка("ДокДвиж");
ТЗ.ВидимостьКолонки("ДатаВыполнения,Снятие,Отсрочка",0,);
26 Ёпрст
 
28.01.14
13:50
(25) оригинальная структура..
Огласите реквизиты шапки и табличной части документа Поручение
27 Ёпрст
 
28.01.14
13:51
какие где.
28 Geroy
 
28.01.14
14:03
|Исполнитель = Документ.Поручение.Исполнитель;
    |СрокВыполнения = Документ.Поручение.СрокВыполнения;
    |Отчет = Документ.Поручение.Отчет;
    |Движ = Документ.Поручение.Движ;
    |Снятие = Документ.Поручение.Снятие;
    |Отсрочка = Документ.Поручение.Отсрочка;
    |ДатаВыполнения = Документ.Поручение.ДатаВыполнения;

Это таблица

остальные шапка
29 Geroy
 
28.01.14
14:04
|Ссылка = Документ.Поручение.ТекущийДокумент;
    |НомерДокумента = Документ.Поручение.НомерДок;  
    |ДатаДокумента = Документ.Поручение.ДатаДок;
    |Кратко=Документ.Поручение.Тема;

Шапка
30 Ёпрст
 
28.01.14
14:11
а в справочнике.. типа выполненные поручения ?.. или там разные статусы по каждой строке документа, так шо ле ?
31 Mikeware
 
28.01.14
14:16
(28) а у вас программиста нет, штоле который может не коз запроса копипастить, а нормально описать структуру?
32 Geroy
 
28.01.14
14:22
(30)Есть 8 документов
Некоторые из них при записи делают записи в документ поручения
и потом по нему надо сделать отчёт об исполнении и тому подобное

в документ поручения не попадают некоторые данные уже как 3 года,и взять их можно только из справочника.документыпунктисполнения
Но сначало нужно найти нужный документ
33 Ёпрст
 
28.01.14
14:26
(32) а в справочник данные как попадают ?
Кто их туда пишет и в какой момент ?
А в документе Поручение, отсортировали табличную часть и записали документ,  "привет" котёнку ?
34 Geroy
 
28.01.14
14:32
Тоже из 8 документов
http://immage.biz/images/2014/01/28/0cvjSxd.jpg