базы из 1С

  • Автор темы Iscander
  • Дата начала
I

Iscander

#1
Вообщем есть такая необходимость забрать данные, набранные в справочнике в 1С, и использовать их в фокс про. Сам с 1С почти знаю, можно сказать только знаком.
Я так понял все хранится в базах dbf, но их там много и не понятно, что в каком файле находится. В итоге мне надо получить один файл bdf, что бы использовать его в фокс про. Какие варианты могут тут быть??? Подскажите пожалуйста.
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#2
в файле *.DD хранится описание что в какой таблице находится
 

gorlanovmax

Well-known member
19.06.2008
286
0
#3
По-моему, проще сделать выгрузку в dbf или в текстовый с разделителями. в родном файле может быть много лишнего.
 
I

Iscander

#5
Файл *.DD я открыл, посмотрел dbf-ки, описанные в нем, но найти связь между ними помоему не очень реально.
А могли бы вы написать как сделать эту "выгрузку в dbf или в текстовый с разделителями", а то как я уже писал не знаком с 1С. А в родным dbf и в правду куча лишнего.
 
I

Iscander

#7
Справочник называется "Операции" в нем следующие поля: "ПолноеНаименование", "Специальность", "Разряд", "ТипПодсчета", "КоэффВремя".
Еще есть справочники, но они простые и я по аналогии смогу сделать. Проблема еще и в том, что конфигурация не мной писанная=)
 
K
#9
Код:
Для Инд=1 По СписокН.РазмерСписка() Цикл
Эл = СписокН.ПолучитьЗначение(Инд);		
Список.УдалитьВсе();
Список.ДобавитьЗначение(Эл.Код);
Список.ДобавитьЗначение(Эл.Наименование);
Список.ДобавитьЗначение(Эл.ПолнНаименование);
Список.ДобавитьЗначение(Эл.ВидНоменклатуры);//в бух ТипНоменклатуры
Список.ДобавитьЗначение(Эл.БазоваяЕдиница.Океи.Код);
Список.ДобавитьЗначение(Эл.БазоваяЕдиница.Океи.Наименование);
Список.ДобавитьЗначение(Эл.БазоваяЕдиница.Океи.ПолнНаименование);
Список.ДобавитьЗначение(Эл.СтавкаНДС);
Список.ДобавитьЗначение(Эл.СтавкаНП);
Список.ДобавитьЗначение(НачДата);
Текст.ДобавитьСтроку(Список.ВСтрокуСРазделителями());
КонецЦикла;											 
Текст.Записать(СокрЛП(Каталог)+"\номенклатура.txt");
СписокН это список со значениями Номенклатуры
 
I

Iscander

#10
"ПолноеНаименование" - строка
"Специальность" - строка
"Разряд" - Справочник.Разряды (в нем одно поле "СекТарифСтавка" типа число)
"ТипПодсчета" - Перечисление.ТипПодсчета (в нем 2 значения "ВремяВСек" и "Коэффициент")
"КоэффВремя" - число
 

gorlanovmax

Well-known member
19.06.2008
286
0
#11
так в принципе тебе уже показали как сделать выгрузку в текстовый файл. если не получится, тогдапиши сделаем в dbf
 
I

Iscander

#12
Мне бы конечно лучше в дбф сразу потому что надо заюзать потом в фокс про, поэтому все равно перегонять придеться. И еще где этот код писать??? Как подсказывает мне мое чувство то в "Процедура ПриЗакрытии()".
 
I

Iscander

#14
Блин вот что-то я не допонимаю. ((( Мог бы ты написать конкретно под мой пример????
 

gorlanovmax

Well-known member
19.06.2008
286
0
#15
Гуру. подскажите, как мы вытаскиваем данные из перечисления, и какого они типа? а то раньше не сталкивался
 
K
#16
Если бы из 1с в 1с то я б использовал ЗначениеПоИдентификатору или ПоНомеру, здесь надо думать как они будут попадать в программу и прям в коде определять, тоесть передовать строку
Если ТоЧтоПередали = "Продажа" ТОгда
и т.п.
 
I

Iscander

#18
Почти все работает=)
Только выдало ошибку:
Открыт файл экспорта Spr.dbf
DBF.TVrem=Спр.ТипПодсчета.ВремяВСек;
{D:\WORK\Выгрузка.ERT(34)}: Поле агрегатного состояния не обнаружено(ВремяВСек)
 

gorlanovmax

Well-known member
19.06.2008
286
0
#19
было так
DBF.ДобавитьПоле("TVrem",1,20,2);
DBF.ДобавитьПоле("TKoeff",1,10,3);
и вот так
DBF.TVrem=Спр.ТипПодсчета.ВремяВСек;
DBF.TKoeff=Спр.ТипПодсчета.Коэффициент;
___________________________________________________
попробуй так
DBF.ДобавитьПоле("TVrem",2,85,0);
//DBF.ДобавитьПоле("TKoeff",1,10,3);
и вот так
DBF.TVrem=Спр.ТипПодсчета;
//DBF.TKoeff=Спр.ТипПодсчета.Коэффициент;
 
I

Iscander

#20
Это помогло, но тоже надо исправить и Коэффициент. А так же еще ошибка:
DBF.Сохранить();
{D:\WORK\Выгрузка.ERT(37)}: Поле агрегатного состояния не обнаружено(Сохранить)