Связь программы 1С с другой базой 1С

Какие методы, функции и процедуры используются в 1С для связи между информационными базами?

Страшно не люблю этого делать, но иногда всё-таки приходится связываться из 1С с другой базой 1С. Из моего опыта это приходилось делать в таких случаях:

  • Консолидация данных.
  • Перенесение данных из одной конфигурации в другую.
  • Вытаскивание данных, которые безвозвратно утеряны в рабочей базе, из архивной базы.

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

Подключиться или соединиться с другой базой 1С:Предприятие 7.7

//подключение к другой базе 1С:Предприятие через OLE
Функция гБаза_Подключить(Оле,Путь,Логин,Пароль,ФлагХорошо=0) Экспорт
     Если ПустаяСтрока(Путь)=1 Тогда
          Предупреждение("Не указан Путь к базе!");
          Возврат(0);
     ИначеЕсли ФС.СуществуетФайл(Путь+"\1Cv7.MD")=0 Тогда
          Предупреждение("База данных по указанному пути не обнаружена!");
          Возврат(0);
     КонецЕсли;
     //строка запуска
     Оле=СоздатьОбъект("V1CEnterprise.Application");
     СтрокаЗапуска="/d"+Путь;
     Если ПустаяСтрока(Логин)=0 Тогда
          СтрокаЗапуска=СтрокаЗапуска+" /n"+Логин;
          Если ПустаяСтрока(Пароль)=0 Тогда
               СтрокаЗапуска=СтрокаЗапуска+" /p"+Пароль;
          КонецЕсли;
     КонецЕсли;
     //подключение
     Удача=Оле.Initialize(Оле.RMTrade,СтрокаЗапуска,);
     Если Удача=0 Тогда
          Предупреждение("Ошибка соединения!");
          Возврат(0);
     ИначеЕсли ФлагХорошо=1 Тогда
          Предупреждение("Соединение выполнено успешно");
     КонецЕсли;
     Возврат(1);
КонецФункции

Импорт данных в 1С из другой базы 1С

Довольно часто возникает необходимость передать данные из одной базы в другую. Именно для таких целей можно использовать нижеприведённые примеры, в которых показано, как получать некоторые данные из базы, с которой установлено соединение посредством механизма OLE Automation.

//получение значения субконто текущей базы из запроса к бухгалтерским итогам другой базы через OLE
//аргументы: Б - бухгалтерские итоги, Номер - номер субконто в выборке

Функция Субконто_Получить(Б,Номер)
     Значение=Б.Субконто(Номер);
     //тип
     Ч=СчетПоКоду(Б.Счет.Код);
     Тип=Ч.ВидСубконто(Номер).ТипСубконто();
     Если Найти("Число,Строка,Дата",Тип)>0 Тогда
          Возврат(Значение);
     ИначеЕсли Значение.Выбран()=0 Тогда
          Сообщить(Ч.Код+": Не выбрано значение "+Тип,"!");
          Возврат ПолучитьПустоеЗначение(Тип);
     КонецЕсли;
     //вид
     Позиция=Найти(Тип,".");
     Если Позиция>0 Тогда
          Вид=Сред(Тип,Позиция+1);
          Тип=Лев(Тип,Позиция-1);
     Иначе
          Вид=Значение.Вид();
     КонецЕсли;
     ТипВид=Тип+"."+Вид;
     //поиск
     Если Тип="Справочник" Тогда
          Если Метаданные.Справочник(Вид).ДлинаКода=0 Тогда
               Сообщить(Ч.Код+": "+ТипВид+": Коды не используются","!");
               Возврат ПолучитьПустоеЗначение(ТипВид);
          ИначеЕсли Метаданные.Справочник(Вид).Владелец.Выбран()=1 Тогда
               Сообщить(Ч.Код+": "+ТипВид+": Не найден элемент по владельцу","!");
               Возврат ПолучитьПустоеЗначение(ТипВид);
          КонецЕсли;
          //поиск
          ТекКод=Значение.ПолныйКод();
          С=СоздатьОбъект(ТипВид);
          Если С.НайтиПоКоду(ТекКод,2)=1 Тогда
               Возврат(С.ТекущийЭлемент());
          Иначе
               Сообщить(Ч.Код+": Не найдено: "+ТипВид+".ПолныйКод="+ТекКод,"!");
               Возврат ПолучитьПустоеЗначение(ТипВид);
          КонецЕсли;
     ИначеЕсли Тип="Документ" Тогда
          ТекНомер=СокрЛП(Значение.НомерДок);
          ТекДата=Значение.ДатаДок;
          //поиск
          Г=СоздатьОбъект(ТипВид);
          Если Г.НайтиПоНомеру(ТекНомер,ТекДата)=1 Тогда
               Возврат(Г.ТекущийДокумент());
          Иначе
               Сообщить(Ч.Код+": Не найдено: "+ТипВид+": "+ТекНомер+" ("+ТекДата+")","!");
               Возврат ПолучитьПустоеЗначение(ТипВид);
          КонецЕсли;
     ИначеЕсли Тип="Перечисление" Тогда
          К=СоздатьОбъект(ТипВид);
          Возврат К.ЗначениеПоИдентификатору(Значение.Идентификатор());
     КонецЕсли;
КонецФункции

//получение элемента справочника текущей базы
//аргументы: Значение - элемент справочника базы, с которой выполнено соединение через OLE

Функция Справочник_Получить(Значение)
     Справочник=Значение.Вид();
     ТекКод=Значение.ПолныйКод();
     Если ПустаяСтрока(ТекКод)=1 Тогда
          Возврат ПолучитьПустоеЗначение("Справочник."+Справочник);
     КонецЕсли;
     //справочник
     С=СоздатьОбъект("Справочник."+Справочник);
     Если С.НайтиПоКоду(ТекКод,2)=1 Тогда
          Возврат(С.ТекущийЭлемент());
     Иначе
          Сообщить("Не найдено: Справочник."+Справочник+".ПолныйКод="+Значение.ПолныйКод());
          Возврат ПолучитьПустоеЗначение("Справочник."+Справочник);
     КонецЕсли;
КонецФункции

Эпилог

В статье представлены образцы программного кода, который используется для установления связи между двумя базами данных, обслуживаемыми программой "1С:Предприятие".

Реклама:
Смотрите также:
Методы повышения урожайности зерновых культур
Оформление документов при приёме на работу
Как расширить функциональность 1С