Когда срочно нужны данные из 1С, а программиста 1С под рукой нет, поможет старый добрый SQL запрос.
Так как структура базы сама по себе хитрая (таблицы и поля имеют служебные названия а-ля _Document324 , _Reference1961 и _Field32634) желательно сначала получить структуру базы, самый простой способ с помощью обработки с Инфостарта, запускать нужно из под тонкого клиента.
P.S Тоже самое можно получить встроенной функцией ПолучитьСтруктуруХраненияБазыДанных(,Истина)
Определенную сложность доставляют перечисления, т.к для них не хранится название элемента. См. ниже
CREATE TABLE [dbo].[tbl1CEnums](
[EnumName] [nvarchar](1024) NULL,
[EnumValue] [nvarchar](2014) NULL,
[EnumOrder] [int] NULL
) ON [PRIMARY]
Затем связать эту таблицу с перечислением
using System;
using System.Data;
using System.Data.SqlClient;
using V82;
namespace _1CEnumParser
{
class Program
{
/// <summary>
/// Пробегается по всем перечислениям и заполняет таблицу с тремя полями: название перечисления, название значения, порядок
/// </summary>
private static void DataTableFill(DataTable aTable, dynamic a1CConn)
{ foreach (dynamic catalog in a1CConn.Metadata.Enums)
{ string enumName = catalog.Name;
dynamic query = a1CConn.NewObject("Query");
query.Text = "select * from enum." + enumName;
dynamic items = query.Execute().Unload();
// бежим по строкам
for (int i = 0; i < items.Count(); i++)
{
string enumValue = null;
int enumOrder = -1;
for (int j = 0; j < items.Columns.Count(); j++)
{
string colName = items.Columns.Get(j).Name;
dynamic colValue;
try
{
colValue = a1CConn.String(items.Get(i).Get(j));
}
catch
{
colValue = "-1"
;
}
switch (colName.ToLower())
{
case "ссылка":
enumValue = colValue.ToString();
break;
case "порядок":
enumOrder = int.Parse(colValue.ToString());
break;
default:
throw new ApplicationException("unknown column name in enum.recordset: " + colName);
}
}
// получили 3 заполненные значения: enumName, enumValue, enumOrder. вставка в таблицу
aTable.Rows.Add(new object[] {enumName, enumValue, enumOrder});
}
}
}
/// <summary>
/// Устанавливает все соединения, заполняет DataTable с перечислениями, записывает в БД
/// </summary>
/// <param name="aConnectionString1C"></param>
/// <param name="aConnectionStringSQL"></param>
/// <param name="aTableName"></param>
private static void ConnectAndFill(string aConnectionString1C, string aConnectionStringSQL, string aTableName)
{
// входим в SQL базу и удаляем все из таблицы
var connSQL = new SqlConnection(aConnectionStringSQL);
connSQL.Open();
// входим в 1С
var connector1C = new V82.COMConnector();
dynamic conn1C = connector1C.Connect(aConnectionString1C);
// удаляем из таблицы все данные
var command = new SqlCommand("delete from " + aTableName, connSQL);
command.ExecuteNonQuery();
// заполняем таблицу
var da = new SqlDataAdapter("select EnumName, EnumValue, EnumOrder from " + aTableName, connSQL);
var thisBuilder = new SqlCommandBuilder(da);
var ds = new DataSet();
da.Fill(ds);
DataTableFill(ds.Tables[0], conn1C);
da.Update(ds);
// закрываем коннект
connSQL.Close();
}
static void Main()
{
string[] args = Environment.GetCommandLineArgs();
string aConnectionString1C = args[1];
string aConnectionStringSQL = args[2];
string aTableName = args[3];
}
}
}
По названию таблицы в БД можно определить какому объекту метаданных 1С она соответствует. Подробно смотреть тут
Константы
_Consts содержит текущие значения всех констант, определенных в конфигурации.
_ConstsChangeRec - таблица регистрации изменений констант. Создается, если хотя бы одна константа участвует хотя бы в одном плане обмена.
Планы обмена
_Node<n> - таблица плана обмена.
_Node<n>_VT<k> - табличная часть плана обмена, создается для каждой табличной части.
Справочники
_Reference<n> - таблица справочника.
_Reference<n>_VT<k> - табличная часть справочника - для каждой табличной части.
_ReferenceChangeRec<n> - таблица регистрации изменений справочника. Создается, если справочник участвует хотя бы в одном плане обмена.
Документы
_Document<n> - таблица документов для каждого объекта метаданных "документ".
_Document<n>_VT<k> - табличная часть документа - для каждой табличной части каждого документа.
_DocumentChangeRec<n> - таблица регистрации изменений объекта метаданных типа "документ". Создается для каждого объекта метаданных типа "документ", если он участвует хотя бы в одном плане обмена.
Последовательности документов
_Sequence<n> - таблица регистрации документов - для каждой последовательности.
_SequenceBoundary<n> - таблица границ последовательности - для каждой последовательности.
_SequenceChangeRec<n> - таблица регистрации изменений последовательности. Создается для каждой последовательности, которая участвует хотя бы в одном плане обмена.
Журналы документов.
_DocumentJournal<n> - таблица журнала документов, создается для каждого журнала документов.
Перечисления
_Enum<n> - таблица перечисления - по одной для каждого перечисления.
Планы видов характеристик
_Chrc<n> - основная таблица плана видов характеристик.
_Chrc<n>_VT<k> - табличная часть плана видов характеристик - для каждой табличной части.
_ChrcChangeRec<n> - таблица регистрации изменений плана видов характеристик. Создается, если план видов характеристик участвует хотя бы в одном плане обмена.
Планы счетов
_Acc<n> - основная таблица плана счетов.
_Acc<n>_ExtDim<k> - таблица видов субконто плана счетов, создается для плана счетов в том случае, если максимальное количество субконто больше нуля.
_Acc<n>_VT<k> - табличная часть плана счетов, создается для каждой табличной части плана счетов.
_AccChangeRec<n> - таблица регистрации изменений плана счетов. Создается, если план счетов участвует хотя бы в одном плане обмена.
Планы видов расчета
_CalcKind<n> - основная таблица плана видов расчета.
_CalcKind<n>_BaseCK - таблица базовых видов расчета, создается для плана видов расчета в случае, если его свойство "Зависимость от базы" имеет значение, отличное от "Не зависит".
_CalcKind<n>_DisplacedCK - таблица вытесняемых видов расчета, создается для плана видов расчета в случае, если у него установлен флаг "Использует период действия".
_CalcKind<n>_LeadingCK - таблица ведущих видов расчета - для каждого плана видов расчета.
_CalcKindDN<n> - вспомогательная таблица для порядка вытеснения, создается, если у плана видов расчета установлен флаг "Использует период действия".
_CalcKind<n>_VT<k> - табличная часть плана видов расчета, создается для каждой табличной части.
_CalcKindChangeRec<n> - таблица регистрации изменений плана видов расчета. Создается, если план видов расчета участвует хотя бы в одном плане обмена.
Регистры сведений
_InfoReg<n> - таблица движений регистра сведений.
_InfoRegChangeRec<n> - таблица регистрации изменений регистра сведений. Создается, если регистр сведений участвует хотя бы в одном плане обмена.
Регистры накопления
_AccumReg<n> - таблица движений регистра накопления.
_AccumRegTotals<n> - таблица итогов регистра накопления, если регистр поддерживает остатки.
_AccumRegTurnovers<n> - таблица оборотов регистра накопления, если регистр поддерживает обороты.
_AccumRegChangeRec<n> - таблица регистрации изменений регистра накопления. Создается, если регистр накопления участвует хотя бы в одном плане обмена.
_AccumRegOptions - таблица настроек хранения итогов регистров накопления одна на все регистры накопления.
Регистры бухгалтерии
_AccntReg<n> - таблица движений регистра бухгалтерии.
_AccntRegED<n> - таблица значений субконто регистра бухгалтерии, создается в том случае, если он ссылается на план счетов, у которого максимальное количество субконто больше нуля.
_AccTtl0<n> - таблица итогов по счету.
_AccTtl<i><n> - где i от 1 до максимального количества субконто. Таблица итогов по счету с количеством видов субконто равным i.
_AccTtlC<n> - таблица итогов оборотов между счетами, только для регистра бухгалтерии поддерживающего корреспонденцию.
_AccntRegChangeRec<n> - таблица регистрации изменений регистра бухгалтерии. Создается, если регистр бухгалтерии участвует хотя бы в одном плане обмена.
_AccntRegOptions - таблица настроек хранения итогов одна на все регистры бухгалтерии.
Регистры расчета
_CalcReg<n> - таблица движений регистра расчета.
_CalcRegActPer<n> - таблица фактических периодов действия для регистра расчета, создается, если у регистра расчета установлен флаг "Период действия".
_CalcRegChangeRec<n> - таблица регистрации изменений регистра расчета. Создается для каждого регистра расчета, участвующего хотя бы в одном плане обмена.
_CalcRegRecalc<n> - таблица перерасчета регистра расчета, создается для каждого перерасчета.
_CalcRegRecalcChangeRec<n> - таблица регистрации изменений перерасчета. Создается, если перерасчет участвует хотя бы в одном плане обмена.
Бизнес-процессы
_BPRoutePoint<n> - таблица точек маршрута бизнес-процесса для каждого бизнес-процесса.
_BusinessProcess<n> - основная таблица бизнес-процесса.
_BusinessProcess<n>_VT<k> - табличная часть бизнес-процесса для каждой табличной части.
_BusinessProcessChangeRec<n> - таблица регистрации изменений бизнес-процесса. Создается для каждого бизнес-процесса, участвующего хотя бы в одном плане обмена.
Задачи
_Task<n> - основная таблица задачи.
_Task<n>_VT<k> - табличная часть задачи для каждой табличной части.
_TaskChangeRec<n> - таблица регистрации изменений в задачах. Создается для каждого объекта метаданных типа "задача", который участвует хотя бы в одном плане обмена.
Константы
_Consts содержит текущие значения всех констант, определенных в конфигурации.
_ConstsChangeRec - таблица регистрации изменений констант. Создается, если хотя бы одна константа участвует хотя бы в одном плане обмена.
Планы обмена
_Node<n> - таблица плана обмена.
_Node<n>_VT<k> - табличная часть плана обмена, создается для каждой табличной части.
Справочники
_Reference<n> - таблица справочника.
_Reference<n>_VT<k> - табличная часть справочника - для каждой табличной части.
_ReferenceChangeRec<n> - таблица регистрации изменений справочника. Создается, если справочник участвует хотя бы в одном плане обмена.
Документы
_Document<n> - таблица документов для каждого объекта метаданных "документ".
_Document<n>_VT<k> - табличная часть документа - для каждой табличной части каждого документа.
_DocumentChangeRec<n> - таблица регистрации изменений объекта метаданных типа "документ". Создается для каждого объекта метаданных типа "документ", если он участвует хотя бы в одном плане обмена.
Последовательности документов
_Sequence<n> - таблица регистрации документов - для каждой последовательности.
_SequenceBoundary<n> - таблица границ последовательности - для каждой последовательности.
_SequenceChangeRec<n> - таблица регистрации изменений последовательности. Создается для каждой последовательности, которая участвует хотя бы в одном плане обмена.
Журналы документов.
_DocumentJournal<n> - таблица журнала документов, создается для каждого журнала документов.
Перечисления
_Enum<n> - таблица перечисления - по одной для каждого перечисления.
Планы видов характеристик
_Chrc<n> - основная таблица плана видов характеристик.
_Chrc<n>_VT<k> - табличная часть плана видов характеристик - для каждой табличной части.
_ChrcChangeRec<n> - таблица регистрации изменений плана видов характеристик. Создается, если план видов характеристик участвует хотя бы в одном плане обмена.
Планы счетов
_Acc<n> - основная таблица плана счетов.
_Acc<n>_ExtDim<k> - таблица видов субконто плана счетов, создается для плана счетов в том случае, если максимальное количество субконто больше нуля.
_Acc<n>_VT<k> - табличная часть плана счетов, создается для каждой табличной части плана счетов.
_AccChangeRec<n> - таблица регистрации изменений плана счетов. Создается, если план счетов участвует хотя бы в одном плане обмена.
Планы видов расчета
_CalcKind<n> - основная таблица плана видов расчета.
_CalcKind<n>_BaseCK - таблица базовых видов расчета, создается для плана видов расчета в случае, если его свойство "Зависимость от базы" имеет значение, отличное от "Не зависит".
_CalcKind<n>_DisplacedCK - таблица вытесняемых видов расчета, создается для плана видов расчета в случае, если у него установлен флаг "Использует период действия".
_CalcKind<n>_LeadingCK - таблица ведущих видов расчета - для каждого плана видов расчета.
_CalcKindDN<n> - вспомогательная таблица для порядка вытеснения, создается, если у плана видов расчета установлен флаг "Использует период действия".
_CalcKind<n>_VT<k> - табличная часть плана видов расчета, создается для каждой табличной части.
_CalcKindChangeRec<n> - таблица регистрации изменений плана видов расчета. Создается, если план видов расчета участвует хотя бы в одном плане обмена.
Регистры сведений
_InfoReg<n> - таблица движений регистра сведений.
_InfoRegChangeRec<n> - таблица регистрации изменений регистра сведений. Создается, если регистр сведений участвует хотя бы в одном плане обмена.
Регистры накопления
_AccumReg<n> - таблица движений регистра накопления.
_AccumRegTotals<n> - таблица итогов регистра накопления, если регистр поддерживает остатки.
_AccumRegTurnovers<n> - таблица оборотов регистра накопления, если регистр поддерживает обороты.
_AccumRegChangeRec<n> - таблица регистрации изменений регистра накопления. Создается, если регистр накопления участвует хотя бы в одном плане обмена.
_AccumRegOptions - таблица настроек хранения итогов регистров накопления одна на все регистры накопления.
Регистры бухгалтерии
_AccntReg<n> - таблица движений регистра бухгалтерии.
_AccntRegED<n> - таблица значений субконто регистра бухгалтерии, создается в том случае, если он ссылается на план счетов, у которого максимальное количество субконто больше нуля.
_AccTtl0<n> - таблица итогов по счету.
_AccTtl<i><n> - где i от 1 до максимального количества субконто. Таблица итогов по счету с количеством видов субконто равным i.
_AccTtlC<n> - таблица итогов оборотов между счетами, только для регистра бухгалтерии поддерживающего корреспонденцию.
_AccntRegChangeRec<n> - таблица регистрации изменений регистра бухгалтерии. Создается, если регистр бухгалтерии участвует хотя бы в одном плане обмена.
_AccntRegOptions - таблица настроек хранения итогов одна на все регистры бухгалтерии.
Регистры расчета
_CalcReg<n> - таблица движений регистра расчета.
_CalcRegActPer<n> - таблица фактических периодов действия для регистра расчета, создается, если у регистра расчета установлен флаг "Период действия".
_CalcRegChangeRec<n> - таблица регистрации изменений регистра расчета. Создается для каждого регистра расчета, участвующего хотя бы в одном плане обмена.
_CalcRegRecalc<n> - таблица перерасчета регистра расчета, создается для каждого перерасчета.
_CalcRegRecalcChangeRec<n> - таблица регистрации изменений перерасчета. Создается, если перерасчет участвует хотя бы в одном плане обмена.
Бизнес-процессы
_BPRoutePoint<n> - таблица точек маршрута бизнес-процесса для каждого бизнес-процесса.
_BusinessProcess<n> - основная таблица бизнес-процесса.
_BusinessProcess<n>_VT<k> - табличная часть бизнес-процесса для каждой табличной части.
_BusinessProcessChangeRec<n> - таблица регистрации изменений бизнес-процесса. Создается для каждого бизнес-процесса, участвующего хотя бы в одном плане обмена.
Задачи
_Task<n> - основная таблица задачи.
_Task<n>_VT<k> - табличная часть задачи для каждой табличной части.
_TaskChangeRec<n> - таблица регистрации изменений в задачах. Создается для каждого объекта метаданных типа "задача", который участвует хотя бы в одном плане обмена.
+ Традиционный анекдот не в тему..
Больные захватили психиатрическую больницу. Они требуют миллион вертолетов и один доллар.