Имя: Пароль:
1C
1С v8
Ограничение длины строки в запросе
0 Chubrik
 
14.09.11
09:33
Запрос делается через построитель.
Нужно сделать отбор по виду документа.
В поле запроса выбираю вид документа: ТИПЗНАЧЕНИЯ(ДокументОснование)
Далее в отборе устанавливаю:
...
ОтборПоВидуДокумента = мПостроительОтчета.Отбор.Добавить("ПоВидуДокумента");
ОтборПоВидуДокумента.Использование = ЗначениеЗаполнено(ВидДокумента);
ОтборПоВидуДокумента.ВидСравнения  = ВидСравнения.Содержит; // Равно не прокатывает, т. к. неогр. строка
ОтборПоВидуДокумента.Значение      = ВидДокумента;
...
ВидДокумента - строка, такая же, как выбирается в запросе.
После выполнения мПостроительОтчета.Выполнить() в мПостроительОтчета.Результат записи без учета отбора.
Посему вопросы:
1. Почему не срабатывает отбор?
2. ВидДокумента я могу ограничить, скажем, строка(200). Как ограничить это поле (ПоВидуДокумента) в запросе? Сейчас там следующее: ПРЕДСТАВЛЕНИЕ(ЕСТЬNULL(ТИПЗНАЧЕНИЯ(НДС_СчетФактураПолученныйДокументыОснования.ДокументОснование), ""))
Функции ПОДСТРОКА и ВЫРАЗИТЬ не работают с функцией как параметром, т. е. ПОДСТРОКА(ПРЕДСТАВЛЕНИЕ... , 1, 200) и ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ... КАК СТРОКА(200)) не работают, или я как-то не так пишу.
Help.
1 Axel2009
 
14.09.11
09:35
а без представления и строк?
2 DmitrO
 
14.09.11
09:40
ТИПЗНАЧЕНИЯ(ДокументОснование) - это вовсе не строка.
Это то что возвращает встроенная функция Тип().
3 aleks-id
 
14.09.11
09:40
делай через ВЫБОР КОГДА
4 Chubrik
 
14.09.11
10:10
(3) Каким конкретно образом?
5 Axel2009
 
14.09.11
10:21
(4) зачем это выражать когда нужно сравнивать одинаковые типы? а не Тип с Строкой??
6 Chubrik
 
14.09.11
10:24
(1) и (5) Читайте внимательнее описание про поле запроса:
Сейчас там следующее: ПРЕДСТАВЛЕНИЕ(ЕСТЬNULL(ТИПЗНАЧЕНИЯ(НДС_СчетФактураПолученныйДокументыОснования.ДокументОснование), ""))
7 Axel2009
 
14.09.11
10:26
ну так оставить ТИПЗНАЧЕНИЯ(НДС_СчетФактураПолученныйДокументыОснования.ДокументОснование) и сравнивать с ВидДокумента одинаковые типы. не?
8 aleks-id
 
14.09.11
10:28
(4)
ВЫБОР
   КОГДА ТИПЗНАЧЕНИЯ(НДС_СчетФактураПолученныйДокументыОснования.ДокументОснование) = ТИП(Документ.Док1)
       ТОГДА "Док1"
   КОГДА ТИПЗНАЧЕНИЯ(НДС_СчетФактураПолученныйДокументыОснования.ДокументОснование) = ТИП(Документ.Док2)
       ТОГДА "Док2"
КОНЕЦ
9 Chubrik
 
14.09.11
10:31
(8) Там 14 типов документов. Причем может быть не всегда 14...
Формировать запрос динамически не хочу, да и неправильно это как-то в этой ситуации, должен быть другой выход.
(7) Тогда не будет работать
ОтборПоВидуДокумента = мПостроительОтчета.Отбор.Добавить("ПоВидуДокумента");
Будет ругаться на недопустимое значение параметра №1.
10 hhhh
 
14.09.11
10:41
(9) да хоть 114. Увольняться то пока не собираешься, поэтому прекращай эти хочу - не хочу. Надо формировать динамически, значит формируй.
11 Chubrik
 
14.09.11
10:48
(10) Странная реакция на слово "хочу".
Подразумевалось, что так делать концептуально неправильно в данном случае и есть иное решение. А зачем делать абы как, если есть желание и возможность разобраться и сделать, как надо?
12 Chubrik
 
14.09.11
10:49
Интересно, почему перестало работать добавление в отбор после того, как я оставил только функцию ТИПЗНАЧЕНИЯ в поле запроса?
13 Axel2009
 
14.09.11
11:34
ну попробуй
ОтборПоВидуДокумента.Значение      = Строка(ВидДокумента);
14 Chubrik
 
14.09.11
11:56
(13) Не помогло. Но спасибо за участие :)
15 Axel2009
 
14.09.11
12:10
значит текст в обоих случаях разный
16 Chubrik
 
14.09.11
12:20
(15) Одинаковый вроде... Сравнивал...
17 Chubrik
 
16.09.11
08:24
Если кому интересно, решил весьма топорным способом при помощи фильтрации конечного результата, выгруженного в ТЗ. Мне не нравится, но работает.
Также в запросе использовал <Регистр>Обороты.Регистратор ССЫЛКА Документ.<НазваниеДокумента>.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn