Работа со справочниками 1С в сценарии

Для того, чтобы иметь возможность работать со справочниками 1С в сценарии, необходимо подключиться к конфигурации 1С и получить ссылку на интересующий справочник. Далее с ним можно работать, применяя методы 1С.

Для системы 1С версии 8.х

Текст сценария без использования PublicAPI для получения объекта по коду:
//получим службу для работы с 1С
var service = Locator.GetServiceNotNull<Integration1CService>();
//инициализируем подключение к конфигурации. следует указать имя, заданное в настройках интеграции с 1С
ComObject connector = service.GetComConnector("ConfigName"); 
//получим ссылку на спровочник 1С Контрагенты:
dynamic bookRef = connector.GetFunctionValue("NewObject", "CatalogManager.Контрагенты");
//находим конкретного контрагента 1С по коду
var kontragent = bookRef.НайтиПоКоду("000123").ПолучитьОбъект(); 
Создание аналогичного скрипта с использованием PublicAPI
Актуальная документация по PublicAPI доступна по ссылке
Сценарий,указанный ниже, актуален для версии PublicAPI 3.8 и выше
//инициализируем подключение к конфигурации. следует указать имя, заданное в настройках интеграции с 1С
var connector = PublicAPI.Services.Integration1C.GetComConnector("ConfigName");
//получим ссылку на спровочник 1С Контрагенты:
dynamic bookRef = connector.GetFunctionValue("NewObject", "CatalogManager.Контрагенты");
//находим конкретного контрагента 1С по коду
var kontragent = bookRef.НайтиПоКоду("000123").ПолучитьОбъект();
 
Пример создания контрагента с юридическим адресом без использования PublicAPI
var service = Locator.GetServiceNotNull<Integration1CService>(); 
        	ComObject connector = service.GetComConnector("ConfigName"); 
        	dynamic bookRef = connector.GetFunctionValue("NewObject", "CatalogManager.Контрагенты"); 
         	var newObject = bookRef.СоздатьЭлемент(); 
                newObject.Наименование = "Название контрагента"; 
      	        newObject.Записать(); 
      	
      	 //++++++++ Юридический адрес контрагента ++++++++++++++++ 
      	 dynamic РегистрЮКМ = connector.GetFunctionValue("NewObject", "InformationRegisterManager.КонтактнаяИнформация"); //регистр сведений 
         var РегистрЮК = РегистрЮКМ.СоздатьМенеджерЗаписи(); 
  	 РегистрЮК.Объект = newObject.Ссылка; 
   	 dynamic Тип = connector.GetFunctionValue("NewObject", "EnumManager.ТипыКонтактнойИнформации"); //перечисления 
         РегистрЮК.Тип = Тип.Адрес;    	
   	 dynamic Вид = connector.GetFunctionValue("NewObject", "CatalogManager.ВидыКонтактнойИнформации"); 
   	 РегистрЮК.Вид = Вид.ЮрАдресКонтрагента; 
   	 РегистрЮК.Поле1 = "123456";	                      //Индекс 
   	 //РегистрЮК.Поле2 = "";                          	 //Регион 
   	 РегистрЮК.Поле3 = "УР";                              	 //Район 
   	 РегистрЮК.Поле4 = "Ижевск";                              	 //Город 
   	 //РегистрЮК.Поле5 = "";                             	//Населенный пункт 
   	 РегистрЮК.Поле6 = "Удмуртская";      	 //Улица 
   	 РегистрЮК.Поле7 = "304";                              	 //Дом 
   	 //РегистрЮК.Поле8 = "";                                	 //Корпус 
   	 РегистрЮК.Поле9 = context.Kvartira.ToString();                             	//Квартира 
   	 РегистрЮК.Представление = РегистрЮК.Поле4 + ","    + " " + РегистрЮК.Поле6 + "," + " " + РегистрЮК.Поле7; 
   	 РегистрЮК.Записать(); 
 
Создание аналогичного скрипта с использованием PublicAPI
Актуальная документация по PublicAPI доступна по ссылке
Сценарий,указанный ниже, актуален для версии PublicAPI 3.8 и выше
var connector = PublicAPI.Services.Integration1C.GetComConnector("ConfigName");
dynamic bookRef = connector.GetFunctionValue("NewObject", "CatalogManager.Контрагенты");
var newObject = bookRef.СоздатьЭлемент();
newObject.Наименование = "Название контрагента";
newObject.Записать();

//++++++++ Юридический адрес контрагента ++++++++++++++++ 
dynamic РегистрЮКМ = connector.GetFunctionValue("NewObject", "InformationRegisterManager.КонтактнаяИнформация"); //регистр сведений 
var РегистрЮК = РегистрЮКМ.СоздатьМенеджерЗаписи();
РегистрЮК.Объект = newObject.Ссылка;
dynamic Тип = connector.GetFunctionValue("NewObject", "EnumManager.ТипыКонтактнойИнформации"); //перечисления 
РегистрЮК.Тип = Тип.Адрес;
dynamic Вид = connector.GetFunctionValue("NewObject", "CatalogManager.ВидыКонтактнойИнформации");
РегистрЮК.Вид = Вид.ЮрАдресКонтрагента;
РегистрЮК.Поле1 = "123456";                          //Индекс 
//РегистрЮК.Поле2 = "";                             //Регион 
РегистрЮК.Поле3 = "УР";                                 //Район 
РегистрЮК.Поле4 = "Ижевск";                                 //Город 
//РегистрЮК.Поле5 = "";                                //Населенный пункт 
РегистрЮК.Поле6 = "Удмуртская";         //Улица 
РегистрЮК.Поле7 = "304";                                //Дом 
//РегистрЮК.Поле8 = "";                                     //Корпус 
РегистрЮК.Поле9 = context.Kvartira.ToString();                                 //Квартира 
РегистрЮК.Представление = РегистрЮК.Поле4 + "," + " " + РегистрЮК.Поле6 + "," + " " + РегистрЮК.Поле7;
 
Для получения ссылки на справочник 1С в сценарии осуществляется вызов функции «NewObject» (для версии 8.х). В качестве пространства имен для справочников необходимо указать «CatalogManager». Таким же образом можно создать ссылку на документ, однако в качестве пространства имен, в этом случае, следует указать «DocumentManager».
После этого можно работать с объектом bookRef также, как и с любым справочником 1С.
Если же контекст содержит свойство типа «Справочник1С», то получить ссылку на справочник можно, применив метод «GetComReference». Например, мы имеем свойство Kontragent, которое указывает на справочник «Контрагенты», тогда ссылка на него будет выглядеть следующим образом:
var kontragentRef = context.Kontragent.GetComReference();
Для работы сценариев необходимо подключить сборки:
EleWise.ELMA.Integration1C
Microsoft.CSharp
и пространства имен:
using EleWise.ELMA.Integration1C;
using EleWise.ELMA.Integration1C.Data;
using EleWise.ELMA.Integration1C.V81;
using EleWise.ELMA.Model.Common;
using EleWise.ELMA.Model.Entities;
using EleWise.ELMA.Model.Managers;
using EleWise.ELMA.Model.Types.Settings;
using EleWise.ELMA.Services;

 

Для системы 1С версии 7.7

Пример создания справочника "Сотрудники":

Для работы сценария необходимо подключить сборки:
EleWise.ELMA.Integration1C
Microsoft.CSharp

Пространства имен:

using EleWise.ELMA.Integration1C;
using EleWise.ELMA.Integration1C.Data;
using EleWise.ELMA.Integration1C.V77;
using EleWise.ELMA.Model.Common;
using EleWise.ELMA.Model.Entities;
using EleWise.ELMA.Model.Managers;
using EleWise.ELMA.Model.Types.Settings;
using EleWise.ELMA.Services;

 Текст сценария без использования PublicAPI:

public void DataTo1C(Context context)
        {        	
        	     		        	
          var service = Locator.GetServiceNotNull&lt;Integration1CService&gt;();
          ComObject connector = service.GetComConnector("ConfigName");

          var bookRefObj = connector.GetFunctionObj("CreateObject", "Справочник.Сотрудники");
          
          var bookRefObj1 = connector.GetFunctionObj("CreateObject", "Справочник.ОКСМ");
          bookRefObj1.ExecProc("НайтиПоНаименованию", new object[] {context.Grazhdanstvo2.Name, 0});               
          var stranaRef = bookRefObj1.GetFunctionValue("ТекущийЭлемент");
                  
          var bookRefObj2 = connector.GetFunctionObj("CreateObject", "Справочник.ОКИН");
          bookRefObj2.ExecProc("НайтиПоНаименованию", new object[] {context.Pol2.Value, 0});         
          var polRef = bookRefObj2.GetFunctionValue("ТекущийЭлемент");
          
          bookRefObj.ExecProc("Новый");               
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "Наименование", context.FIO });
          bookRefObj.ExecProc("Записать");
          var currElem = bookRefObj.GetFunctionValue("ТекущийЭлемент");
         // this.Console.WriteLine(currElem != null ? "not null" : "null");
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "ОсновнойЭлемент", currElem });
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "ДатаРождения", context.DataRozhdeniya });                 
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "Пол", polRef });                
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "Страна", stranaRef });          
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "ИНН", context.INN });
         // bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "КодИМНС", context.IFNS });
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "СтраховойНомерПФР", context.SNILS });
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "АдресПрописка", context.AdresRegistracii });
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "АдресФакт", context.FakticheskiyAdres });
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "АдресВСтранеПроживания", context.AdresRegistracii });
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "ДокументУдЛичность", context.UdostoverenieLichnosti });
          bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "МестоРождения", context.MestoRozhdeniya });                       
          bookRefObj.ExecProc("Записать");          
        
}
Создание аналогичного скрипта с использованием PublicAPI
Актуальная документация по PublicAPI доступна по ссылке
Сценарий,указанный ниже, актуален для версии PublicAPI 3.8 и выше
public void DataTo1C(Context context)
{

    var connector = PublicAPI.Services.Integration1C.GetComConnector("ConfigName");
 
    var bookRefObj = connector.GetFunctionObj("CreateObject", "Справочник.Сотрудники");
           
    var bookRefObj1 = connector.GetFunctionObj("CreateObject", "Справочник.ОКСМ");
    bookRefObj1.ExecProc("НайтиПоНаименованию", new object[] {context.Grazhdanstvo2.Name, 0});               
    var stranaRef = bookRefObj1.GetFunctionValue("ТекущийЭлемент");
                   
    var bookRefObj2 = connector.GetFunctionObj("CreateObject", "Справочник.ОКИН");
    bookRefObj2.ExecProc("НайтиПоНаименованию", new object[] {context.Pol2.Value, 0});         
    var polRef = bookRefObj2.GetFunctionValue("ТекущийЭлемент");
           
    bookRefObj.ExecProc("Новый");               
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "Наименование", context.FIO });
    bookRefObj.ExecProc("Записать");
    var currElem = bookRefObj.GetFunctionValue("ТекущийЭлемент");
    // this.Console.WriteLine(currElem != null ? "not null" : "null");
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "ОсновнойЭлемент", currElem });
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "ДатаРождения", context.DataRozhdeniya });                 
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "Пол", polRef });                
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "Страна", stranaRef });          
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "ИНН", context.INN });
    // bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "КодИМНС", context.IFNS });
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "СтраховойНомерПФР", context.SNILS });
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "АдресПрописка", context.AdresRegistracii });
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "АдресФакт", context.FakticheskiyAdres });
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "АдресВСтранеПроживания", context.AdresRegistracii });
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "ДокументУдЛичность", context.UdostoverenieLichnosti });
    bookRefObj.ExecProc("УстановитьАтрибут", new object[] { "МестоРождения", context.MestoRozhdeniya });                       
    bookRefObj.ExecProc("Записать");                 
}

Для получения ссылки на справочник 1С в сценарии осуществляется вызов функции «CreateObject» (для версии 7.7). В качестве пространства имен для справочников необходимо указать «CatalogManager». Таким же образом можно создать ссылку на документ, однако в качестве пространства имен, в этом случае, следует указать «DocumentManager».