Имя: Пароль:
1C
1C 7.7
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
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) создать временную табличку соответствий - проще всего