|
Возврат значение функции | ☑ | ||
---|---|---|---|---|
0
OLGA_
CHELNY_2015 07.07.15
✎
15:53
|
Всем доброго!
Пишу .. и что то не так не вижу ошибку &НаСервере Процедура ПроверитьКодФиделиоКонтрагентаНаСервере() КодКонтрагента=ВыборКонтрагента(Объект.Кон); КодФ=Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента).Ссылка; Сообщить("Результат функции"+КодФ); //!!!ничего не сообщает , только "Результат функции" ..... КонецПроцедуры &НаКлиенте Процедура ПроверитьКодФиделиоКонтрагента(Команда) ПроверитьКодФиделиоКонтрагентаНаСервере(); //команда КонецПроцедуры Функция ВыборКонтрагента(код)//передаем код -внешний источник из загр файла) Запрос= Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ДополнительныеСведения.Свойство, | ДополнительныеСведения.Значение, | ДополнительныеСведения.Объект |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Свойство = &Свойство | И ДополнительныеСведения.Значение = &Значение"; Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("КодФиделио_Контрагент")); Запрос.УстановитьПараметр("Значение", код); Результат = Запрос.Выполнить(); ВыборкаРезультата=Результат.Выбрать(); Пока ВыборкаРезультата.следующий() Цикл Если ВыборкаРезультата.Значение = код тогда Возврат ВыборкаРезультата.Объект.Код; // получаю значение в вычислить выражение видно КонецЕсли; КонецЦикла; Сообщить("ВыборкаРезультата.Значение"+ВыборкаРезультата.Объект.Код); // код контрагента получила теперь надо в процедуре найти этого контрагента по полученному коду КонецФункции |
|||
1
SleepyHead
гуру
07.07.15
✎
15:54
|
А если в выборке ни одной строки нет, что вернет функция?
|
|||
2
SleepyHead
гуру
07.07.15
✎
15:54
|
Срочно отобрать у нее компьютер и отправить варить борщ. *facepalm.
|
|||
3
PuhUfa
07.07.15
✎
15:55
|
А кому ты хочешь Сообщить( &НаСервере ?
|
|||
4
Franchiser
гуру
07.07.15
✎
15:55
|
ВыборкаРезультата.Объект м.б. пустая ссылка поэтому ошибка
|
|||
5
SleepyHead
гуру
07.07.15
✎
15:56
|
(3) Да сообщить-то можно, вопрос в том, что она сообщает :)
|
|||
6
Timon1405
07.07.15
✎
15:57
|
(3) а расскажите, в чем проблема с сообщить на сервере?
|
|||
7
Franchiser
гуру
07.07.15
✎
15:57
|
сообщить в цикл надо
|
|||
8
Franchiser
гуру
07.07.15
✎
15:57
|
уже не в чем, с какого то релиза сообщить работает на сервере и возвращается на клиента, если конечно в обработке не больше 1-й формы
|
|||
9
OLGA_
CHELNY_2015 07.07.15
✎
15:58
|
(4) нет я специально так все разложила это просто внешняя обработка пытаюсь понять как будет работать...код который передаю точно есть как доп сведение
|
|||
10
Franchiser
гуру
07.07.15
✎
15:59
|
Если ВыборкаРезультата.Объект = Справочник.Контрагенты.ПустаяСсылка
тогда будет ошибка в коде: ВыборкаРезультата.Объект.Код |
|||
11
OLGA_
CHELNY_2015 07.07.15
✎
16:00
|
(3) проверка где сообщает а где перестает видеть значение
|
|||
12
Franchiser
гуру
07.07.15
✎
16:01
|
короче пиши так
Если Значениезаполнено(ВыборкаРезультата.Объект) тогда Возврат ВыборкаРезультата.Объект.Код; КонецЕсли; |
|||
13
Franchiser
гуру
07.07.15
✎
16:01
|
аналогично
Если Значениезаполнено(ВыборкаРезультата.Объект) тогда Сообщить("ВыборкаРезультата.Значение"+ВыборкаРезультата.Объект.Код); КонецЕсли; |
|||
14
OLGA_
CHELNY_2015 07.07.15
✎
16:03
|
(10) &НаСервере
Процедура ПроверитьКодФиделиоКонтрагентаНаСервере() КодКонтрагента=ВыборКонтрагента(Объект.Кон); КодФ=Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента).Ссылка; Сообщить("Результат функции"+КодФ); //!!!ничего не сообщает , только "Результат функции" ..... КонецПроцедуры здесь проблема, код получила в процедуре то не могу им воспользоваться |
|||
15
OLGA_
CHELNY_2015 07.07.15
✎
16:04
|
Объект.Кон- это просто поле ввода, тип строка, длина 6 , целое. ввожу 126- то что точно есть в базе, это доп сведение
|
|||
16
OLGA_
CHELNY_2015 07.07.15
✎
16:05
|
функция получает и сообщает правильно
|
|||
17
Franchiser
гуру
07.07.15
✎
16:05
|
Кто так пишет: КодФ=Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента).Ссылка; ?
|
|||
18
Franchiser
гуру
07.07.15
✎
16:06
|
Посмотри в СП что возвращает НайтиПоКоду()
|
|||
19
OLGA_
CHELNY_2015 07.07.15
✎
16:06
|
а в поце не могу этим кодом воспользоваться почему то...чтобы найти нужного мне контрагента
|
|||
20
OLGA_
CHELNY_2015 07.07.15
✎
16:07
|
(17) а что не так?
|
|||
21
Franchiser
гуру
07.07.15
✎
16:07
|
ОбщегоНазначенияКлиентСервер.СообщитьПользователю() сделай вместо Сообщить()
|
|||
22
Franchiser
гуру
07.07.15
✎
16:08
|
(20) то что
Возвращаемое значение: Тип: СправочникСсылка.<Имя справочника>; Неопределено. Если не существует ни одного элемента с требуемым кодом, то будет возвращена пустая ссылка. Если для справочника код не задан (длина = 0), то будет возвращено Неопределено. |
|||
23
D_E_S_131
07.07.15
✎
16:09
|
(21) Это что-то изменит?
|
|||
24
Franchiser
гуру
07.07.15
✎
16:09
|
1. Нет смысла писать ".Ссылка"
2. Случай когда = Неопределено у тебя и вернет пустое сообщение. |
|||
25
OLGA_
CHELNY_2015 07.07.15
✎
16:10
|
(17) чушь какую то..точно не мой элемент а какой то пустой
|
|||
26
Franchiser
гуру
07.07.15
✎
16:10
|
КодФ - это что, по твоему коду это ссылка а не код
|
|||
27
OLGA_
CHELNY_2015 07.07.15
✎
16:10
|
(24) Хорошо, это поняла
|
|||
28
Franchiser
гуру
07.07.15
✎
16:11
|
3. Случай когда = пустаяссылка у тебя тоже вернет пустое сообщение.
|
|||
29
antoneus
07.07.15
✎
16:11
|
Я, может, не в курсе каких-то тонкостей, но зачем в функции находить ссылку, брать ее код и потом по коду опять находить эту же ссылку, а не возвращать сразу ссылку?
|
|||
30
Timon1405
07.07.15
✎
16:11
|
зачем вообще искать по коду?
судя по коду в строке Возврат ВыборкаРезультата.Объект.Код;// получаю значение в вычислить выражение видно в "ВыборкаРезультата.Объект" уже сидит контрагент. а если там сидит другой тип, то можно в том же запросе соединиться с таблицей контрагентов по коду и сразу вытащить нужного |
|||
31
OLGA_
CHELNY_2015 07.07.15
✎
16:13
|
(29) я в функции нахожу доп сведение, и потом хозяина(объекта) этого свойства и значения, нахожу по коду полученного объекта. Работа с дополнительными сведениями справочника
|
|||
32
Franchiser
гуру
07.07.15
✎
16:13
|
(29) честно, не знаю, не я писал этот код
|
|||
33
OLGA_
CHELNY_2015 07.07.15
✎
16:13
|
пока не вижу другого варианта чем через запрос и функ.
|
|||
34
OLGA_
CHELNY_2015 07.07.15
✎
16:14
|
нет а как еще в доп сведениям объекта обращаться? как мне искать значение доп сведения, например если это ключ к полю загрузки?
|
|||
35
Franchiser
гуру
07.07.15
✎
16:14
|
что ты хочешь сообщить в функции?
|
|||
36
OLGA_
CHELNY_2015 07.07.15
✎
16:15
|
(30) да точно хороший вариант-сейчас приклею еще таблицу
|
|||
37
OLGA_
CHELNY_2015 07.07.15
✎
16:16
|
(35) уже сообщила-код объекта, он получен.
Теперь в процедуре, нужно по полученному коду находить нужный объект |
|||
38
antoneus
07.07.15
✎
16:17
|
Так в регистре в измерении "Объект" сразу ссылка на контрагента же и сидит, не?
|
|||
39
Franchiser
гуру
07.07.15
✎
16:17
|
Почему так нельзя?
Если ТипЗНЧ(ВыборкаРезультата.Объект) = Тип("Справочник.Контрагенты") Тогда Сообшить(ВыборкаРезультата.Объект.Код) Конецесли; |
|||
40
Timon1405
07.07.15
✎
16:18
|
(38) видимо там сидит другая сущность
|
|||
41
OLGA_
CHELNY_2015 07.07.15
✎
16:20
|
ну надо мне код для начала, и по коду найти, ставила уже вместо кода ссылку на объетк-тоже возвращает - все хорошо-но проблема в том что дальше в процедуре не могу воспользоваться возвращаемым значением
|
|||
42
OLGA_
CHELNY_2015 07.07.15
✎
16:20
|
(40) о какой сущности речь?
|
|||
43
Franchiser
гуру
07.07.15
✎
16:21
|
Объект - это по-моему и есть контрагент
|
|||
44
OLGA_
CHELNY_2015 07.07.15
✎
16:21
|
доп сведения, поиск и загрузка данных по значению доп свед
|
|||
45
OLGA_
CHELNY_2015 07.07.15
✎
16:21
|
(43) именно, возвращает мне название контрагента-все отлично здесь функция рабочая
|
|||
46
OLGA_
CHELNY_2015 07.07.15
✎
16:22
|
процедура не рабочая
Процедура ПроверитьКодФиделиоКонтрагентаНаСервере() КодКонтрагента=ВыборКонтрагента(Объект.Кон); КодФ=Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента).Ссылка; Сообщить("Результат функции"+КодФ); //!!!ничего не сообщает , только "Результат функции" ..... |
|||
47
OLGA_
CHELNY_2015 07.07.15
✎
16:22
|
Сообщить("Результат функции"+КодКонтрагента); тоже ничего
|
|||
48
Franchiser
гуру
07.07.15
✎
16:24
|
Замени КодФ=Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента).Ссылка;
На СсылкаКонтр = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента); Если ЗначениеЗаполнено(СсылкаКонтр) тогда КодФ = СсылкаКонтр.Код; Иначе КодФ = "---"; КонецЕсли; Сообщить("Результат функции"+КодФ); |
|||
49
OLGA_
CHELNY_2015 07.07.15
✎
16:27
|
(48) сейчас попробую
|
|||
50
Franchiser
гуру
07.07.15
✎
16:29
|
лучше писать даже СсылкаКонтр = Справочники.Контрагенты.НайтиПоКоду(СокрЛП(КодКонтрагента));
|
|||
51
Timon1405
07.07.15
✎
16:30
|
(45) он возвращает не название а ссылку на контрагента!
|
|||
52
OLGA_
CHELNY_2015 07.07.15
✎
16:32
|
Результат функции---
|
|||
53
Franchiser
гуру
07.07.15
✎
16:33
|
значит по коду не нашел
|
|||
54
OLGA_
CHELNY_2015 07.07.15
✎
16:33
|
(51) Функция ВыборКонтрагента(код)//передаем код -внешний источник из загр файла)
Запрос= Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ДополнительныеСведения.Свойство, | ДополнительныеСведения.Значение, | ДополнительныеСведения.Объект |ИЗ | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения |ГДЕ | ДополнительныеСведения.Свойство = &Свойство | И ДополнительныеСведения.Значение = &Значение"; Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("КодФиделио_Контрагент")); Запрос.УстановитьПараметр("Значение", код); Результат = Запрос.Выполнить(); ВыборкаРезультата=Результат.Выбрать(); Пока ВыборкаРезультата.следующий() Цикл Если ВыборкаРезультата.Значение = код тогда Если Значениезаполнено(ВыборкаРезультата.Объект) тогда Возврат ВыборкаРезультата.Объект.Код; КонецЕсли; // получаю значение в вычислить выражение видно КонецЕсли; КонецЦикла; Сообщить("ВыборкаРезультата.Значение"+ВыборкаРезультата.Объект.Код); // код контрагента получила теперь надо в процедуре найти этого контрагента по полученному коду КонецФункции сообщает: ВыборкаРезультата.Значение00-000901 |
|||
55
OLGA_
CHELNY_2015 07.07.15
✎
16:34
|
по коду 00-000901 есть такой контрагент в базе
|
|||
56
Franchiser
гуру
07.07.15
✎
16:34
|
как ты передаешь этот код в ту процедуру?
|
|||
57
Franchiser
гуру
07.07.15
✎
16:35
|
в процедуру ПроверитьКодФиделиоКонтрагентаНаСервере()
|
|||
58
Franchiser
гуру
07.07.15
✎
16:36
|
пробуй написать СсылкаКонтр = Справочники.Контрагенты.НайтиПоКоду(СокрЛП(КодКонтрагента));
|
|||
59
Franchiser
гуру
07.07.15
✎
16:36
|
отладчик пробовала запускать?
|
|||
60
OLGA_
CHELNY_2015 07.07.15
✎
16:37
|
да, пусто в нем просто пусто.. поэтому и на форум зашла
|
|||
61
Franchiser
гуру
07.07.15
✎
16:37
|
КодКонтрагента у тебя случайно не реквизит формы?
|
|||
62
OLGA_
CHELNY_2015 07.07.15
✎
16:38
|
(58) это да написал именно так)
|
|||
63
OLGA_
CHELNY_2015 07.07.15
✎
16:38
|
ща гляну ..хотя станд буха
|
|||
64
OLGA_
CHELNY_2015 07.07.15
✎
16:39
|
(61) вот это блин-код это реквизит формы? в дереве конф в реквизитах нет КОДа
|
|||
65
Franchiser
гуру
07.07.15
✎
16:39
|
А если так:
СсылкаКонтр = Справочники.Контрагенты.НайтиПоКоду(СокрЛП(Объект.Кон)); Если ЗначениеЗаполнено(СсылкаКонтр) тогда КодФ = СсылкаКонтр.Код; Иначе КодФ = "---"; КонецЕсли; Сообщить("Результат функции"+КодФ); |
|||
66
D_E_S_131
07.07.15
✎
16:39
|
(54) По хорошему надо бы проверить еще характеристику:
|
|||
67
Franchiser
гуру
07.07.15
✎
16:40
|
(64) не понял, если реквизит формы (а не обработки) нужно проверить что он тип строка
|
|||
68
Mirnin
07.07.15
✎
16:42
|
Сам факт того, что вышеприведенный код что-то сообщает, говорит о том, что Возврат в функции не происходит - иначе бы до Сообщить() дело не дошло.
Копайте в условия цикла. ВыборкаРезультата.Значение = код СокрЛП(код) может быть. Проверьте корректность сравнения, поставьте точку останова и посмотрите значения. |
|||
69
OLGA_
CHELNY_2015 07.07.15
✎
16:44
|
(67) пока еще мучаюсь) сейчас еще разок все должно получиться
|
|||
70
D_E_S_131
07.07.15
✎
16:44
|
+ к (68). Что будете делать, если у нескольких контрагентов этот "код_фиделио" одинаковый?
|
|||
71
Franchiser
гуру
07.07.15
✎
16:44
|
Проверь что происходит до и после
КодКонтрагента=ВыборКонтрагента(Объект.Кон); Происходит ли присвоение, чему равен Объект.Кон в отладчике. Если присвоение не работает, значит разные типы. |
|||
72
OLGA_
CHELNY_2015 07.07.15
✎
16:47
|
"126 " и "126" пробелы у левого значения , в сравнении ВыборкаРезультата.Значение = код
|
|||
73
OLGA_
CHELNY_2015 07.07.15
✎
16:47
|
(70) ну так не должно это уникальный код
|
|||
74
Franchiser
гуру
07.07.15
✎
16:48
|
СокрЛП() пробуй
|
|||
75
D_E_S_131
07.07.15
✎
16:53
|
(74) Беда....
|
|||
76
OLGA_
CHELNY_2015 07.07.15
✎
16:54
|
нормалек! Победили! показывает типы и длина и лишние пробелы в совокупности мешали получить результат функции в проце. спасибы!!!!
|
|||
77
D_E_S_131
07.07.15
✎
16:56
|
(76) Вообще так отладчик творит чудеса. В нем можно проверить каждую строчку своего "неординарного" кода.
|
|||
78
SleepyHead
гуру
08.07.15
✎
05:27
|
(77) Некоторых просто с кухни выпускать не надо. Задолбали особи с женской логикой, возомнившие себя "программистами".
|
|||
79
Альбатрос
08.07.15
✎
05:31
|
(78) +100500!!!. У меня в отделе один программист женского пола. Это пздц...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |