Вход | Регистрация


1С:Предприятие ::

Метки:

Реализация физического хранения периодических реквизитов

Я
   Udjin
09.12.03 - 10:30
All, поделителитесь, плиз...
Как реализовано физическое хранение периодических реквизитов в 1С 7.7 SQL версии?
 
 
   Udjin
1 - 09.12.03 - 11:52
К примеру связываем таблицу справочника с таблицей  _1SCONST по справочник_ID = _1SCONST.OBJID, а само определение какой реквизит какому _1SCONST.ID принадлежит можно произвести только опытным путем?
   skunk
 
2 - 09.12.03 - 12:11
Еслия правильно понял вопрос, то смотри в таблице справочника поле ID нужного элемента. а затем отбираешь все записи таблици 1SCONST с полем OBJID равный полученному ID.
   Udjin
3 - 09.12.03 - 12:47
это понятно :)
Не понятно вот что: к примеру в справочнике_А есть периодический реквизит "Подразделение", опытным путем я определила, что для "Подразделениz" _1SCONST.ID=5895, где соответсвенно _1SCONST.OBJID=справочник_А_ID. У справочника_А есть еще 15 периодических реквизитов, определить все их _1SCONST.ID опытным путем можно, но может есть другой путь. Вот он как раз и интересует.
   skunk
 
4 - 09.12.03 - 13:37
открываешь md и задаешь поиск строки параметром поиска указываешь искомый переодический реквизит.
Пример в ТиС ищем курс валюты.
Задаем поиск  -   ,"Валюты",       ," - указывается для уменьшения ложных срабатываний, а то там валют сам понимаешь.
Должен найти следующие:
{"14","Валюты","","","0","3","1","1","1","10","1","2","1","19","19","0","1","1",
{"Params",
{"17","Курс","","","N","10","4","0","1","1","1","1","0","0","1","0","0"}
Перед нужным реквизитом стоит цифра в кавычках это и есть идентификатор реквизита в БД. То бишь для нас это 17.
Далее переводишь ее 36-ую систему счисления, используя цифры 0..9 и латинские буквы A..Z. Получаешь "E".
При отборе 1SCONST смотришь в нем поле ID и отбираешь с нужным тебе реквизитом.
   skunk
 
5 - 09.12.03 - 13:40
В скуле не знаю как сделать, но выылить базу в md всегда можно
   Udjin
6 - 09.12.03 - 15:29
Спасибо, skunk!

Думаю примерно этом мне и надо. Жаль, что все равно автоматически это никак не увязать... Нужна работа ручками, нужна...
   skunk
 
7 - 09.12.03 - 15:34
Почему есть проги котрые смотрят md. У меня есть пару сылок на эту имфу, волшебник подсказал, смотри тему Формат файла внешних отчетов.
Так что терпение и труд все перетрут.
Удачного поиска!
   skunk
 
13 - 15.12.03 - 12:14
Да в принципе ничего. Если со внешними компонентами проблем нет, тогда ищите в интернете библиотеки ActiveMD.dll и Compound.dll и их используйте. По моему первая будет получше, больше возможностей.
У меня есть ActiveMD 0.4.1.00 и Compound.dll 4.5. Если надо могу скинуть мылом.
   Udjin
 
14 - 15.12.03 - 15:59
с ActiveMD.dll разбираюсь, но пока как-то не очень успешно.
   Udjin
 
16 - 15.12.03 - 18:41
Пробная работа с ActiveMD.
В 1С окрываю файл Конфигуратор.ert. Там все поля пустые, пробую указать в поле "путь" путь к 1Cv7.md - выдается ошибка:
"М.Д.Идентификатор=Идентификатор;
{путь к файлу конфигуратор.ERT(186): неизвестное имя".
Другие .ert файлы не открываются, ошибка:
"...
Значение не представляет агрегатный объект (...)"
   skunk
 
17 - 15.12.03 - 20:10
А ты его dll в системе за регистрировал.
   Udjin
 
18 - 15.12.03 - 20:11
да
   skunk
 
19 - 15.12.03 - 20:29
Покажи текст обработки
   skunk
 
20 - 15.12.03 - 21:05
регистриовать COM сервер надо командой
regsrv32 <полный путь до dll>\ActivateMD.dll

винда скажет там чего то success!
Проверка в реестре есть ключ
HKEY_CLASSES_ROOT\ActiveMD.MDFile

Дальше 1С. Пример получение всех справочников плюс все атрибуты справочников,  их ID в десятичной и шестнадцатиричной представлении:
//*******************************************

Процедура Сформировать()
  MD = СоздатьОбъект("ActiveMD.MDFile");
  MD.Open("c:\test\trade 2003\1cv7.md");
  Для x = 1 По MD.Reference() Цикл
    Spr = MD.Reference(x);
    Сообщить(Spr.Identifier);
    Для y = 1 По Spr.Attribute() Цикл
      Attr = Spr.Attribute(y);
      Сообщить("    " + Attr.Identifier + "; Десятичное представление:" + Attr.ID + "; Тридцатишестиричное представление:" + _IdToStr(Attr.ID));
    КонецЦикла
  КонецЦикла;    
  MD.Close();
КонецПроцедуры

Все ок.
   Udjin
 
21 - 16.12.03 - 10:01
Спасибо, skunk, очередной раз выручаешь!

При регистрации dll я не указывала полный путь до нее :)
После того как указала, все стало на свои места.



Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует