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