Имя: Пароль:
1C
1С v8
Как в запросе сделать выборку документов по дате и времени?
,
0 Ar-Bus
 
12.09.12
22:39
Доброго времени суток, господа! Подскажите, пожалуйста, как написать запрос... Необходимо сделать выборку документов, например, за сутки, но только не с времени 00:00:00, а с 8:00:00. Как в запросе указать, что необходимо учитывать не только дату, но и время документа? В реквизитах формы отчета ДатаНачала, ДатаОкончания поставил вид -Дата, состав - Дата+Время. Но этого же недостаточно. Еще нужно в тексте запроса это как-то прописать... Не судите строго, ниже приведен текст Функции полностью. Но может кто сразу подскажет, где ошибка...


Функция СформироватьЗапрос()

Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
|    ВложенныйЗапрос.Ссылка,
|    ВложенныйЗапрос.ПометкаУдаления,
|    ВложенныйЗапрос.Номер,
|    ВложенныйЗапрос.Дата КАК Дата,
|    ВложенныйЗапрос.Тип,
|    ВложенныйЗапрос.Грузоотправитель КАК Контрагент,
|    ВложенныйЗапрос.Грузополучатель КАК Контрагент1,
|    ВложенныйЗапрос.НомерМашины,
|    ВложенныйЗапрос.Культура,
|    ВложенныйЗапрос.НачалоОперации КАК НачалоОперации,
|    ВложенныйЗапрос.ОкончаниеОперации,
|    СУММА(ВложенныйЗапрос.ФактическиБрутто) КАК Брутто,
|    СУММА(ВложенныйЗапрос.ФактическиТара) КАК Тара,
|    СУММА(ВложенныйЗапрос.ФактическиНетто) КАК Нетто,
|    ВложенныйЗапрос.Склад,
|    ВложенныйЗапрос.ВесПоНакладной,
|    ВложенныйЗапрос.Расхождение
|ИЗ
|    (ВЫБРАТЬ
|     ц_ППН.Ссылка КАК Ссылка,
|     ц_ППН.ПометкаУдаления КАК ПометкаУдаления,
|     ц_ППН.ВидТранспорта КАК ВидТранспорта,
|     ц_ППН.НомерНаклПоставщика КАК Номер,
|     НАЧАЛОПЕРИОДА(ц_ППН.Дата, ДЕНЬ) КАК Дата,
|     ""ППН"" КАК Тип,
|     ц_ППН.Организация КАК Организация,
|     ц_ППН.Грузоотправитель КАК Грузоотправитель,
|     ц_ППН.Контрагент КАК Грузополучатель,
|     ц_ППН.НачалоОперации КАК НачалоОперации,
|     ц_ППН.ОкончаниеОперации КАК ОкончаниеОперации,
|     ц_ППН.НомерМашины КАК НомерМашины,
|     ц_ППН.ВесПоНакладной КАК ВесПоНакладной,
|     ВЫБОР
|     КОГДА ц_КарточкаАнализа.Ссылка ЕСТЬ NULL ИЛИ ц_КарточкаАнализа.Номенклатура ЕСТЬ NULL
|     ТОГДА ц_ППН.Сырье
|     ИНАЧЕ ц_КарточкаАнализа.Номенклатура
|     КОНЕЦ КАК Культура,
|     ц_ППН.ФактическиБрутто КАК ФактическиБрутто,
|     ц_ППН.ФактическиТара КАК ФактическиТара,
|     ц_ППН.ФактическиНетто КАК ФактическиНетто,
|     ц_ППН.ФактическиНетто - ц_ППН.ВесПоНакладной КАК Расхождение,
|     ц_ППН.Склад КАК Склад,
|     0 КАК ВидОперации
|    ИЗ
|     Документ.ц_ППН КАК ц_ППН
|     ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|     КарточкаАнализа.КлассСырья.Номенклатура КАК Номенклатура,
|     КарточкаАнализа.Ссылка
|     ИЗ
|     Документ.ц_КарточкаАнализа КАК КарточкаАнализа) КАК ц_КарточкаАнализа
|     ПО
|     ц_ППН.КарточкаАнализа = ц_КарточкаАнализа.Ссылка
|    ГДЕ
|     ц_ППН.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|     И ц_ППН.ВидТранспорта = ЗНАЧЕНИЕ(Перечисление.ц_ВидыТранспорта.Автомобильный)
|     И ц_ППН.Сырье = &Сырье
|     И (НЕ ц_КарточкаАнализа.Ссылка ЕСТЬ NULL И ц_КарточкаАнализа.Номенклатура = &Номенклатура)
|    
|    ОБЪЕДИНИТЬ ВСЕ
|    
|    ВЫБРАТЬ
|     ц_ТТН.Ссылка,
|     ц_ТТН.ПометкаУдаления,
|     ц_ТТН.ВидТранспорта,
|     ц_ТТН.Номер,
|     НАЧАЛОПЕРИОДА(ц_ТТН.Дата, ДЕНЬ),
|     ""ТТН"",
|     ц_ТТН.Организация,
|     ц_ТТН.Грузополучатель,
|     ц_ТТН.Контрагент,
|     ц_ТТН.НачалоОперации,
|     ц_ТТН.ОкончаниеОперации,
|     ц_ТТН.Машина,
|     0,
|     ВложенныйЗапрос.Номенклатура,
|     ц_ТТН.ВБрутто,
|     ц_ТТН.ВТара,
|     ц_ТТН.ВНетто,
|     0,
|     ц_ТТН.Склад,
|     ц_ТТН.ВидОперации
|    ИЗ
|     Документ.ц_ТТН КАК ц_ТТН
|     ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|     ц_ТТНТовары.Ссылка КАК Ссылка,
|     ц_ТТНТовары.Номенклатура КАК Номенклатура
|     ИЗ
|     Документ.ц_ТТН.Товары КАК ц_ТТНТовары
|     ГДЕ
|     ц_ТТНТовары.НомерСтроки = 1) КАК ВложенныйЗапрос
|     ПО ц_ТТН.Ссылка = ВложенныйЗапрос.Ссылка
|    ГДЕ
|     ц_ТТН.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|     И ц_ТТН.ВидТранспорта = ЗНАЧЕНИЕ(Перечисление.ц_ВидыТранспорта.Автомобильный)
|     И ВложенныйЗапрос.Номенклатура = &Номенклатура
|    
|    ОБЪЕДИНИТЬ ВСЕ
|    
|    ВЫБРАТЬ
|     ц_ПеремещениеСырья.Ссылка,
|     ц_ПеремещениеСырья.ПометкаУдаления,
|     ц_ПеремещениеСырья.ВидТранспорта,
|     ц_ПеремещениеСырья.Номер,
|     ц_ПеремещениеСырья.Дата,
|     ""ЗПП-19"",
|     ц_ПеремещениеСырья.Организация,
|     0,
|     0,
|     ц_ПеремещениеСырья.НачалоОперации,
|     ц_ПеремещениеСырья.ОкончаниеОперации,
|     ц_ПеремещениеСырья.НомерМашины,
|     0,
|     ВложенныйЗапрос.Номенклатура,
|     ц_ПеремещениеСырья.ВБрутто,
|     ц_ПеремещениеСырья.ВТара,
|     ц_ПеремещениеСырья.ВНетто,
|     0,
|     ц_ПеремещениеСырья.СкладОтправитель,
|     0
|    ИЗ
|     Документ.ц_ПеремещениеСырья КАК ц_ПеремещениеСырья
|     ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|     ц_ПеремещениеСырьяТовары.Ссылка КАК Ссылка,
|     ц_ПеремещениеСырьяТовары.Номенклатура КАК Номенклатура
|     ИЗ
|     Документ.ц_ПеремещениеСырья.Товары КАК ц_ПеремещениеСырьяТовары
|     ГДЕ
|     ц_ПеремещениеСырьяТовары.НомерСтроки = 1) КАК ВложенныйЗапрос
|     ПО ц_ПеремещениеСырья.Ссылка = ВложенныйЗапрос.Ссылка
|    ГДЕ
|     ц_ПеремещениеСырья.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|     И ц_ПеремещениеСырья.ВидТранспорта = ЗНАЧЕНИЕ(Перечисление.ц_ВидыТранспорта.Автомобильный)
|     И ВложенныйЗапрос.Номенклатура = &Номенклатура
|
|    ОБЪЕДИНИТЬ ВСЕ
|    
|    ВЫБРАТЬ
|     ц_ВывозОтходов.Ссылка,
|     ц_ВывозОтходов.ПометкаУдаления,
|     NULL,
|     ц_ВывозОтходов.Номер,
|     ц_ВывозОтходов.Дата,
|     ""ЗПП-23"",
|     ц_ВывозОтходов.Организация,
|     0,
|     0,
|     ц_ВывозОтходов.НачалоОперации,
|     ц_ВывозОтходов.ОкончаниеОперации,
|     ц_ВывозОтходов.НомерМашины,
|     0,
|     ц_ВывозОтходов.Номенклатура,
|     ц_ВывозОтходов.ВБрутто,
|     ц_ВывозОтходов.ВТара,
|     ц_ВывозОтходов.ФизВес,
|     0,
|     ц_ВывозОтходов.Склад,
|     0
|    ИЗ
|     Документ.ц_ВывозОтходов КАК ц_ВывозОтходов
|    ГДЕ
|     1 = 1
|     И ц_ВывозОтходов.Номенклатура = &Номенклатура) КАК ВложенныйЗапрос
|ГДЕ
|    ВложенныйЗапрос.Дата МЕЖДУ &НачалоПериода И &КонецПериода";

Если ВидОтчета = "Приемка (ППН)" Тогда
ТекстЗапроса = ТекстЗапроса + Символы.ПС + Символы.Таб +
"И ВложенныйЗапрос.Тип = ""ППН""";
ИначеЕсли ВидОтчета = "Отгрузка (ТТН)" Тогда
ТекстЗапроса = ТекстЗапроса + Символы.ПС + Символы.Таб +
"И ВложенныйЗапрос.Тип = ""ТТН""
|    И ВложенныйЗапрос.ВидОперации = &ВидОперации";
ИначеЕсли ВидОтчета = "Внутренние перемещения" Тогда
ТекстЗапроса = ТекстЗапроса + Символы.ПС + Символы.Таб +
"И ВложенныйЗапрос.Тип = ""ЗПП-19""";    

ИначеЕсли ВидОтчета = "Вывоз негодных отходов" Тогда
ТекстЗапроса = ТекстЗапроса + Символы.ПС + Символы.Таб +
"И ВложенныйЗапрос.Тип = ""ЗПП-23""";    
КонецЕсли;

ТекстЗапроса = ТекстЗапроса + "    
|    И ВложенныйЗапрос.Организация = &Организация
|    И ВложенныйЗапрос.Склад = &Склад
|    И ВложенныйЗапрос.Грузоотправитель = &Контрагент
|    И ВложенныйЗапрос.Грузополучатель = &Контрагент1
|    И ВложенныйЗапрос.ПометкаУдаления = ЛОЖЬ
|    И ВложенныйЗапрос.ФактическиБрутто <> 0
|    И ВложенныйЗапрос.ФактическиТара <> 0
|
|СГРУППИРОВАТЬ ПО
|    ВложенныйЗапрос.Дата,
|    ВложенныйЗапрос.Грузоотправитель,
|    ВложенныйЗапрос.Грузополучатель,
|    ВложенныйЗапрос.Номер,
|    ВложенныйЗапрос.Тип,
|    ВложенныйЗапрос.НачалоОперации,
|    ВложенныйЗапрос.ОкончаниеОперации,
|    ВложенныйЗапрос.ВесПоНакладной,
|    ВложенныйЗапрос.Расхождение,
|    ВложенныйЗапрос.НомерМашины,
|    ВложенныйЗапрос.Культура,
|    ВложенныйЗапрос.Склад,
|    ВложенныйЗапрос.Ссылка,
|    ВложенныйЗапрос.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
|    Дата,
|    НачалоОперации";

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

Если ЗначениеЗаполнено(ВидОперации) Тогда
Запрос.УстановитьПараметр("ВидОперации", ВидОперации);
Иначе
СтрокаПоиска = Символы.ПС + Символы.Таб + "И ВложенныйЗапрос.ВидОперации = &ВидОперации";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,СтрокаПоиска,"");
КонецЕсли;

Если ЗначениеЗаполнено(Сырье) Тогда
Запрос.УстановитьПараметр("Сырье", Сырье);
Иначе
СтрокаПоиска = Символы.ПС + Символы.Таб + Символы.Таб + "И ц_ППН.Сырье = &Сырье";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,СтрокаПоиска,"");
КонецЕсли;

Если ЗначениеЗаполнено(Номенклатура) Тогда
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Иначе
СтрокаПоиска = Символы.ПС + Символы.Таб + Символы.Таб + "И ВложенныйЗапрос.Номенклатура = &Номенклатура";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,СтрокаПоиска,"");
СтрокаПоиска = Символы.ПС + Символы.Таб + Символы.Таб + "И ц_ВывозОтходов.Номенклатура = &Номенклатура) КАК ВложенныйЗапрос";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,СтрокаПоиска,") КАК ВложенныйЗапрос");
СтрокаПоиска = Символы.ПС + Символы.Таб + Символы.Таб + "И (НЕ ц_КарточкаАнализа.Ссылка ЕСТЬ NULL И ц_КарточкаАнализа.Номенклатура = &Номенклатура)";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,СтрокаПоиска,"");
КонецЕсли;

Запрос.Текст = ТекстЗапроса;

Возврат Запрос;

КонецФункции
1 lubja
 
12.09.12
22:45
функцию не читала - многабукав...
а что тебе мешает параметры так и устанавливать НачалоДня() и КонецДня, а непосредственно, сами даты, так как они есть...
2 Vladal
 
12.09.12
22:48
> Дата+Время. Но этого же недостаточно. Еще нужно в тексте запроса это как-то прописать...

Ставь параметры запроса:
(НачалоДня(Дата) + 3600*8)
3 Ar-Bus
 
12.09.12
22:55
(1) устанавливал просто сами даты, но все равно время не учитывает
4 lubja
 
12.09.12
22:56
* не НачалоДня и КонецДня, а тупо даты.
(3) да ладно... должно со временем хавать....
5 Ar-Bus
 
12.09.12
22:57
(2) а это уже интересно... Ну а как в тексте запроса это прописать? В реквизитах же формы отчета стоят даты со временем... А после выполнения запроса вижу, например, следующее: в форме отчета в реквизитах ставил: ДатаНачала - 06.07.12 08:00:00, ДатаОкончания - 07.07.12 08:00:00. На экране отображаются документы с 06.07.12 00:00:00 по 06.07.12 23:59:59
6 Ar-Bus
 
12.09.12
22:58
(4) Да, НачалоДня и КонецДня убирал, все равно не помогает
7 lubja
 
12.09.12
23:01
(6) не поверила... и проверила, все нормально выбирается, с учетом проставленного времени
8 Vladal
 
12.09.12
23:06
(6) Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(НачалоПериода)+8*60*60); - это на 8 утра
Запрос.УстановитьПараметр("КонецПериода", КонецДня(КонецПериода) - 6*60*60); - за 6 часов до полуночи
9 Vladal
 
12.09.12
23:07
СтрокаПоиска = Символы.ПС + Символы.Таб + Символы.Таб + "И (НЕ ц_КарточкаАнализа.Ссылка ЕСТЬ NULL И ц_КарточкаАнализа.Номенклатура = &Номенклатура)";

ИМХО символы ПС и Таб здесь лишние. Хотя жесткая привязка к уровню вложенности
10 Ar-Bus
 
12.09.12
23:14
(7) Тебе поверил и еще раз проверил. Все заработало, спасибо большое
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн