Имя: Пароль:
1C
1С v8
УФ: помогите с запросом!!!
0 dft2014
 
15.04.16
11:22
8.3
У нас есть понятие осн.договор и доп.соглашение. Но вводятся в программу они одним видом документа - "ДоговорРаботыУслуги". Чтобы их как-то различать между собой, в документе "ДоговорРаботыУслуги" добавили реквизит "ОсновнойДоговор": если этот реквизит не заполнен, то мы понимаем, что это и есть осн.договор. Если заполнен, то мы видим, что это доп.соглашение к такому-то осн.договору.

Задача:
На форме документа "ДоговорРаботыУслуги" добавлена кнопка, которая заполняет табличную часть всеми Актами, у которых одинаковый основной договор. Подскажите, почему если добавляю условие на осн.договор, то запрос не срабатывает. Без этого условия, все ок! Но мне надо отобрать именно по определенному осн.договору. Вот запрос:


&НаСервере
Процедура ЗаполнитьАктамиНаСервере()
    
    ЭтаФорма.Объект.ВсеАкты.Очистить();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    АктПриемкиВыполненныхРаботОказанныхУслуг.Ссылка КАК Акт,
    |    АктПриемкиВыполненныхРаботОказанныхУслуг.ДатаАктаС КАК ДатаАктаС,
    |    АктПриемкиВыполненныхРаботОказанныхУслуг.ДатаАктаПо КАК ДатаАктаПо
    |ИЗ
    |    Документ.АктПриемкиВыполненныхРаботОказанныхУслуг КАК АктПриемкиВыполненныхРаботОказанныхУслуг
    |ГДЕ
    |    АктПриемкиВыполненныхРаботОказанныхУслуг.Сотрудник = &Ссылка
    // вот это условие(
    |    И ТИПЗНАЧЕНИЯ(АктПриемкиВыполненныхРаботОказанныхУслуг.Договор) = ТИП(Документ.ДоговорРаботыУслуги)
    |    И АктПриемкиВыполненныхРаботОказанныхУслуг.Договор.ОсновнойДоговор = &ОсновнойДоговор";
    // вот это условие)
    
    Запрос.УстановитьПараметр("Ссылка", Объект.Сотрудник);
    Запрос.УстановитьПараметр("ОсновнойДоговор", Объект.ОсновнойДоговор);
    
    Результат = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл  
        НовСтр = Объект.ВсеАкты.Добавить();
        ЗаполнитьЗначенияСвойств(НовСтр, ВыборкаДетальныеЗаписи); //при условии что имена полей ТЧ и выборки совпадают
    КонецЦикла;
    
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьАктами(Команда)
    
    ЗаполнитьАктамиНаСервере();
    
КонецПроцедуры
1 dimaldinho
 
15.04.16
11:24
// вот это условие( - тут два условия
2 dft2014
 
15.04.16
11:28
(1) Два условия, т.к. в Акте, реквизит договор - составной:
- ДоговорРаботыУслуги
- ДоговорАвторскогоЗаказа
Поэтому я вставила условие:
ТИПЗНАЧЕНИЯ(АктПриемкиВыполненныхРаботОказанныхУслуг.Договор) = ТИП(Документ.ДоговорРаботыУслуги)
3 FIXXXL
 
15.04.16
11:50
(2) это лишнее
4 dft2014
 
15.04.16
12:04
(3) Даже если убираю это условие, то запрос все равно не срабатывает.
5 FIXXXL
 
15.04.16
12:06
(4) ну проверь, что в параметры передаешь
6 dimaldinho
 
15.04.16
12:13
+ к (5) убери оба условия, добавь в выбранные поля

АктПриемкиВыполненныхРаботОказанныхУслуг.Договор.ОсновнойДоговор

выполни запрос в консоли, посмотри, что выходит
7 dft2014
 
15.04.16
13:15
В консоли, запрос из (0) отрабатывает верно!
8 dft2014
 
15.04.16
13:16
+(7) даже с этими двумя условиями!!!
9 FIXXXL
 
15.04.16
13:28
(8) отладчик в руки и (5)
10 dft2014
 
15.04.16
13:43
(9) отладчиком не заходит в цикл почему-то, а параметры передаются верные!
11 ks_83
 
15.04.16
13:59
это  убираем
ТИПЗНАЧЕНИЯ(АктПриемкиВыполненныхРаботОказанныхУслуг.Договор) = ТИП(Документ.ДоговорРаботыУслуги)
а это
АктПриемкиВыполненныхРаботОказанныхУслуг.Договор.ОсновнойДоговор = &ОсновнойДоговор";
меняем на следующее
ВЫРАЗИТЬ(АктПриемкиВыполненныхРаботОказанныхУслуг.Договор КАК Документ.ДоговорРаботыУслуги).ОсновнойДоговор = &ОсновнойДоговор";
Программист всегда исправляет последнюю ошибку.