logo

[ELMA3] Работа со справочниками 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 доступна по ссылке
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA с 3.8 включительно до 3.12.1 включительно.
//инициализируем подключение к конфигурации. следует указать имя, заданное в настройках интеграции с 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 доступна по ссылке
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA с 3.8 включительно до 3.12.1 включительно.
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

Cоздания справочника "Сотрудники"

Для работы сценария необходимо подключить сборки:

  • 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 доступна по ссылке
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA с 3.8 включительно до 3.12.1 включительно.
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.