Имя: Пароль:
1C
1С v8
Условие в результате запроса(
0 MrFilO
 
24.01.17
12:46
Товарищи, уверен, что для местных это выглядит элементарно, но я в упор не вижу способа обратиться к результату запроса. Очень мало опыта.
Вот процедура
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    МО.Менеджер КАК ИДМенеджер
        |ИЗ
        |    (ВЫБРАТЬ
        |        МенеджерыОрганизации.Супервайзер КАК Супервайзер,
        |        МенеджерыОрганизации.Ссылка КАК Менеджер,
        |        МенеджерыОрганизации.менеджерСети.Код КАК КодМенеджера
        |    ИЗ
        |        Справочник.МенеджерыОрганизации КАК МенеджерыОрганизации
        |    ГДЕ
        |        МенеджерыОрганизации.ПометкаУдаления = ЛОЖЬ
        |    
        |    ОБЪЕДИНИТЬ ВСЕ
        |    
        |    ВЫБРАТЬ
        |        МенеджерыОрганизации.Супервайзер,
        |        МенеджерыОрганизации.Ссылка,
        |        МенеджерыОрганизации.менеджерТрадиции.Код
        |    ИЗ
        |        Справочник.МенеджерыОрганизации КАК МенеджерыОрганизации
        |    ГДЕ
        |        МенеджерыОрганизации.ПометкаУдаления = ЛОЖЬ) КАК МО
        |ГДЕ
        |    МО.КодМенеджера = &КодМенеджера";
    
    Запрос.УстановитьПараметр("КодМенеджера", КодМенеджера);
    
    МенеджерЗапрос = Запрос.Выполнить().Выгрузить();
    
    Если МенеджерЗапрос.Количество() > 0 Тогда
        Возврат Формат(Число(МенеджерЗапрос[0].ИДМенеджер),"ЧГ=0");
    Иначе
        Возврат Формат(Число(?(обПустоеЗначение(КодМенеджера),0,КодМенеджера)),"ЧГ=0");
    КонецЕсли;

Хочу вставить проверку для значения поля ИДМенеджера на НЕОПРЕДЕЛЕНО и NULL,
типа
Если МенеджерЗапрос.КодМенеджера = Неопределено ИЛИ МенеджерЗапрос.КодМенеджера = NULL Тогда
  МенеджерЗапрос.КодМенеджера = 0
  КонецЕсли;
НО, какое бы поле не указал - ошибка - "поле объекта не обнаружено"(((
1 MrFilO
 
24.01.17
12:47
Новое условие пытаюсь всунуть перед уже имеющимся
2 shadow_sw
 
24.01.17
12:48
а что мешает проверять на эти условия прям в запросе, конструкцией Выбор когда тогда конец?
3 Ёпрст
 
24.01.17
12:48
Если МенеджерЗапрос.пустой() Тогда
  Возврат 0
4 MrFilO
 
24.01.17
12:49
По идее в результате запроса описать метод "Выбрать()", но как его 3-им указать?( или вообще не туда копаю
5 shadow_sw
 
24.01.17
12:49
ЕСТЬNULL(МенеджерЗапрос.КодМенеджера,0)
6 MrFilO
 
24.01.17
12:49
(2) не, нужно выбрать все записи, а пустые забить нулями
7 Джинн
 
24.01.17
12:49
Что это такое вообще? Думаю проблема не в коде, а в логике. На кой ляд Вам код? Зачем объединение?
8 Джинн
 
24.01.17
12:50
(6) В запросе и забейте.
9 MrFilO
 
24.01.17
12:50
код не мой, разраб в больнице, приходится мне отдуваться, т.к. какое-то понимание есть. (7)
10 mkalimulin
 
24.01.17
12:51
(0) У тебя в результате запроса три колонки:
ИДменеджера, ссылка, код
к ним и обращайся.
11 shadow_sw
 
24.01.17
12:51
(8) через выбор все  и сделать :)
12 MrFilO
 
24.01.17
12:51
(5) а можно чуток подробнее, куда вставить? в условие?
13 MrFilO
 
24.01.17
12:52
ребят, не сочтите за наглость, а можно "пальцем" ткнуть, что куда написать?))
14 shadow_sw
 
24.01.17
12:52
в первый выбор и сделай
"ВЫБРАТЬ
        |    ЕстьNULL(МО.Менеджер,0) КАК ИДМенеджер
15 MrFilO
 
24.01.17
12:54
"ВЫБРАТЬ
        |    ЕстьNULL(МО.Менеджер,0) КАК ИДМенеджер
        //|    МО.Менеджер КАК ИДМенеджер
        |ИЗ
        |    (ВЫБРАТЬ
        |        МенеджерыОрганизации.Супервайзер КАК Супервайзер,
        |        МенеджерыОрганизации.Ссылка КАК Менеджер,
        |        МенеджерыОрганизации.менеджерСети.Код КАК КодМенеджера
        |    ИЗ

Сделал так - "Поле объекта не обнаружено "КодМенеджера""
16 shadow_sw
 
24.01.17
12:55
параметры?
17 MrFilO
 
24.01.17
12:55
черт, стоп, мой косяк дальше)
18 MrFilO
 
24.01.17
12:56
блин, не помогло, все равно
{Форма.Форма.Форма(288)}: Преобразование значения к типу Число не может быть выполнено
        Возврат Формат(Число(МенеджерЗапрос[0].ИДМенеджер),"ЧГ=0");
Это и было изначальной проблемой
19 shadow_sw
 
24.01.17
12:58
смотри отладчиком,  что у тебя в
МенеджерЗапрос[0].ИДМенеджер
20 MrFilO
 
24.01.17
13:02
(19) Есть и код и т.п., все заполнено
21 MrFilO
 
24.01.17
13:02
а как скрин приложить?)
22 MrFilO
 
24.01.17
13:13
(19) задал условия так
Если МенеджерЗапрос[0].ИДМенеджер = Неопределено ИЛИ МенеджерЗапрос[0].ИДМенеджер = NULL Тогда
  МенеджерЗапрос[0].ИДМенеджер = 0
  КонецЕсли;
  
  
    
    Если МенеджерЗапрос.Количество() > 0 Тогда
        Возврат Формат(Число(МенеджерЗапрос[0].ИДМенеджер),"ЧГ=0");
    Иначе
        Возврат Формат(Число(?(обПустоеЗначение(КодМенеджера),0,КодМенеджера)),"ЧГ=0");
    КонецЕсли;

хз, что это за логика, но преобразовать в число все равно не могу
23 MrFilO
 
24.01.17
13:15
Пепец, не может преобразовать в число даже корректные данные, в отладчике видно, что КОДМенеджера заполнен (000017), но все равно на следующем условии валится(
24 nordbox
 
24.01.17
13:22
(23) Нули лидирующие убери
25 nordbox
 
24.01.17
13:27
Функция УбратьНули(Номер)
Пока Лев(Номер, 1) = "0" Цикл
    Номер = Прав(Номер, СтрДлина(Номер) - 1);
КонецЦикла;
Возврат Номер;
КонецФункции
26 MrFilO
 
24.01.17
13:32
(25) в МенеджерЗапрос[0].ИДМенеджер содержится значение "Желудов Игорь", не понимаю, на кой черт его в число преобразовывать?
27 MrFilO
 
24.01.17
13:32
(25) а вот уже КодМенеджера содержит его код с нулями
28 MrFilO
 
24.01.17
13:33
(25) ругается то именно на попытку преобразовать ИДМенеджер, кто эту ересь писал...
29 nordbox
 
24.01.17
13:38
Ты же в (23) говорили что КОДМенеджера заполнен (000017)
я тебе и говорю что сделать
ИДменеджера это другое
30 MrFilO
 
24.01.17
13:39
(29) я понял, но ошибка то
{Форма.Форма.Форма(289)}: Преобразование значения к типу Число не может быть выполнено
        Возврат Формат(Число(МенеджерЗапрос[0].ИДМенеджер),"ЧГ=0");
31 nordbox
 
24.01.17
13:40
(28) Вот почему он ИДМенегера крутит

Если МенеджерЗапрос[0].ИДМенеджер = Неопределено ИЛИ МенеджерЗапрос[0].ИДМенеджер = NULL Тогда
  МенеджерЗапрос[0].ИДМенеджер = 0
  КонецЕсли;
32 MrFilO
 
24.01.17
13:41
так без этого условия тоже, это условие выше, на проверку НУЛЛ или неопределено я попробовал воткнуть, она секйчас закоментирована, но ошибка та же
33 nordbox
 
24.01.17
13:49
Тут ни чего супер нет к пониманию
Если ИДМенегера пусто то насильно присвоить ему "0"
если нет то оставить, далее..
Либо вернуть ноль из ИДМенегера либо вернуть КОДМенегера
34 nordbox
 
24.01.17
13:50
Ну попробуй через
Попытка
Исключение
правда так не красиво делать ))
35 MrFilO
 
24.01.17
13:54
(33) нет, ну попытка попыткой, не совсем понимаю что это условие означает
Если МенеджерЗапрос.Количество() > 0 Тогда
        Возврат Формат(Число(МенеджерЗапрос[0].ИДМенеджер),"ЧГ=0");
    Иначе
        Возврат Формат(Число(?(обПустоеЗначение(КодМенеджера),0,КодМенеджера)),"ЧГ=0");
    КонецЕсли;
исходя из вычисления значения выражения получается, что МенеджерЗапрос[0].ИДМенеджер = Евгений Пупкин, Код у него 000017, что и зачем возвращать? почему пытаемся вроде правильное значение Евгений Пупкин преобразовать в число?
36 Волшебник
 
модератор
24.01.17
13:54
(9) Что с разрабом? Руки переломали?
37 MrFilO
 
24.01.17
13:55
(33) "Тут ни чего супер нет к пониманию
Если ИДМенегера пусто то насильно присвоить ему "0"
если нет то оставить, далее.. "
вот это условие я дописывал, оно не влияет на образование проблемы.
38 MrFilO
 
24.01.17
13:56
(36) Аппендикс лопнул вроде позавчера, в реанимации
39 nordbox
 
24.01.17
14:04
Нуууу.....
если ИДМенеджер=Пупкин
то строка
Возврат Формат(Число(МенеджерЗапрос[0].ИДМенеджер),"ЧГ=0");
действительно не понятна
Может он раньше с этим ИДМенегером что то делал?
40 MrFilO
 
24.01.17
14:09
(39) хз, оставил так
Если МенеджерЗапрос.Количество() > 0 Тогда
        //Возврат Формат(Число(МенеджерЗапрос[0].ИДМенеджер),"ЧГ=0");
        Возврат МенеджерЗапрос[0].ИДМенеджер;
    Иначе
        Возврат Формат(Число(?(обПустоеЗначение(КодМенеджера),0,КодМенеджера)),"ЧГ=0");
    КонецЕсли;
вроде все огонек. Пойду бухов трясти, все ли у них норм после таких телодвижений)
41 nordbox
 
24.01.17
14:09
(36) Перепиши этот кусок кода как ты его видишь сам
42 MrFilO
 
24.01.17
14:10
(41) так и сделал) погоняю, чуть что отпишу) спасибос за помощь)
43 MrFilO
 
24.01.17
14:23
(41) Крч, исходя из логики, в условии стояла проверка на МенеджерЗапрос[0].ИДМенеджер.Код, который как раз содержит 000017, и простое его преобразование в 17. Добавил "Код" - завелось
...
рукалицо
44 nordbox
 
24.01.17
14:25
(43) Однако.....
))
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.