|
v7: Не выходит OLEDBData , справочники(н)реквизиты(к) | ☑ | ||
---|---|---|---|---|
0
zladenuw
13.09.12
✎
04:54
|
Процедура Сформировать()
База = СоздатьОбъект("OLEDBData"); Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;User ID="+"kirill"+";Password="+"1"+";Collating Sequence=MACHINE"; Рез = База.Соединение(Соединение); Запрос = База.СоздатьКоманду(); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.ВставитьКолонку("Объект"); ТЗ.ВставитьКолонку("Структура"); //СпЗнРеквизиты = СоздатьОбъект("СписокЗначений"); Для к=1 По Метаданные.Справочник() Цикл Метафитамин = Метаданные.Справочник(к).Идентификатор; ТЗ.НоваяСтрока(); ТЗ.Объект = Метафитамин; //реквики СпЗнРеквизиты = СоздатьОбъект("СписокЗначений"); Для ы=1 По Метаданные.Справочник(к).Реквизит() Цикл СпЗнРеквизиты.ДобавитьЗначение(Метаданные.Справочник(к).Реквизит(ы).Идентификатор,); КонецЦикла; ТЗ.Структура= СпЗнРеквизиты.ВСтрокуСРазделителями(); КонецЦикла; Если Рез = 1 Тогда Тз.ВыбратьСтроки(); Пока Тз.ПолучитьСтроку() = 1 Цикл ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование"; СпЗнРеквизиты = СоздатьОбъект("СписокЗначений"); СпЗнТекреквизиты =СпЗнРеквизиты.ИзСтрокиСРазделителями(ТЗ.Структура); Для у=1 По СпЗнТекреквизиты.РазмерСписка() Цикл ТекРекв = СпЗнТекреквизиты.Получить(у); ТекстЗапроса = ТекстЗапроса+ "|"+ТекРекв; КонецЦикла; ТекстЗапроса = ТекстЗапроса + "|FROM +$Справочник."+ТЗ.Объект+" as Спр"; ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); //бла бла КонецЦикла; КонецЕсли; КонецПроцедуры ЗагрузитьВнешнююКомпоненту("1cpp.dll"); |
|||
96
zladenuw
13.09.12
✎
09:17
|
ладно. есть спр. есть реквизит с типом строка и неогр длинной. как его связать с таблице 1SBLOB? по какому полю ? хотя туплю тупо реквизит=FIELDID ? угадал ?
|
|||
97
Светлый Гений
13.09.12
✎
09:19
|
(96) зачем гадать? я же тебе писал, надо будет думать и разбираться, правда не уточнил еще, что сначала надо будет документацию почитать. Если ты не хочешь думать, для чего тебе тогда вообще помогать?
|
|||
98
zladenuw
13.09.12
✎
09:20
|
какую именно ?
|
|||
99
zladenuw
13.09.12
✎
09:21
|
1sqlite сам строит такую связь ? да ?
|
|||
100
Светлый Гений
13.09.12
✎
09:22
|
(98)по таблице 1SBLOB и строкам неограниченной длины
|
|||
101
Светлый Гений
13.09.12
✎
09:22
|
(99)не знаю, не пользовался
|
|||
102
Ёпрст
13.09.12
✎
09:22
|
(96) проще в начале собрать все длинные строки в отдельныю временную тз в другом запросе.. потом соединение с ним.
Или в самом подзапросе. |
|||
103
zladenuw
13.09.12
✎
09:22
|
(97) я просто не могу понять. если это ссылка на объект. то объект хранится в другой таблице. но тут же не ссылка... это все 8 виновата :(.
|
|||
104
zladenuw
13.09.12
✎
09:23
|
(102) тупо читать таблицу. и потом искать по ее представлению в нужном объекте ?
|
|||
105
Ёпрст
13.09.12
✎
09:26
|
и это , как правило, там достаточно 2-х соединений для BLOCKNO и ..BLOCKN1
врят ли будет больше блоков для 1 реквизита |
|||
106
zladenuw
13.09.12
✎
09:26
|
введешь умную фразу в поиск. сразу кубань. а там болит.
|
|||
107
zladenuw
13.09.12
✎
09:27
|
(105) а можно с простого примера. честно не догоняю. а тем более прочитав
BLOCKNO – номер блока. Нумеруются с нуля. Тип – Numeric(4,0). BLOCK – сам блок для хранения информации. В нулевом блоке первые 9 байт – длина строки в 16-ричной системе счисления. Тип – Char(80). Оста |
|||
108
zladenuw
13.09.12
✎
09:29
|
я хочу понять почему именно так. тупо копи паст не катит. по этому дотошный
|
|||
109
Ёпрст
13.09.12
✎
09:30
|
(107)
BLOCKNO - там номера блоков.. с 0 до...N |
|||
110
zladenuw
13.09.12
✎
09:33
|
и откуда мне знать что в блоке н мое значение реквизита
|
|||
111
Ёпрст
13.09.12
✎
09:34
|
||||
112
Ёпрст
13.09.12
✎
09:34
|
как пример
|
|||
113
zladenuw
13.09.12
✎
09:36
|
а почему 4 ?
|
|||
114
zladenuw
13.09.12
✎
09:38
|
с чем его связывать. если как для дебила который на 8 кодит. есть ссылка или указатель. не понял по примеру :(
|
|||
115
Ёпрст
13.09.12
✎
09:50
|
(114) че ?
обжид - это ид твоего справочника.. всё собственно, филдид - это идвида+реквизита в одном флаконе |
|||
116
zladenuw
13.09.12
✎
09:56
|
а пример ? BLOCKNO длина 4. а ид спр больше
|
|||
117
Ёпрст
13.09.12
✎
09:59
|
(116) да блин..BLOCKNO - в нём просто номера блоков, блок = 80 байт, если длина реквизита (его значения) 200 байт, то будет 3 блока
|
|||
118
Ёпрст
13.09.12
✎
10:00
|
открой же наконец саму табличку, да погляди глазками на неё..
|
|||
119
Ёпрст
13.09.12
✎
10:01
|
и посмотри, если найдешь BLOCKNO = 2.. то это просто нечто запихали в реквизит, как правило, там max(BLOCKNO)=1
|
|||
120
zladenuw
13.09.12
✎
10:19
|
есть от 0 до 4
|
|||
121
Ёпрст
13.09.12
✎
10:20
|
(120)ну, значит 4 лефт джоина в тексте запроса..
|
|||
122
zladenuw
13.09.12
✎
10:21
|
вопрос не в тему а че уже 4 ? по ссылка находил и без цифры ? :)
|
|||
123
zladenuw
13.09.12
✎
10:22
|
(122) банан ?
|
|||
124
zladenuw
13.09.12
✎
10:23
|
и все таки дай пример. я так не могу :(. не догоняю. может это то что не спал. ночь искал решение. или просто не значение или нехватка их
|
|||
125
zladenuw
13.09.12
✎
10:24
|
я обжек 4 символа. реквизит на него ссылается или спр где этот реквизит .?
|
|||
126
Ёпрст
13.09.12
✎
10:24
|
(122) тебе нужно сделать столько левых соединений, сколько макс блобно, чтоб точно гарантировать, что все куски склеятся..
но если фильтранешь по конкретному виду, врят ли там будет >1 |
|||
127
zladenuw
13.09.12
✎
10:26
|
(12) это про ник :) а не про тему :)
|
|||
128
Ёпрст
13.09.12
✎
10:27
|
vjz ndjz ytgjybvfn
|
|||
129
zladenuw
13.09.12
✎
10:27
|
можешь не переводить :)
|
|||
130
zladenuw
13.09.12
✎
10:29
|
(126) чем фильтровать ? блок текст. обжек там 4 символа. но к чему они ? если я получаю реквизит то там этот обжек ?
|
|||
131
zladenuw
13.09.12
✎
10:29
|
я не могу понять соединение таблиц
где ключ между таблицами. |
|||
132
zladenuw
13.09.12
✎
10:30
|
главное за руль не сесть....
|
|||
133
Ёпрст
13.09.12
✎
10:32
|
objid = id элемента справочника
|
|||
134
zladenuw
13.09.12
✎
10:48
|
в эту таблицу когда поминаются элементы ? все строковые. или только ... ?
|
|||
135
Ёпрст
13.09.12
✎
10:49
|
в ней хранятся строки неограниченной длины. от всех реквизитов справочников с таким типом
|
|||
136
Ёпрст
13.09.12
✎
10:50
|
обж ид - это указатель на элемент справочника, филдид - указатель на "название" реквизита в справочнике, блок - само значение, блокно - номера блоков.
Че там может быть еще непонятного ? |
|||
137
Ёпрст
13.09.12
✎
10:52
|
если длина значения не влазиет в поле блок (=80 байтам), создается еще 1 строка в табличке, только у неё блокно=1, если опять на влазиет.. еще строка с блокно=2 и т.д..
Строка разбивается на блоки кратные 80 байтам.. фирштейн ? |
|||
138
Светлый Гений
13.09.12
✎
10:53
|
(137)какой ты терпеливый
|
|||
139
zladenuw
13.09.12
✎
10:55
|
(137) тобишь objid разбита на н количество ? так ? но почему указание ссылки в 4 знака. или тупо Элемент.Ссылка = Хлам.objid
|
|||
140
Ёпрст
13.09.12
✎
10:56
|
(139)
>>>почему указание ссылки в 4 знака в каком месте ?! |
|||
141
zladenuw
13.09.12
✎
10:56
|
Епрст ты это понимаешь и знаешь. а я только понимаю или пытаюсь.
|
|||
142
zladenuw
13.09.12
✎
10:57
|
нех ?
|
|||
143
Светлый Гений
13.09.12
✎
10:57
|
FIELDID - ID реквизита
objid - ID элемента справочника |
|||
144
zladenuw
13.09.12
✎
10:57
|
тормоз я .
|
|||
145
zladenuw
13.09.12
✎
10:58
|
я открыл таблицу и смотрю на значение objic и там 4 символа.
|
|||
146
Светлый Гений
13.09.12
✎
10:59
|
FIELDID можно только в таблице BLOB глазками посмотреть. Хотя могу и ошибаться, но по-другому я не нашел как.
|
|||
147
Ёпрст
13.09.12
✎
10:59
|
в том коде, что kiruha приводит - там просто запрос для попадания в индекс MAIN = FIELDID+OBJID+STR(BLOCKNO,4)
|
|||
148
Светлый Гений
13.09.12
✎
10:59
|
(145)ну и что, остальное пробелами добивается
|
|||
149
Ёпрст
13.09.12
✎
11:00
|
(142) догадливый
|
|||
150
Светлый Гений
13.09.12
✎
11:00
|
+(148)размер поля то все равно 9 остается
|
|||
151
zladenuw
13.09.12
✎
11:00
|
I hate theory, give those practices
|
|||
152
zladenuw
13.09.12
✎
11:01
|
отдохните. я пока за бухлом. без него тут не как :_)
|
|||
153
zladenuw
13.09.12
✎
11:01
|
батарейка рубит
|
|||
154
Ёпрст
13.09.12
✎
11:01
|
Ты это, прочитай сперва, из чего состоит id = 9 символов, 13 и 23..
всё тогда встанет на свои места, ссылки все есть выше. |
|||
155
zladenuw
13.09.12
✎
11:05
|
objid это уникальный идентификатор элемента, а FIELDID указатель на реквизит этого элемента ? так ?
|
|||
156
zladenuw
13.09.12
✎
11:05
|
ща поднастроем прием и передачу. и будет все ок
|
|||
157
zladenuw
13.09.12
✎
11:08
|
просто вы знаете больше и понимаете маштабней. а я как падаван. учусь
|
|||
158
zladenuw
13.09.12
✎
11:08
|
я только вчера осознал что можно 1с7 дбф юзать так. чуствую себя нубом (
|
|||
159
Ёпрст
13.09.12
✎
11:11
|
(155) так
|
|||
160
Ёпрст
13.09.12
✎
11:12
|
это, для простейших запросов, типа (0) пиши на 1sqlite - там всё достается проще, строки неогр длины будет как "обычный" реквизит справочника.
|
|||
161
Ёпрст
13.09.12
✎
11:12
|
в тексте запроса
|
|||
162
zladenuw
13.09.12
✎
11:14
|
(160) не. тут добьем. построим универсальную функцию. а потом на 1sqlite
|
|||
163
zladenuw
13.09.12
✎
11:37
|
хотелка. функция определяет какая бд. передаем параметром колонки. а там уже строиться запрос, а на возврате на выбор тз, спзн а может указанный тип знч
|
|||
164
Ёпрст
13.09.12
✎
11:39
|
(163) это всё уже есть в классе ПрямойЗапрос
|
|||
165
zladenuw
13.09.12
✎
12:39
|
нес 1с. что бы для 7 и 8
|
|||
166
zladenuw
13.09.12
✎
12:45
|
(164) что именно ? ссылка есть ?
|
|||
167
zladenuw
13.09.12
✎
12:46
|
меня интересует возможность использование в обмене по определенной структуре. выгрузка, загрузка. даже использование классов пока только на 7. а то гемора с ними.....
|
|||
168
zladenuw
13.09.12
✎
12:56
|
не КД. не нравится механизм обновление обработки, замена модуля. лучше длл. а протокол в хмл
|
|||
169
zladenuw
13.09.12
✎
13:20
|
не пойму прикола.
делаю так и поучаю максимум 120 символов а как увидит неогр //реквики СпЗнРеквизиты = СоздатьОбъект("СписокЗначений"); Для ы=1 По Метаданные.Справочник(к).Реквизит() Цикл СпЗнРеквизиты.ДобавитьЗначение(Метаданные.Справочник(к).Реквизит(ы).Идентификатор,Метаданные.Справочник(к).Реквизит(ы).Длина); Сообщить(Метаданные.Справочник(к).Реквизит(ы).Длина); КонецЦикла; ТЗ.Структура= СпЗнРеквизиты.ВСтрокуСРазделителями(); КонецЦикла; Если Рез = 1 Тогда Тз.ВыбратьСтроки(); Пока Тз.ПолучитьСтроку() = 1 Цикл ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование,"; СпЗнТекреквизиты = СоздатьОбъект("СписокЗначений"); СпЗнТекреквизиты.ИзСтрокиСРазделителями(ТЗ.Структура); л1 = 0; Для у=1 По СпЗнТекреквизиты.РазмерСписка() Цикл Стр = ""; ТекРекв = СпЗнТекреквизиты.ПолучитьЗначение(у,Стр); ТекстЗапроса = ТекстЗапроса+ РазделительСтрок+" $Спр."+ТекРекв+" as "+" "+ТекРекв+","; КонецЦикла; ТекстЗапроса = Лев(ТекстЗапроса,СтрДлина(ТекстЗапроса)-1); ТекстЗапроса = ТекстЗапроса + РазделительСтрок+"FROM $Справочник."+ТЗ.Объект+" as Спр"; ТЗ2 = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ2.ВыбратьСтроки(); Пока ТЗ2.ПолучитьСтроку() = 1 Цикл // ТЗ2 // КонецЦикла; |
|||
170
Ёпрст
13.09.12
✎
13:22
|
>>>а как увидит неогр
Длина=0 |
|||
171
zladenuw
13.09.12
✎
13:26
|
?????????
|
|||
172
zladenuw
13.09.12
✎
13:27
|
ха
?????????. а почему нельзя ввести такой текст !!!!!! это имеет для меня большое значение |
|||
173
Aprobator
13.09.12
✎
13:32
|
(0) и что это за, пардон, вынимание инфы через гланды?
|
|||
174
zladenuw
13.09.12
✎
13:33
|
плохой мастер был. все так и учил.
|
|||
175
Ёпрст
13.09.12
✎
13:34
|
(171) че ?
|
|||
176
zladenuw
13.09.12
✎
13:34
|
(172) только 1 но. а чего нельзя эту кодировку ?
|
|||
177
Ёпрст
13.09.12
✎
13:35
|
(176) копируй в русской расскладке и вставляй в русской расскладке клавиатуры.
|
|||
178
zladenuw
13.09.12
✎
13:56
|
||||
179
Ёпрст
13.09.12
✎
14:22
|
(178) конечно нет, 1с её не поддерживает
можно конечно извратится, на форме в активиксе отображать, на инфостарте есть примеры. |
|||
180
zladenuw
14.09.12
✎
23:44
|
и снова я тут. делаю так
SELECT Спр.Code as Код, Спр.Descr as Наименование, $Спр.Запись as Запись, $Спр.Периодичность as Периодичность, $Спр.__Дата as __Дата, $Спр.Время as Время, $Спр.__ДатаПоказа as __ДатаПоказа, $Спр.Повторить as Повторить, $Спр.ВремяПовтора as ВремяПовтора, $Спр.Автор as Автор ДС.BLOCKNO, ДС.Block, ConvSyst10(TRIM(LEFT(ДС.BLOCK,9)),16) as N, SUBSTR(ДС.BLOCK,10, ConvSyst10(TRIM(LEFT(ДС.BLOCK,9)),16)) as Full FROM $Справочник.Блокнот as Спр right join 1SBLOB as ДС ON ДС.ObjID=Спр.ID ТЗ2 = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); {C:\USERS\KIRILL\DESKTOP\ПРЯМЫЕ ЗАПРОСЫ.ERT(78)}: FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword. |
|||
181
zladenuw
14.09.12
✎
23:46
|
создал файл ConvSyst10.prg с текстом функции
таким. нашел вот тут http://www.1cpp.ru/forum/YaBB.pl?num=1160022579/3 FUNCTION ConvSyst10(num AS String, syst AS Integer) i=0 c=0 num=UPPER(num) DO WHILE !EMPTY(num) c=ASC(LEFT(num,1)) i=IIF(c>57,c-55,c-48) * syst ** (len(num)-1)+i num=RIGHT(num,LEN(num)-1) ENDDO RETURN i ENDFUNC |
|||
182
zladenuw
15.09.12
✎
01:35
|
SELECT
Спр.Code as Код, Спр.Descr as Наименование, $Спр.Запись as Запись, $Спр.Периодичность as Периодичность, $Спр.__Дата as __Дата, $Спр.Время as Время, $Спр.__ДатаПоказа as __ДатаПоказа, $Спр.Повторить as Повторить, $Спр.ВремяПовтора as ВремяПовтора, $Спр.Автор as Автор, ДС.BLOCKNO, ДС.Block, ConvSyst10(TRIM(LEFT(ДС.BLOCK,9)),16) as N, SUBSTR(ДС.BLOCK,10, ConvSyst10(TRIM(LEFT(ДС.BLOCK,9)),16)) as Full FROM $Справочник.Блокнот as Спр left join 1SBLOB as ДС ON ДС.ObjID=Спр.ID получим по 5 записей. что бы получить ссылку нужно ее всегда типизировать ? |
|||
183
zladenuw
15.09.12
✎
01:44
|
что за прикол. смотрю спр. а там группы и пустые неограниченные строки :)
|
|||
184
КонецЦикла
15.09.12
✎
01:50
|
(182) А ты молодец. Уже и до функций дошел, упертый
Зато победишь этот долбаный файл |
|||
185
zladenuw
15.09.12
✎
02:00
|
SELECT
Спр.Code as Код, Спр.Descr as Наименование, $Спр.Периодичность as Периодичность, $Спр.__Дата as __Дата, $Спр.Время as Время, $Спр.__ДатаПоказа as __ДатаПоказа, $Спр.Повторить as Повторить, $Спр.ВремяПовтора as ВремяПовтора, $Спр.Автор as [Автор$Спр.Пользователи], ДС.BLOCKNO, ДС.Block, ConvSyst10(TRIM(LEFT(ДС.BLOCK,9)),16) as N, SUBSTR(ДС.BLOCK,10, ConvSyst10(TRIM(LEFT(ДС.BLOCK,9)),16)) as Full FROM $Справочник.Блокнот as Спр INNER join 1SBLOB as ДС ON ДС.ObjID=Спр.ID Тут я получаю внутреннею связь с таблицей хлама. надо наоборот ? тогда я получу соединение по спр ? |
|||
186
zladenuw
15.09.12
✎
02:08
|
про втыкал совет :)
LEFT join 1SBLOB as ?? ON ???.ID=??.FIELDID+??.ObjID+Str(??.BLOCKNO)"; |
|||
187
zladenuw
15.09.12
✎
02:16
|
SELECT
Спр.Code as Код, Спр.Descr as Наименование, $Спр.Адрес as Адрес, $Спр.ЕГРПОУ as ЕГРПОУ, $Спр.Примечание as Примечание, ДС.BLOCKNO, ДС.Block, ConvSyst10(TRIM(LEFT(ДС.BLOCK,9)),16) as N, SUBSTR(ДС.BLOCK,10, ConvSyst10(TRIM(LEFT(ДС.BLOCK,9)),16)) as Full FROM $Справочник.Банки as Спр inner join 1SBLOB as ДС ON ДС.FIELDID+ДС.ObjID+Str(ДС.BLOCKNO)=Спр.ID ТЗ2.Загрузить(Запрос.ВыполнитьИнструкцию(ТекстЗапроса)); {C:\USERS\KIRILL\DESKTOP\ПРЯМЫЕ ЗАПРОСЫ.ERT(61)}: FAILED! ICommandText::Execute(): Cannot open file d:\базы\автомир_20120905(1)\sc112.dbf. а теперь что не так :( |
|||
188
zladenuw
16.09.12
✎
00:47
|
ап
|
|||
189
zladenuw
16.09.12
✎
00:52
|
как узнать объект с 1SBLOB
|
|||
190
КонецЦикла
16.09.12
✎
02:33
|
||||
191
Ёпрст
17.09.12
✎
10:09
|
(187) ТЗ2.Загрузить //вот так никогда не пиши
|
|||
192
zladenuw
17.09.12
✎
10:35
|
(191) построчно добавлять значения ?
|
|||
193
zladenuw
17.09.12
✎
10:36
|
а вот эту конструкцию можно сразу получить в прямом запросе или нужно только отдельно ?
глМД = СоздатьОбъект("MetaDataWork"); ИДЮрАдрес = Прав(_IDToStr(глМД.ИДРеквизитаСправочника("ЮрЛица","ЮрАдрес")),4); |
|||
194
Ёпрст
17.09.12
✎
10:50
|
(192) нет. Использоватьметод Выгрузить или Заполнить
|
|||
195
Ёпрст
17.09.12
✎
10:50
|
(193) создать временную табличку соответствий - проще всего
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |