Имя: Пароль:
1C
1С v8
Конструктор запроса ругается, никак не пойму его
0 beholder13
 
10.12.12
16:31
Сабж:

ВЫБОР
   КОГДА ТоварыНаСкладахОбороты.Период is null
       ТОГДА "Ранее даты начала отчета"
   КОГДА ГОД(ТоварыНаСкладахОбороты.Период) = ГОД(&КонецПериода)
       ТОГДА ВЫРАЗИТЬ(МЕСЯЦ(&КонецПериода)-МЕСЯЦ(ТоварыНаСкладахОбороты.Период) КАК СТРОКА)+" мес. назад"
   ИНАЧЕ (ГОД(&КонецПериода)-ГОД(ТоварыНаСкладахОбороты.Период))+" г. "+ВЫРАЗИТЬ(МЕСЯЦ(&КонецПериода)-МЕСЯЦ(ТоварыНаСкладахОбороты.Период) КАК СТРОКА)+" мес. назад"
КОНЕЦ

Не ест то, что после слова "иначе", говорит "Неверные параметры '+'". И при этом с радостью кушает тело после второго "когда"... Функция ГОД() чем-то по своей сути радикально отличается от функции МЕСЯЦ()?
1 NcSteel
 
10.12.12
16:32
+ " г. "+

К числу строку пытаешся прибавить.
2 France
 
10.12.12
16:32
а разве конкатенация работает?
3 shuhard
 
10.12.12
16:33
(0)[(ГОД(&КонецПериода)-ГОД(ТоварыНаСкладахОбороты.Период))+" г. "+ВЫРАЗИТЬ(МЕСЯЦ(&КонецПериода)-МЕСЯЦ(ТоварыНаСкладахОбороты.Период) КАК СТРОКА)+" мес. назад" ]
в 8.4 уже работает такая структура ?
4 mikecool
 
10.12.12
16:33
(0) нежнее с ним надо, нежнее
5 mzelensky
 
10.12.12
16:33
(0) + второй "Конец" забыл.
6 beholder13
 
10.12.12
16:33
(3) Ща попробую оО но я на 8.2 =)
7 GROOVY
 
10.12.12
16:33
(2) Конкатенация в запросах работает. Но только, естественно, со строками, неявное преобразование, как в объектной модели недопустимо.
8 beholder13
 
10.12.12
16:34
(3) не, не знает такого
9 beholder13
 
10.12.12
16:35
(7) Так а что же он не ругается на ТОГДА ВЫРАЗИТЬ(МЕСЯЦ(&КонецПериода)-МЕСЯЦ(ТоварыНаСкладахОбороты.Период) КАК СТРОКА)+" мес. назад" ??
10 France
 
10.12.12
16:35
(7) та, та, спасибо.... перепроверил))..
11 mzelensky
 
10.12.12
16:35
(7) РАЗВЕ???

Т.е. если я возьму число, сделаю через выразить в строку и потом + "ПРИВЕТ", то он схавает??? раньше точно не хавало
12 beholder13
 
10.12.12
16:36
Если ВЫРАЗИТЬ(<> КАК СТРОКА), пишет "несовместимые типы "ВЫРАЗИТЬ"
13 Defender aka LINN
 
10.12.12
16:37
(11) Ну ты для начала сделай число через выразить в строку, потом приходи.
14 GLazNik
 
10.12.12
16:37
(11)
"число, сделаю через выразить в строку "
не взлетит
15 beholder13
 
10.12.12
16:37
(5) мож еще брейки прописать, как в сишнике? хД
16 ShoGUN
 
10.12.12
16:37
(11)(12) В 1С-ных запросах нет преобразования типов, вам приснилось. Есть только приведение.
17 beholder13
 
10.12.12
16:39
И все же, могу ли я как-то из разниц дат получить количество месяцев и вывести строкой из запроса?
18 dmpl
 
10.12.12
16:39
(9) Он просто до этого места еще не дошел.
19 beholder13
 
10.12.12
16:40
(18) как он может не дойти, если он по стеку проверяет сначала условия, и только при опустошении выходит на "иначе"?
20 Kreont
 
10.12.12
16:41
(17) Так?
РАЗНОСТЬДАТ(Дата1, Дата2, "МЕСЯЦ")
21 GLazNik
 
10.12.12
16:41
(17) как-то возможно и можно.... но это как-то будет не очень красивым решением. Что мешает преобразовать значение вне запроса?
22 ShoGUN
 
10.12.12
16:41
(17) РАЗНОСТЬДАТ
23 Defender aka LINN
 
10.12.12
16:41
(17) "из разниц дат получить количество месяцев" - да.
"вывести строкой из запроса" - нет.
Ну и "количество месяцев" тоже величина условная. Сколко месяцев разницы между 30.11 и 01.12?
24 beholder13
 
10.12.12
16:42
(20) да, сам тока вспомнил, не успел дописать хД
25 ShoGUN
 
10.12.12
16:42
(20) Без кавычек МЕСЯЦ.
26 beholder13
 
10.12.12
16:43
(23) номинально - это два разных месяца, тем более у запроса не будет юза на таких малых калибрах
27 PCcomCat
 
10.12.12
16:44
Кавычки двойные ставь!!!
"" мес. назад""
28 dmpl
 
10.12.12
16:44
(19) Дык проверь - убери ИНАЧЕ.
29 beholder13
 
10.12.12
16:44
Всем спасибо большое, затупил, надо больше спать =)
30 beholder13
 
10.12.12
16:44
(27) тише, тише, это в конструкторе, не кодом)
31 beholder13
 
10.12.12
16:46
(28) блин... 1с - страна чудес, сел, извините, поспать (ага, поспать), ремень исчез... умеет же вогнать в когнитивный диссонанс))
32 Defender aka LINN
 
10.12.12
16:47
(26) Ну хорошо. Между 01.11.2011 и 01.12.2012? :)
33 Defender aka LINN
 
10.12.12
16:47
+(32) т.е. между 30.11.2011 и 01.12.2012, конечено же :)
34 GROOVY
 
10.12.12
16:48
Еще раз про конкатенацию в запросах. Конкатенация работает только со строками, то бишь "ААА" + "БББ" или конкатенация любых строковых реквизитов будет работать на ура.
Преобразование типов значений в запросах не работает. Функция ВЫРАЗИТЬ приводит к значению на этапе пост обработки запроса, таки образом не удастся к дате или числу привязать строку ни в каком виде. Только строка+строка.
35 beholder13
 
10.12.12
16:48
(32) ну 13 же, или Вы, извините, первых курсов втузов не кончали? оО
36 beholder13
 
10.12.12
16:49
(34) плакаю... ='(((
37 beholder13
 
10.12.12
16:50
(33) транкуем дни, и остается 12 + 1 оО
38 GLazNik
 
10.12.12
16:51
(36) почему нельзя преобразование сделать после выполнения запроса?
На крайний случай сделать временную таблицу с числами от 0 до (сколько надо) и представлением этого числа. джойнить свои данные с этой таблицей и получать представление.
39 shuhard
 
10.12.12
16:51
(34) выдыхай =)
40 beholder13
 
10.12.12
16:52
(33) Особенно когда речь идет, например, не о ноябре и декабре, а о декабре и январе, то конечно это два совершенно разных месяца - в одном период закрывается, а в другом еще аццкий юзверь робко прячет тело мертвого порядка проведения документов
41 beholder13
 
10.12.12
16:53
(38) оно у меня прямым курсом в СКД уходит(
42 beholder13
 
10.12.12
16:54
ладно, поставлю -1 на ниль и выведу число((( а так хотелось быть плохим парнем и побороть систему!
43 France
 
10.12.12
16:55
(39) а чо "выдыхай??
44 Sammo
 
10.12.12
16:57
(41) В СКД пользовательские функции
45 beholder13
 
10.12.12
17:00
(44) вот потому и не хочу туда выводить, но придется
46 France
 
10.12.12
17:04
вот эта хрень "ВЫРАЗИТЬ(МЕСЯЦ(&КонецПериода)-МЕСЯЦ(ТоварыНаСкладахОбороты.Период) КАК СТРОКА)" - работает????
47 beholder13
 
10.12.12
17:06
(46) Нет)))
48 beholder13
 
10.12.12
17:07
работает вот такое

ВЫБОР
   КОГДА ТоварыНаСкладахОбороты.Период ЕСТЬ NULL
       ТОГДА -1
   ИНАЧЕ РАЗНОСТЬДАТ(ТоварыНаСкладахОбороты.Период, &КонецПериода, МЕСЯЦ)
КОНЕЦ
49 France
 
10.12.12
17:07
а чо тогда на    GROOVY порчу наводили??
50 beholder13
 
10.12.12
17:08
(49) только лишь на платформу и ее разрабов, не более того)))
51 France
 
10.12.12
17:10
тада, если тебе нужно писать "мес.назад" - левосоединения сделай)) через конструкцию Когда Выбор))
52 beholder13
 
10.12.12
17:12
(51) чтоб у мну там все дублями покрылось, как лицо юнца угрями? оО
53 beholder13
 
10.12.12
17:12
ВЫБОР
   КОГДА ТоварыНаСкладахОбороты.Период ЕСТЬ NULL
       ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОбороты.Период, &КонецПериода, МЕСЯЦ)+1
   ИНАЧЕ РАЗНОСТЬДАТ(ТоварыНаСкладахОбороты.Период, &КонецПериода, МЕСЯЦ)
КОНЕЦ

Муууууууууууухаххахахаххаааааааааххх
54 France
 
10.12.12
17:13
правиль сготовь, и не будет угрей??))
55 beholder13
 
10.12.12
17:13
ой, не то
56 France
 
10.12.12
17:13
Муууууууууууухаххахахаххаааааааааххх (с),  beholder13
57 beholder13
 
10.12.12
17:13
ВЫБОР
   КОГДА ТоварыНаСкладахОбороты.Период ЕСТЬ NULL
       ТОГДА РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ)+1
   ИНАЧЕ РАЗНОСТЬДАТ(ТоварыНаСкладахОбороты.Период, &КонецПериода, МЕСЯЦ)
КОНЕЦ

Вот он аццкий мелочь)))
Ошибка? Это не ошибка, это системная функция.