Имя: Пароль:
1C
1С v8
Ошибка параметра запроса
0 soda_st
 
05.10.12
19:53
Есть процедура(КакойТоПараметр)
в ней запрос где Запрос.УстановитьПараметр(Параметр, КакойТоПараметр)
вызывается эта процедура несколько раз, но в запросе при отладке Параметр не меняется, т.е. остается первое значение, хотя КакойТоПраметр меняется от вызова к вызову процедуры. кто-нибудь встречался с таким ужасом? Как с этим бороться то?
1 Wobland
 
05.10.12
19:54
запрос глобален? у тебя подход к задаче какой-то не такой
2 Wobland
 
05.10.12
19:55
у процедуры не хватает параметра запрос. но я против этого вообще
3 Wobland
 
05.10.12
19:56
ой, с нами дама. не хватает совсем другого же!
4 aleks-id
 
05.10.12
19:57
(2) обычно функции делают. или если процедура то в ней расколбас всякий с блэкджеком и баронессами. а если УП то вообще непонятно че там тс колбасит
5 aleks-id
 
05.10.12
19:59
(0) тебе уже подсказали. представь нам теперь доказательства что ты ХХ а не вонючий бородатый ХУ в свитере с оленями
6 Wobland
 
05.10.12
19:59
(5) чо сразу вонючий?
7 aleks-id
 
05.10.12
20:01
(6) извини если обидел )))))))
8 soda_st
 
05.10.12
20:28
(1) Запрос глобальней некуда, он ищет пользователя по сотруднику, параметр передающийся в процедуру как раз ссылка сотрудника. Какой-то не такой... если не затруднит поподробнее.
(3) Могу подарить кусочек мыла, подставишь к У, будет Х, за одно и запахи тревожить не будут.
(4) Мне по секрету рассказывали, что если ничего не возвращается тогда это процедура, врали?
9 Wobland
 
05.10.12
20:30
(8) я про переменную Запрос. каков смысл процедуры?
наврали. бывает, что процедур вообще не бывает - возвращается void
10 aleks-id
 
05.10.12
20:31
(8) давай текст и пример использования
11 Wobland
 
05.10.12
20:31
+(9) или вон перл - возвращается последнее выполненное
12 Wobland
 
05.10.12
20:32
(10) после фото, конечно
13 soda_st
 
05.10.12
20:40
(9) Смысл процедуры - удалить все напоминания сотруднику и сотруднику в копии, учитывая, что напоминания выходят пользователю-сотруднику, нужно запросом найти пользователя по сотруднику, у пользователя есть такой реквизит - сотрудник. Вот она и вызывается дважды раз по сотруднику удаляет, а второй раз сотрудника в копии не находит. Перл мешает - возвращается последнее выполненное
14 Wobland
 
05.10.12
20:41
(13) чесслово, я три раза прочитал. о чём это всё?
15 Wobland
 
05.10.12
20:43
на кой тебе такая процедура? на кой ляд у ней такой параметр? имхо: выдохни, задумайся и сделай по-новому. не повтори то, что есть, а сделай заново
16 Wobland
 
05.10.12
20:44
ну или в аську стучись что-ли.. дотелепатирую и покажу, как надо
17 soda_st
 
05.10.12
20:47
[CODE]Процедура ПриЗаписи(Отказ)
   Если Состояние = Перечисления.СостоянияСобытий.Выполняется Тогда
       СоздатьНапоминание(Сотрудник);
       СоздатьНапоминание(СотрудникКопия);
   ИначеЕсли Состояние = Перечисления.СостоянияСобытий.Завершено
       Или Состояние = Перечисления.СостоянияСобытий.Отменено Тогда
       ЗавершитьНапоминание(Сотрудник.Ссылка);
       ЗавершитьНапоминание(СотрудникКопия.Ссылка);
   КонецЕсли;
КонецПроцедуры // ПриЗаписи() [/CODE]

[CODE] Процедура ЗавершитьНапоминание(ТекущийСотрудник = Неопределено)
   Если ТекущийСотрудник = Неопределено Тогда Возврат; КонецЕсли;
   РегистрСведенийМенеджерЗаписи = РегистрыСведений.Напоминания.СоздатьМенеджерЗаписи();
   
   ЗапросПользователя    = Новый Запрос();
   ЗапросПользователя.Текст    = "ВЫБРАТЬ Пользователи.Ссылка
                                 |ИЗ Справочник.Пользователи КАК Пользователи
                                 |ГДЕ Пользователи.Сотрудник = &Сотрудник";
   ЗапросПользователя.УстановитьПараметр("Сотрудник", ТекущийСотрудник);
   ВыборкаПользователя    = ЗапросПользователя.Выполнить().Выбрать();
   Если ВыборкаПользователя.Следующий() Тогда
       ТекущийПользователь    = ВыборкаПользователя.Ссылка;
   КонецЕсли;
   
   РегистрСведенийМенеджерЗаписи.Пользователь = ТекущийПользователь;
   РегистрСведенийМенеджерЗаписи.Автор = Автор;
   РегистрСведенийМенеджерЗаписи.Объект = ЭтотОбъект.Ссылка;
   РегистрСведенийМенеджерЗаписи.РеальнаяДатаОповещения = Дата;
   РегистрСведенийМенеджерЗаписи.Завершено = Ложь;
       
   РегистрСведенийМенеджерЗаписи.Прочитать();
   Если РегистрСведенийМенеджерЗаписи.Выбран() Тогда
       РегистрСведенийМенеджерЗаписи.Удалить();
   КонецЕсли;
Конецпроцедуры
[/CODE]
18 Wobland
 
05.10.12
20:49
ТекущийПользователь    = ВыборкаПользователя.Ссылка;
и
ТекущийПользователь

в чём разнцица?
19 aleks-id
 
05.10.12
20:50
а где фотка???
20 Wobland
 
05.10.12
20:51
я ни черта не понял про копии сотрудников, но код до слова РегистрСведенийМенеджерЗаписи вообще не нужен. имхается мне, проблема совсем не в параметрах, а в этих самых мистических копиях
21 Wobland
 
05.10.12
20:53
теперь я понял про копии. убей 11 строк своей процедуры и живи спокойно
22 Wobland
 
05.10.12
20:53
и ТекущийСотрудник внутри сделай везде
23 soda_st
 
05.10.12
20:59
(18) в первом случае ТекущемуПользователю присваевается значение из запроса, во втором это значение вставляется в фильтр менеджера
24 Wobland
 
05.10.12
21:00
(23) пропускай всё до (21) ;)
25 Wobland
 
05.10.12
21:02
не, я плохо понял про копии, прошу прощения
26 Wobland
 
05.10.12
21:03
код в (17) не соответствует описанию проблемы в (0)
27 soda_st
 
05.10.12
21:09
(26) а мне кажется пить меньше надо и завести вместо кота, например, говорящего попугая
При отладке в строке                                  
|ГДЕ Пользователи.Сотрудник = &Сотрудник";
в &Сотрудник предыдущий сотрудник
хотя ТекущийСотрудник другой, т.е. тут
ЗапросПользователя.УстановитьПараметр("Сотрудник", ТекущийСотрудник);
НИЧЕГО НЕ ПРОИСХОДИТ
28 Wobland
 
05.10.12
21:12
(27) не верю
29 soda_st
 
05.10.12
21:16
(28) Завидую, мне сложно не верить своим глазам
30 Wobland
 
05.10.12
21:18
а дай скрин с точкой останова на УстановитьПараметр и таблом с ТекущийСотрудник и Запрос.Параметры.ТекущийСотрудник
31 Aprobator
 
05.10.12
21:21
ТекущийСотрудник - реквизита такого негде больше нет? Проверь его определение по Ф12.
32 Wobland
 
05.10.12
21:21
(31) он же параметр, перекрывать должен, не?
33 soda_st
 
05.10.12
21:26
(31) Браво, не ТекущийСотрудник есть, а Сотрудник. Думала, что в запросе параметры читаются только при помощи УстановитьПараметр, а остальные реквизиты не имеют значения, оказывается нет
34 Aprobator
 
05.10.12
21:27
Опс, а где отработка ситуации если результат запроса пустой? Не каждый сотрудник пользователь базы.
35 Wobland
 
05.10.12
21:29
(34) =Неопределено
36 Wobland
 
05.10.12
21:30
(33) это ты ловко придумала

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Запрос=Новый Запрос;
   Сотрудник=Истина;
   Запрос.Текст="выбрать выбор когда &Сотрудник тогда ""истина"" иначе ""ложь"" конец";
   Запрос.Выполнить();
КонецПроцедуры

{Форма.Форма.Форма(65)}: Ошибка при вызове метода контекста (Выполнить)
   Запрос.Выполнить();
по причине:
{(1, 21)}: Не задано значение параметра "Сотрудник"
выбрать выбор когда <<?>>&Сотрудник тогда "истина" иначе "ложь" конец
37 Aprobator
 
05.10.12
21:30
Неопределенно гораздо выше.
38 soda_st
 
05.10.12
21:31
(34) да уже дорисовала, это не окончательный код :)
39 Aprobator
 
05.10.12
21:34
(33) в отладчике, запрос.параметры. Не там посмотрела?