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

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

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

Простенькие учебные функции (с описанием) для работы с базой 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 06.01.09 11:52 Сейчас в теме
Как связаться через ОЛЕ с 1С77 из 1С 8?
2. venger 2099 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Путь+""" ";

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

См. также

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

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

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

27.01.2016    79491    Serginio    113    

Как в 1С 7.7 сделать обмен на базе FTP

Файловые протоколы обмена, FTP 1С7.7<->1C7.7 v7.7 1cv7.md Бесплатно (free)

Выгрузка данных на FTP на примере в конфигурации Штрих-М Кассир 1.10.

12.05.2020    1915    Ignatov_mu    10    

Расчет страховых взносов в 1С 7.7 "Учет и отчетность предпринимателя, ред. 1.2" с апреля 2020

Бухгалтерский учет Практика программирования Зарплата v7.7 1cv7.md Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

В этой статье описано, какие небольшие изменения можно внести в модуль документа Начисление налогов с ФОТ, чтобы правильно рассчитывались страховые взносы с 1 апреля 2020 г.

09.04.2020    12554    Юджин58    39    

Маркировка лекарств - как передать код маркировки при продаже через ККТ Штрих-М

Практика программирования ККМ v7.7 Здравоохранение, медицина, стоматология Фармацевтика, аптеки Россия Бесплатно (free)

Пример программного кода для вывода чеков на ККМ Штрих-М с передачей информации о маркированных товарах (лекарства).

10.02.2020    11541    vovaapril    34    

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

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

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

10.03.2016    57060    Serginio    33    

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

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

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

14.10.2019    4932    ksnik    14    

Заполнение реквизитов документов из предыдущего документа

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

Функция для автоматического заполнения реквизитов документов.

04.02.2019    5382    drevilo    2    

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

Практика программирования v7.7 Бесплатно (free)

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

16.05.2016    11309    kudenzov    3    

1С:Предприятие 7.7. Оптимизация. Промо

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

Разгоняем 1С:Предприятие 7.7. Выжимаем последние соки.

31.01.2009    47897    alexk-is    110    

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

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

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

12.03.2016    19753    CheBurator    18    

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

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

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

09.03.2016    32765    Serginio    22    

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

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

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

16.12.2015    26308    Palmer1976    3    

Как уменьшить количество заблокированных объектов Промо

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

История о том как я решил пересобрать форму справочника клиентов и чем это все закончилось...

12.01.2012    15694    ShEvOvIcH    18    

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

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

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

23.11.2015    17677    etmarket    14    

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

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

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

24.09.2015    18347    Anzhey    14    

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

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

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

05.07.2015    19412    json    1    

Технология обновления нетиповых конфигураций 1С:Предприятия 7.7 Промо

Практика программирования Администрирование данных 1С v7.7 1cv7.md Россия Бесплатно (free)

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

12.12.2008    63591    alexk-is    25    

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

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

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

20.06.2015    13034    gimalaj    3    

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

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

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

16.01.2015    96432    shmellevich    39    

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

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

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

24.09.2014    32273    Just4Fun    33    

Отправка сообщения посредством почтового клиента Lotus Notes

Практика программирования v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Отправка сообщения посредством почтового клиента Lotus Notes из 1С 7,7 и 1с 8

21.08.2014    14783    iolko    8    

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

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

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

20.08.2014    8248    hvv2002    0    

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

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

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

24.07.2014    22417    tomvlad    5    

Контекстный поиск в 7.7

Инструментарий разработчика Практика программирования v7.7 1cv7.md Бесплатно (free)

Процедура контекстного поиска в журнале документов.

18.04.2014    9898    cushe    2    

Проверка ИНН v.7.7

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

Проверка ИНН v.7.7

08.03.2014    9743    kras_71    1    

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

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

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

03.03.2014    18205    kompas-dm    5    

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

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

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

15.07.2013    8179    a.o.popova    10    

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

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

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

11.04.2013    15781    Dima_    8    

Чтение строк файла CSV в список значений с помощью метода ИзСтрокиСРазделителями

Практика программирования Внешние источники данных v7.7 Бесплатно (free)

Чтение строк файла CSV в список значений с помощью метода ИзСтрокиСРазделителями

04.04.2013    19858    ivisor_fil    11    

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

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

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

22.03.2013    13732    gubar    25    

Ошибка заполнения отчета о движении денежных средств за 2012г (RP12Q4 12q4004)

Практика программирования v77::БУ 1С7:Бух Россия Бесплатно (free)

Ошибка заполнения отчета движения денежных средств за 2012г (RP12Q4 12q4004)

13.03.2013    9430    Famza    5    

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

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

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

10.12.2012    25762    serg_gres    6    

Устранение проблемы при работе с полем, которое ограничено маской ввода

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

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

08.08.2012    16705    www2000    4    

Скрытие помеченных на удаление в справочнике

Практика программирования v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free)

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

08.08.2012    14547    mikukrnet    7    

Исправление и проведение документов

Практика программирования v77::БУ 1С7:ПУБ Россия Бесплатно (free)

Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.

23.07.2012    13597    BorisBelov    11    

Динамическая фильтрация в справочнике при вводе наименования

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

Позволяет в открытой форме списка, выбора или подбора справочника производить динамическую фильтрацию по набранному наименованию.

02.07.2012    16764    maxpiter    62    

Продажа собственной фирме (интеркомпани) - заполнение отрицательными остатками

Практика программирования Учет ТМЦ Учет ТМЦ v77::ОУ 1С7:Комплекс 1С7:ТиС Россия Бесплатно (free)

В документе "Продажа собственной фирме" приходится добавлять номенклатуру вручную через подбор. А ведь можно сэкономить время и заполнить спецификацию документа на основании отрицательных остатков фирмы. Все просто...

06.05.2012    13518    2sw    4    

Ввод остатков по 76.ВА в 1С ПУБ

Практика программирования v77::ОУ v77::БУ 1С7:ПУБ Россия БУ Бесплатно (free)

Статья посвящена найденному мной недостатку в конфигурации 1С 7.7 "Производство-услуги-бухгалтерия", связанному с вводом начальных остатков по 76.ВА.

29.04.2012    10163    Пользователь 1С    0    

Обновление базы 1с 7.7. с помощью движка 1с 8.х

Практика программирования Администрирование данных 1С v7.7 1cv7.md Россия Бесплатно (free)

Если Вас угораздило в стандартную типовую конфу внести правки, причем в самый большой модуль, а именно глобальный. Если к тому же Вы внесли изменение в какую-то стандартную функцию, в которой 1с сама регулярно чего-то меняет, то любое обновление начинает доставать. Используя возможности движка платформы 1с 8.х можно существенно сэкономить себе время и нервы.

28.04.2012    18839    Valerich    31    

Ошибка при формировании отчета Авансы по налогу на имущество. В 1С:Предприятие 7.7. Регламентированная отчетность за I квартал 2012 года Обновление 12q1009 от 18.04.2012 г.

Практика программирования v77::ОУ v77::БУ 1cv7.md Россия Бесплатно (free)

При формировании отчета NIMAVP1.ERT Авансы по налогу на имущество (версия 5.03) в разделе № 1-3 не сохраняет номера Страниц при выборе, что ведет к не сохранению и выводу печати двухмерного кода.

24.04.2012    9454    leo072    7