|
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"); |
|||
1
zladenuw
13.09.12
✎
04:55
|
СпЗнТекреквизиты.РазмерСписка() не список.... почему ?
|
|||
2
zladenuw
13.09.12
✎
05:11
|
База = СоздатьОбъект("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 Спр"; ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл // ТЗ2 // КонецЦикла; //бла бла КонецЦикла; КонецЕсли; FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword. |
|||
3
zladenuw
13.09.12
✎
05:18
|
ап.
FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword. |
|||
4
zladenuw
13.09.12
✎
05:22
|
СпЗнТекреквизиты.ИзСтрокиСРазделителями(ТЗ.Структура);
Для у=1 По СпЗнТекреквизиты.РазмерСписка() Цикл ТекРекв = СпЗнТекреквизиты.ПолучитьЗначение(у); ТекстЗапроса = ТекстЗапроса+ "|"+ТекРекв+" as "+" "+ТекРекв;; КонецЦикла; и так не |
|||
5
zladenuw
13.09.12
✎
05:24
|
пошел за пивом. мб чет приедет к уму
|
|||
6
zladenuw
13.09.12
✎
05:35
|
что не так
ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование"; СпЗнТекреквизиты = СоздатьОбъект("СписокЗначений"); СпЗнТекреквизиты.ИзСтрокиСРазделителями(ТЗ.Структура); Для у=1 По СпЗнТекреквизиты.РазмерСписка() Цикл ТекРекв = СпЗнТекреквизиты.ПолучитьЗначение(у); Если (Найти(ТекРекв,"Код")>0) или (Найти(ТекРекв,"Наименование")>0) Тогда КонецЕсли; ТекстЗапроса = ТекстЗапроса+ РазделительСтрок+"Спр."+ТекРекв+" as "+" "+ТекРекв; КонецЦикла; ТекстЗапроса = ТекстЗапроса + РазделительСтрок+"FROM $Справочник."+ТЗ.Объект+" as Спр"; Сообщить(ТекстЗапроса); ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); |
|||
7
zladenuw
13.09.12
✎
05:39
|
хм. теперь другая ошибка
ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование,"; СпЗнТекреквизиты = СоздатьОбъект("СписокЗначений"); СпЗнТекреквизиты.ИзСтрокиСРазделителями(ТЗ.Структура); Для у=1 По СпЗнТекреквизиты.РазмерСписка() Цикл ТекРекв = СпЗнТекреквизиты.ПолучитьЗначение(у); Если (Найти(ТекРекв,"Код")>0) или (Найти(ТекРекв,"Наименование")>0) Тогда Продолжить; КонецЕсли; ТекстЗапроса = ТекстЗапроса+ РазделительСтрок+"Спр."+ТекРекв+" as "+" "+ТекРекв+","; КонецЦикла; ТекстЗапроса = Лев(ТекстЗапроса,СтрДлина(ТекстЗапроса)-1); ТекстЗапроса = ТекстЗапроса + РазделительСтрок+"FROM $Справочник."+ТЗ.Объект+" as Спр"; Сообщить(ТекстЗапроса); ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл // ТЗ2 // КонецЦикла; FAILED! ICommandText::Execute(): SQL: Column 'АДРЕС' is not found. |
|||
8
zladenuw
13.09.12
✎
05:45
|
спр банки. реквизиты Адрес, ЕГРПОУ,Примечание.
что не так |
|||
9
zladenuw
13.09.12
✎
05:55
|
(6,7) тупняк. предопределенный реквизиты я так не получу. труля ля ля... ошибка так и есть. Че делать то ? мастера вы где ?
|
|||
10
zladenuw
13.09.12
✎
06:00
|
работает.
но SELECT ???.Code as ???, ???.Descr as ????????????, $???.????? as ?????, $???.?????? as ??????, $???.?????????? as ?????????? FROM $??????????.????? as ??? SELECT ???.Code as ???, ???.Descr as ????????????, $???.???????????????? as ????????????????, $???.????_???? as ????_????, $???.?????????? as ??????????, $???.?????????????????????????? as ??????????????????????????, $???.???? as ????, $???.???????? as ???????? FROM $??????????.??????????????????????? as ??? SELECT ???.Code as ???, ???.Descr as ????????????, $???.?????? as ??????, $???.????????????? as ?????????????, $???.__???? as __????, $???.????? as ?????, $???.__?????????? as __??????????, $???.????????? as ?????????, $???.???????????? as ????????????, $???.????? as ????? FROM $??????????.??????? as ??? ??2 = ??????.???????????????????(????????????); {C:\USERS\KIRILL\DESKTOP\?????????????.ERT(45)}: FAILED! ICommandText::Execute(): SQL: Column 'SP113' is not found. |
|||
11
zladenuw
13.09.12
✎
06:01
|
(10) wtf (.
FAILED! ICommandText::Execute(): SQL: Column 'SP113' is not found. спр блакнот. |
|||
12
КонецЦикла
13.09.12
✎
06:13
|
(9) Код и наименование есть всегда, кроме случаев когда их длина равна 0
Проверяется через метаданные |
|||
13
zladenuw
13.09.12
✎
06:14
|
да эт я так. уже от безвыходности. но вопрос вдругом. на 3 справочнике падаем. обшика в спр банки. пачяму. что не так.
|
|||
14
zladenuw
13.09.12
✎
06:16
|
может дело в неограниченном поле ?
|
|||
15
КонецЦикла
13.09.12
✎
06:20
|
Да, физически неогр. строка в DBF хранится не в таблице справочника
|
|||
16
zladenuw
13.09.12
✎
06:23
|
опля. а где ? и как читать то. это отдельная таблица ?
|
|||
17
КонецЦикла
13.09.12
✎
06:24
|
Попробуй 1sqlite.dll
Должна 1С понимать, не помню точно |
|||
18
zladenuw
13.09.12
✎
06:25
|
хочу прямые запросы :)
|
|||
19
zladenuw
13.09.12
✎
06:26
|
можно же читать. но буду получать не тип а ссылку на таблицу. что бы явно указать нужно [тип] тогда получу значение. а почему тут не работает. или надо сразу типизировать ?
|
|||
20
zladenuw
13.09.12
✎
06:26
|
выдержка
Все конечно работает, но вместо типа номенклатуры получаются какие-то буковки вида ‘ C3A ‘. Это внутренние идентификаторы объектов 1С, как они хранятся в базе. Существует несколько способов получения объектов по их внутренним идентификаторам, например с помощью функции ЗначениеВСтрокуВнутр(). Но у нас в руках такая мощная вещь – она практически все умеет делать сама: ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование, | vСпр.ТипНоменклатуры as [ТипНоменклатуры $Перечисление.ТипНоменклатуры] |FROM | $Справочник.Номенклатура as Спр"; |
|||
21
zladenuw
13.09.12
✎
06:27
|
а у меня даже не значение а сразу ошибка на попытке чтение таблицы. :(
|
|||
22
КонецЦикла
13.09.12
✎
06:33
|
(18) Зачем?
Сначала что-то нужно падчетать если хочешь В общем с классом Прямой запрос и 1sqlite.dll все читается, только что попробовал |
|||
23
zladenuw
13.09.12
✎
06:34
|
я рад. но я пробую База = СоздатьОбъект("OLEDBData");
|
|||
24
zladenuw
13.09.12
✎
06:34
|
ответ по теме. я же не спросил что лучше. хочу так и все.
|
|||
25
zladenuw
13.09.12
✎
06:35
|
пошел, снова за бухлом. мб снова мысля прийдет
|
|||
26
spock
13.09.12
✎
06:41
|
"Column 'SP113' is not found" - требуется перевод ошибки?
|
|||
27
КонецЦикла
13.09.12
✎
06:42
|
Вот хоть убей не помню со строками, но походу не работает
|
|||
28
КонецЦикла
13.09.12
✎
06:43
|
(26) Так он хочет прочитать строку неограниченной длины
в запросе $Спр.Реквизит |
|||
29
zladenuw
13.09.12
✎
06:51
|
читаю метаданные базы. перебираю справочники и его реквизиты. ловлю ошибку. как обойти. вопрос в этом
|
|||
30
zladenuw
13.09.12
✎
06:55
|
А теперь о «чудовище». Это 1SBLOB.DBF. Документация по поводу этой таблицы гласит:
Содержит значения реквизитов справочников, документов, счетов имеющих тип "Строка неограниченной длины". Также содержит описания шаблонов типовых операций". В общем-то, это ни что иное, как самопальный memo-файл. И механизмы те же: строка, состоящая из размера (16-ричное число в первых 9-ти байтах первого блока) плюс сам текст в блоках по 80 байт. И всё бы ничего, да вот реализовано всё это не как отдельный механизм, а как записи в DBF! С трудом можно поверить, что в движке, который 1С покупала (лицензировала!) для V7, не было поддержки memo-полей. Эта таблица используется не как место для хранения строк переменной длины, а как самая настоящая свалка. Некуда было пристроить типовые операции (ну очень длинные строки, имеющие формат MMS) – положили именно сюда. FIELDID [int] – ID объекта метаданных, который должен храниться. Тип – Char(4). OBJID [int] – ссылка на PKey записи таблицы, в которой должно храниться длинное значение. Тип – Char(9). BLOCKNO – номер блока. Нумеруются с нуля. Тип – Numeric(4,0). BLOCK – сам блок для хранения информации. В нулевом блоке первые 9 байт – длина строки в 16-ричной системе счисления. Тип – Char(80). и как его читать то ? |
|||
31
zladenuw
13.09.12
✎
07:05
|
ап!
|
|||
32
spock
13.09.12
✎
07:06
|
||||
33
zladenuw
13.09.12
✎
07:08
|
(32) и ?
|
|||
34
zladenuw
13.09.12
✎
07:08
|
тут не адо.
|
|||
35
spock
13.09.12
✎
07:17
|
(34)еще пивка тяпни
|
|||
36
zladenuw
13.09.12
✎
07:19
|
ну как прочитать ее ? эту строку неогр длены
|
|||
37
zladenuw
13.09.12
✎
07:35
|
ап
|
|||
38
zladenuw
13.09.12
✎
07:47
|
тюкнете ссылкой, что ли.
|
|||
39
zladenuw
13.09.12
✎
07:53
|
не нашел решения. ап!
|
|||
40
zladenuw
13.09.12
✎
08:00
|
и опять. репит
делаю вот так //******************************************* Процедура Сформировать() База = СоздатьОбъект("OLEDBData"); Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE;OLE DB Services=0"; Рез = База.Соединение(Соединение); Запрос = База.СоздатьКоманду(); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.ВставитьКолонку("Объект"); ТЗ.ВставитьКолонку("Структура","Строка"); //СпЗнРеквизиты = СоздатьОбъект("СписокЗначений"); Для к=1 По Метаданные.Справочник() Цикл //к = 3; Метафитамин = Метаданные.Справочник(к).Идентификатор; ТЗ.НоваяСтрока(); ТЗ.Объект = Метафитамин; //реквики СпЗнРеквизиты = СоздатьОбъект("СписокЗначений"); Для ы=1 По Метаданные.Справочник(к).Реквизит() Цикл СпЗнРеквизиты.ДобавитьЗначение(Метаданные.Справочник(к).Реквизит(ы).Идентификатор); КонецЦикла; ТЗ.Структура= СпЗнРеквизиты.ВСтрокуСРазделителями(); КонецЦикла; Если Рез = 1 Тогда Тз.ВыбратьСтроки(); Пока Тз.ПолучитьСтроку() = 1 Цикл ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование,"; СпЗнТекреквизиты = СоздатьОбъект("СписокЗначений"); СпЗнТекреквизиты.ИзСтрокиСРазделителями(ТЗ.Структура); л1 = 0; Для у=1 По СпЗнТекреквизиты.РазмерСписка() Цикл ТекРекв = СпЗнТекреквизиты.ПолучитьЗначение(у); Если ТекРекв = "Запись" Тогда л1 = 1; Продолжить; КонецЕсли; ТекстЗапроса = ТекстЗапроса+ РазделительСтрок+" $Спр."+ТекРекв+" as "+" "+ТекРекв+","; КонецЦикла; Если л1=1 Тогда ТекстЗапроса = ТекстЗапроса+ РазделительСтрок+" $Спр."+"Запись"+" as "+" "+"Запись"+","; КонецЕсли; // ТекстЗапроса = Лев(ТекстЗапроса,СтрДлина(ТекстЗапроса)-1); ТекстЗапроса = ТекстЗапроса + РазделительСтрок+"FROM $Справочник."+ТЗ.Объект+" as Спр"; Сообщить(ТекстЗапроса); ТЗ2 = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ2.ВыбратьСтроки(); Пока ТЗ2.ПолучитьСтроку() = 1 Цикл // ТЗ2 // КонецЦикла; //бла бла КонецЦикла; КонецЕсли; КонецПроцедуры ЗагрузитьВнешнююКомпоненту("1cpp.dll"); и получаю вот такую хрень FAILED! ICommandText::Execute(): SQL: Column 'SP113' is not found. КАК ПОБОРОТЬ |
|||
41
zladenuw
13.09.12
✎
08:04
|
хелп....
|
|||
42
ДенисЧ
13.09.12
✎
08:06
|
СпЗнРеквизиты = СоздатьОбъект("СписокЗначений");
Для ы=1 По Метаданные.Справочник(к).Реквизит() Цикл Если Метаданные.Справочник(к).Реквизит(ы).Пкриодический = 1 Тогда Сообщить("хр-ен мы так просто получим значение периодического реквизита..."); продолжить; КонецЕсли; СпЗнРеквизиты.ДобавитьЗначение(Метаданные.Справочник(к).Реквизит(ы).Идентификатор); КонецЦикла; |
|||
43
zladenuw
13.09.12
✎
08:07
|
(42) так это бл,..Я периодический. во зараза...
а как получить ? |
|||
44
Светлый Гений
13.09.12
✎
08:11
|
(43)получается подзапросом, смотри документацию
|
|||
45
zladenuw
13.09.12
✎
08:13
|
не. проблема не в этому :(. в таблице нету период реквизитов.. да чтоб его.
|
|||
46
Светлый Гений
13.09.12
✎
08:13
|
(36)строку неограниченной длины просто запросом вряд ли получится получить. Я делал так: получал все записи по нужным объектам, потом в цикле формировал строку
|
|||
47
ДенисЧ
13.09.12
✎
08:14
|
(46) из скуля - запросто...
|
|||
48
zladenuw
13.09.12
✎
08:14
|
вопрос дбф. скуль потом
|
|||
49
Светлый Гений
13.09.12
✎
08:14
|
(47)я в курсе
|
|||
50
zladenuw
13.09.12
✎
08:15
|
вернее будет потом функция которая определяет что это дбф или скуль и строит запросы.
|
|||
51
Светлый Гений
13.09.12
✎
08:15
|
покажи текст запроса, который у тебя получается
|
|||
52
zladenuw
13.09.12
✎
08:17
|
сек. кодировка вин 7 (
|
|||
53
zladenuw
13.09.12
✎
08:21
|
{"S","0","0","0","0","0","
SELECT Спр.Code as Код, Спр.Descr as Наименование, $Спр.Запись as Запись, $Спр.Периодичность as Периодичность, $Спр.__Дата as __Дата, $Спр.Время as Время, $Спр.__ДатаПоказа as __ДатаПоказа, $Спр.Повторить as Повторить, $Спр.ВремяПовтора as ВремяПовтора, $Спр.Автор as Автор FROM $Справочник.Блокнот as Спр"} |
|||
54
zladenuw
13.09.12
✎
08:21
|
хм а это что за радость
|
|||
55
zladenuw
13.09.12
✎
08:22
|
в отладичке нету такого
|
|||
56
Светлый Гений
13.09.12
✎
08:27
|
Так понимаю, что реквизит "Запись" имеет неограниченную длину. В таком случае смотри (36)
|
|||
57
zladenuw
13.09.12
✎
08:31
|
(56) не ошибся ? ась ?
|
|||
58
zladenuw
13.09.12
✎
08:31
|
жаль что фильтр поддонков он
|
|||
59
Светлый Гений
13.09.12
✎
08:34
|
+(56) вместо (36) смотри (46)
|
|||
60
zladenuw
13.09.12
✎
08:35
|
мне надо именно при чтение таблицы. не потом. так как передаю в функцию структуру реквизитов, на выходе тз что мне надо
|
|||
61
zladenuw
13.09.12
✎
08:36
|
бл..Я что 1slite? а тут совет другой. Прямые запросы 1С++ и 1Sqlite - есть разница?
|
|||
62
zladenuw
13.09.12
✎
08:38
|
хотя стоп. смотрю в отладчике в конец текста запроса знак $... подозрительно
|
|||
63
zladenuw
13.09.12
✎
08:45
|
!
|
|||
64
Ёпрст
13.09.12
✎
08:48
|
всё не читал, в чем вопрос то ?
|
|||
65
zladenuw
13.09.12
✎
08:48
|
вообщем есть реквизит неогр длины. при попытке его прочитать ошибка.
|
|||
66
zladenuw
13.09.12
✎
08:48
|
FAILED! ICommandText::Execute(): SQL: Column 'SP113' is not found.
|
|||
67
zladenuw
13.09.12
✎
08:49
|
и все. ласты
|
|||
68
zladenuw
13.09.12
✎
08:49
|
пробовал добавлять его в выборке последним. все равно. ошибка
|
|||
69
zladenuw
13.09.12
✎
08:50
|
или это фатал для дбф ?
|
|||
70
Ёпрст
13.09.12
✎
08:52
|
(0) чем
seleсt * from $Справочник.Нужный не устраивает ? Один хрен в запросе не видно никакой типизации |
|||
71
Ёпрст
13.09.12
✎
08:52
|
(65) ясен пень, он в blob хранится, блоками по 80 байт
|
|||
72
zladenuw
13.09.12
✎
08:54
|
а если только нужные реквизиты ?
|
|||
73
zladenuw
13.09.12
✎
08:54
|
не все
|
|||
74
Ёпрст
13.09.12
✎
08:57
|
(72) и ?
У тя в запросе все поля простых типов ? Все реквизиты справочника, это строки/даты и числа что ли ? :)) Не видно ни одного типизирующего поля в тексте запроса. |
|||
75
Ёпрст
13.09.12
✎
08:58
|
поэтому, твой запрос равнозначен seleсt * from $Справочник.Нужный, за исключением, что имена полей выдаст в не очень "читаемом " виде.
|
|||
76
zladenuw
13.09.12
✎
08:59
|
это пока проба. а вообще будет xsd схема по нужным полям... но это далеко. я хочу прочитать вот так. почему ошибка
|
|||
77
zladenuw
13.09.12
✎
09:00
|
я поминаю что можно * и не мучится. но если там 100 реквизитов. а мне надо 10. и в них это гадость. что тогда
|
|||
78
Ёпрст
13.09.12
✎
09:00
|
(76) реквизиты неограниченной длины в дбф базе хранятся в отдельной табличке определенным образом, периодика, тоже в своей табличке.
|
|||
79
Ёпрст
13.09.12
✎
09:01
|
цель то можешь озвучишь ?
|
|||
80
zladenuw
13.09.12
✎
09:01
|
а как читать. на 1с++ только упоминание что нужно читать их последним. или не там смотрел :(
|
|||
81
zladenuw
13.09.12
✎
09:02
|
(79) цель. передаем функции параметры чтение таблицы. на выходе получаем тз с нужными полями
|
|||
82
Светлый Гений
13.09.12
✎
09:03
|
(80)не то ты что-то говоришь. А вообще, у тебя не получится реквизит неограниченной длины прочитать в одном запросе с остальными реквизитами. Периодический можно, но это нужен подзапрос.
|
|||
83
Ёпрст
13.09.12
✎
09:03
|
(80) начинать надо с основ:
http://www.script-coding.com/v77tables.html http://www.1cpp.ru/forum/YaBB.pl?num=1148038411 http://www.1cpp.ru/forum/YaBB.pl?num=1148874473 http://www.1cpp.ru/forum/YaBB.pl?num=1184317705 http://www.mista.ru/articles1c/hare/article.11.html http://www.mista.ru/articles1c/hare/article.12.html |
|||
84
Ёпрст
13.09.12
✎
09:04
|
(82) получится..
на кубани , в своё время была хорошая ветка по поиску оптимального алгоритма доставания блоба. Но проще для таких целей 1sqlite применить |
|||
85
zladenuw
13.09.12
✎
09:05
|
(84). б.л.я. а прямым запрос не как ?
|
|||
86
zladenuw
13.09.12
✎
09:06
|
почему ссылку на элемент в другой дбф получаем. а тут для неогр стр . болт ?
|
|||
87
zladenuw
13.09.12
✎
09:07
|
я вот этого понять не могу....
|
|||
88
zladenuw
13.09.12
✎
09:08
|
(84) на кубани уже не доступно. пытался :(
|
|||
89
Светлый Гений
13.09.12
✎
09:09
|
(84)хорошо бы было эту ветку почитать
|
|||
90
zladenuw
13.09.12
✎
09:09
|
получается что при получение реквизита. и если строка и неогр. то мне надо делать соединение с таблицей 1SBLOB.DBF
|
|||
91
zladenuw
13.09.12
✎
09:10
|
(89) так нету, ее ...
|
|||
92
Светлый Гений
13.09.12
✎
09:11
|
(90)фига ты, сообразил, я уж и не думал... тока все равно там не все так просто будет. Придется долго думать и разбираться.
|
|||
93
Ёпрст
13.09.12
✎
09:12
|
(85) :))))
а там по-вашему чем ? |
|||
94
zladenuw
13.09.12
✎
09:13
|
FIELDID [int] – ID объекта метаданных, который должен храниться. Тип – Char(4).
OBJID [int] – ссылка на PKey записи таблицы, в которой должно храниться длинное значение. Тип – Char(9). не понятно. чем связывать. почему тогда реквизит не указывает. то б.л.я. чувак вот ид смотри там та |
|||
95
zladenuw
13.09.12
✎
09:15
|
(92) я же не нуб., полоска вроде не зеленая :)
|
|||
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) создать временную табличку соответствий - проще всего
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |