|
v7: Запрос. Условие(Должность = ВыбДолжность) работает, а переменная выдает ошибку | ☑ | ||
---|---|---|---|---|
0
Fedor
16.02.12
✎
15:32
|
ВыбДолжность - поле ввода на форме, тип Справочник.Должности.
Когда пишу в запросе: |Условие(Должность в ВыбДолжность); то работает. А если перед запросом присваиваю ВыбДолжность переменной, и в запросе в условии пишу переменную: ТекДолжность = ВыбДолжность; |Условие(Должность в ТекДолжность); то пишет ошибку: Переменная не определена (ТЕКДОЛЖНОСТЬ) Условие(Должность = ТекДолжность <<?>> ); : Ошибка в выражении 'ТекДолжность' |
|||
1
Ёпрст
16.02.12
✎
15:38
|
ТекДолжность = ВыбДолжность.ТекущийЭлемент();
|
|||
2
АЛьФ_1
16.02.12
✎
15:41
|
2(0) Что-то ты недоговариваешь...
|
|||
3
Fedor
16.02.12
✎
16:11
|
(1) Если пишу ТекДолжность = ВыбДолжность.ТекущийЭлемент(), то всё-равно та же ошибка.
|
|||
4
Tirael
16.02.12
✎
16:16
|
В установке параметров запроса поменял ВыбДолжность на ТекДолжность?
|
|||
5
medved_kot
16.02.12
✎
16:19
|
Возможно строки с ТекДолжность не совпадают.
типа в условии "Условие(Должность в ТекДолжность); ", а в ошибке "Условие(Должность = ТекДолжность <<?>> );"?! |
|||
6
Fedor
16.02.12
✎
16:22
|
(5) В ошибке пишет
Условие(Должность в ТекДолжность <<?>> ); (там я просто опечатался) |
|||
7
Fedor
16.02.12
✎
16:22
|
(4) В установке параметров запроса - это где?
|
|||
8
Tirael
16.02.12
✎
16:23
|
(6) выкладывай уже код, чего гадать
|
|||
9
Fedor
16.02.12
✎
16:25
|
|Период с НачДата по КонДата;
|Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |Назначение = Справочник.Назначения.ТекущийЭлемент; |Сотр = Справочник.Назначения.Владелец; |Фирма = Справочник.Назначения.Владелец.Фирма; |Должность = Справочник.Назначения.МестоРаботы.Должность; |ДатаН = Справочник.Назначения.ДатаНачалаДействия; |ДатаК = Справочник.Назначения.ДатаОкончанияДействия; |Группировка ДатаН без групп; |Условие(Фирма в ВыбФирма); |Условие(Должность в ТекДолжность); |Условие(Сотр в ТекСотрудник); |
|||
10
Tirael
16.02.12
✎
16:26
|
(9) еще то что выше идет давай
|
|||
11
Ёпрст
16.02.12
✎
16:31
|
Значит есть либо реквизит формы типа ТекДолжность, либо глобальная экспортная переменная с другим типом, или еще чего
|
|||
12
Fedor
16.02.12
✎
16:32
|
Перем Запрос, ТекстЗапроса, Таб;
ТекДолжность = ВыбДолжность; |
|||
13
Fedor
16.02.12
✎
16:33
|
(11) Если пишу не ТекДолжность ,а любое другое имя - тот же результат.
|
|||
14
Fedor
16.02.12
✎
16:36
|
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб; ТекДолжность = ВыбДолжность; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |Назначение = Справочник.Назначения.ТекущийЭлемент; |Сотр = Справочник.Назначения.Владелец; |Фирма = Справочник.Назначения.Владелец.Фирма; |Должность = Справочник.Назначения.МестоРаботы.Должность; |ДатаН = Справочник.Назначения.ДатаНачалаДействия; |ДатаК = Справочник.Назначения.ДатаОкончанияДействия; |Группировка ДатаН без групп; |Условие(Фирма в ВыбФирма); |Условие(Должность в ТекДолжность); |Условие(Сотр в ТекСотрудник); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Колво = 0; Пока Запрос.Группировка() = 1 Цикл Колво = Колво + 1; // Заполнение полей Сформировать Таб.ВывестиСекцию("Сформировать"); КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Дата должности", ""); КонецПроцедуры |
|||
15
Tirael
16.02.12
✎
16:40
|
напиши вместо
ТекДолжность = ВыбДолжность; ТекДолжность = ""; Будет та же ошибка? |
|||
16
Fedor
16.02.12
✎
16:45
|
(15) Да, та же ошибка
|
|||
17
trad
16.02.12
✎
16:46
|
ВыбДолжность - СЗ
|
|||
18
Tirael
16.02.12
✎
16:50
|
(16) может у тебя тогда написание ТекДолжность не совпадает?
|
|||
19
Fedor
16.02.12
✎
16:52
|
(18) Нет, проверял - написано правильно.
|
|||
20
medved_kot
16.02.12
✎
16:54
|
Перед этим
ТекДолжность = ВыбДолжность; напиши: Сообщить(ТипЗначенияСтр(ТекДолжность)); что выводит? |
|||
21
Fedor
16.02.12
✎
17:02
|
(20)Если перед писать, то ошибка - Переменная не определена (ТекДолжность)
|
|||
22
dusn
16.02.12
✎
17:03
|
а разве можно просто присвоить список значений? разве не нужно выгружать?
|
|||
23
Fedor
16.02.12
✎
17:04
|
А у ВыбДолжность тип - Справочник
|
|||
24
dusn
16.02.12
✎
17:05
|
(23) не глянула на автора
|
|||
25
dusn
16.02.12
✎
17:06
|
а после присвоения ТекДолжность = ВыбДолжность
какой тип у ТекДолжность и чему он равен? |
|||
26
dusn
16.02.12
✎
17:07
|
И на всякий случай - скопируй название переменной и везде, где оно используется повставляй, чтоб исключить разные буквы
|
|||
27
Fedor
16.02.12
✎
17:38
|
Делаю по-другому. Получаю сотрудника и его должность и передаю в функцию.
Функция Сформировать(ТекСотрудник, ТекДолжность) Перем Запрос, ТекстЗапроса; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |Назначение = Справочник.Назначения.ТекущийЭлемент; |Сотр = Справочник.Назначения.Владелец; |Фирма = Справочник.Назначения.Владелец.Фирма; |Должность = Справочник.Назначения.МестоРаботы.Должность; |ДатаН = Справочник.Назначения.ДатаНачалаДействия; |ДатаК = Справочник.Назначения.ДатаОкончанияДействия; |Группировка Назначение упорядочить по Назначение.ДатаНачалаДействия; |Условие(Фирма в ВыбФирма); |Условие(Должность в ТекДолжность); |Условие(Сотр в ТекСотрудник); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат ""; КонецЕсли; Пока Запрос.Группировка(1) = 1 Цикл Возврат Запрос.ДатаН; КонецЦикла; Возврат ""; КонецФункции |
|||
28
Fedor
16.02.12
✎
17:39
|
Выдает ту же ошибку:
ТЕКДОЛЖНОСТЬ<<?>> Переменная не определена (ТЕКДОЛЖНОСТЬ) Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда : Условие(Должность в ТекДолжность <<?>> ); Запрос[13] : Ошибка в выражении 'ТекДолжность' |
|||
29
dusn
16.02.12
✎
17:45
|
Через Сообщить() выводи тип ТекДолжность и чему равно, как только присвоил, в функции - что передал?
|
|||
30
Fedor
16.02.12
✎
17:52
|
(29) Тип ТекДолжность: Справочник, ТекДолжность = Директор управління.
Передаю в функцию ТекДолжность. |
|||
31
Fedor
16.02.12
✎
18:02
|
Подскажите, пожалуйста, почему ошибка? Что не правильно?
|
|||
32
dusn
16.02.12
✎
18:03
|
в начале функции тоже сообщить тип и значение
что там? |
|||
33
Fedor
16.02.12
✎
18:06
|
(32) То же самое.
Тип - Справочник, Значение - Директор управління |
|||
34
dusn
16.02.12
✎
18:14
|
как вызываешь функцию?
|
|||
35
Fedor
16.02.12
✎
18:16
|
ДатаНачала = ПолучитьДатуНачала(тз.Сотрудник, ТекДолжн);
|
|||
36
dusn
16.02.12
✎
18:17
|
высложи свою обработку где-то, а то это гадание на кофейной гуще
|
|||
37
Fedor
16.02.12
✎
18:23
|
(36) Это внешняя обработка. Весит 48 Кб. Давай кину ее тебе в ICQ?
|
|||
38
ZOMI
16.02.12
✎
18:23
|
база на SQL ?запусти на файловой на всякий если что
|
|||
39
dusn
16.02.12
✎
18:26
|
(37)отправь на почту
milcoat собака ukr.net |
|||
40
Fedor
16.02.12
✎
18:31
|
(39) Отправил.
Вызов функции и сама функция выделены в отчете словами //BEGIN ... //END |
|||
41
dusn
16.02.12
✎
18:36
|
вижу
что у тебя за конфигурация? ЗИК? |
|||
42
Fedor
16.02.12
✎
18:37
|
Да
|
|||
43
Jaffar
16.02.12
✎
18:39
|
давно не писал запросы на 7.7.
дурацкий вопрос: а почему сравнение "в", а не "="? это ж не группа, а конкретная должность. с другой стороны - не понятно, почему тогда условие по фирме отрабатывает. или там список фирм? |
|||
44
Fedor
16.02.12
✎
18:41
|
(43) И по сотруднику тоже отрабатывает.
|
|||
45
Jaffar
16.02.12
✎
18:41
|
(44) ну это логично - сотрудники вроде изначально в списке.
или нет? |
|||
46
IvanovIV
16.02.12
✎
18:47
|
(43) "дурацкий вопрос: а почему сравнение "в", а не "="? это ж не группа, а конкретная должность."
а когда захотят группу - будешь переписывать запрос? |
|||
47
dusn
16.02.12
✎
18:47
|
Не вижу ничего криминального, проверить, увы не могу. Приблуды для прямого запроса нету
|
|||
48
Jaffar
16.02.12
✎
18:56
|
(46) ну у конкретного сотрудника (судя по Возврат Запрос.ДатаН;) должность не может быть группой.
правда, тогда и сотрудник не должен быть списком... |
|||
49
dusn
16.02.12
✎
19:02
|
попробуй еще выловить на какой должности и на каком сотруднике валится запрос
|
|||
50
Fedor
16.02.12
✎
19:05
|
(49) Нашел из-за чего ошибка. Запрос не переваривает имя переменной с мягким знаком вконце. Написал перед выполнением запроса
ТекДолжност = ТекДолжность; и всё заработало :) |
|||
51
Fedor
16.02.12
✎
19:05
|
(и в запросе уже использую переменную ТекДолжност)
|
|||
52
IvanovIV
16.02.12
✎
19:07
|
(48) ) судя по запросам заказчиков, то что они хотят видеть сначала в ед. варианте - потом выливается в группы или какие-то списки
"в" или "=" не играет в скорости запроса Тока переписывать его потом не надо. ХЗ .. мож я и не прав |
|||
53
dusn
16.02.12
✎
19:09
|
(50) ндя. ну слава богу заработало.
ты ж говорил что пробовал другие варианты названия переменной? |
|||
54
Jaffar
16.02.12
✎
19:11
|
(50) бред какой-то...
непечатного пробела нигде не было? |
|||
55
ZOMI
16.02.12
✎
19:37
|
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос ЬЬЬ=ВыбДолжность.ТекущийЭлемент(); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Сотрудник = Справочник.Сотрудники.ТекущийЭлемент; |Должность = Справочник.Сотрудники.Должность; |Группировка Сотрудник; |Условие(Должность в ЬЬЬ); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Сотрудник Таб.ВывестиСекцию("Сотрудник"); КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры Вот на типовой Зик сейчас запустил ( ВыбДолжность/НачДата/КонДата) - реквизиты на форме Всё работает Мягкий знак допустим У автора ошибка не в этом |
|||
56
dusn
16.02.12
✎
19:47
|
(55) так и мы о том же :)
видимо где-то уже есть такая переменная |
|||
57
Fedor
20.02.12
✎
17:01
|
(56) Не в переменной дело.
Сделал новый внешний отчет. Написал код: //******************************************* Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; уТекДолжностьт = ВыбДолжность; !!! - такого имени точно нигде нет //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |Назначение = Справочник.Назначения.ТекущийЭлемент; |Сотр = Справочник.Назначения.Владелец; |Фирма = Справочник.Назначения.Владелец.Фирма; |Должность = Справочник.Назначения.МестоРаботы.Должность; |ДатаН = Справочник.Назначения.ДатаНачалаДействия; |ДатаК = Справочник.Назначения.ДатаОкончанияДействия; |Группировка ДатаН без групп; |Условие(Фирма в ВыбФирма); |Условие(Должность в уТекДолжност); |Условие(Сотр в ТекСотрудник); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Колво = 0; Пока Запрос.Группировка() = 1 Цикл Колво = Колво + 1; // Заполнение полей Сформировать Таб.ВывестиСекцию("Сформировать"); КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Дата должности", ""); КонецПроцедуры //============================== Процедура ПриОткрытии() ВыбФирма = Константа.БазФирма; НачДата = НачМесяца(ТекущаяДата()); КонДата = КонМесяца(ТекущаяДата()); КонецПроцедуры |
|||
58
Fedor
20.02.12
✎
17:02
|
При этом выдает ошибку:
УТЕКДОЛЖНОСТ<<?>> Переменная не определена (УТЕКДОЛЖНОСТ) Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда :Условие(Должность в уТекДолжност <<?>> ); Запрос[13] : Ошибка в выражении 'уТекДолжност' |
|||
59
Fedor
20.02.12
✎
17:02
|
А если вместо уТекДолжностьт пишу уТекДолжность - то всё отлично работает.
|
|||
60
dusn
20.02.12
✎
17:03
|
уТекДолжностьт
|
|||
61
dusn
20.02.12
✎
17:03
|
в приведенном запросе у тебя другая переменная
уТекДолжност |
|||
62
Fedor
20.02.12
✎
17:04
|
В (59) опечатался.
Если вместо уТекДолжностьт пишу уТекДолжност - то всё отлично работает. |
|||
63
Fedor
20.02.12
✎
17:04
|
А уТекДолжность - тоже ошибка
|
|||
64
dusn
20.02.12
✎
17:06
|
ты не понял. в приведенном коде ты сначала инициализируешь одну переменную - уТекДолжностьт, а в запросе используешь другую переменную - уТекДолжност
|
|||
65
dusn
20.02.12
✎
17:10
|
и кстати, внешний отчет не убирает возможность глобальной переменной
|
|||
66
Fedor
20.02.12
✎
17:12
|
(64) А, нет. Прошу прощения. Это я когда в сообщение писал - то неправильно написал.
А в Отчете код правильный был. Сейчас еще раз напишу код из отчета: //******************************************* Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; уТекДолжностьт = ВыбДолжность; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |Назначение = Справочник.Назначения.ТекущийЭлемент; |Сотр = Справочник.Назначения.Владелец; |Фирма = Справочник.Назначения.Владелец.Фирма; |Должность = Справочник.Назначения.МестоРаботы.Должность; |ДатаН = Справочник.Назначения.ДатаНачалаДействия; |ДатаК = Справочник.Назначения.ДатаОкончанияДействия; |Группировка ДатаН без групп; |Условие(Фирма в ВыбФирма); |Условие(Должность в уТекДолжностьт); |Условие(Сотр в ТекСотрудник); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Колво = 0; Пока Запрос.Группировка() = 1 Цикл Колво = Колво + 1; // Заполнение полей Сформировать Таб.ВывестиСекцию("Сформировать"); КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Дата должности", ""); КонецПроцедуры //============================== Процедура ПриОткрытии() ВыбФирма = Константа.БазФирма; НачДата = НачМесяца(ТекущаяДата()); КонДата = КонМесяца(ТекущаяДата()); КонецПроцедуры |
|||
67
Fedor
20.02.12
✎
17:13
|
(65) А насчет глобальной переменной - Может быть есть переменная ТекДолжность, но точно не может быть там глобальной переменной с именем уТекДолжностьт.
|
|||
68
Fedor
20.02.12
✎
17:21
|
Если пишу в тексте и в запросе точно не существующую переменную прст456ь - то всё-равно та же ошибка. А если пишу прст456 - ошибок нет.
|
|||
69
Jaffar
20.02.12
✎
18:37
|
(68) бред. см. (55).
какая ОС, какие региональные настройки? в чем острая необходимость использовать имя переменной, заканчивающееся на мягкий знак? есть ли в конфигурации другие переменные с мягким знаком (например - Область, Ночь, Конь, Соль, Ведомость)? |
|||
70
Jaffar
20.02.12
✎
18:46
|
(66) а ВыбДолжность здесь что - элемент справочника, группа, список значений, таблица значений или вообще перечисление? :-)
раньше параметры были - теперь сделал переменные модуля? |
|||
71
ZOMI
20.02.12
✎
18:54
|
Ну ответьте же на (38) .
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |