Имя: Пароль:
1C
1С v8
Запрос: условие
0 Adgjj
 
13.08.12
10:50
Скажите, пжл, как написать в условии проверку, что текущий документ (ЭтотОбъект) ремонт или не ремонт?
&Ремонт = ""1""
Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ //ездки
   |    ВыработкаТС_Лес.ПутЛист КАК Док,
   |    ВыработкаТС_Лес.ДатаВыезда КАК ДатаНач,
   |    ВыработкаТС_Лес.ДатаВозвращения КАК ДатаКон
   |ИЗ
   |    РегистрНакопления.ВыработкаТС_Лес КАК ВыработкаТС_Лес
   |ГДЕ
   |       (&ДатаНачТек МЕЖДУ ВыработкаТС_Лес.ДатаВыезда И ВыработкаТС_Лес.ДатаВозвращения
   |    ИЛИ &ДатаОкТек МЕЖДУ ВыработкаТС_Лес.ДатаВыезда И ВыработкаТС_Лес.ДатаВозвращения
   |    ИЛИ ВыработкаТС_Лес.ДатаВыезда      МЕЖДУ &ДатаНачТек И &ДатаОкТек
   |    ИЛИ ВыработкаТС_Лес.ДатаВозвращения МЕЖДУ &ДатаНачТек И &ДатаОкТек) //ищем док-ты, дата/время к-рых пересекается с дата/время текущего док.
   |    И ВыработкаТС_Лес.ТС = &АвтоИзЭтогоДок И ВыработкаТС_Лес.Активность И ВыработкаТС_Лес.Организация = &Организация  
   |
   |ОБЪЕДИНИТЬ
   |
   | ВЫБРАТЬ //ремонты
   |    ПростоиТС.Регистратор,
   |    ПростоиТС.ДатаНачала,
   |    ПростоиТС.ДатаОкончания
   |ИЗ
   |    РегистрНакопления.ПростоиТС КАК ПростоиТС
   |ГДЕ
   |       (&ДатаНачТек МЕЖДУ ПростоиТС.ДатаНачала И ПростоиТС.ДатаОкончания
   |    ИЛИ &ДатаОкТек МЕЖДУ ПростоиТС.ДатаНачала И ПростоиТС.ДатаОкончания
   |    ИЛИ ПростоиТС.ДатаНачала    МЕЖДУ &ДатаНачТек И &ДатаОкТек
   |    ИЛИ ПростоиТС.ДатаОкончания МЕЖДУ &ДатаНачТек И &ДатаОкТек) //в ремонте ДатаНачала=ДатаОкончания; зато время разное: в 1С8 дата это дата+время.
   |    И ПростоиТС.ТС = &АвтоИзЭтогоДок И ПростоиТС.Активность И ПростоиТС.Организация = &Организация
   |
   //|    И ((ПростоиТС.Регистратор ссылка Документ.уатРемонтныйЛист и ПростоиТС.ДатаНачала <> &ДатаНачТек)
   //|    или не (ПростоиТС.Регистратор ссылка Документ.уатРемонтныйЛист)) //если есть еще 1-2 ремонта по этому же авто на ту же дату - не ошибка, просто ремонтируют 2-3 водителя
   //|   //если ТекущийДокумент = ремонт
   
   |    //если есть еще неск. ремонтов по этому же авто на ту же дату - не ошибка, просто ремонтируют 1-4 водителя
   |    И ((&Ремонт = ""1"" и ПростоиТС.ДатаНачала <> &ДатаНачТек) или &Ремонт = ""0"")
   |
   |УПОРЯДОЧИТЬ ПО
   |    ДатаКон
   |";  
    Запрос.УстановитьПараметр("Организация", ЭтотОбъект.Организация);
    Запрос.УстановитьПараметр("ДатаНачТек", ЭтотОбъект.ДатаНачала); //ДатаНачала с формы ремонта или ДатаВыезда для ездки
    Запрос.УстановитьПараметр("ДатаОкТек", ЭтотОбъект.ДатаОкончания);
    Запрос.УстановитьПараметр("АвтоИзЭтогоДок", ЭтотОбъект.ТС);
    если ТипЗнч(ЭтотОбъект) = Тип("ДокументОбъект.уатРемонтныйЛист") тогда
        Запрос.УстановитьПараметр("Ремонт","1");  
    иначе
        Запрос.УстановитьПараметр("Ремонт","0");
    конецесли;
    ТЗ = Запрос.Выполнить().Выгрузить();
1 ДенисЧ
 
13.08.12
10:51
ССЫЛКА Документ.Ремонт
2 Adgjj
 
13.08.12
10:52
сейчас ошибку не выдает, но и не работает:
в ТЗ попадают строки ремонтов на ту же дату
3 Adgjj
 
13.08.12
11:08
проблема в том, что в 1С8 дата - это дата + время: поэтому ПростоиТС.ДатаНачала <> &ДатаНачТек не работает
с помощью |    ПОДСТРОКА(ПростоиТС.ДатаНачала, 1, 8) тоже не получается

|ОБЪЕДИНИТЬ
   |
   | ВЫБРАТЬ //ремонты
   |    ПростоиТС.Регистратор,
   |    ПростоиТС.ДатаНачала,
   |    ПростоиТС.ДатаОкончания,
   |    ПОДСТРОКА(ПростоиТС.ДатаНачала, 1, 8)
   |ИЗ
   |    РегистрНакопления.ПростоиТС КАК ПростоиТС
   |ГДЕ
   |       (&ДатаНачТек МЕЖДУ ПростоиТС.ДатаНачала И ПростоиТС.ДатаОкончания
   |    ИЛИ &ДатаОкТек МЕЖДУ ПростоиТС.ДатаНачала И ПростоиТС.ДатаОкончания
   |    ИЛИ ПростоиТС.ДатаНачала    МЕЖДУ &ДатаНачТек И &ДатаОкТек
   |    ИЛИ ПростоиТС.ДатаОкончания МЕЖДУ &ДатаНачТек И &ДатаОкТек) //в ремонте ДатаНачала=ДатаОкончания; зато время разное: в 1С8 дата это дата+время.
   |    И ПростоиТС.ТС = &АвтоИзЭтогоДок И ПростоиТС.Активность И ПростоиТС.Организация = &Организация
   |
   //|    И ((ПростоиТС.Регистратор ссылка Документ.уатРемонтныйЛист и ПростоиТС.ДатаНачала <> &ДатаНачТек)
   //|    или не (ПростоиТС.Регистратор ссылка Документ.уатРемонтныйЛист)) //если есть еще 1-2 ремонта по этому же авто на ту же дату - не ошибка, просто ремонтируют 2-3 водителя
   //|   //если ТекущийДокумент = ремонт
   |";
   Если ТипЗнч(ЭтотОбъект) = Тип("ДокументОбъект.уатРемонтныйЛист") Тогда
       Запрос.Текст = Запрос.Текст + "
       |    И ПростоиТС.ДатаНачала <> &ДатаНачТек";
   КонецЕсли;
   Запрос.Текст = Запрос.Текст + "
   |
   |УПОРЯДОЧИТЬ ПО
   |    ДатаКон
   |";
4 Adgjj
 
13.08.12
11:11
И НАЧАЛОПЕРИОДА(ПростоиТС.ДатаНачала, День) <> НАЧАЛОПЕРИОДА(&ДатаНачТек, День)";
так вроде бы получилось