Имя: Пароль:
1C
1C 7.7
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) .
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.