• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

базы из 1С

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

Iscander

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

vitfil

в файле *.DD хранится описание что в какой таблице находится
 
G

gorlanovmax

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

Iscander

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

gorlanovmax

напиши, что за справочник, какие поля нужны.
 
I

Iscander

Справочник называется "Операции" в нем следующие поля: "ПолноеНаименование", "Специальность", "Разряд", "ТипПодсчета", "КоэффВремя".
Еще есть справочники, но они простые и я по аналогии смогу сделать. Проблема еще и в том, что конфигурация не мной писанная=)
 
G

gorlanovmax

еще сообщи пожалуйста, типы указанных полей
 
K

kaa

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

Iscander

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

gorlanovmax

так в принципе тебе уже показали как сделать выгрузку в текстовый файл. если не получится, тогдапиши сделаем в dbf
 
I

Iscander

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

gorlanovmax

нет писать это удобней всего внешним отчетом
 
I

Iscander

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

gorlanovmax

Гуру. подскажите, как мы вытаскиваем данные из перечисления, и какого они типа? а то раньше не сталкивался
 
K

kaa

Если бы из 1с в 1с то я б использовал ЗначениеПоИдентификатору или ПоНомеру, здесь надо думать как они будут попадать в программу и прям в коде определять, тоесть передовать строку
Если ТоЧтоПередали = "Продажа" ТОгда
и т.п.
 
G

gorlanovmax

Ссылка для скачивания:

обработка. попробуй, должно работать
 
I

Iscander

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

gorlanovmax

было так
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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!