0
- 26.08.2016 - 10:49
|
Привожу текст запроса, который возвращает правильный результат в базе SQL: ТекстЗапроса="SELECT СпрК.ID as [Контейнер $Справочник.Контейнера] ,$СпрК.ОбъектРодитель as [Релиз $Справочник.Релизы] FROM $Справочник.Контейнера as СпрК INNER JOIN $Справочник.Релизы as СпрР on $СпрК.ОбъектРодитель=СпрР.ID AND $СпрР.НомерГТД=:ТекущаяГТД"; При выполнении его в базе DBF той-же конфигурации возвращает пустую таблицу. В чем может быть причина? Текст , вроде-бы, должен подходить и для DBF. ТекущаяГТД - это строка. $СпрР.НомерГТД - то же самое (длина совпадает). $СпрК.ОбъектРодитель - это реквизит справочника $Справочник.Контейнера типа Справочник.Релизы. Строка соединения: Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN="""; | | |
1
- 26.08.2016 - 12:17
| Цитата:
Попробуй передавать ТекущаяГТД не через параметр, а вставить непосредственно в текст запроса: "... AND $СпрР.НомерГТД= '"+ТекущаяГТД+"'"; | | |
2
- 29.08.2016 - 10:21
|
Добрый день! 1 - Длина совпадает - это значит, что длина строки ТекущаяГТД равна длине строки $СпрР.НомерГТД (в начале и в конце могут быть лидирующие и концевые пробелы). Попробывал. То-же самое. Ничего не изменилось. Похоже, проблема тут в том, что в SQL базе колонка "Релиз" возвращаемой запросом таблицы значений заполнена, а в DBF базе - нет( $СпрК.ОбъектРодитель имеет пустое значение). Почему? | | |
3
- 29.08.2016 - 11:02
| Я убрал конструкцию INNER JOIN из этого запроса - и у меня именно так и получилось - колонка Релиз возвращаемой таблицы значений не заполнена. | | |
4
- 29.08.2016 - 11:37
| что за ОбъектРодитель? может PARENTEXT? | | |
5
- 29.08.2016 - 11:56
| Да нет. Это просто так реквизит справочника Контейнеры назван. Он имеет тип "Справочник.Релизы". Ничего особенного здесь нет. | | |
6
- 29.08.2016 - 12:05
| Справочник Контейнеры НЕ ПОДЧИНЕН справочнику Релизы. | | |
7
- 29.08.2016 - 17:30
| а в самом дбф файле справочника Контейнеры все данные есть? на дбф базах я работал с 1sqlite | | |
8
- 29.08.2016 - 18:34
|
Разбей запрос на части и отдельно посмотри что будет. Например, 1 - просто запрос к контейнерам, 3 - просто к релизам, 3 - к релизам с ГТД и т.д. Займет 15 минут | | |
9
- 30.08.2016 - 01:12
|
может база полетела. может платформа не та. может индексы или кодировка не та. может версия 1с++ не та. свой вариант? | | |
10
- 30.08.2016 - 11:54
| (9)декомпозиция запроса легко поможет все выяснить. Запрос то тривиальный, было бы о чем вести речь. | | |
11
- 30.08.2016 - 15:34
|
7 - Уже говорил - повторю. ОДНА И ТА ЖЕ база с одними и теми же данными развернута в DBF формате и в SQL формате. В SQL релизы на месте, а в DBF - пусто. 8 - Уже разбил - смотри 3. 9 - Стандартный (не прямой) запрос делаю - все данные на месте (и релизы тоже). 10 - Проще не придумаешь. Сейчас попробую вытянуть отдельно колонку "ОбъектРодитель." Думаю, что будет колонка с пустыми значениями в DBF. В SQL - заполненная колонка. | | |
12
- 30.08.2016 - 15:47
|
10 - Так и есть. Выполнил такой запрос: ТекстЗапроса="SELECT | $СпрК.ОбъектРодитель as [Релиз $Справочник.Релизы] |FROM | $Справочник.Контейнера as СпрК"; Результат - в SQL - длинная заполненная колонка, в DBF - длинная пустая колонка. Сейчас попробую сделать INNER JOIN этого запроса со справочником Релизы и релизы вытянуть оттуда. | | |
13
- 30.08.2016 - 15:53
| поле справочника не может быть в SQL базе заполнено, а той же dbf базе не заполнено. Значит что-то нам не договариваете. Смотрите, что в физических таблицах. Сходили в словарь (dd или dds), узнали имена полей, таблиц в QA простым запросом к таблице select * смотрите в чем дело. В DBF базе вьюером или VFP тоже самое. Чудес не бывает. Отличия в dbf и SQL есть, но не на уровне заполненности поля справочника. Может и вправду кодировка. Это не бином Ньютона, надо препарировать таблицу на физическом уровне | | |
14
- 30.08.2016 - 15:54
| Вообще в результирующей таблице нет ни одной строки.Делаю в SQL - данные есть. | | |
15
- 30.08.2016 - 15:54
| (12)Вы не типизируйте колонку запроса, пусть выводится как есть, уберите Ваше AS $Справочник... | | |
16
- 30.08.2016 - 15:56
|
ТекстЗапроса="SELECT | $СпрК.ОбъектРодитель AS Релмз |FROM | $Справочник.Контейнера as СпрК"; Так надо смотреть что там хранится | | |
17
- 30.08.2016 - 16:04
|
13 - Даже не знаю что Вам еще сказать. Может быть пагубно влияет на DBF тот факт, что длина Наименования элемента справочника Релизы равна 0 (нулю). Может быть в этом вся проблема зарыта? Спасибо. Буду рыть дальше. | | |
18
- 30.08.2016 - 16:41
| ну так Вы колонку типизируете, а отобразить ее непонятно как. Уберите типизацию и рыть не придется | | |
19
- 30.08.2016 - 17:05
| Такой запрос "SELECT SP1294 FROM SC1281" - результат тот-же. | | |
20
- 30.08.2016 - 17:10
| (19)что значит тот же? пустая колонка ? а в SQL что выводится ? | | |
21
- 30.08.2016 - 17:12
| что-то Вы темните. Реквизит случайно не периодический ? | | |
22
- 30.08.2016 - 17:17
| нет периодическим исключается, там все по другому | | |
23
- 30.08.2016 - 20:05
|
основное представление элементов справочника "Релизы" в виде кода указано? номер релиза - код или строковый реквизит элемента справочника "Релизы"? | | |
24
- 30.08.2016 - 20:09
| походу код. значит надо напрямую к нему обращаться. наверное. | | |
25
- 31.08.2016 - 10:52
|
20 - это значит: в DBF - пустая колонка (колонка, заполненная пустыми значениями) ,а в SQL - заполненная непустыми значениями. 21,22 - нет, реквизит непериодический. 23 - да, в виде кода. Тип кода - текстовый. Номер релиза (он же код) - строка 12 символов. 24 - не понял? Что значит "значит надо напрямую к нему обращаться"? | | |
26
- 31.08.2016 - 11:33
| 24 -Сейчас попробую. | | |
27
- 31.08.2016 - 12:25
| Я что-то уже потерял нить рассуждений. Если нетипизированная (внутренне содержание) колонка пустая. то надо смотреть почему В чем отличие двух баз, это явно не одна и та же база в разных форматах хранения | | |
28
- 31.08.2016 - 12:29
| Пришли на почту базу dbf или таблицу эти две таблицы и словарь | | |
29
- 31.08.2016 - 14:51
| 28-USSR > Извините, не подскажите - как здесь прикрепить к сообщению электронной почты файлы? | | |
30
- 31.08.2016 - 15:04
| (29)Не знаю ) | | |
31
- 31.08.2016 - 22:08
|
А не пытались воспользоваться классом ПрямойЗапрос? Если нужно работать одновременно с SQL и DBF, то он будет поудобнее. Я же реализовал свой класс для работы со справочниками. Работать с ним примерно так: оСпрНаборовРефЗн = СоздатьОбъект("ЗапросКСправочнику"); оСпрНаборовРефЗн.Инит("НаборыРеференсныхЗначений") ; оСпрНаборовРефЗн.ДобавитьРеквизиты("ТекущийЭлемент ,Наименование"); оСпрНаборовРефЗн.ДобавитьУсловиеПоСписку("Аппарат" , глОбщийОбъектМетоды.СписокЗначенийУник(ПолучитьПус тоеЗначение("Справочник.Аппараты"), Аппарат)); оСпрНаборовРефЗн.ДобавитьУсловиеПоСписку("СпрНабРе фЗн.Номенклатура", спНоменклатуры); оСпрНаборовРефЗн.ДобавитьСоединение("СпрНабРефЗн", "НаборыРеференсныхЗначений", "СпрНабРефЗн.ТекущийЭлемент", "Родитель"); тзНаборовРефЗн = оСпрНаборовРефЗн.ВыполнитьЗапрос(); тзНаборовРефЗн.ВыбратьСтроки(); Пока тзНаборовРефЗн.ПолучитьСтроку() = 1 Цикл глСпДобавитьЗначение(спНаборовРефЗн, тзНаборовРефЗн.ТекущийЭлемент, тзНаборовРефЗн.Наименование); КонецЦикла; Переделок с использования классического объекта 1С "Справочник" немного. Работает очень быстро. До 10000 запросов в секунду на DBF варианте. Использует 1SQLite Орефкова для DBF и прямой доступ от 1С++ для SQL. Соответственно в монопольном доступе тоже работает. Ну и по поводу самой ошибки. Может посмотреть что будет возвращать классический Запрос? | | |
32
- 01.09.2016 - 06:08
| (31)Тут примитивный почти скалярный запрос не работает, а Вы класс предлагаете. Надо с одной таблицей разобраться. 1С++ прекрасно работает и для DBF. Поэтому если проведение не не прямых запросах, то монопольный режим не такое уж и ограничение. Зато отличий между dbf и sql куда меньше, чем между синтаксисами 1с++ и sqllile. А классический запрос тут даром не нужен, надо посмотреть прямым без типизации полей | | |
33
- 01.09.2016 - 08:49
| (32) Я намекаю, что если есть необходимость работать с SQL и DBF, то желательно всю рутину отличий одного варианта от другого вынести в какую-либо надстройку. У меня, например, вся конфигурация переписана на мой ЗапросКСправочнику. Там же где нужно обращение к документам и регистрам используется ПрямойЗапрос. Поэтому ошибок связанных с отличием SQL от DBF практически нет. Все оттестировано давным давно. | | |
34
- 01.09.2016 - 11:14
| (33)Это все правильно и хорошо ) Только в обсуждаемом запросе отличий в запросе в зависимости от формата хранения нет вообще ) Синтаксис идентичен. | |
| Интернет-форум Краснодарского края и Краснодара |