gifts2017

(OLE 1С - 1C 7.7) Функции для 1С:Предприятие 7.7 для работы с другой базой 1С.

Опубликовал Александр Венгер (venger) в раздел Программирование - Практика программирования

Простенькие учебные функции (с описанием) для работы с базой 1С 7.7 через OLE.
Полностью средствами 1С, т.е. не требуют никаких внешних компонент.
Пользоваться можно бесплатно:-)
Вставляете в глобальный модуль и пользуетесь.
Цель: обучение, готовая иллюстрация подходов, возможность сразу использовать или, если нужно, доработать под свои цели.
//------------------Объявления функций:

//========= 1Сv77 (OLE) :
// (c) Venger Alex, Odessa, 2007
Функция гл81Сv77_СоединитьсяСБазой(oleБаза, Знач txtПараметры, Знач blnЗаставка=1) Экспорт Далее
Функция гл81Сv77_СобратьСтрокуИнициализации(Знач txtПуть, Знач txtПользователь="", Знач txtПароль="") Экспорт Далее
Функция гл81Сv77_СправочникСуществует(oleБаза, Знач ИдСпр) Экспорт Далее
Функция гл81Сv77_РеквизитСправочникаСуществует(oleБаза, Знач ИдСпр, Знач ИдРекв) Экспорт Далее
Функция гл81Сv77_РегистрСуществует(oleБаза, Знач ИдРег) Экспорт Далее
Функция гл81Сv77_РеквизитРегистраСуществует(oleБаза, Знач ИдРег, Знач ИдРекв) Экспорт Далее
Функция гл81Сv77_РесурсРегистраСуществует(oleБаза, Знач ИдРег, Знач ИдРес) Экспорт Далее
Функция гл81Сv77_ИзмерениеРегистраСуществует(oleБаза, Знач ИдРег, Знач ИдИзм) Экспорт Далее
Функция гл81Сv77_ПолучитьТипРеквизитаСправочника(oleБаза, Знач ИмяСпр, Знач ИдРекв, ТипРекв, ВидРекв, ЭтоПериодический) Экспорт Далее
Функция гл81Сv77_ПолучитьСписокРеквизитовСправочника(oleБаза, Знач ИмяСпр, Знач ТолькоПериодические=0) Экспорт Далее
Функция гл81Сv77_ПолучитьТипРеквизитаРегистра(oleБаза, Знач ИмяРег, Знач ИдРекв, ТипРекв, ВидРекв) Экспорт Далее
Функция гл81Сv77_ПолучитьТипРесурсаРегистра(oleБаза, Знач ИмяРег, Знач ИдРес, ТипРес, ВидРес) Экспорт Далее
Функция гл81Сv77_ПолучитьТипИзмеренияРегистра(oleБаза, Знач ИмяРег, Знач ИдИзм, ТипИзм, ВидИзм) Экспорт Далее

//========= 1Сv77 Доп. служебн. :
// (c) Sergey Popov, Usinsk, Komi, 2002, 2003
Функция гл9МодульЧисла(X) Экспорт Далее
Функция гл9НормализоватьИмяКаталога(ИмяКаталога) Экспорт Далее



//------------------Определения функций:

//-------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Соединиться с базой 1С:Предприятие 7.7
// Параметры:
//   oleБаза - ссылка на базу 1С (OLE). Ссылка должна существовать.
//             Получить можно исп. функцию СоздатьОбъект() с параметром:
//               "V1CEnterprise.Application" - версия независимый ключ
//               "V77.Application" - версия зависимый ключ
//               "V77S.Application" - версия зависимый ключ, SQL-версия
//               "V77L.Application" - версия зависимый ключ, локальная версия
//               "V77M.Application" - версия зависимый ключ, сетевая версия
//   txtПараметры - строка параметров инициализации (путь, пользователь, пароль)
//                  Возможные значения ключей строки инициализации:
//                    "/D Папка " - имя каталога(папки), где располагается БД
//                    "/N Имя пользователя " - имя пользователя
//                    "/P Пароль " - пароль доступа
//                    "/M " - монопольный доступ
//   blnЗаставка - показывать заставку при открытии (Да=1, Нет=0)
// Возвращает: 1 - успешно, 0 - нет.
Функция гл81Сv77_СоединитьсяСБазой(oleБаза, Знач txtПараметры, Знач blnЗаставка=1) Экспорт
	// 15.11.2007
	Перем Res, txtЗаставка;
	Res=0; txtЗаставка = "NO_SPLASH_SHOW";
	
	txtПараметры = СокрЛП(Строка(txtПараметры));
	blnЗаставка = Число(blnЗаставка);
	
	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100
		Если blnЗаставка = 0 Тогда
			Res = oleБаза.Initialize(oleБаза.RMTrade, txtПараметры+"", txtЗаставка+"");	
		Иначе
			Res = oleБаза.Initialize(oleБаза.RMTrade, txtПараметры+"", "");	
		КонецЕсли;
		
		// Так как стандарт OLE: True=-1, False=0
		Res = гл9МодульЧисла(Res);
	КонецЕсли;
	Возврат Res;
КонецФункции	// гл81Сv77_СоединитьсяСБазой
//-------------------------------------------------------------

//-------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Собирает строку инициализации, для запуска и соединения
// с базой 1С (OLE), можно использовать совместно с функцией
// гл81Сv77_СоединитьсяСБазой, для передачи параметра txtПараметры.
// Параметры:
//     txtПуть - путь к базе на диске
//     txtПользователь - пользователь для авторизации
//     txtПароль - пароль пользователя для авторизации
// Если пользователь и пароль не заданы, при соединении откроется
// окно ввода имени пользователя и пароля.
// Возвращает: строку инициализации - успешно, пустую строку - нет.
Функция гл81Сv77_СобратьСтрокуИнициализации(Знач txtПуть, Знач txtПользователь="", Знач txtПароль="") Экспорт
	// 15.11.2007
	Перем txtСтрока;
	txtСтрока="";

	txtПуть=гл9НормализоватьИмяКаталога(txtПуть);
	txtПользователь=СокрЛП(Строка(txtПользователь));
	txtПароль=СокрЛП(Строка(txtПароль));

	Если ПустаяСтрока(txtПуть)=1 Тогда
		txtСтрока = txtСтрока+"";
		Возврат txtСтрока;
	Иначе
		txtСтрока = txtСтрока+"/D "+txtПуть+" ";
	КонецЕсли;
	
	Если ПустаяСтрока(txtПользователь)=0 Тогда
		txtСтрока=txtСтрока+"/N "+txtПользователь+" ";
	КонецЕсли;
	
	Если ПустаяСтрока(txtПароль)=0 Тогда
		txtСтрока=txtСтрока+"/P "+txtПароль+" ";
	КонецЕсли;
	
	txtСтрока=СокрЛП(txtСтрока);
	Возврат txtСтрока;
КонецФункции	// гл81Сv77_СобратьСтрокуИнициализации
//-------------------------------------------------------------



//-------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверка, существует ли Справочник в конфигурации к которой
// подключились  (ссылка должна существовать) на основании
// инфы из метаданных.
// Функция возвращает 1, если существует и 0 в противном случае.
//  oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИдСпр - Идентификатор Справочника
Функция гл81Сv77_СправочникСуществует(oleБаза, Знач ИдСпр) Экспорт
	// 17.11.2007
	Перем Res;
	Res=0;
	ИдСпр=СокрЛП(Строка(ИдСпр));
	
	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100
		Если oleБаза.Метаданные.Справочник(""+СокрЛП(ИдСпр)).Выбран()>0 Тогда
			Res=1;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;
КонецФункции // гл81Сv77_СправочникСуществует
//-------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверка, существует ли Реквизит Справочника  в конфигурации к которой
// подключились  (ссылка должна существовать) 
// на основании инфы из метаданных.
// Функция возвращает 1, если существует и 0 в противном случае
//  oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИдСпр  - Идентификатор Справочника
//  ИдРекв - Идентификатор Реквизита
Функция гл81Сv77_РеквизитСправочникаСуществует(oleБаза, Знач ИдСпр, Знач ИдРекв) Экспорт
	// 17.11.2007
	Перем Res;
	Res=0;
	
	ИдСпр=СокрЛП(Строка(ИдСпр));
	ИдРекв=СокрЛП(Строка(ИдРекв));

	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100	
		Если oleБаза.Метаданные.Справочник(""+СокрЛП(ИдСпр)).Выбран()>0 Тогда
			Если oleБаза.Метаданные.Справочник(""+СокрЛП(ИдСпр)).Реквизит(""+СокрЛП(ИдРекв)).Выбран()>0 Тогда
				Res=1;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;
КонецФункции //гл81Сv77_РеквизитСправочникаСуществует()
//----------------------------------------------------------------------

//-------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверка, существует ли Регистр в конфигурации к которой
// подключились  (ссылка должна существовать) на основании
// инфы из метаданных.
// Функция возвращает 1, если существует и 0 в противном случае.
//  oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИдРег - Идентификатор Регистра
Функция гл81Сv77_РегистрСуществует(oleБаза, Знач ИдРег) Экспорт
	// 17.11.2007
	Перем Res;
	Res=0;
	ИдРег=СокрЛП(Строка(ИдРег));
	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100
		Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИдРег)).Выбран()>0 Тогда
			Res=1;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;
КонецФункции // гл81Сv77_РегистрСуществует
//-------------------------------------------------------------


//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверка, существует ли Реквизит Регистра  в конфигурации к которой
// подключились  (ссылка должна существовать) 
// на основании инфы из метаданных.
// Функция возвращает 1, если существует и 0 в противном случае
//  oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИдРег  - Идентификатор Регистра
//  ИдРекв - Идентификатор Реквизита
Функция гл81Сv77_РеквизитРегистраСуществует(oleБаза, Знач ИдРег, Знач ИдРекв) Экспорт
	// 17.11.2007
	Перем Res;
	Res=0;
	
	ИдРег=СокрЛП(Строка(ИдРег));
	ИдРекв=СокрЛП(Строка(ИдРекв));
	
	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100	
		Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИдРег)).Выбран()>0 Тогда
			Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИдРег)).Реквизит(""+СокрЛП(ИдРекв)).Выбран()>0 Тогда
				Res=1;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;
КонецФункции //гл81Сv77_РеквизитРегистраСуществует
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверка, существует ли Ресурс Регистра  в конфигурации к которой
// подключились  (ссылка должна существовать) 
// на основании инфы из метаданных.
// Функция возвращает 1, если существует и 0 в противном случае
//  oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИдРег  - Идентификатор Регистра
//  ИдРес - Идентификатор Ресурса
Функция гл81Сv77_РесурсРегистраСуществует(oleБаза, Знач ИдРег, Знач ИдРес) Экспорт
	// 17.11.2007
	Перем Res;
	Res=0;
	
	ИдРег=СокрЛП(Строка(ИдРег));
	ИдРес=СокрЛП(Строка(ИдРес));
	
	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100	
		Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИдРег)).Выбран()>0 Тогда
			Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИдРег)).Ресурс(""+СокрЛП(ИдРес)).Выбран()>0 Тогда
				Res=1;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;
КонецФункции //гл81Сv77_РесурсРегистраСуществует
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверка, существует ли Измерение Регистра  в конфигурации к которой
// подключились  (ссылка должна существовать) 
// на основании инфы из метаданных.
// Функция возвращает 1, если существует и 0 в противном случае
//  oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИдРег  - Идентификатор Регистра
//  ИдИзм - Идентификатор Измерения
Функция гл81Сv77_ИзмерениеРегистраСуществует(oleБаза, Знач ИдРег, Знач ИдИзм) Экспорт
	// 17.11.2007
	Перем Res;
	Res=0;
	
	ИдРег=СокрЛП(Строка(ИдРег));
	ИдИзм=СокрЛП(Строка(ИдИзм));

	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100	
		Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИдРег)).Выбран()>0 Тогда
			Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИдРег)).Измерение(""+СокрЛП(ИдИзм)).Выбран()>0 Тогда
				Res=1;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;
КонецФункции //гл81Сv77_ИзмерениеРегистраСуществует
//----------------------------------------------------------------------


//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Вычисляет тип и вид реквизита справочника в конфигурации к которой
// подключились  (ссылка должна существовать) из метаданных
// oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИмяСпр - Идентифмкатор справочника (например, Контрагенты)
//  ИдРекв - Идентифмкатор реквизита, информацию по которому считываем
//  В параметрах ТипРекв и ВидРекв возвращается строковое значение Типа и Вида реквизита
//  В параметре ЭтоПериодический возвращется признак =1, если периодический и =0, если нет
// Функция возвращает код, как функция ТипЗначения()
Функция гл81Сv77_ПолучитьТипРеквизитаСправочника(oleБаза, Знач ИмяСпр, Знач ИдРекв, ТипРекв, ВидРекв, ЭтоПериодический) Экспорт
	// 17.11.2007
	Перем Res; //Возвращаемое значение. : код типа значения
	Res = 0;
	ТипРекв = "";
	ВидРекв = "";
	ЭтоПериодический = 0;
	Yes=0;
	
	ИмяСпр=СокрЛП(Строка(ИмяСпр));
	ИдРекв=СокрЛП(Строка(ИдРекв));

	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100	
		Если oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Выбран()>0 Тогда
			Если oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Реквизит(""+СокрЛП(ИдРекв)).Выбран()>0 Тогда
				Yes=1;        
				ТипРекв = СокрЛП(oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Реквизит(""+СокрЛП(ИдРекв)).Тип);
				ВидРекв = СокрЛП(oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Реквизит(""+СокрЛП(ИдРекв)).Вид);
				ЭтоПериодический = oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Реквизит(""+СокрЛП(ИдРекв)).Периодический;
			КонецЕсли;	
		КонецЕсли;
	КонецЕсли;
	
	Если Yes>0 Тогда
		Если ВРег(ТипРекв) = ВРег("Число") Тогда
			Res=1;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Строка") Тогда
			Res=2;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Дата") Тогда
			Res=3;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Перечисление") Тогда
			Res=10;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Справочник") Тогда
			Res=11;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Документ") Тогда
			Res=12;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Календарь") Тогда
			Res=13;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("ВидРасчета") Тогда
			Res=14;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Счет") Тогда
			Res=15;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("ВидСубконто") Тогда
			Res=16;
		КонецЕсли;	
	КонецЕсли;
	Возврат Res;
КонецФункции // гл81Сv77_ПолучитьТипРеквизитаСправочника
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Прочитать список реквизитов справочника в конфигурации к которой
// подключились  (ссылка должна существовать) в СписокЗначений 
// на основании инфы из метаданных.
// Дополнительно в СписокЗначений включаются : Код, Наименование, Владелец, Родитель
// Возвращаемое значение: СписокЗначений
//    СТРОКА   : ИдРеквизита
//    ЗНАЧЕНИЕ : ИдРеквизита
// Если ТолькоПериодические>0, то в список попадают только идентификаторы периодических реквизитов
Функция гл81Сv77_ПолучитьСписокРеквизитовСправочника(oleБаза, Знач ИмяСпр, Знач ТолькоПериодические=0) Экспорт
	// 17.11.2007
	Перем Res;
	Res = СоздатьОбъект("СписокЗначений");
	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100
		Если oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Выбран()>0 Тогда
			ТП=ЧИСЛО(ТолькоПериодические); 
			Если ТП<=0 Тогда 
				Тип99 = "Код"; // "?"
				Res.ДобавитьЗначение(Тип99,"Код");
				Тип99 = "Наименование"; // "СТРОКА"
				Res.ДобавитьЗначение(Тип99,"Наименование");
				Тип99 = "Владелец"; // "?"
				Res.ДобавитьЗначение(Тип99,"Владелец");
				Тип99 = "Родитель"; // "?"
				Res.ДобавитьЗначение(Тип99,"Родитель");
			КонецЕсли;
			Колво = oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Реквизит();
			Если Колво>0 Тогда
				i=0;
				Пока i<Колво цикл
					i=i+1;
					ЭтоПериодический = oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Реквизит(i).Периодический;
					Yes99=1; 
					Если ТП>0 Тогда
						Если ЧИСЛО(ЭтоПериодический)<=0 Тогда
							Yes99=0;
						КонецЕсли;
					КонецЕсли;
					//---------------------
					Если Yes99>0 Тогда 
						ИдРекв=СокрЛП(oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Реквизит(i).Идентификатор);
						ТипРекв="";
						ВидРекв="";
						ЭтоП=0;
						Тип99 = СокрЛП(oleБаза.Метаданные.Справочник(""+СокрЛП(ИмяСпр)).Реквизит(i).Идентификатор); // гл81Сv77_ПолучитьТипРеквизитаИзМетаданных(oleБаза, ""+СокрЛП(ИмяСпр),ИдРекв,ТипРекв,ВидРекв,ЭтоП)
						Res.ДобавитьЗначение(Тип99,ИдРекв);
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;
КонецФункции // гл81Сv77_ПолучитьСписокРеквизитовСправочника
//----------------------------------------------------------------------



//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Вычисляет тип и вид реквизита регистра в конфигурации к которой
// подключились  (ссылка должна существовать) из метаданных
// oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИмяРег - Идентифмкатор регистра (например, ОстаткиТоваров)
//  ИдРекв - Идентифмкатор реквизита, информацию по которому считываем
//  В параметрах ТипРекв и ВидРекв возвращается строковое значение Типа и Вида реквизита
// Функция возвращает код, как функция ТипЗначения()
Функция гл81Сv77_ПолучитьТипРеквизитаРегистра(oleБаза, Знач ИмяРег, Знач ИдРекв, ТипРекв, ВидРекв) Экспорт
	// 18.11.2007
	Перем Res; //Возвращаемое значение. : код типа значения
	Res = 0;
	ТипРекв = "";
	ВидРекв = "";
	Yes=0;
	
	ИмяРег=СокрЛП(Строка(ИмяРег));
	ИдРекв=СокрЛП(Строка(ИдРекв));

	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100	
		Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Выбран()>0 Тогда
			Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Реквизит(""+СокрЛП(ИдРекв)).Выбран()>0 Тогда
				Yes=1;        
				ТипРекв = СокрЛП(oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Реквизит(""+СокрЛП(ИдРекв)).Тип);
				ВидРекв = СокрЛП(oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Реквизит(""+СокрЛП(ИдРекв)).Вид);
			КонецЕсли;	
		КонецЕсли;	
	КонецЕсли;
	Если Yes>0 Тогда
		Если ВРег(ТипРекв) = ВРег("Число") Тогда
			Res=1;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Строка") Тогда
			Res=2;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Дата") Тогда
			Res=3;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Перечисление") Тогда
			Res=10;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Справочник") Тогда
			Res=11;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Документ") Тогда
			Res=12;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Календарь") Тогда
			Res=13;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("ВидРасчета") Тогда
			Res=14;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("Счет") Тогда
			Res=15;
		КонецЕсли;	
		Если ВРег(ТипРекв) = ВРег("ВидСубконто") Тогда
			Res=16;
		КонецЕсли;	
	КонецЕсли;
	Возврат Res;
КонецФункции // гл81Сv77_ПолучитьТипРеквизитаРегистра
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Вычисляет тип и вид ресурса регистра в конфигурации к которой
// подключились  (ссылка должна существовать) из метаданных
// oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИмяРег - Идентифмкатор регистра (например, ОстаткиТоваров)
//  ИдРес - Идентифмкатор ресурса, информацию по которому считываем
//  В параметрах ТипРес и ВидРес возвращается строковое значение Типа и Вида ресурса
// Функция возвращает код, как функция ТипЗначения()
Функция гл81Сv77_ПолучитьТипРесурсаРегистра(oleБаза, Знач ИмяРег, Знач ИдРес, ТипРес, ВидРес) Экспорт
	// 18.11.2007
	Перем Res; //Возвращаемое значение. : код типа значения
	Res = 0;
	ТипРес = "";
	ВидРес = "";
	Yes=0;
	
	ИмяРег=СокрЛП(Строка(ИмяРег));
	ИдРес=СокрЛП(Строка(ИдРес));
	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100	
		Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Выбран()>0 Тогда
			Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Ресурс(""+СокрЛП(ИдРес)).Выбран()>0 Тогда
				Yes=1;        
				ТипРес = СокрЛП(oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Ресурс(""+СокрЛП(ИдРес)).Тип);
				ВидРес = СокрЛП(oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Ресурс(""+СокрЛП(ИдРес)).Вид);
			КонецЕсли;	
		КонецЕсли;	
	КонецЕсли;
	Если Yes>0 Тогда
		Если ВРег(ТипРес) = ВРег("Число") Тогда
			Res=1;
		КонецЕсли;	
		Если ВРег(ТипРес) = ВРег("Строка") Тогда
			Res=2;
		КонецЕсли;	
		Если ВРег(ТипРес) = ВРег("Дата") Тогда
			Res=3;
		КонецЕсли;	
		Если ВРег(ТипРес) = ВРег("Перечисление") Тогда
			Res=10;
		КонецЕсли;	
		Если ВРег(ТипРес) = ВРег("Справочник") Тогда
			Res=11;
		КонецЕсли;	
		Если ВРег(ТипРес) = ВРег("Документ") Тогда
			Res=12;
		КонецЕсли;	
		Если ВРег(ТипРес) = ВРег("Календарь") Тогда
			Res=13;
		КонецЕсли;	
		Если ВРег(ТипРес) = ВРег("ВидРасчета") Тогда
			Res=14;
		КонецЕсли;	
		Если ВРег(ТипРес) = ВРег("Счет") Тогда
			Res=15;
		КонецЕсли;	
		Если ВРег(ТипРес) = ВРег("ВидСубконто") Тогда
			Res=16;
		КонецЕсли;	
	КонецЕсли;
	Возврат Res;
КонецФункции // гл81Сv77_ПолучитьТипРесурсаРегистра
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Вычисляет тип и вид измерения регистра в конфигурации к которой
// подключились  (ссылка должна существовать) из метаданных
// oleБаза - ссылка на конфигурацию 1С (должна существовать)
//  ИмяРег - Идентифмкатор регистра (например, ОстаткиТоваров)
//  ИдИзм - Идентифмкатор измерения, информацию по которому считываем
//  В параметрах ТипИзм и ВидИзм возвращается строковое значение Типа и Вида измерения
// Функция возвращает код, как функция ТипЗначения()
Функция гл81Сv77_ПолучитьТипИзмеренияРегистра(oleБаза, Знач ИмяРег, Знач ИдИзм, ТипИзм, ВидИзм) Экспорт
	// 18.11.2007
	Перем Res; //Возвращаемое значение. : код типа значения
	Res = 0;
	ТипИзм = "";
	ВидИзм = "";
	Yes=0;
	
	ИмяРег=СокрЛП(Строка(ИмяРег));
	ИдИзм=СокрЛП(Строка(ИдИзм));

	Если ТипЗначения(oleБаза)=100 Тогда   //OLE._Application  100	
		Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Выбран()>0 Тогда
			Если oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Измерение(""+СокрЛП(ИдИзм)).Выбран()>0 Тогда
				Yes=1;        
				ТипИзм = СокрЛП(oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Измерение(""+СокрЛП(ИдИзм)).Тип);
				ВидИзм = СокрЛП(oleБаза.Метаданные.Регистр(""+СокрЛП(ИмяРег)).Измерение(""+СокрЛП(ИдИзм)).Вид);
			КонецЕсли;	
		КонецЕсли;	
	КонецЕсли;
	Если Yes>0 Тогда
		Если ВРег(ТипИзм) = ВРег("Число") Тогда
			Res=1;
		КонецЕсли;	
		Если ВРег(ТипИзм) = ВРег("Строка") Тогда
			Res=2;
		КонецЕсли;	
		Если ВРег(ТипИзм) = ВРег("Дата") Тогда
			Res=3;
		КонецЕсли;	
		Если ВРег(ТипИзм) = ВРег("Перечисление") Тогда
			Res=10;
		КонецЕсли;	
		Если ВРег(ТипИзм) = ВРег("Справочник") Тогда
			Res=11;
		КонецЕсли;	
		Если ВРег(ТипИзм) = ВРег("Документ") Тогда
			Res=12;
		КонецЕсли;	
		Если ВРег(ТипИзм) = ВРег("Календарь") Тогда
			Res=13;
		КонецЕсли;	
		Если ВРег(ТипИзм) = ВРег("ВидРасчета") Тогда
			Res=14;
		КонецЕсли;	
		Если ВРег(ТипИзм) = ВРег("Счет") Тогда
			Res=15;
		КонецЕсли;	
		Если ВРег(ТипИзм) = ВРег("ВидСубконто") Тогда
			Res=16;
		КонецЕсли;	
	КонецЕсли;
	Возврат Res;
КонецФункции // гл81Сv77_ПолучитьТипИзмеренияРегистра
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Sergey Popov, Usinsk, Komi, 2002, 2003
//Получить Абсолютное значение (модуль) числа
Функция гл9МодульЧисла(X) Экспорт
	//_new_ 13.10.2003 сп_
	Перем Res;
	Res=ЧИСЛО(X);
	Если Res<0 Тогда
		Res=Res*(-1);
	КонецЕсли;
	Возврат Res;
КонецФункции
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Sergey Popov, Usinsk, Komi, 2002, 2003
// Проверить на корректность имя Каталога.
// Возвращает "обработанное" имя каталога
Функция гл9НормализоватьИмяКаталога(ИмяКаталога) Экспорт
    NameDir = ИмяКаталога;
    NameDir=СокрЛП(NameDir);
    Если СтрДлина(NameDir)<=0 Тогда
        NameDir = "A:\"; //Это если уж совсем ничего не назначено
    КонецЕсли;
    Если Прав(NameDir,1)<>"\" Тогда
        NameDir = NameDir+"\"; 
    КонецЕсли;
    Возврат NameDir;
КонецФункции //гл9НормализоватьИмяКаталога
//----------------------------------------------------------------------

См. также

Подписаться Добавить вознаграждение

Комментарии

1. fantasy2 (fantasy2) 06.01.09 11:52
Как связаться через ОЛЕ с 1С77 из 1С 8?
2. Александр Венгер (venger) 06.01.09 16:34
3. as108 (AS108) 20.05.09 02:52
Спасибо! Будем осваивать :)
4. Пехов П (xavchik) 07.05.10 16:56
Спасибо! Очень полезная статья...
5. Natalia Vasilchenko (Natalia) 02.11.11 01:55
Если в гл81Сv77_СобратьСтрокуИнициализации()

строку
txtСтрока = txtСтрока+"/D "+txtПуть+" ";

поменять на строку
txtСтрока = txtСтрока+"/D """+txtПуть+""" ";

то будут нормально восприниматься пути с пробелами ))
6. Марина Гинко (_qqq) 05.04.13 12:00
А как корректно закрыть ОЛЕ соединение?
7. Z Lu (validat) 10.08.14 04:19
Спасибо автору за проделанную работу.
Побольше бы таких статей.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа