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


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 человек.
Рекламное место пустует