|
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |