Имя: Пароль:
1C
1C 7.7
v7: SQL запрос. Чего не хватает?
,
0 Последняя_
Надежда
 
15.12.11
08:01
Есть следующий запрос.
Добавила одно условие (последнее - (Пров.KTSC0 = '"+Перечисление.ТипыНоменклатуры.Продукция+"')). Но не выводит никакие данные. Вероятно, нужно что-то добавить в секцию FROM, но не сильна в sql запросах 1с. Подскажите, что не так?
ТекстЗапроса = "
       |SELECT                  
       | СпрЮрЛица.Code as КодЮрлица,  
       | СпрЮрЛица.Descr as ИмяЮрлица,  
       | СпрФирмы.Code as внКодФирмы,
       | СпрФирмы.Descr as внИмяФирмы,                              
       | СпрПодр.Code as внКодПодразделения,
       | СпрПодр.Descr as внИмяПодразделения,
       | внНомерДокумента = Жур.DocNo + CAST(Пров.Number as CHAR),
       | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
       | СчДеб.SchKod as СчетДебет,
       | СчКред.SchKod as СчетКредит,
       | СпрКонтр.Code as внКодКонтрагента,
       | СпрКонтр.Descr as внИмяКонтрагента,  
       | Пров.SP7734 as СодержаниеПроводки ,
       | Пров.SUM_ as Сумма,
       | Пров.KTSC0 as [ВидНоменклатуры $Перечисление.ТипыНоменклатуры]
       |FROM
       | _1Sentry as Пров                  
       |INNER JOIN _1SOper as Опер ON Опер.Date_Time_DocId = Пров.Date_Time_DocId
       |INNER JOIN _1SJourn as Жур ON Опер.Date_Time_DocId=Жур.Date_Time_IdDoc
       |INNER JOIN $Справочник.СвоиЮрЛица as СпрЮрЛица ON Пров.SP7736 = СпрЮрЛица.Id
       |INNER JOIN _1SACCS as СчДеб ON СчДеб.ID = Пров.ACCDTID
       |INNER JOIN _1SACCS as СчКред ON СчКред.ID = Пров.ACCKTID  
       |LEFT JOIN $Справочник.Контрагенты as СпрКонтр ON СпрКонтр.Id = Пров.DTSC0    
       |LEFT JOIN $Справочник.Подразделения as СпрПодр ON СпрПодр.Id = Пров.KTSC1    
       |LEFT JOIN $Справочник.Фирмы as СпрФирмы ON СпрЮрЛица.Id = $СпрФирмы.ЮрЛицо
       |WHERE
       | Жур.Date_Time_IdDoc BETWEEN :НачДата AND :КонДата~  AND
       | (( СчДеб.SchKod = ' 50. 2. ' AND СчКред.SchKod=' 90. 1.2') OR
       | ( СчДеб.SchKod = ' 50. 2. ' AND СчКред.SchKod=' 79. 2. '))
       |AND (Пров.KTSC0 = '"+Перечисление.ТипыНоменклатуры.Продукция+"')
       |ORDER BY DocNo
       |" ;
1 Кириллка
 
15.12.11
08:06
так "Пров.KTSC0 = '"+Перечисление.ТипыНоменклатуры.Продукция+"'" не нужно делать.
2 Гефест
 
15.12.11
08:07
У тебя в том поле идентификатор перечисления, а ты сравниваешь его с наименованием
3 Последняя_
Надежда
 
15.12.11
08:08
мне нужна выборка операций, только с типом "продукция". остальные не нужны.
4 Гефест
 
15.12.11
08:09
AND (Пров.KTSC0 = :ПыщьПыщь)

Запрос.УстановитьПараметр("ПыщьПыщь", Перечисление.ТипыНоменклатуры.Продукция)

Если память не изменила
5 Кириллка
 
15.12.11
08:10
Пров.KTSC0 = $Перечисление.ТипыНоменклатуры.Продукция
6 Последняя_
Надежда
 
15.12.11
08:10
(4) "ПыщьПыщь" - настроение у вас точно хорошее)))
7 SeraFim
 
15.12.11
08:15
(4)память изменила. По моему, так:
AND (Пров.KTSC0 = :ПиуПиу)

Запрос.УстановитьТекстовыйПараметр("ПиуПиу",Перечисление.ТипыНоменклатуры.Продукция)
8 Patrio_
O_Muerte
 
15.12.11
08:21
Видать в организме чего-то не хватает (с)
9 ЧеловекДуши
 
15.12.11
08:28
>>> |AND (Пров.KTSC0 = '"+Перечисление.ТипыНоменклатуры.Продукция+"')

Это ДНК, бросай программировать, это не твое. ;)
10 AlexTim03
 
15.12.11
09:03
(0) Перечисления в БД не хранятся, значение можно получить по ID.
Если на sql выполнить запрос без этого условия и посмотреть, что в колонке Пров.KTSC0, там
будет что-то типа '  4EE44F' - это 16-ричное представление.

И если нужен отбор по значению перечисления, то надо делать именно отбор по ID.
ID перечисления можно получить в 7 по ВСтрВнутр, но потом надо еще преобразовать.
11 Последняя_
Надежда
 
15.12.11
09:11
(4) (5) (7) не сработало... Видимо (10) прав... попробую
12 AlexTim03
 
15.12.11
09:22
Вот нашел из старого, но здесь обратное преобразование - из ИД находят Перечисление в конфигурации, в вашем случае надо сделать наоборот:

Значение перечислений в базе данных не хранятся. Хранятся они в МД-шнике, т.о. значение можно получить по id ср-вами 1С, рассмотрим на примере справочника номенклатура SC33 реквизит «ТипТовара» - Перечисление.ТипыТоваров

select Descr, SP5712 from sc33 where code='РБ245     '
вернет
Descr                                                                                SP5712    
----------------------------------------------------------------------------------- ---------
Охладитель Gastro Cooler Big с замком 1509-052-000                                     4EE

4EE – это id Перечисление.ТипыТоваров ид=_StrToId( («4EE») = 5702
Для Перечисление.ТипыТоваров

ОбъектВнутреннегоФормата    = _StrToId(СокрЛП(ИД));
Пока СтрДлина(ОбъектВнутреннегоФормата) < 10 Цикл
   ОбъектВнутреннегоФормата = " " + ОбъектВнутреннегоФормата;
КонецЦикла;
Пока СтрДлина(ОбъектВнутреннегоФормата) < 13 Цикл
   ОбъектВнутреннегоФормата =  ОбъектВнутреннегоФормата+" ";
КонецЦикла;
СтрВнутрПеречТипыТоваров="{""E"",""0"",""0"",""5701"",""0"",""0"","""+ОбъектВнутреннегоФормата+"""}";
Возврат ЗначениеИзСтрокиВнутр(СтрВнутрПеречТипыТоваров);

Для перечислений других типов отличие только в ID вида, в нашем случае -  5701, можно создать ТЗ, СЗ соответствия и вперед.
13 Ёпрст
 
15.12.11
09:23
(12) Это всё прошлый век при наличии метапарсера и УстановитьТекстовыйПараметр.
14 Попытка1С
 
15.12.11
09:56
NOLOCK поставь еще
15 Последняя_
Надежда
 
15.12.11
09:59
Выкрутилась меньшими усилиями:
|AND (Пров.KTSC0 = '   5J4   ')
вроде работает... по крайней мере выдал какие-то результаты.
16 Кириллка
 
15.12.11
10:00
(15)а (5) как не сработало?
17 ДенисЧ
 
15.12.11
10:00
(15) Обоги... (5) чем не устроило?
18 ДенисЧ
 
15.12.11
10:00
КСМ :-))
19 Последняя_
Надежда
 
15.12.11
10:00
(16) не прошло. ругнулся на что-то
20 ДенисЧ
 
15.12.11
10:01
(19) На что?
21 Попытка1С
 
15.12.11
10:02
Может она это не через 1cpp делает.. Тогда $ не покатит.
22 Последняя_
Надежда
 
15.12.11
10:03
(21) может )))
(5) вот как ругнулся - "Ошибка запроса: Meta name parser error: неизвестное метаимя или алиас "$Перечисление""
23 Кириллка
 
15.12.11
10:04
(22)противоречие...
24 Последняя_
Надежда
 
15.12.11
10:04
(21) вот такая только присутствует при открытии - ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"v7plus.dll");
25 Кириллка
 
15.12.11
10:04
+23 видать, версия старенькая
26 Попытка1С
 
15.12.11
10:05
(22) Ну метапарсер присутствует значит таки 1с++ загружена...
27 Попытка1С
 
15.12.11
10:05
(24) Это не то...
28 Последняя_
Надежда
 
15.12.11
10:05
(25) старовата... Комплексная 424 )))
29 Кириллка
 
15.12.11
10:07
(28)привет лунатикам
30 Попытка1С
 
15.12.11
10:07
(28) Он имел ввиду версию 1c++
31 Последняя_
Надежда
 
15.12.11
10:10
(30) 2.0.3.3
32 Кириллка
 
15.12.11
10:13
(15)а (7) как не сработало?
33 Попытка1С
 
15.12.11
10:15
(31) Покажи весь код с создатьобъект до выполнить.
34 Последняя_
Надежда
 
15.12.11
10:20
(33) там оооочень много.
35 1Сергей
 
15.12.11
10:22
(34) а ты подключаешься к этой базе или другой?
36 Последняя_
Надежда
 
15.12.11
10:25
(35) к другой. это перекачка документов в ТиС.  
(32) Каюсь! (7) работает. маленько с переменной запроса намудрила!
37 Гефест
 
15.12.11
10:26
(36) Не прошло и года, как нам сказали самое важное
38 Последняя_
Надежда
 
15.12.11
10:27
(37) Извиняюсь... дело-то в общем-то и не в этом. Запросец главное чтоб работал. Выборка же идет из самой базы. А контакт с внешней и так работает.
39 Последняя_
Надежда
 
15.12.11
10:28
(4)(7)(10) СПАСИБО! Помогли!
40 1Сергей
 
15.12.11
10:33
(38) метапарсер должен брать данные из другого МД
41 Последняя_
Надежда
 
15.12.11
10:48
(40) я таких слов не знаю ))) главное что работает
42 1Сергей
 
15.12.11
10:55
и эти люди пишут прямые запросы....
43 Гефест
 
15.12.11
10:56
ну хоть фото в купальнике мы заслужили?
44 Попытка1С
 
15.12.11
11:04
(36) Так там присоединить md должно быть.
45 Последняя_
Надежда
 
15.12.11
11:44
(44) имеется ПрисоединитьИБ ;)
(43) эх.. если бы оно было... я уже 2 года не отдыхала на водоемах в купальнике :( если что и найду, то только в личку )))
46 Гефест
 
15.12.11
11:47
(45) Тогда всем участникам в личку
47 Гефест
 
15.12.11
11:48
(46) Участникам ветки
48 Последняя_
Надежда
 
15.12.11
11:54
(47) а им всем оно надо? )))
49 PZh
 
15.12.11
15:16
(7) не сработало, т.к. KTSC0 - это не типизированное перечисление и соответственно нужно расширенный идентификатор из 13 символов, а не из 9-ти.
KTSC0 |C   |13    |0

Поэтому нужно делать так (тупо добавить "~"):

AND (Пров.KTSC0 = :ПиуПиу~)

Запрос.УстановитьТекстовыйПараметр("ПиуПиу",Перечисление.ТипыНоменклатуры.Продукция)
50 PZh
 
15.12.11
15:16
(49)->(0) это и ответ топик стартеру заодно
51 Последняя_
Надежда
 
16.12.11
13:37
(49) а у меня кажется что именно из 9... потому что ПиуПиу или ПыщьПыщь сработало и без ~ Но все равно спасибо, думаю в будущем пригодится.
52 Mikeware
 
16.12.11
13:42
"Долго думали, чего же не хватает в организме котенка, если он жрет полиэтилен.
Поняли - мозгов!"©
53 Последняя_
Надежда
 
16.12.11
14:51
(52) злые вы...
54 PZh
 
16.12.11
15:39
(51) Ну вообще-то должно быть из 13, как бэ...
Можно открыть файл DDS и глянуть.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс