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

Публикация № 57211

Разработка - Практика программирования

45
Простенькие учебные функции (с описанием) для работы с базой 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НормализоватьИмяКаталога
//----------------------------------------------------------------------

45

Специальные предложения

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

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

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

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

См. также

Дистрибьюция 7.7. Часть 1. Жизненный цикл заявки покупателя. Одна заявка покупателя, много адресов доставки. 1

Статья Программист Нет файла v7.7 1С7:Комплекс 1С7:ТиС УУ Бесплатно (free) Практика программирования Адаптация типовых решений

Описан способ работы с учетом расписания с приоритетными покупателями - торговыми сетями (основными покупателями) в торговой или комплексной учетной системе на 1С 7.7. Множественная заявка покупателя на несколько торговых точек.

14.10.2019    1496    ksnik    0       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.127.х, КА 2.4.10.х и ERP 2.4.10.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

Проверка часового пояса 9

Статья Программист Нет файла v7.7 Windows Бесплатно (free) Практика программирования

При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.

16.05.2016    8716    kudenzov    3       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

[ПОЛЕЗНЯШКА, 7.7] Как посчитать итоги по документам черным запросом с изподвывертом? 13

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования

Мелкая полезняшка, считает запросом итоговую сумму документов и количество документов.

12.03.2016    16033    CheBurator    18       

.Net в 1С. На примере использования HTTPClient, AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция 111

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования WEB

Часто приходится парсить сайты, в том числе с авторизацией, перескакивая со страницы на страницу по ссылкам. Тот, кто занимался вэб программированием, знает, как удобно использовать JQuery и CSS селекторы. На .Net написана очень удобная библиотека AngleSharp. Я покажу, как с её помощью можно значительно облегчить себе труд.

10.03.2016    49835    Serginio    33       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

.Net в 1С. Асинхронные HTTP запросы, отправка Post нескольких файлов multipart/form-data, сжатие трафика с использованием gzip, deflate, удобный парсинг сайтов и т.д. 37

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент WEB

Очень часто нужно при работе с HTTP сервисами или сайтами использовать Асинхронные HTTP запросы, отправку на сервер нескольких файлов, использование сжатия трафика. Эта статья про то, как этого легко добиться.

09.03.2016    26770    Serginio    22       

Использование классов .Net в 1С для новичков 148

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент Универсальные функции

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    64676    Serginio    104       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Пример HTTP запроса к УТМ ЕГАИС на платформе 1С 7.7 15

Статья Программист Нет файла v7.7 1cv7.md Россия Windows Оптовая торговля Розничная торговля Бесплатно (free) Практика программирования Внешние источники данных

Запрос реализован на объекте ServerXMLHTTP из встроенной в Windows библиотеки MSXML, результатом запроса является XML объект DOMDocument из той же библиотеки MSXML со встроенным интерфейсом его обработки

16.12.2015    20804    Palmer1976    3       

Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм 20

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).

23.11.2015    14600    etmarket    14       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Процедура расшифровки ячейки таблицы в отчетах 1С 7.7 11

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования Универсальные функции

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.

24.09.2015    14320    Anzhey    13       

Универсальный способ сравнения таблиц 16

Статья Программист Нет файла v7.7 v8 Бесплатно (free) Практика программирования

На эту тему уже есть статьи, но этот способ нигде не описан. Хотя я его использую с тех пор, как занимаюсь программированием. Его преимущество в простоте и универсальности: можно применять на 1С, SQL, а также в любом другом языке программирования.

05.07.2015    15777    json    1       

Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо

Обработка позволяет переносить из КА 1.1 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления в случае выхода новых релизов конфигураций 1С.

29700 руб.

Числа прописью в родительном падеже в 7.7? Легко! 13

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования

Вывод числительных прописью в родительном падеже штатными средствами в три строчки кода.

20.06.2015    10522    gimalaj    3       

Хитрости сохранения табличного документа в Excel для дальнейшей работы с ним 78

Статья Программист Нет файла v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Все пользователи 1С всех версий (начиная с 7-й) сталкиваются с проблемой нормальной работы с данными, сохраненными в Excel файл. Есть некоторые хитрости, которые позволяют облегчить работу с сохраненными данными из 1С в формат Excel.

16.01.2015    73593    shmellevich    35       

1СПАРК РИСКИ. Сервис оценки благонадежности контрагентов. Промо

СПАРК помогает предотвратить мошенничество со стороны компаний и предпринимателей, благодаря актуальным сведениям о компаниях и системе выявления факторов риска.Сервис позволяет управлять налоговыми рисками и комплексно оценивать благонадежность контрагентов.

Оптимизация выгрузки из 1С 7.7 по правилам обмена большого объема данных 25

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Перенос данных из 1С7.7 в 1C8.X Обмен через XML 1С7.7<->1C7.7

При выгрузке из 1С 7.7. большого справочника программа завершалась примерно с таким сообщением: "msxml6.dll: Недостаточно памяти для завершения операции". Вариант выгрузки порциями меня не устраивал. Поэтому немного оптимизировал обработку выгрузки. Возможно кому-то сэкономит время.

24.09.2014    28135    Just4Fun    28       

Очный семинар по регулярному менеджменту Александра Фридмана "Вы или Хаос", 12 декабря 2019 г. , Санкт-Петербург Промо

Семинар по регулярному менеджменту от Александра Фридмана для собственников, первых лиц и топов. Технология управленческого планирования, комплексного управления временем и другими ресурсами, выполнением поручений, делами, информацией, контактами (встречи-звонки-почта).

от 11000 до 29000 рублей

Исправление в типовой комплексной конфигурации глобальной функции глВсеРеквизитыДокументаЗаполнены() 4

Статья Программист Нет файла v7.7 1С7:Комплекс Россия Windows Бесплатно (free) Практика программирования

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

20.08.2014    6361    hvv2002    0       

ЗаполнитьЗначенияСвойств - заставляем работать в 7.7 11

Статья Программист Нет файла v7.7 1cv7.md Бесплатно (free) Практика программирования

Если вы используете в работе 1С:Предприятие 8.х, то наверняка знакомы и с замечательной системной процедурой, как ЗаполнитьЗначенияСвойств(). Ее использование помогает значительно упростить написание программного кода в ряде случае, делает его (код) более наглядным и простым. Но что же делать тем, кто до сих пор использует (постоянно или иногда) 1С:Предприятие 7.7?

24.07.2014    19301    tomvlad    5       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.127.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

Полезные функции. Склонение (должность и фамилия подписантов). Любой язык 3

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования

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

03.03.2014    15762    kompas-dm    5       

Реализация Ctrl+Z в 1С 7.7 (ТиС) 7

Статья Программист Нет файла v7.7 1С7:ТиС Windows Бесплатно (free) Практика программирования

В семерке отсутствует возможность отменять последнее действие в формах документов. В данной статье будет рассмотрен пример реализации данной функции. Возможно, кому-нибудь пригодится.

15.07.2013    5930    a.o.popova    10       

1С:Предприятие через Интернет. 1С:Fresh Промо

Ведение бухгалтерского и налогового учет, сдача отчетности, управление бизнесом из любой точки мира. Привычные программы «1С» через Интернет без приобретения коробочных программ.

Копия напечатанного документа или как спрятать документ. 2

Статья Программист Нет файла v7.7 Бесплатно (free) Журнал регистрации Практика программирования

Возникла необходимость, чтобы при печати определённого документа (даже потом не сохранённого), создавалась его копия, т.е. запись всех напечатанных документов. (В результате чего возникла такая потребность, полагаюсь на вашу фантазию). В итоге получилось два варианта решения, остановился на втором.

11.04.2013    13609    Dima_    8       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

Автосохранение документа в 1С 7.7 3

Статья Программист Нет файла v7.7 1cv7.md Россия Windows Бесплатно (free) Практика программирования

В данной статье мы рассмотрим автосохранение документа в 1С 7.7!

22.03.2013    11532    aagubarev    25       

Конвертация данных 2.1 (2.1.3.1) 1С 7.7 - 1С 8.Х передача параметра ПКО 14

Статья Системный администратор Программист Нет файла v7.7 v8 КД Бесплатно (free) Практика программирования Перенос данных из 1С7.7 в 1C8.X

Передача параметров по умолчанию доступна только для баз 1С 8.х -1С 8.х. Показан пример, как передать параметры из 1С 7.7 - 1С 8.х

10.12.2012    22801    serg_gres    6