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

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

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

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

//========= Excel (OLE) :
// (c) Venger Alex, Odessa, 2007
Функция гл8Excel_СоздатьКнигуСНужнымКолвомЛистов(Excel, РабочаяКнига, КолвоЛистов=1) Экспорт Далее
Функция гл8Excel_ЛистСНомеромСуществует(РабочаяКнига, НомерЛиста=1) Экспорт Далее
Функция гл8Excel_ПереименоватьЛистПоНомеру(РабочаяКнига, НомерЛиста=1, ИмяЛиста) Экспорт Далее
Функция гл8Excel_ЛистСИменемСуществует(РабочаяКнига, ИмяЛиста) Экспорт Далее
Функция гл8Excel_ПереименоватьЛистПоИмени(РабочаяКнига, ИмяЛиста, НовоеИмяЛиста) Экспорт Далее
Функция гл8Excel_ПолучитьЛистПоИмени(РабочаяКнига, ИмяЛиста, РабочийЛист) Экспорт Далее
Функция гл8Excel_ПолучитьЛистПоНомеру(РабочаяКнига, НомерЛиста=1, РабочийЛист) Экспорт Далее
Функция гл8Excel_УстановитьКурсорНаЛисте(РабочийЛист, Row=1, Col=1) Экспорт Далее
Функция гл8Excel_ДобавитьКартинкуНаЛист(Excel, РабочийЛист, Row=1, Col=1, Файл) Экспорт Далее
Функция гл8Excel_ПолучитьКоординатыПоследнейЯчейкиОбластиДанныхЛиста(Excel, Row, Col, Лист, ПозиционироватьКурсор=0) Экспорт Далее
Функция гл8Excel_ДобавитьТЗНаЛист(Excel, Лист, ТЗ, НачСтрокаВыводаТЗвExcel=3, КопироватьЗаголовкиКолонок=1, Заголовок="") Экспорт Далее

//========= 1Сv77 Доп. служебн. :
// (c) Venger Alex, Odessa, 2007
Функция гл8ЭтоФайл(Путь) Экспорт Далее
Функция гл8ПолучитьЗначениеАтрибутаФайлаПоКоду(Путь, КодАтрибута) Экспорт Далее



//------------------Определения функций:
// Excel - ссылка на Excel (OLE). Ссылка должна существовать
// Excel=СоздатьОбъект("Excel.Application");
// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Создать новую рабочую книгу с нужным количеством листов
// Параметры:
//   Excel - ссылка на Excel (OLE). Ссылка должна существовать
//   РабочаяКнига - переменная куда передается ссылка на созданную книгу
//   КолвоЛистов - нужное количество листов
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_СоздатьКнигуСНужнымКолвомЛистов(Excel, РабочаяКнига, КолвоЛистов=1) Экспорт
	Перем Res;
	Res=0;
	Если ТипЗначения(Excel)=100 Тогда  //OLE._Application  100	
		Если КолвоЛистов > 0 Тогда
			Res=1;
			//Excel.Visible = 1; // Показать	
			РабочаяКнига = Excel.Workbooks.Add(); // Добавить рабочую книгу
            РабочаяКнига.Activate();
			
			// Удалить все листы, оставить один
			Колво=РабочаяКнига.WorkSheets.Count;
			Для I = 1 По Колво-1 Цикл
				//РабочаяКнига.WorkSheets(I).Select();
				Excel.Application.DisplayAlerts = 0;
				РабочаяКнига.WorkSheets(I).Delete();	
				Excel.Application.DisplayAlerts = 1;
			КонецЦикла;	
			
			// Добавить нужное количество листов
			Для I = 1 По КолвоЛистов-1 Цикл
				РабочаяКнига.WorkSheets().Add();	
			КонецЦикла;
			
			// Переименовываем листы по порядку
			Для I = 1 По КолвоЛистов Цикл
				РабочаяКнига.WorkSheets(I).Name = Строка(I);
			КонецЦикла;			
		КонецЕсли;	
	КонецЕсли;	

	Возврат Res;
КонецФункции // гл8Excel_СоздатьКнигуСНужнымКолвомЛистов
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверить, существует ли лист с заданным номером
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   НомерЛиста - номер листа, который проверяем
// Возвращаемое значение, =1 - Да, =0 - Нет
Функция гл8Excel_ЛистСНомеромСуществует(РабочаяКнига, НомерЛиста=1) Экспорт
	Перем Res;
	Res=0;
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если Число(НомерЛиста) > 0 Тогда
			КолвоЛистов=РабочаяКнига.WorkSheets.Count;
			Если КолвоЛистов >= НомерЛиста Тогда
				Res = 1;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ЛистСНомеромСуществует
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Переименовать лист по номеру листа
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   НомерЛиста - номер листа, который будем переименовывать
//   ИмяЛиста - имя, которое дадим листу
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ПереименоватьЛистПоНомеру(РабочаяКнига, НомерЛиста=1, ИмяЛиста) Экспорт
	Перем Res;
	Res=0;
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если Число(НомерЛиста) > 0 Тогда
			Если ПустаяСтрока(СокрЛП(Строка(ИмяЛиста))) = 0 Тогда
				Если гл8Excel_ЛистСНомеромСуществует(РабочаяКнига, НомерЛиста) = 1 Тогда
					Res=1;
					РабочаяКнига.WorkSheets(Число(НомерЛиста)).Name = СокрЛП(Строка(ИмяЛиста));				
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ПереименоватьЛистПоНомеру
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Проверить, существует ли лист с заданным именем
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   ИмяЛиста - имя листа, который проверяем
// Возвращаемое значение, =1 - Да, =0 - Нет
Функция гл8Excel_ЛистСИменемСуществует(РабочаяКнига, ИмяЛиста) Экспорт
	Перем Res;
	Res=0;
	ИмяЛиста = Строка(СокрЛП(ИмяЛиста));
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если ПустаяСтрока(ИмяЛиста) = 0 Тогда
			КолвоЛистов=РабочаяКнига.WorkSheets.Count;
			Для I = 1 По КолвоЛистов Цикл
				Если Строка(СокрЛП(РабочаяКнига.WorkSheets(I).Name)) = ИмяЛиста Тогда
					Res = 1;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ЛистСИменемСуществует
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Переименовать лист по имени листа
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   ИмяЛиста - имя листа, который будем переименовывать
//   НовоеИмяЛиста - имя, которое дадим листу
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ПереименоватьЛистПоИмени(РабочаяКнига, ИмяЛиста, НовоеИмяЛиста) Экспорт
	Перем Res;
	Res=0;
	ИмяЛиста = Строка(СокрЛП(ИмяЛиста));
	НовоеИмяЛиста = Строка(СокрЛП(НовоеИмяЛиста));
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если ПустаяСтрока(ИмяЛиста) = 0 Тогда
			Если ПустаяСтрока(НовоеИмяЛиста) = 0 Тогда
				Если гл8Excel_ЛистСИменемСуществует(РабочаяКнига, ИмяЛиста) = 1 Тогда
					Res=1;
					РабочаяКнига.WorkSheets(ИмяЛиста).Name = НовоеИмяЛиста;				
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ПереименоватьЛистПоИмени
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Получить ссылку на Worksheet (OLE) по имени листа
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   ИмяЛиста - имя листа, ссылку на который хотим получить
//   РабочийЛист - переменная, куда положим ссылку на лист
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ПолучитьЛистПоИмени(РабочаяКнига, ИмяЛиста, РабочийЛист) Экспорт
	Перем Res;
	Res=0;
	ИмяЛиста = Строка(СокрЛП(ИмяЛиста));
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если ПустаяСтрока(ИмяЛиста) = 0 Тогда
			Если гл8Excel_ЛистСИменемСуществует(РабочаяКнига, ИмяЛиста) = 1 Тогда
				Res=1;
				РабочийЛист = РабочаяКнига.WorkSheets(ИмяЛиста);
				РабочийЛист.Select();
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ПолучитьЛистПоИмени
// ----------------------------------------------------------------------


// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Получить ссылку на Worksheet (OLE) по номеру листа
// Параметры:
//   РабочаяКнига - ссылка на Workbook (OLE). Ссылка должна существовать
//   НомерЛиста - номер листа, ссылку на который хотим получить
//   РабочийЛист - переменная, куда положим ссылку на лист
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ПолучитьЛистПоНомеру(РабочаяКнига, НомерЛиста=1, РабочийЛист) Экспорт
	Перем Res;
	Res=0;
	НомерЛиста = Число(НомерЛиста);
	Если ТипЗначения(РабочаяКнига)=100 Тогда  //OLE._Workbook  100 
		Если НомерЛиста > 0 Тогда
			Если гл8Excel_ЛистСНомеромСуществует(РабочаяКнига, НомерЛиста) = 1 Тогда
				Res=1;
				РабочийЛист = РабочаяКнига.WorkSheets(НомерЛиста);
				РабочийЛист.Select();
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Возврат Res;	
КонецФункции // гл8Excel_ПолучитьЛистПоНомеру
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Установить курсор в нужном месте на листе
// Параметры:
//   РабочийЛист - ссылка на Worksheet (OLE). Ссылка должна существовать
//   Row - номер строки, куда устанавливаем курсор
//   Col - номер столбца, куда устанавливаем курсор
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_УстановитьКурсорНаЛисте(РабочийЛист, Row=1, Col=1) Экспорт
	Перем Res;
	Res=0;
	Row = Число(Row);
	Col = Число(Col);
	Если ТипЗначения(РабочийЛист)=100 Тогда  //OLE._Worksheet  100 
		Если (Row > 0) И (Col > 0) Тогда
			РабочийЛист.Cells(Row, Col).Select();
			Res = 1;
		КонецЕсли;
	КонецЕсли;		
	Возврат Res;	
КонецФункции // гл8Excel_УстановитьКурсорНаЛисте
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Добавить картинку из файла в нужном месте на листе
// Высота строки под картинкой устанавливается равной высоте картинки
// и первая ячейка под картинкой заполняется, чтобы можно было узнать,
// с помощью функции гл8Excel_ПолучитьКоординатыПоследнейЯчейкиОбластиДанныхЛиста
// где конец картинки
// Параметры:
//   Excel - ссылка на Excel (OLE). Ссылка должна существовать
//   РабочийЛист - ссылка на Worksheet (OLE). Ссылка должна существовать
//   Row - номер строки, куда устанавливаем картинку
//   Col - номер столбца, куда устанавливаем картинку
//   Файл - путь к файлу на диске, который добавляем на лист
// Возвращаемое значение, =1 - Ok, =0 - неудачно
Функция гл8Excel_ДобавитьКартинкуНаЛист(Excel, РабочийЛист, Row=1, Col=1, Файл) Экспорт
	Перем Res;
	Res=0;
	Row = Число(Row);
	Col = Число(Col);
	Если ТипЗначения(Excel)=100 Тогда  //OLE._Application  100	
		Если ТипЗначения(РабочийЛист)=100 Тогда  //OLE._Worksheet  100 
			Если (Row > 0) И (Col > 0) Тогда
				гл8Excel_УстановитьКурсорНаЛисте(РабочийЛист, Row, Col);
				Если гл8ЭтоФайл(Файл) = 1 Тогда
					// Вставляем картинку в место, где спозиционирован курсор и выделяем ее
					РабочийЛист.Pictures.Insert(Файл).Select(); 
					// Узнаем высоту картинки, если больше 400, то уменьшаем до 400
		            Если Число(Excel.Application.Selection.ShapeRange.Height())>400 Тогда
						Excel.Application.Selection.ShapeRange.Height=400;
					КонецЕсли; 
					// Узнаем высоту картинки
					PictureHeight=Excel.Application.Selection.ShapeRange.Height(); 
					// Устанавливаем туже высоту, для строки под картинкой
					РабочийЛист.Rows(Row).RowHeight = PictureHeight;
					// Ячейку под картинкой заполняем и форматируем
					РабочийЛист.Cells(Row, Col).Value = "Картинка";
					РабочийЛист.Cells(Row, Col).HorizontalAlignment = (-4108); // По центру
					РабочийЛист.Cells(Row, Col).VerticalAlignment = (-4108); // По центру
					Res = 1;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;		
	Возврат Res;	
КонецФункции // гл8Excel_ДобавитьКартинкуНаЛист
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Определить координаты последней ячейки области данных таблицы Excel для заданного листа
// Параметры :
//   Excel - ссылка на Excel (OLE). Ссылка должна существовать
//   Row,Col   - возвращаемые параметры, соответственно Строка(Row) и Столбец(Col)
//   Лист - ссылка на Worksheet (OLE). Ссылка должна существовать 
//   ПозиционироватьКурсор - если >0,  то курсор устаканится на найденной ячейке, 
//                           если <=0, то останется там же, где и был
// Функция возвращает 1, если все Ok и 0 в противном случае
// Алгоритм взят: (c) Sergey Popov, Usinsk, Komi, 2003, но лист указывается не по номеру, а по ссылке
Функция гл8Excel_ПолучитьКоординатыПоследнейЯчейкиОбластиДанныхЛиста(Excel, Row, Col, Лист, ПозиционироватьКурсор=0) Экспорт
	Перем Res;
	Res=0;
	Row=0;
	Col=0;
    Если ТипЗначения(Excel)=100 Тогда  //OLE._Application  100      	
		Если ТипЗначения(Лист)=100 Тогда  //OLE._Worksheet  100 
            Если ЧИСЛО(ПозиционироватьКурсор)>0 Тогда
                V=ЧИСЛО(Лист.Cells.SpecialCells(11).Select);
                Если V=(-1) Тогда //стандарт OLE
                    Row = Excel.ActiveCell.Row;
                    Col = Excel.ActiveCell.Column;
                    Res=1;
                КонецЕсли;
            Иначе
                V=Лист.Range("A1").SpecialCells(11);
                Если ТипЗначения(V)=100 Тогда  //OLE.Range  100 
                    Row = V.Row;
                    Col = V.Column;
                    Res=1;
                КонецЕсли;
            КонецЕсли;
		КонецЕсли;				
	КонецЕсли;	
	Возврат Res;	
КонецФункции // гл8Excel_ПолучитьКоординатыПоследнейЯчейкиОбластиДанныхЛиста
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// ТаблицаЗначений копируется в Excel.
// Параметры :
//   Excel - ссылка на Excel (OLE). Ссылка должна существовать
//   Лист - ссылка на Worksheet (OLE). Ссылка должна существовать
//   ТЗ - ТаблицаЗначений, которую нужно скопировать в Excel
//   НачСтрокаВыводаТЗвExcel - начальная строка в Excel, с которой будут выводиться строки ТЗ
//   КопироватьЗаголовкиКолонок - если >0, то будут скопированы Заголовки Колонок ТЗ
//   Заголовок - Заголовок, который будет скопирован в Excel перед ТЗ
// Происходит кое-какое форматирование в Excel  
// Заголовок - жирным, шрифтом большим, чем все остальное на 1
// Заголовки колонок - выравнивание по вертикали/горизонтали по центру, жирным, ячейки серого цвета
// После вывода ячейки - автоподбор ширины
// Возвращаемое значение, =1 - Ok, =0 - неудачно
// Алгоритм взят: (c) Sergey Popov, Usinsk, Komi, 2003, но указывается лист, на который слить инфу
// Плюс происходит некоторое форматирование ячеек
Функция гл8Excel_ДобавитьТЗНаЛист(Excel, Лист, ТЗ, НачСтрокаВыводаТЗвExcel=3, КопироватьЗаголовкиКолонок=1, Заголовок="") Экспорт
	Перем Res;
	Перем ЗагКол;
	Res=0;
	Если ТипЗначения(Excel)=100 Тогда  //OLE._Application  100	
		Если ТипЗначения(Лист)=100 Тогда  //OLE._Worksheet  100 
			Если ВРег(СокрЛП(ТипЗначенияСтр(ТЗ)))=ВРег("ТаблицаЗначений") Тогда
				ЗГ= СокрЛП(Заголовок);
				КолвоКол = ТЗ.КоличествоКолонок();
				КолвоСтр = ТЗ.КоличествоСтрок();
				Если КолвоКол>0 Тогда
					Res=1;
					Если ЧИСЛО(НачСтрокаВыводаТЗвExcel)>1 Тогда
						Если СтрДлина(ЗГ)>0 Тогда
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel)-1,1).Value = ЗГ;
							// Форматирование ячеек
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel)-1,1).Font.Bold = 1; // Жирным
							FontSize = Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel)-1,1).Font.Size;
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel)-1,1).Font.Size = FontSize + 1; // Увеличиваем шрифт
						КонецЕсли;
					КонецЕсли;				

					Если ЧИСЛО(КопироватьЗаголовкиКолонок)>0 Тогда
						i=0;
						Пока i<КолвоКол Цикл
							i=i+1;         
							ИдКол=СокрЛП(ТЗ.ПолучитьПараметрыКолонки(ЧИСЛО(i), , , , ЗагКол));
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Value = "'"+ЗагКол;
							// Форматирование ячеек
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).HorizontalAlignment = (-4108); // По центру
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).VerticalAlignment = (-4108); // По центру
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Font.Bold = 1; // Жирным
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Interior.ColorIndex = 15; // Серый цвет
							Лист.Cells(ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Interior.Pattern = 1; // Залить цветом
							Лист.Columns(i).EntireColumn.AutoFit(); // Автоподбор ширины колонки
						КонецЦикла;
					КонецЕсли;

					Если КолвоСтр>0 Тогда
						j=0;
						Пока j<КолвоСтр Цикл
							j=j+1;         
							i=0;
							Пока i<КолвоКол Цикл
								i=i+1;         
								ИдКол=СокрЛП(ТЗ.ПолучитьПараметрыКолонки(ЧИСЛО(i)));
								V=СокрЛП(ТЗ.ПолучитьЗначение(j,ИдКол));
								Лист.Cells(j+ЧИСЛО(НачСтрокаВыводаТЗвExcel),i).Value = "'"+V;
								// Форматирование ячеек
								Лист.Columns(i).EntireColumn.AutoFit(); // Автоподбор ширины колонки
							КонецЦикла;
						КонецЦикла;
					КонецЕсли;
			КонецЕсли;      				
			КонецЕсли;      
		КонецЕсли;      
	КонецЕсли;      
	Возврат Res;
КонецФункции // гл8Excel_ДобавитьТЗНаЛист
// ----------------------------------------------------------------------


//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Возвращает 1 - если Путь - это файл, 0 - в противном случае
// Если файл не существует возвращает -1
Функция гл8ЭтоФайл(Путь) Экспорт
	// 22.10.2007 	
	Перем Res; // Возвращаемое значение, число
	Перем ЧтоЭто; // Число, 1 - каталог, 0 - файл, -1 - не существует
	ЧтоЭто = гл8ПолучитьЗначениеАтрибутаФайлаПоКоду(Путь, 4);
	Если ЧтоЭто = 1 Тогда
		Res = 0;
	ИначеЕсли ЧтоЭто = 0 Тогда
		Res = 1;
	ИначеЕсли ЧтоЭто = -1 Тогда	
		Res = ЧтоЭто;
	КонецЕсли;
	Возврат Res;
КонецФункции	// гл8ЭтоФайл
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// (c) Venger Alex, Odessa, 2007
// Возвращает значение заданного атрибута файла по коду, если файла нет возвращает -1
// Путь - путь к файлу или папке
// КодАтрибута может принимать след. значения:
// 1 - файл только для чтения, функция возвращает 1, если да, 0 - если нет
// 2 - скрытый файл, функция возвращает 1, если да, 0 - если нет
// 3 - системный файл, функция возвращает 1, если да, 0 - если нет
// 4 - каталог, функция возвращает 1, если да, 0 - если нет
// 5 - архивный файл, функция возвращает 1, если да, 0 - если нет
// 6 - обычный файл (все другие атрибуты не установлены), функция возвращает 1, если да, 0 - если нет
// 7 - временный файл, функция возвращает 1, если да, 0 - если нет
// 8 - файл, сжатый каким-либо архиватором, функция возвращает 1, если да, 0 - если нет
// 9 - нет доступа к файлу, функция возвращает 1, если да, 0 - если нет
Функция гл8ПолучитьЗначениеАтрибутаФайлаПоКоду(Путь, КодАтрибута) Экспорт
	// 22.10.2007 	
	Перем Res; // Возвращаемое значение, число - значение конкретного атрибута
	Перем FileSize, Attrb, TimeCreate, TimeLastOpen, TimeLastWrite, FullFileName;
	Если ФС.СуществуетФайл(Путь) = 1 Тогда
		ФС.АтрибутыФайла(Путь, FileSize, Attrb, TimeCreate, TimeLastOpen, TimeLastWrite, FullFileName);
		Res = Число(Сред(Attrb, Число(КодАтрибута), 1));
	Иначе
		Res = -1;
	КонецЕсли;
	Возврат Res;
КонецФункции // гл8ПолучитьЗначениеАтрибутаФайлаПоКоду
//----------------------------------------------------------------------
98

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

Комментарии
Избранное Подписка Сортировка: Древо
1. msadu 27.12.08 17:43 Сейчас в теме
Спасибо большое, очень помогло.
2. JohnyDeath 294 27.12.08 23:21 Сейчас в теме
А если всё это дело обернуть в класс... ;)
3. Enya_06 14.04.09 05:53 Сейчас в теме
4. AS108 20.05.09 02:54 Сейчас в теме
Спасибо ещё и ещё раз огромное за помощь начинающим!
5. Znef 02.06.09 10:48 Сейчас в теме
6. Olegpod 14.08.09 14:45 Сейчас в теме
Очень хотелось бы аналог для WORD 2003
7. shavminator 18.10.09 14:18 Сейчас в теме
Боооолшое спааасибо!!! ;)
8. volcanic 4 01.12.09 17:44 Сейчас в теме
Большое спасибо! очень пригодилось... :D
9. unknown181538 24 29.11.10 18:41 Сейчас в теме
В процедуре гл8Excel_ДобавитьТЗНаЛист()
AutoFit тормозит сильно.
Как правильно вынести автоподбор из цикла?
10. yuyu1 5 13.01.12 00:28 Сейчас в теме
Не совсем по теме но!

Кто-нибудь может подсказать, как раздвинуть строки с сохранением формата ole-командами?
11. selesta 16 29.03.12 23:17 Сейчас в теме
думаю в добавок не хватает функции типа глПолучитьExcel или глСоздатьExcel, которая бы проверяла его наличие на компе и возвращала сам оле обьект Excel, используемых в этих функциях.
Автору спасибо!
12. pt_olga 62 04.06.12 13:57 Сейчас в теме
а для ленивых всё бы это запихнуть во внешнюю обработку... никак руки не дойдут создать свою универсальную обработину для 1С77 и Эксель :(
13. SAshock 18.03.14 15:16 Сейчас в теме
Пытаюсь в прайс листе вставить картинку, не получается (((, помогите плиз

РабочийЛист.Cells(Row, Col).Select();
{Глобальный модуль(588)}: Microsoft Office Excel: Метод Select из класса Range завершен неверно
14. venger 2086 20.03.14 20:40 Сейчас в теме
(13) А какие значения переменных Row, Col, РабочийЛист в отладчике смотрели? Какая версия офиса?
Оставьте свое сообщение

См. также

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

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

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

14.10.2019    569    ksnik    0       

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

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

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

16.05.2016    8192    kudenzov    3       

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

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

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

12.03.2016    15487    CheBurator    18       

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

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

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

10.03.2016    48380    Serginio    33       

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

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

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

09.03.2016    25410    Serginio    22       

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

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

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

27.01.2016    62831    Serginio    104       

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

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

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

16.12.2015    20007    Palmer1976    3       

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

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

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

23.11.2015    13959    etmarket    14       

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

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

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

24.09.2015    13788    Anzhey    13       

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

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

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

05.07.2015    14799    json    1       

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

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

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

20.06.2015    10046    gimalaj    3       

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

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

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

16.01.2015    70919    shmellevich    35       

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

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

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

20.08.2014    6000    hvv2002    0       

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

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

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

24.07.2014    18749    tomvlad    5       

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

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

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

03.03.2014    15331    kompas-dm    5       

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

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

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

15.07.2013    5550    a.o.popova    10       

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

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

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

11.04.2013    13112    Dima_    8       

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

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

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

22.03.2013    11065    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    22201    serg_gres    6       

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

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

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

08.08.2012    14133    www2000    4       

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

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

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

02.07.2012    14242    maxpiter    62       

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

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

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

28.04.2012    15872    Valerich    31       

v77. Робот 43

Инструменты и обработки no Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Исполнитель Робот. Учебное пособие по программированию для детей дошкольного возраста. Без внешних компонент.

09.04.2012    10208    54    item    18       

Запуск внешней обработки по расписанию v7.7 39

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

Неоднократно возникали задачи организовать, например ежедневную выгрузку и отправку отчетов по эл.почте, и вот…

20.03.2012    39508    Yury1001    17       

v77. Закладки в многоуровневом справочнике аля Total Commander 28

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

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

09.03.2012    8820    44    item    17       

v77. Паинт 53

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

v77. 1С:Паинт :) Такая вот игрушка. Без внешних компонент.

06.03.2012    11915    81    item    38       

Определение формата ячейки Excel из 1С 9

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

Перенося данные из таблиц Эксель в 1С, я заметил что некоторые ячейки с содержимым вида "50*10" в 1С переносятся не в таком же виде, а просто, например, цифрой 50. Все дело в формате ячейки!

21.01.2012    17130    griff19    8       

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

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

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

12.01.2012    13201    ShEvOvIcH    18       

Регистрация текста окна сообщений 4

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

Для контроля работы пользователей потребовалось записывать текст окна сообщений в файл. Получился простейший механизм регистрации лог-файла. Удержать роста папки "Temp", в качестве рекомендации, может использование bat-файла, который будет чистить или архивировать получаемые логи. Таких батников в инете полным-полно. P.S. Особо по форуму не смотрел, может, есть уже такое.

28.11.2011    6393    sdin101    9       

7.7.: Готовим md-файл для публикации. В картинках. 46

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

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

14.09.2011    15055    Арчибальд    21       

Учет доверенностей 6

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

В расходных документах есть необходимость проставления доверенности. Но заносить каждый раз одни и те же данные бывает утомительно. особенно при больших оборотах.

08.09.2011    9568    Sykoku    8       

Выбор Движений документа по конкретному регистру, с помощью прямого запроса 0

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

Чтобы узнать какие движения сделал документ по конкретному регистру, в моем случае это регистр "ОстаткиПоСчетам" (оборотный), была написана следующая функция в глобальном модуле. Работает только для SQL версии и установленной внешнй компонентой 1С++!

26.05.2011    10541    Vix    4       

Прямой запрос на выборку подчиненных документов 6

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

Иногда необходимо получить список или таблицу документов, подчиненных выбранному. Для этого в глобальном модуле была написана функция с прямым запросом на выборку подчиненных документов. Работает только в SQL версии и при установленной внешней компоненте 1С++ !

26.05.2011    16861    Vix    5       

Некоторые ошибки и «проблемные» особенности реализации встроенного языка платформы 1С:Предприятие 7.7 96

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

Описание некоторых ошибок и особенностей реализации встроенного языка, которые создают «подводные камни» при программировании, а также возможных способов обхода этих проблем из собственного опыта работы на платформе 1С:Предприятие 7.7.

08.04.2011    42048    AleksR    102       

Монопольно ли запущена база 7.7 для SQL. Снятие single user в sql 9

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

T-SQL скрипт, позволяющий определить монопольно ли запущена база на сервере SQL, а также перевести базу в multi user

11.03.2011    16433    d0dger    12       

Ошибки формата файла 2-НДФЛ в ЗиК релиз 306 100

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Россия НУ Зарплата НДФЛ Бесплатно (free) Практика программирования

Ошибки 2НДФЛ в релизе: файл формируется как для ЮЛ, даже если работодатель ИП, опечатка "Отчетсвто", и указание имени файла с расширением. Нужно подправить отчет "СправкиПоНДФЛ".

02.02.2011    17131    1st    6       

ЗиК 305 ЗиК 306 Больничный лист. 107

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

Для переходящих больничных листов за счет работодателя оплачивается 2 дня, а не 3. Первоисточник: http://forums.kuban.ru/forum/viewtopi...669&page=2

25.01.2011    12221    Cvetic    26       

Тюнинг Бух 7.7.: Микрографики в ТЧ документа. 49

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

Как вставить в документ что-то вроде диаграммы распределения сумм…

25.01.2011    18197    Арчибальд    18