Google maps : вывод точек на карту и режим панорамы В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают!
Для клиента нужно было сделать вывод объектов на карту
С возможностью просмотра панорамы:
Основной HTML код карты хранится в макете:
Код VBS <!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=8">
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0px; padding: 0px }
#map { height: 100% }
</style>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?v=3.9&sensor=false"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://www.sitedev.by/lab/markerclusterer/markerclusterer.js"></script>
<script type="text/javascript">
var latlng;
var markers = [];
var myMap;
var index = 1;
var directionsDisplay ;
var directionsService = new google.maps.DirectionsService();
var infoWindow = new google.maps.InfoWindow;
var clusterer, mcOptions;
var trafficLayer = new google.maps.TrafficLayer();
var trafficOn = false;
var noclick = false;
var PointArray = [];
var polygons = [];
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
latlng = new google.maps.LatLng(55.75, 37.62);
var myOptions = {
zoom: 12,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
disableDoubleClickZoom: true,
panControl: true,
zoomControl: true,
mapTypeControl: true,
scaleControl: true,
streetViewControl: true,
overviewMapControl: true
};
myMap = new google.maps.Map(document.getElementById("map"),
myOptions);
google.maps.event.addListener(myMap, 'dragend', function() {
noclick = true;
document.getElementById('CoordX').value = "0";
document.getElementById('CoordY').value = "0";
});
google.maps.event.addListener(myMap, 'click', function(event) {
infoWindow.close();
if (!noclick) {
addMarker(event.latLng);
}else{
noclick = false;
}
});
mcOptions = {gridSize: 3, maxZoom: 15};
clusterer = new MarkerClusterer(myMap, markers, mcOptions);
//отображение кнопки управления трафиком - все спер с примера, только подцепил свою функцию
var trafficControlDiv = document.createElement('div');
trafficControlDiv.style.padding = '5px';
// Set CSS for the control border
var controlUI = document.createElement('div');
controlUI.style.backgroundColor = 'white';
controlUI.style.borderStyle = 'solid';
controlUI.style.borderWidth = '2px';
controlUI.style.cursor = 'pointer';
controlUI.style.textAlign = 'center';
controlUI.title = 'нажмите для вкл/выкл трафика';
trafficControlDiv.appendChild(controlUI);
// Set CSS for the control interior
var controlText = document.createElement('div');
controlText.style.fontFamily = 'Arial,sans-serif';
controlText.style.fontSize = '12px';
controlText.style.paddingLeft = '4px';
controlText.style.paddingRight = '4px';
controlText.innerHTML = '<b>Трафик</b>';
controlUI.appendChild(controlText);
google.maps.event.addDomListener(controlUI, 'click', function (){
if (!trafficOn){
trafficOn = true;
trafficLayer.setMap(myMap);
}else{
trafficOn = false;
trafficLayer.setMap(null);
}
});
trafficControlDiv.index = 1;
myMap.controls[google.maps.ControlPosition.TOP_RIGHT].push(trafficControlDiv);
};
//добавляем маркер и отправляем в массив
function addMarker(location) {
marker = new google.maps.Marker({
position: location,
map: myMap,
title: 'Точка'+index
});
infoWindow.setContent(marker.title);
infoWindow.open(myMap, marker);
google.maps.event.addListener(marker, 'click', function(){
var mark = this;
var latLng = mark.getPosition();
infoWindow.setContent(mark.title);
infoWindow.open(myMap, mark);});
markers.push(marker);
index++;
document.getElementById('CoordX').value = location.lat();
document.getElementById('CoordY').value = location.lng();
}
function calcRoute(options) {
//вытягиваем из массива переданных параметров значения
//и преобразуем их в формат LatLng
var option1 = options[0];//начальная точка
var option2 = options[1];//промежуточные точки
var option3 = options[2];//конечная точка
var start = new google.maps.LatLng(option1[0], option1[1]); //первый
var end = new google.maps.LatLng(option3[0], option3[1]); //последний
//получаем транзитные точки
var waypts = [];
if(option2.length > 0) {
for(var i = 0, l = option2.length; i < l; i++) {
temp = option2[i];
Qcoord = new google.maps.LatLng(temp[0], temp[1])
waypts.push({
location:Qcoord,
stopover:true
});
}
}
//return;
var request = {
origin: start,
destination: end,
waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay .setMap(myMap);
directionsDisplay .setDirections(response);
var total = 0;
var myroute = response.routes[0];
for (i = 0; i < myroute.legs.length; i++) {
total += myroute.legs[i].distance.value;
}
total = total / 1000;
document.getElementById('RouteInfo').value = "Длина маршрута - " + total + "км.";
//генерация события для перехвата в 1С
var evt = document.createEventObject();
document.body.fireEvent('ondatasetcomplete', evt);
}else{
alert(status);
}
});
}
function Reset(){
directionsDisplay .setMap(null);
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(null);
}
markers = [];
index = 1;
//обнуляем кластер маркеров
clusterer.clearMarkers();
for (var i = 0; i < polygons.length; i++) {
polygons[i].setMap(null);
}
polygons = [];
PointArray = [];
}
function FindAdres(Adres){
Reset();
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': Adres}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
latlng = results[0].geometry.location;
myMap.panTo(latlng);
marker = new google.maps.Marker({
map: myMap,
position: latlng,
animation: google.maps.Animation.BOUNCE,
title:Adres
});
markers.push(marker);
infoWindow.setContent(marker.title);
infoWindow.open(myMap, marker);
} else {
alert("Ничего не найдено: " + status);
}
});
}
function ReverseSearchAdres(CoordX, CoordY, Adres){
Reset();
latlng = new google.maps.LatLng(CoordX, CoordY);
myMap.panTo(latlng);
var marker = new google.maps.Marker({
map: myMap,
position: latlng,
animation: google.maps.Animation.BOUNCE,
title:Adres
});
markers.push(marker);
infoWindow.setContent(marker.title);
infoWindow.open(myMap, marker);
}
function addToPointArray(CoordX, CoordY, ID, IconT, Text){
var latLng = new google.maps.LatLng(CoordX, CoordY);
var point = new google.maps.Marker({'position': latLng, title: Text, icon: IconT});
PointArray.push(point);
}
function drawCluster(){
clusterer.addMarkers(PointArray);
//myMap.geoObjects.add(clusterer);
}
function createPolygon(ArrayPoint, Name, color) {
//создаем массив координат вершин многоугольника
var paths = [];
for(var i = 0, l = ArrayPoint.length; i < l; i++) {
var temp = ArrayPoint[i];
Qcoord = new google.maps.LatLng(temp[0], temp[1])
paths.push(Qcoord);
};
// Создаем многоугольник
myPolygon = new google.maps.Polygon({
paths: paths,
strokeColor: color,
strokeOpacity: 0.6,
strokeWeight: 5,
fillColor: "#0000FF"
});
myPolygon.setMap(myMap);
polygons.push(myPolygon);
}
function WebClientClick() {
//очистка перед кликом координат, иначе после клика в упр. формах идет считывание координат
document.getElementById('CoordX').value = "0";
document.getElementById('CoordY').value = "0";
var WebClientOperation = document.getElementById("WebClientOperation").value;
//alert(WebClientOperation);
switch (WebClientOperation) {
case "0": // ничего не делаем
var a = 1;
default: // запускаем функцию
eval(WebClientOperation);
}
document.getElementById('WebClientOperation').value = "0";
}
</script>
</head>
<body onload="initialize()">
<div id="map" style="width:100%; height:100%"></div>
<input type="hidden" id="CoordX" name="CoordX" value="0"></input>
<input type="hidden" id="CoordY" name="CoordY" value="0"></input>
<input type="hidden" id="RouteInfo" name="RouteInfo" value=""></input>
<input type="hidden" id="WebClientOperation" name="WebClientOperation" value="0"></input>
<input type="hidden" id="WebClient" name="WebClient" onclick="WebClientClick();"></input>
</body>
</html>
Код вывода карты:
Код 1C v 8.х Процедура ИнициализироватьКарту()
ПутьКФайлу = КаталогВременныхФайлов()+"Карта.html";
Ф = новый Файл(ПутьКФайлу);
Если Ф.Существует() Тогда
УдалитьФайлы(ПутьКФайлу);
КонецЕсли;
Т = новый ТекстовыйДокумент;
ТД = ЭтотОбъект.ПолучитьМакет("МакетГугл");
Т.УстановитьТекст(ТД.ПолучитьТекст());
Т.Записать(ПутьКФайлу);
ЭлементыФормы.Эксплорер.Перейти(ПутьКФайлу);
КонецПроцедуры
Процедура ОчиститьКарту()
ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("Reset()");
КонецПроцедуры
//к сожалению, другого спососба получить "внутрь 1С" информацию о действии пользователя на карте я не сумел
//действие пользователя на карте изменяет поле HTML-документа, но не вызывает никакого события в 1с-ке
// поэтому через обработчикОжидания делаю непрерывный опрос карты
Процедура ПриОткрытии()
ИнициализироватьКарту();
КонецПроцедуры
// вывод точек на карту
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
ОчиститьКарту();
СписокВидов = Новый СписокЗначений;
Для Каждого стр из ВыборВывода Цикл
если стр.пометка тогда СписокВидов.Добавить(стр.наименование); КонецЕсли;
КонецЦикла;
табАдресов.Очистить();
табАдресов = получитьтабАдресов(СписокВидов);
табУникальныхАдресов = табАдресов.скопировать();
табУникальныхАдресов.свернуть("Уник");
тзДанных = табАдресов.скопировать();
табАдресов.очистить();
Для Каждого стр из табУникальныхАдресов Цикл
Отбор = Новый Структура();
Отбор.Вставить("Уник",стр.Уник);
Строки = тзДанных.НайтиСтроки(Отбор);
НовСтр = табАдресов.добавить();
НовСтр.уник = стр.уник;
Если Строки.Количество() > 0 Тогда
для Каждого тздстр из Строки Цикл
НовСтр.Адрес = тздстр.Адрес;
НовСтр.КД = тздстр.КД;
НовСтр.КШ = тздстр.КШ;
НовСтр.ВидОбъекта = тздстр.ВидОбъекта;
НовСтр.Наименование=Строка(НовСтр.Наименование)+Строка(тздстр.Наименование)+"; ";
КонецЦикла;
КонецЕсли;
КонецЦикла;
ЭлементыФормы.табАдресов.СоздатьКолонки();
ВыборМасштаба = "50%";
ВыборРегиона = "Москва";
ЭлементыФормы.Надпись24.Заголовок = "Точек: "+Строка(табАдресов.количество());
Кол = табАдресов.Количество();
Индекс = 0;
Для Каждого ТекСтрока Из табАдресов Цикл Индекс = Индекс + 1; Если НЕ ЗначениеЗаполнено(ТекСтрока.КД) тогда Продолжить; КонецЕсли;
Широта = формат(ТекСтрока.КШ, "ЧРД=.");
Долгота = формат(ТекСтрока.КД, "ЧРД=.");
СодержимоеТочки = СокрЛП(ТекСтрока.ВидОбъекта)+": "+ СокрЛП(ТекСтрока.адрес); //опять же можно вставить свое название
Попытка
ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("addToPointArray(" + Широта + "," + Долгота + ", '" + Строка(Индекс) + "', '" + СокрЛП(ТекСтрока.ВидОбъекта.ПутьКИконке)+ "', """ + СодержимоеТочки + """);");
Исключение
Сообщить("addToPointArray(" + Широта + "," + Долгота + ", '" + Строка(Индекс) + "', '" + СокрЛП(ТекСтрока.ВидОбъекта.ПутьКИконке)+ "', """ + СодержимоеТочки + """);",СтатусСообщения.Внимание);
КонецПопытки;
Состояние("Вывожу на карту " + Индекс + " из " + кол);
КонецЦикла;
ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("drawCluster();");
КонецПроцедуры
Вырванная из конфигурации обработка GMaps.rar
Можно ее использовать как макет для создания обработки под свои требования.
Пример автоматизации в котором это использовалось.
Категория:
Географическая схема Как в 1С проложить маршрут используя GoogleMaps API V3 Клиенты частенько просят настроить отображение маршрутов перемещения по разным адресам в 1С, например для курьеров и т.д.
В примере описан способ отражения карт GoogleMaps в 1С:
Код 1C v 8.2 УП Для Каждого Стр Из НаВходе Цикл
нСтр = ПроверкаСовпадений.Добавить();
нСтр.Адрес = Стр.Адрес;
нСтр.Контрагент = Стр.Контрагент;
//Если адрес начальный или конечный - пропускаем
Если Стр.НомерСтроки = 1 или Стр.НомерСтроки = НаВходе.Количество() Тогда
Продолжить;
КонецЕсли;
опАдреса = опАдреса + "
|waypts.push({location:'" + нСтр.Адрес + "',stopover:true});";
КонецЦикла;
//Подставляем параметры в макет "Карта"
опМаршрут = ПолучитьМакет("Карта").ПолучитьТекст();
опМаршрут = СтрЗаменить(опМаршрут,"[=-опАдреса-=]",опАдреса);
опМаршрут = СтрЗаменить(опМаршрут,"[=-опНач-=]",опНач);
опМаршрут = СтрЗаменить(опМаршрут,"[=-опКон-=]",опКон);
ЭлементыФормы.Карта.УстановитьТекст(опМаршрут);
Скрипт отображения из макета Карта (выделила как VBS, но по факту это HTML ):
Код VBS <HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type></META>
<META name=viewport content="initial-scale=1.0, user-scalable=no"></META>
<STYLE type=text/css>HTML {
HEIGHT: 100%
}
BODY {
HEIGHT: 100%; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; MARGIN: 0px; PADDING-RIGHT: 0px
}
#map_canvas {
HEIGHT: 100%
}
</STYLE>
<SCRIPT type=text/javascript src="http://maps.google.com/maps/api/js?sensor=false">
</SCRIPT>
<SCRIPT type=text/javascript>
var directionDisplay ;
var directionsService = new google.maps.DirectionsService();
var map;
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
var chicago = new google.maps.LatLng(55.81234, 37.664425);
var myOptions = {
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: chicago
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
directionsDisplay .setMap(map);
calcRoute();
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
}
function calcRoute() {
var start = "[=-опНач-=]";
var end = "[=-опКон-=]";
var waypts = [];
var checkboxArray = document.getElementById("waypoints");
[=-опАдреса-=]
var request = {
origin: start,
destination: end,
waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay .setDirections(response);
var route = response.routes[0];
var summaryPanel = document.getElementById("directions_panel");
summaryPanel.innerHTML = "";
// For each route, display summary information.
for (var i = 0; i < route.legs.length; i++) {
var routeSegment = i+1;
summaryPanel.innerHTML += 'опЗаполнитьМаршрут("' + String.fromCharCode(routeSegment+65) + '","' + String.fromCharCode(route.legs.length+65) + '","' + route.legs[i].start_address + '","' + route.legs[i].end_address + '","' + route.legs[i].distance.text + '");';
}
}
});
}
</SCRIPT>
<META name=GENERATOR content="MSHTML 11.00.9600.17239"></META><BASE href="v8config://c924c032-2565-45e2-b49f-9a30494bc69f/mdobject/ida329e781-b8d1-431e-9e2f-8321c1a691fc/8eb4fad1-1fa6-403e-970f-2c12dbb43e23"></BASE></HEAD>
<BODY onload=initialize()>
<DIV id=map_canvas style="HEIGHT: 100%; WIDTH: 100%"></DIV>
<DIV id=directions_panel style="MARGIN: 20px; DISPLAY : none; BACKGROUND-COLOR: #ffee77"></DIV></BODY></HTML>
Файл отображающий пример работы GoogleMaps API V3 - Прокладываем маршрут в 1С
Скрин это обработки
Категория:
HTML, JS, VML Как выгрузить Таблицу значение в файл Excel? Код 1C v 8.х Процедура СохранитьТаблицуВФайлExcel(Таблица, ПолноеИмяФайла="", ОткрыватьДиалогВыбораФайла=Истина, ВыгружаемыеКолонки="") Экспорт
Если ПустаяСтрока(ПолноеИмяФайла) ИЛИ ОткрыватьДиалогВыбораФайла Тогда
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Сохранение документа Excel";
Диалог.Фильтр = "Документ Excel (*.xls)|*.xls";
Диалог.Расширение = "xls";
Диалог.ПолноеИмяФайла = ПолноеИмяФайла;
Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойКаталогФайлов");
Если (Диалог.Выбрать()) И (НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла)) Тогда
ПолноеИмяФайла = Диалог.ПолноеИмяФайла;
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
ФайлНаДиске = Новый Файл(ПолноеИмяФайла);
Попытка
// Загрузка Microsoft Excel
Состояние("Выгрузка данных из 1С в Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Книга = ExcelПриложение.WorkBooks.Add();
Лист = Книга.WorkSheets(1);
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel."
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Если ПустаяСтрока(ВыгружаемыеКолонки) Тогда
ТаблицаВыгрузки = Таблица.Скопировать();
Иначе
ТаблицаВыгрузки = Таблица.Скопировать(, ВыгружаемыеКолонки);
КонецЕсли;
Для Кол = 0 По ТаблицаВыгрузки.Колонки.Количество()-1 Цикл
Лист.Cells(1, Кол + 1).Value = ТаблицаВыгрузки.Колонки[Кол].Заголовок;
КонецЦикла;
Попытка
Для Стр = 0 По ТаблицаВыгрузки.Количество()-1 Цикл
Для Кол = 0 По ТаблицаВыгрузки.Колонки.Количество()-1 Цикл
Если ТипЗнч(ТаблицаВыгрузки[Стр][Кол]) = Тип("Число") Тогда
// Установним формат для типа Число
//Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "0,00";
Лист.Cells(Стр + 2, Кол + 1).Value = ТаблицаВыгрузки[Стр][Кол];
Иначе
// Для всех других типов установим формат "Текстовый"
//Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "@";
Лист.Cells(Стр + 2, Кол + 1).Value = Строка(ТаблицаВыгрузки[Стр][Кол]);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ExcelПриложение.Display Alerts = False;
Книга.SaveAs(ПолноеИмяФайла);
ExcelПриложение.ActiveWorkbook.Close();
ExcelПриложение.Quit();
Сообщить("Файл выгружен успешно: " + ПолноеИмяФайла);
Исключение
Сообщить("Ошибка записи данных файла :" + ПолноеИмяФайла);
Сообщить(ОписаниеОшибки());
Попытка
ExcelПриложение.Quit();
Исключение
КонецПопытки;
КонецПопытки;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Как получить информацию о изображении (высота, ширина, размер)? Платформа 1С версии 8.х предоставляет слабые возможности по работе с изображением.
Для работы с изображениями можно использовать библиотеку Windows Image Acquisition Automation Library. Библиотеку с описанием можно
скачать здесь (в Windows 7 уже входит в состав дистриботива).
После того, как загрузили архив, распакуйте. Саму библиотеку
wiaaut.dl l придется зарегистрировать командой
regsvr32 . После регистрации доступен
COM-объект "WIA.ImageFile" . Приведем пример работы:
Код 1C v 8.х // Выбор файла
СтандартнаяОбработка = Ложь;
РежимДиалога = РежимДиалогаВыбораФайла.Открытие;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога);
ДиалогВыбораФайла.МножественныйВыбор = Ложь;
ДиалогВыбораФайла.Заголовок = "Задайте имя файла";
ДиалогВыбораФайла.ПолноеИмяФайла = ПолеИмениФайла;
ДиалогВыбораФайла.Фильтр = "Все файлы картинок|*.jpg;*.jpeg;*.gif;*.bmp;*.ico;*.png;*.tif;*.*";
Если НЕ ДиалогВыбораФайла.Выбрать() Тогда
// Если не выбран файл
Возврат;
КонецЕсли;
ПолеИмениФайла = ДиалогВыбораФайла.ПолноеИмяФайла;
// Создаем объект
ФайлКартинка = Новый COMОбъект("WIA.ImageFile");
ФайлКартинка.LoadFile(ПолеИмениФайла);
Сообщить("Расширение файла: " + ФайлКартинка.FileExtension);
Сообщить("Высота: " + ФайлКартинка.Height);
Сообщить("Ширина: " + ФайлКартинка.Width);
Сообщить("Размер: " + Окр(ФайлКартинка.FileData.Count / 1024, 2) + " Кб");
Библиотека была протестирована на самых распространенных форматах файлов-картинок: jpeg, gif, bmp, ico, png, tif.
Здесь можно скачать готовую обработку:
Скачивать файлы может только зарегистрированный пользователь!
Помимо данных о картинке, библиотека может многое другое: изменить размер изображения, повернуть, получить изображение со сканера и прочее. Надеюсь, мы еще вернемся к этой библиотеке.
Источник Категория:
COM-объекты, WMI, WSH Google maps, поиск оптимального маршрута В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута:
* Географические координаты объектов, которые хранятся в базе;
* Координаты начальной и конечной точек маршрута.
В процессе решения задачи был использован
пример API Google maps, так же само
описание использование массива точек для построения оптимального маршрута.
Для построения оптимального маршрута, необходимо сформировать HTML-код, который будет показан в элементе управления вида «Поле HTML документа».
Во время формирования HTML-кода в него пишутся координаты объектов, которые надо посетить. В нашем случае это строковая переменная МассивОбъектовПосещения, в которой храниться массив объектов посещения. Каждый объект посещения это элемент, который заполняется по примеру: ['Объект посещения', '49.438022, 32.069693'] (первый элемент – описание объекта, второй – географические координаты объекта). Переменная МассивОбъектовПосещения в коде инициализируется следующим образом:
Код 1C v 8.х Сч = 0; МассивОбъектовПосещения = "";
Для Каждого ТекСтрока Из ТаблицаОбъектов Цикл
МассивОбъектовПосещения = МассивОбъектовПосещения + "
| ['" + ?(ОтображатьПодчиненных, ТекСтрока.Ответственный, "") + ТекСтрока.Наименование + "', '"
+ СтрЗаменить(Строка(ТекСтрока.Широта),",",".") + ", "+ СтрЗаменить(Строка(ТекСтрока.Долгота),",",".") +"'],";
Сч = Сч + 1;
КонецЦикла;
МассивОбъектовПосещения = Лев(МассивОбъектовПосещения, СтрДлина(МассивОбъектовПосещения)-1);
Для построения оптимального маршрута используется вызов функции directionsService.route(), в которую необходимо передать параметры поиска. Параметры передаются следующие:
* origin – точка, с которой будет начинаться маршрут
* destination – точка, в которой будет заканчиваться маршрут
* waypoints – массив точек, которые надо обойти
* optimizeWaypoints – признак возможности оптимизации точек в массиве. В нашем случае необходимо определить его в true, тогда для алгоритма будет не важен порядок обхода точек.
* travelMode – признак того, какой вид транспорта используется. Мы ищем маршрут для автомобиля, поэтому необходимо установить значение google.maps.TravelMode.DRIVING.
После вызова функции directionsService.route() необходимо проверить результат построения (status == google.maps.DirectionsStatus.OK). Затем в цикле обходим составляющие маршрута и выводим информацию про маршрут в правую панель. В коде, приведенном ниже, цикл обхода: for (var i = 0; i < route.legs.length; i++) {}. Инициализация строковой переменной СтраницаХТМЛ, которая отображается в элементе управления с видом «Поле HTML документа», происходит следующим образом:
Код 1C v 8.х СтраницаХТМЛ =
"var directionDisplay ;
| var directionsService = new google.maps.DirectionsService();
| var map;
| var myarr = [
| " + МассивОбъектовПосещения + "
| ];
| function initialize() {
| directionsDisplay = new google.maps.DirectionsRenderer();
| var myOptions = {mapTypeId: google.maps.MapTypeId.ROADMAP}
| map = new google.maps.Map(document.getElementById(""map_canvas""), myOptions);
| directionsDisplay .setMap(map);
| calcRoute();
| }
| function calcRoute() {
| var waypts = [];
| for (var i = 0; i < myarr.length; i++) {
| waypts.push({
| location:myarr[i][1],
| stopover:true});
| }
| var request = {
| origin: '" + НачалоМаршрута + "',
| destination: '" + КонецМаршрута + "',
| waypoints: waypts,
| optimizeWaypoints: true,
| travelMode: google.maps.DirectionsTravelMode.DRIVING
| };
| directionsService.route(request, function(response, status) {
| if (status == google.maps.DirectionsStatus.OK) {
| directionsDisplay .setDirections(response);
| var route = response.routes[0];
| var summaryPanel = document.getElementById(""directions_panel"");
| summaryPanel.innerHTML = """";
| var summaryDistance = 0;
| // For each route, display summary information.
| for (var i = 0; i < route.legs.length; i++) {
| var routeSegment = i + 1;
| summaryPanel.innerHTML += ""Маршрут: "" + routeSegment;
| summaryPanel.innerHTML += route.legs[i].start_address + "" to "";
| summaryPanel.innerHTML += route.legs[i].end_address;
| summaryPanel.innerHTML += route.legs[i].distance.text;
| summaryDistance += parseFloat(route.legs[i].distance.value);
| }
| summaryPanel.innerHTML += ""Общая длинна маршрута: "";
| summaryPanel.innerHTML += summaryDistance;
| }
| });
| }
| initialize();
Андрей Данилюк Категория:
COM-объекты, WMI, WSH Быстрая загрузка данных большого размера файла Excel в многомерный Массив Код 1C v 8.х // OldthiefXXX
Перем СерверExcel;
Процедура КнопкаВыполнитьНажатие(Кнопка)
ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС);
КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count;
КоличествоКолонокДанных=ФайлХЛС.ActiveSheet.UsedRange.Columns.Count;
Состояние("Загрузка в память данных ведомости...");
ExcelЛист=ФайлХЛС.ActiveSheet;
Область = СерверExcel.Range(ExcelЛист.Cells(1,1), ExcelЛист.Cells(КонечнаяСтрокаДанных,КоличествоКолонокДанных));
МассивДанныхEXEL = Область.Value.Выгрузить();
КонецПроцедуры
Процедура ИнициализацииЕкселя()
Состояние("Происходит инициализация EXCEL...");
Попытка
СерверExcel1 = Новый COMОбъект("Excel.Application");
СерверExcel1.Display Alerts = 0;
Исключение
ЗапущенExcel = 0;
Сообщить(ОписаниеОшибки(),"!");
КонецПопытки;
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Быстрая выгрузка отчетов в Excel, наложение Фильта и отображение ярлыка Вместо Таб.Показать() используем глобальную функцию - и отчет показывается сразу в Excel в удобоваримом виде - с форматированием колонок по ширине, автофильтром и ярлычками листов
Код 1C v 7.x Процедура глОткрытьВЭкселе(Таб,ИмяФайла="",НеИзменятьВысотуСтроки=0) Экспорт
Попытка
// запускаем Excel-Server
Excel = СоздатьОбъект("Excel.Application");
Исключение
Excel = 0;
Предупреждение("MS Excel не загружен!");
Возврат;
КонецПопытки;
Если ТипЗначенияСтр(Таб)="Строка" Тогда
Excel.WorkBooks.Open(Таб);
Иначе
Если НеИзменятьВысотуСтроки=0 Тогда
ШиринаТаблицы=Таб.ШиринаТаблицы();
Область=Таб.Область(1,1,Таб.ВысотаТаблицы(),ШиринаТаблицы);
Область.ВысотаСтроки(12);
КонецЕсли;
Если Найти(ИмяФайла,":")=0 Тогда
ИмяФайла=КаталогПользователя()+ИмяФайла;
КонецЕсли;
Если Найти(Врег(ИмяФайла),"XLS")=0 Тогда
ИмяФайла=ИмяФайла+".xls";
КонецЕсли;
Таб.Записать(?(ПустоеЗначение(ИмяФайла)=0,ИмяФайла,КаталогПользователя()+"Таблица.xls"),"XLS");
Excel.WorkBooks.Open(ИмяФайла);
Excel.Visible = 0;
//добавляем автофильтр и форматирование колонок по ширине
Excel.Columns.AutoFit();
Range = Excel.Range(Excel.Cells(1, 1), Excel.Cells(1, ШиринаТаблицы));
Range.S_elect();
Range.AutoFilter();
//показываем вечно прячущиеся ярлычки листов
Excel.ActiveWindow.Display WorkbookTabs = -1;
Excel.ActiveWindow.TabRatio = 0.25;
КонецЕсли;
Excel.Visible=1;
Excel=0;
КонецПроцедуры
mikukrnet Категория:
Работа с Microsoft Office и OpenOffice Создание писем, событий и задач в MS Outlook из 1С Отправка писем из 1С Предприятия – одна из самых необходимых функций, отсутствующая в штатном функционале платформы. Один из вариантов реализации – это подключение к MS Outlook по технологии OLE. В статье приведены примеры создания писем, событий и задач в MS Outlook из 1С. Автоматическое создание событий и задач используется не часто, но порой бывает очень удобно.
Для 1С 8.х замените
Код 1C v 7.x Outlook = СоздатьОбъект("Outlook.Application");
на
Код 1C v 8.х Outlook = Новый COMОбъект("Outlook.Application");
так же посмотрите:
Отправка почтового сообщения на локальный MS Office Outlook с вложенным файлом
Создание сообщения
Код 1C v 7.x //создать новое сообщение из 1С в MS Outlook
Процедура СоздатьПисьмо(Адрес,ПутьКВложению)
Попытка
Outlook = СоздатьОбъект("Outlook.Application");
ЕстьОшибка = 0;
Исключение
Предупреждение("Не удалось создать объект Outlook.Application");
ЕстьОшибка = 1;
КонецПопытки;
Если ЕстьОшибка = 0 Тогда
Письмо = Outlook.CreateItem(0);
Письмо.Subject = "Тема письма";
Письмо.Body = "Текст письма";
Письмо.Recipients.Add(Адрес);
Если ФС.СуществуетФайл(ПутьКВложению)=1 Тогда
Письмо.Attachments.Add(ПутьКВложению);
КонецЕсли;
Письмо.Display ();
Иначе
Тема = "Тема письма";
ТекстПисьма = "Текст письма";
СтрокаЗапуска = "mailto:" + Адрес + "?subject=" + Тема + "&body=" + ТекстПисьма;
ЗапуститьПриложение(СтрокаЗапуска);
КонецЕсли;
КонецПроцедуры
Создание события
Код 1C v 7.x //создать запись в календаре событий из 1С в MS Outlook
Процедура СоздатьСобытие()
Попытка
Outlook = СоздатьОбъект("Outlook.Application");
Исключение
Предупреждение("Не удалось создать объект Outlook.Application");
Возврат;
КонецПопытки;
Событие = Outlook.CreateItem(1);
Событие.Subject = "Название события";
Событие.Start = "15.01.2010 15:00:00";
Событие.End = "15.01.2010 16:00:00";
Событие.Body = "Описание события";
Событие.Location = "Место события";
Событие.ReminderMinutesBeforeStart = 15;
Событие.BusyStatus = 0;
Событие.MeetingStatus = 0;
Событие.Sensitivity = 2;
Событие.Save();
Сообщить("Событие в календаре создано успешно","i");
КонецПроцедуры
Создание задачи
Код 1C v 7.x //создать новую задачу из 1С в MS Outlook
Процедура СоздатьЗадачу(ДатаСтартаЗадачи)
Попытка
Outlook = СоздатьОбъект("Outlook.Application");
Исключение
Предупреждение("Не удалось создать объект Outlook.Application");
Возврат;
КонецПопытки;
Задача = Outlook.CreateItem(3);
Задача.Subject = "Название задачи";
Задача.StartDate = ДатаСтартаЗадачи;
Задача.Body = "Описание задачи";
Задача.Status = 0;
Задача.Display ();
Задача.Importance = 2;
Задача.ReminderSet = 1;
Задача.ReminderTime = "" + ДатаСтартаЗадачи + " 9:00:00";
//Задача.Save();
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Выгрузка данных в Excel с установкой разных параметров Код 1C v 8.х // Процедура выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel
// с указанным именем, используя преобразование данных к типу число и типу строка;
Процедура ОсновныеДействияФормыЭкспорт(Кнопка)
Попытка
Попытка
// Загрузка объекта Microsoft Excel
Состояние("Выгрузка данных из 1С в Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Excel."
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
// Создадим книгу, по умолчанию в ней уже есть листы
Книга = ExcelПриложение.WorkBooks.Add();
// Используем первый лист книги Excel
Лист = Книга.WorkSheets(1);
// Сформировать шапку документа в первой строке листа
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Лист.Cells(1, Колонка).Value = стр.НазваниеРеквизита;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
// Выгрузить данные справочника
выборка = Справочники[ИмяСправочника].Выбрать();
СтрокаЛиста = 2;
Пока выборка.Следующий() Цикл
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Попытка
// Установить значение в строке и колонке
Если ТипЗнч(выборка[стр.НазваниеРеквизита])=Тип("Число") Тогда
// Установить формат для типа Число
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "0,00";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Формат(выборка[стр.НазваниеРеквизита],"ЧГ=0");
иначе
// Для всех других типов установим формат "Текстовый"
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "@";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Строка(выборка[стр.НазваниеРеквизита]);
КонецЕсли;
исключение
// в случае ошибки вывести номер строки и колонки
Сообщить("Ошибка установки значения для: " +
выборка[стр.НазваниеРеквизита]);
Сообщить("Стр: " +СтрокаЛиста+ " Кол: " +
Колонка+ " Рек: " + стр.НазваниеРеквизита);
КонецПопытки;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;
СтрокаЛиста = СтрокаЛиста + 1;
Состояние("Экспорт из 1С в Excel " + СтрокаЛиста);
КонецЦикла;
// Сохраним созданную книгу в файл xls
Книга.SaveAs(имяФайла);
// Обязательно закроем соединение с COM объектом для освобождения памяти
ExcelПриложение.Quit();
Сообщить("Файл выгружен успешно: " + имяФайла );
Исключение
// Обработка ошибок экспорта данных из 1С в Excel
Сообщить("Ошибка записи данных файла :" + имяФайла);
Сообщить(ОписаниеОшибки());
Попытка
ExcelПриложение.Quit();
Исключение
КонецПопытки;
КонецПопытки;
КонецПроцедуры
Код 1C v 7.x //Простейший пример вывода из 1С:Предприятия 7.7 в MS Excel. Обеспечение наличия у рабочей книги единственного листа,
//установка размера, жирности и цвета шрифта, ширины колонок, рамок и заливки ячеек. Выравнивание текста
//ячеек, группировка строк, установка числового формата ячеек, закрепление области.
Процедура Вывод()
Попытка
Application=СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки(),"!!!");
Сообщить("Возможно, MS Excel не установлен на этом компьютере.");
Возврат;
КонецПопытки;
//Создание рабочей книги
WorkBook=Application.WorkBooks.Add();
//Получение окна
Window=WorkBook.Windows(1);
//Установка невидимости окна для убыстрения вывода
Window.Visible=0;
//Обеспечение наличия у рабочей книги единственного листа
Если WorkBook.Worksheets.Count=0 Тогда
WorkBook.Worksheets.Add();
Иначе
Application.Display Alerts=0;//не выдавать предупреждений
Пока WorkBook.Worksheets.Count>1 Цикл
WorkBook.Worksheets(1).Delete();
КонецЦикла;
Application.Display Alerts=-1;//восстановление флага выдачи предупреждений
КонецЕсли;
//Получение рабочего листа
Worksheet=WorkBook.Worksheets(1);
//Задание имени рабочего листа
Worksheet.Name="Пример вывода";
//Заголовок документа
Worksheet.Range("A1").Value="Пример вывода из 1С:Предприятия в MS Excel";
Worksheet.Range("A2").Value="сегодня "+ТекущаяДата();
Worksheet.Range("A1:A2").Font.Size=14;//размер шрифта
Worksheet.Range("A1:A2").Font.Bold=-1;//жирный шрифт
//Задание ширины колонок
Worksheet.Columns(1).ColumnWidth=60;
Worksheet.Columns(2).ColumnWidth=15;
Worksheet.Columns(3).ColumnWidth=15;
//Шапка документа
Worksheet.Range("A4").Value="Первая колонка";
Для ы=7 по 10 Цикл//рамки
Worksheet.Range("A4").Borders(ы).LineStyle=1;
Worksheet.Range("A4").Borders(ы).Weight=-4138;//xlMedium
КонецЦикла;
Worksheet.Range("A4").Interior.ColorIndex=15;//заливка серым
Worksheet.Range("A4").HorizontalAlignment=-4108;//выравнивание текста по центру
Worksheet.Range("B4").Value="Вторая";
Для ы=7 по 10 Цикл
Worksheet.Range("B4").Borders(ы).LineStyle=1;
Worksheet.Range("B4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("B4").Interior.ColorIndex=15;
Worksheet.Range("B4").HorizontalAlignment=-4108;
Worksheet.Range("C4").Value="Третья";
Для ы=7 по 10 Цикл
Worksheet.Range("C4").Borders(ы).LineStyle=1;
Worksheet.Range("C4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("C4").Interior.ColorIndex=15;
Worksheet.Range("C4").HorizontalAlignment=-4108;
//Для группировки строк:
Worksheet.Outline.SummaryRow=0;//"итоговые" строки отображать сверху (если снизу, то 1)
//Вывод строк
Worksheet.Range("A5").Value="Объект аналитики";
Worksheet.Range("A5").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B5").Value=123.45;
Worksheet.Range("B5").Font.ColorIndex=5;
Worksheet.Range("C5").Value=678.9;
Worksheet.Range("C5").Font.ColorIndex=5;
Worksheet.Range("A6").Value="Объект аналитики";
Worksheet.Range("A6").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B6").Value=123.45;
Worksheet.Range("B6").Font.ColorIndex=3;
Worksheet.Range("C6").Value=678.9;
Worksheet.Range("C6").Font.ColorIndex=3;
Worksheet.Range("A7").Value="Объект аналитики";
Worksheet.Range("B7").Value=123.45;
Worksheet.Range("C7").Value=678.9;
Worksheet.Range("A8").Value="Объект аналитики";
Worksheet.Range("B8").Value=123.45;
Worksheet.Range("C8").Value=678.9;
Worksheet.Range("A9").Value="Объект аналитики";
Worksheet.Range("A9").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B9").Value=123.45;
Worksheet.Range("B9").Font.ColorIndex=3;
Worksheet.Range("C9").Value=678.9;
Worksheet.Range("C9").Font.ColorIndex=3;
Worksheet.Range("A10").Value="Объект аналитики";
Worksheet.Range("B10").Value=123.45;
Worksheet.Range("C10").Value=678.9;
Worksheet.Range("A11").Value="Объект аналитики";
Worksheet.Range("B11").Value=123.45;
Worksheet.Range("C11").Value=678.9;
Worksheet.Range("A12").Value="Объект аналитики";
Worksheet.Range("A12").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B12").Value=123.45;
Worksheet.Range("B12").Font.ColorIndex=5;
Worksheet.Range("C12").Value=678.9;
Worksheet.Range("C12").Font.ColorIndex=5;
Worksheet.Range("A13").Value="Объект аналитики";
Worksheet.Range("A13").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B13").Value=123.45;
Worksheet.Range("B13").Font.ColorIndex=3;
Worksheet.Range("C13").Value=678.9;
Worksheet.Range("C13").Font.ColorIndex=3;
Worksheet.Range("A14").Value="Объект аналитики";
Worksheet.Range("B14").Value=123.45;
Worksheet.Range("C14").Value=678.9;
Worksheet.Range("A15").Value="Объект аналитики";
Worksheet.Range("B15").Value=123.45;
Worksheet.Range("C15").Value=678.9;
Worksheet.Range("A16").Value="Объект аналитики";
Worksheet.Range("A16").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B16").Value=123.45;
Worksheet.Range("B16").Font.ColorIndex=3;
Worksheet.Range("C16").Value=678.9;
Worksheet.Range("C16").Font.ColorIndex=3;
Worksheet.Range("A17").Value="Объект аналитики";
Worksheet.Range("B17").Value=123.45;
Worksheet.Range("C17").Value=678.9;
Worksheet.Range("A18").Value="Объект аналитики";
Worksheet.Range("B18").Value=123.45;
Worksheet.Range("C18").Value=678.9;
//Установка рамок
Для НомСтр=5 по 18 Цикл
Для ы=7 по 10 Цикл
Worksheet.Range("A"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("B"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("C"+НомСтр).Borders(ы).LineStyle=1;
КонецЦикла;
КонецЦикла;
//Группировка строк
Worksheet.Range("7:8").Rows.Group();
Worksheet.Range("10:11").Rows.Group();
Worksheet.Range("14:15").Rows.Group();
Worksheet.Range("17:18").Rows.Group();
Worksheet.Range("6:11").Rows.Group();
Worksheet.Range("13:18").Rows.Group();
//Свёртка группировок до первого уровня
Worksheet.Outline.ShowLevels(1);
//Установка числового формата
Попытка
Worksheet.Range("B5:C18").NumberFormat="# ##0.00";
Исключение
Попытка
Worksheet.Range("B5:C18").NumberFormat="# ##0,00";
Исключение
КонецПопытки;
КонецПопытки;
//Установка видимости приложения и его окна
Application.Visible=-1;
Window.Visible=-1;
//Закрепление области
Worksheet.Range("A5").S_elect();
Window.FreezePanes = -1;
КонецПроцедуры //Вывод
Категория:
Работа с Microsoft Office и OpenOffice Выгрузка метаданных конфигурации в Microsoft Word и Excel Код 1C v 8.х
Перем ОбъектыКонфы;
Перем СтруктКонфы;
Процедура ВыгрузитьВWord()
Попытка
Word = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Не удалось открыть Word");
Возврат;
КонецПопытки;
Word.Documents.Add();
Документ = Word.ActiveDocument();
// Перебор типов метаданных
Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл
Состояние(ТипОбъекта.Значение);
Если Метаданные[ТипОбъекта.Ключ].Количество() > 0 Тогда
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер = Документ.Paragraphs.Count();
Документ.Paragraphs(Номер-1).Range().I_nsertAfter(ТипОбъекта.Значение);
Документ.Paragraphs(Номер).Range().Style="Заголовок 1";
//Перебираем конктретные объекты
Для каждого Объект Из Метаданные[ТипОбъекта.Ключ] Цикл
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер = Документ.Paragraphs.Count();
Документ.Paragraphs(Номер-1).Range().I_nsertAfter(Объект.Синоним);
Документ.Paragraphs(Номер).Range().Style="Заголовок 2";
// Перебираем параметры метаданных
Для каждого Параметр Из СтруктКонфы Цикл
Попытка
Количество = Объект[Параметр.Ключ].Количество();
Исключение
Продолжить;
КонецПопытки;
Если Количество > 0 Тогда
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер = Документ.Paragraphs.Count();
Документ.Paragraphs(Номер-1).Range().I_nsertAfter(Параметр.Значение + " (" + Количество + ")");
Документ.Paragraphs(Номер).Range().Style="Заголовок 3";
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер=Документ.Paragraphs.Count();
// Добавляем новую таблицу
Документ.Tables.Add(Документ.Paragraphs(Номер).Range(),Количество+1,4);
Счетчик = 1;
// Заполняем шапку таблицы
Таблица = Документ.Tables(Документ.Tables.Count());
Таблица.Cell(Счетчик,1).Range().I_nsertAfter("Имя");
Таблица.Cell(Счетчик,2).Range().I_nsertAfter("Синоним");
Таблица.Cell(Счетчик,3).Range().I_nsertAfter("Тип");
Таблица.Cell(Счетчик,4).Range().I_nsertAfter("Комментарий");
// Устанавливаем жирный шрифт для шапки таблицы
Документ.Range(Таблица.Cell(Счетчик,1).Range.Start,Таблица.Cell(Счетчик,4).Range.End).Font.Bold = Истина;
Для каждого Значение Из Объект[Параметр.Ключ] Цикл
Счетчик = Счетчик + 1;
// Заполняем содержимое таблицы
Попытка
Таблица.Cell(Счетчик,1).Range().I_nsertAfter(Значение.Имя);
Исключение
КонецПопытки;
Попытка
Таблица.Cell(Счетчик,2).Range().I_nsertAfter(Значение.Синоним);
Исключение
КонецПопытки;
Попытка
СтрокаТипов = "";
// Выводим все типы
Для каждого Тип Из Значение.Тип.Типы() Цикл
СтрокаТипов = СтрокаТипов + " " + Строка(Тип);
КонецЦикла;
Таблица.Cell(Счетчик,3).Range().I_nsertAfter(СтрокаТипов);
Исключение
КонецПопытки;
Попытка
Таблица.Cell(Счетчик,4).Range().I_nsertAfter(Значение.Комментарий);
Исключение
КонецПопытки;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Показываем документ
Word.Visible = Истина;
// Устанавливаем активность документа
Word.Activate();
Word = Неопределено;
КонецПроцедуры
Процедура ВыгрузитьВExcel()
Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось открыть Excel");
Возврат;
КонецПопытки;
// Добавляем новый лист
Excel.Application.Workbooks.Add(1);
Лист = Excel.ActiveSheet;
// Задаем имя закладки
Лист.Name = "Данные";
НомерСтроки = 0;
// Перебор типов метаданных
Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл
Состояние(ТипОбъекта.Значение);
Если Метаданные[ТипОбъекта.Ключ].Количество() > 0 Тогда
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
// Устанавливаем текст в ячейку
Лист.Cells(НомерСтроки, 1).Value = ТипОбъекта.Значение;
// Устанавливаем размер шрифта
Лист.Cells(НомерСтроки, 1).Font.Size = 16;
// Устанавливаем цвет
Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 3;
//Перебираем конктретные объекты
Для каждого Объект Из Метаданные[ТипОбъекта.Ключ] Цикл
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
// Устанавливаем текст в ячейку
Лист.Cells(НомерСтроки, 1).Value = Объект.Синоним;
// Устанавливаем отступ в 2 символа
Лист.Cells(НомерСтроки, 1).I_nsertIndent(2);
// Устанавливаем размер шрифта
Лист.Cells(НомерСтроки, 1).Font.Size = 12;
// Устанавливаем цвет
Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 5;
// Перебираем параметры метаданных
Для каждого Параметр Из СтруктКонфы Цикл
Попытка
Количество = Объект[Параметр.Ключ].Количество();
Исключение
Продолжить;
КонецПопытки;
Если Количество > 0 Тогда
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
Лист.Cells(НомерСтроки, 1).Value = Параметр.Значение + " (" + Количество + ")";
Лист.Cells(НомерСтроки, 1).I_nsertIndent(4);
// Устанавливаем жирный шрифт
Лист.Cells(НомерСтроки, 1).Font.Bold = Истина;
// Устанавливаем цвет
Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 16;
// Добавляем новую таблицу
НомерСтроки = НомерСтроки + 1;
Лист.Cells(НомерСтроки, 1).Value = "Имя";
Лист.Cells(НомерСтроки, 2).Value = "Синоним";
Лист.Cells(НомерСтроки, 3).Value = "Тип";
Лист.Cells(НомерСтроки, 4).Value = "Комментарий";
Для Ном = 1 По 4 Цикл
// Устанавливаем ширину колонки
Лист.Cells(НомерСтроки, Ном).ColumnWidth = 20;
Лист.Cells(НомерСтроки, Ном).Font.Bold = Истина;
// Очищаем все границы
Лист.Cells(НомерСтроки, Ном).Borders(5).LineStyle = -4142;
// Устанавливаем левую границу
Лист.Cells(НомерСтроки, Ном).Borders(7).LineStyle = 1;
// Устанавливаем верхнюю границу
Лист.Cells(НомерСтроки, Ном).Borders(8).LineStyle = 1;
// Устанавливаем нижнюю границу
Лист.Cells(НомерСтроки, Ном).Borders(9).LineStyle = 1;
// Устанавливаем правую границу
Лист.Cells(НомерСтроки, Ном).Borders(10).LineStyle = 1;
// Устанавливаем цвет фона
Лист.Cells(НомерСтроки, Ном).Interior.ColorIndex = 34;
КонецЦикла;
Для каждого Значение Из Объект[Параметр.Ключ] Цикл
НомерСтроки = НомерСтроки + 1;
// Заполняем содержимое таблицы
Попытка
Лист.Cells(НомерСтроки, 1).Value = Значение.Имя;
Исключение
КонецПопытки;
Попытка
Лист.Cells(НомерСтроки, 2).Value = Значение.Синоним;
Исключение
КонецПопытки;
Попытка
СтрокаТипов = "";
// Выводим все типы
Для каждого Тип Из Значение.Тип.Типы() Цикл
СтрокаТипов = СтрокаТипов + " " + Строка(Тип);
КонецЦикла;
Лист.Cells(НомерСтроки, 3).Value = СтрокаТипов;
Исключение
КонецПопытки;
Попытка
Лист.Cells(НомерСтроки, 4).Value = Значение.Комментарий;
Исключение
КонецПопытки;
Для Ном = 1 По 4 Цикл
// Установка границ
Лист.Cells(НомерСтроки, Ном).Borders(5).LineStyle = -4142;
Лист.Cells(НомерСтроки, Ном).Borders(7).LineStyle = 1;
Лист.Cells(НомерСтроки, Ном).Borders(8).LineStyle = 1;
Лист.Cells(НомерСтроки, Ном).Borders(9).LineStyle = 1;
Лист.Cells(НомерСтроки, Ном).Borders(10).LineStyle = 1;
// Устанавливаем выравнивание по левому краю
Лист.Cells(НомерСтроки, Ном).VerticalAlignment = -4160;
// Устанавливаем перенос слов
Лист.Cells(НомерСтроки, Ном).WrapText = Истина;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Показываем документ
Excel.Visible = Истина;
Excel = Неопределено;
КонецПроцедуры
Процедура Сформировать()
// Определяем все возможные объекты метаданных
ОбъектыКонфы = Новый Структура();
ОбъектыКонфы.Вставить("ОбщиеМодули", "Общие модули");
ОбъектыКонфы.Вставить("ОбщиеФормы", "Общие формы");
ОбъектыКонфы.Вставить("ОбщиеМакеты", "Общие макеты");
ОбъектыКонфы.Вставить("ОбщиеКартинки", "Общие картинки");
ОбъектыКонфы.Вставить("Роли", "Роли");
ОбъектыКонфы.Вставить("Интерфейсы", "Интерфейсы");
ОбъектыКонфы.Вставить("Стили", "Стили");
ОбъектыКонфы.Вставить("Языки", "Языки");
ОбъектыКонфы.Вставить("ПланыОбмена", "Планы обмена");
ОбъектыКонфы.Вставить("Константы", "Константы");
ОбъектыКонфы.Вставить("КритерииОтбора", "Критерии отбора");
ОбъектыКонфы.Вставить("Справочники", "Справочники");
ОбъектыКонфы.Вставить("Документы", "Документы");
ОбъектыКонфы.Вставить("ЖурналыДокументов", "Журналы документов");
ОбъектыКонфы.Вставить("Перечисления", "Перечисления");
ОбъектыКонфы.Вставить("Отчеты", "Отчеты");
ОбъектыКонфы.Вставить("Обработки", "Обработки");
ОбъектыКонфы.Вставить("ПланыВидовХарактеристик", "Планы видов характеристик");
ОбъектыКонфы.Вставить("ПланыСчетов", "Планы счетов");
ОбъектыКонфы.Вставить("ПланыВидовРасчета", "Планы видов расчета");
ОбъектыКонфы.Вставить("РегистрыСведений", "Регистры сведений");
ОбъектыКонфы.Вставить("РегистрыБухгалтерии", "Регистры бухгалтерии");
ОбъектыКонфы.Вставить("РегистрыРасчета", "Регистры расчета");
// Определяем все возможные параметры
СтруктКонфы = Новый Структура();
СтруктКонфы.Вставить("Измерения", "Измерения");
СтруктКонфы.Вставить("Ресурсы", "Ресурсы");
СтруктКонфы.Вставить("Реквизиты", "Реквизиты");
СтруктКонфы.Вставить("Формы", "Формы");
СтруктКонфы.Вставить("Макеты", "Макеты");
СтруктКонфы.Вставить("Графы", "Графы");
СтруктКонфы.Вставить("ТабличныеЧасти", "Табличные части");
СтруктКонфы.Вставить("Значения", "Значения");
ВыгрузитьВWord(); // из 1С в Microsoft Word
ВыгрузитьВExcel(); // из 1C в Microsoft Excel
КонецПроцедуры
Код 1C v 7.x
Процедура Справочник()
Ворд=СоздатьОбъект("Word.Application");
Ворд.Display Alerts=0;
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Код");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=?(Метаданные.Справочник(СокрЛП(Имя)).ТипКода="Текстовый","Строка","Число");
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип+" ("+СокрЛП(Метаданные.Справочник(СокрЛП(Имя)).ДлинаКода)+")");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("");
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Наименование");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Строка ("+СокрЛП(Метаданные.Справочник(СокрЛП(Имя)).ДлинаНаименования)+")");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("");
Для Сч=1 По Метаданные.Справочник(СокрЛП(Имя)).Реквизит() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Реквизит=Метаданные.Справочник(СокрЛП(Имя)).Реквизит(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Процедура Документ()
Ворд=СоздатьОбъект("Word.Application");
Ворд.Display Alerts=0;
Для Сч=1 По Метаданные.Документ(СокрЛП(Имя)).РеквизитШапки() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Шапка");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Документ(СокрЛП(Имя)).РеквизитШапки(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Для Сч=1 По Метаданные.Документ(СокрЛП(Имя)).РеквизитТабличнойЧасти() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Таб. часть");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Документ(СокрЛП(Имя)).РеквизитТабличнойЧасти(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Процедура Общие()
Ворд=СоздатьОбъект("Word.Application");
Ворд.Display Alerts=0;
Для Сч=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Шапка");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.ОбщийРеквизитДокумента(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Процедура СтруктураРегистра()
Ворд=СоздатьОбъект("Word.Application");
Ворд.Display Alerts=0;
Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Измерение() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Измерение");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Измерение(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Ресурс() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Ресурс");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Ресурс(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Реквизит() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Реквизит");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Реквизит(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Группировка строк Excel В ниже указанном коде нужно убрать символ
_
Код 1C v 8.х
//Группировка строк по уровню 2
Worksheet.Range("7:8").Rows.Group();
Worksheet.Range("10:11").Rows.Group();
Worksheet.Range("14:15").Rows.Group();
Worksheet.Range("17:18").Rows.Group();
//Группировка строк по уровню 1
Worksheet.Range("6:11").Rows.Group();
Worksheet.Range("13:18").Rows.Group();
//Свёртка группировок до первого уровня
Worksheet.Outline.ShowLevels(1);
//или
Excel.Range("A3:A6").S_elect();
Excel.S_election.Rows.Group();
// еще пример
BegCell = Лист.Cells(1,1);
EndCell = Лист.Cells(4,1);
Лист.Range(BegCell,EndCell).Rows.Group();
Код 1C v 7.x
//Простейший пример вывода из 1С:Предприятия 7.7 в MS Excel. Обеспечение наличия у рабочей книги единственного листа,
//установка размера, жирности и цвета шрифта, ширины колонок, рамок и заливки ячеек. Выравнивание текста
//ячеек, группировка строк, установка числового формата ячеек, закрепление области.
Процедура Вывод()
Попытка
Application=СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки(),"!!!");
Сообщить("Возможно, MS Excel не установлен на этом компьютере.");
Возврат;
КонецПопытки;
//Создание рабочей книги
WorkBook=Application.WorkBooks.Add();
//Получение окна
Window=WorkBook.Windows(1);
//Установка невидимости окна для убыстрения вывода
Window.Visible=0;
//Обеспечение наличия у рабочей книги единственного листа
Если WorkBook.Worksheets.Count=0 Тогда
WorkBook.Worksheets.Add();
Иначе
Application.Display Alerts=0;//не выдавать предупреждений
Пока WorkBook.Worksheets.Count>1 Цикл
WorkBook.Worksheets(1).Delete();
КонецЦикла;
Application.Display Alerts=-1;//восстановление флага выдачи предупреждений
КонецЕсли;
//Получение рабочего листа
Worksheet=WorkBook.Worksheets(1);
//Задание имени рабочего листа
Worksheet.Name="Пример вывода";
//Заголовок документа
Worksheet.Range("A1").Value="Пример вывода из 1С:Предприятия в MS Excel";
Worksheet.Range("A2").Value="сегодня "+ТекущаяДата();
Worksheet.Range("A1:A2").Font.Size=14;//размер шрифта
Worksheet.Range("A1:A2").Font.Bold=-1;//жирный шрифт
//Задание ширины колонок
Worksheet.Columns(1).ColumnWidth=60;
Worksheet.Columns(2).ColumnWidth=15;
Worksheet.Columns(3).ColumnWidth=15;
//Шапка документа
Worksheet.Range("A4").Value="Первая колонка";
Для ы=7 по 10 Цикл//рамки
Worksheet.Range("A4").Borders(ы).LineStyle=1;
Worksheet.Range("A4").Borders(ы).Weight=-4138;//xlMedium
КонецЦикла;
Worksheet.Range("A4").Interior.ColorIndex=15;//заливка серым
Worksheet.Range("A4").HorizontalAlignment=-4108;//выравнивание текста по центру
Worksheet.Range("B4").Value="Вторая";
Для ы=7 по 10 Цикл
Worksheet.Range("B4").Borders(ы).LineStyle=1;
Worksheet.Range("B4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("B4").Interior.ColorIndex=15;
Worksheet.Range("B4").HorizontalAlignment=-4108;
Worksheet.Range("C4").Value="Третья";
Для ы=7 по 10 Цикл
Worksheet.Range("C4").Borders(ы).LineStyle=1;
Worksheet.Range("C4").Borders(ы).Weight=-4138;
КонецЦикла;
Worksheet.Range("C4").Interior.ColorIndex=15;
Worksheet.Range("C4").HorizontalAlignment=-4108;
//Для группировки строк:
Worksheet.Outline.SummaryRow=0;//"итоговые" строки отображать сверху (если снизу, то 1)
//Вывод строк
Worksheet.Range("A5").Value="Объект аналитики";
Worksheet.Range("A5").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B5").Value=123.45;
Worksheet.Range("B5").Font.ColorIndex=5;
Worksheet.Range("C5").Value=678.9;
Worksheet.Range("C5").Font.ColorIndex=5;
Worksheet.Range("A6").Value="Объект аналитики";
Worksheet.Range("A6").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B6").Value=123.45;
Worksheet.Range("B6").Font.ColorIndex=3;
Worksheet.Range("C6").Value=678.9;
Worksheet.Range("C6").Font.ColorIndex=3;
Worksheet.Range("A7").Value="Объект аналитики";
Worksheet.Range("B7").Value=123.45;
Worksheet.Range("C7").Value=678.9;
Worksheet.Range("A8").Value="Объект аналитики";
Worksheet.Range("B8").Value=123.45;
Worksheet.Range("C8").Value=678.9;
Worksheet.Range("A9").Value="Объект аналитики";
Worksheet.Range("A9").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B9").Value=123.45;
Worksheet.Range("B9").Font.ColorIndex=3;
Worksheet.Range("C9").Value=678.9;
Worksheet.Range("C9").Font.ColorIndex=3;
Worksheet.Range("A10").Value="Объект аналитики";
Worksheet.Range("B10").Value=123.45;
Worksheet.Range("C10").Value=678.9;
Worksheet.Range("A11").Value="Объект аналитики";
Worksheet.Range("B11").Value=123.45;
Worksheet.Range("C11").Value=678.9;
Worksheet.Range("A12").Value="Объект аналитики";
Worksheet.Range("A12").Font.ColorIndex=5;//цвет шрифта - синий
Worksheet.Range("B12").Value=123.45;
Worksheet.Range("B12").Font.ColorIndex=5;
Worksheet.Range("C12").Value=678.9;
Worksheet.Range("C12").Font.ColorIndex=5;
Worksheet.Range("A13").Value="Объект аналитики";
Worksheet.Range("A13").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B13").Value=123.45;
Worksheet.Range("B13").Font.ColorIndex=3;
Worksheet.Range("C13").Value=678.9;
Worksheet.Range("C13").Font.ColorIndex=3;
Worksheet.Range("A14").Value="Объект аналитики";
Worksheet.Range("B14").Value=123.45;
Worksheet.Range("C14").Value=678.9;
Worksheet.Range("A15").Value="Объект аналитики";
Worksheet.Range("B15").Value=123.45;
Worksheet.Range("C15").Value=678.9;
Worksheet.Range("A16").Value="Объект аналитики";
Worksheet.Range("A16").Font.ColorIndex=3;//цвет шрифта - красный
Worksheet.Range("B16").Value=123.45;
Worksheet.Range("B16").Font.ColorIndex=3;
Worksheet.Range("C16").Value=678.9;
Worksheet.Range("C16").Font.ColorIndex=3;
Worksheet.Range("A17").Value="Объект аналитики";
Worksheet.Range("B17").Value=123.45;
Worksheet.Range("C17").Value=678.9;
Worksheet.Range("A18").Value="Объект аналитики";
Worksheet.Range("B18").Value=123.45;
Worksheet.Range("C18").Value=678.9;
//Установка рамок
Для НомСтр=5 по 18 Цикл
Для ы=7 по 10 Цикл
Worksheet.Range("A"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("B"+НомСтр).Borders(ы).LineStyle=1;
Worksheet.Range("C"+НомСтр).Borders(ы).LineStyle=1;
КонецЦикла;
КонецЦикла;
//Группировка строк
Worksheet.Range("7:8").Rows.Group();
Worksheet.Range("10:11").Rows.Group();
Worksheet.Range("14:15").Rows.Group();
Worksheet.Range("17:18").Rows.Group();
Worksheet.Range("6:11").Rows.Group();
Worksheet.Range("13:18").Rows.Group();
//Свёртка группировок до первого уровня
Worksheet.Outline.ShowLevels(1);
//Установка числового формата
Попытка
Worksheet.Range("B5:C18").NumberFormat="# ##0.00";
Исключение
Попытка
Worksheet.Range("B5:C18").NumberFormat="# ##0,00";
Исключение
КонецПопытки;
КонецПопытки;
//Установка видимости приложения и его окна
Application.Visible=-1;
Window.Visible=-1;
//Закрепление области
Worksheet.Range("A5").S_elect();
Window.FreezePanes = -1;
КонецПроцедуры //Вывод
Категория:
Работа с Microsoft Office и OpenOffice Функция открывает таблицу в MS Excel Код 1C v 7.x Код
//Функция открывает таблицу в MS Excel
//Таблица - печатная форма 1С
//ИмяЛиста - имя, которое будет присвоено листу книги MS Excel (если не задано, то остается "Sheet1")
//ОтображатьЯрлычки - показывать/скрыть ярлычки листов в MS Excel
//ОтображатьСетку - показывать/скрыть линии сетки в MS Excel
//УдалитьСтроки - позволяет удалить указанное количество верхних строк таблицы
//УдалитьСтроки - позволяет удалить указанное количество левых столбцов таблицы
Функция глОткрытьТаблицуВExcel(Таблица, ИмяЛиста = "", ОтображатьЯрлычки = 1, ОтображатьСетку = 1, УдалитьСтроки = 0, УдалитьСтолбцы = 0) Экспорт
Перем Excel, ExcelWB, ExcelSh, ExcelPS, ИмяФайла, Рез, Зн, Зн1;
Если ТипЗначенияСтр(Таблица) <> "Таблица" Тогда
Возврат 0;
КонецЕсли;
Попытка
Excel = СоздатьОбъект("Excel.Application")
Исключение
Сообщить("Не удалось открыть MS Excel","!");
Возврат 0;
КонецПопытки;
Пока 1=1 Цикл
//Подберем уникальное имя для временного файла
ИмяФайла = КаталогВременныхФайлов() + "1c" + СтрЗаменить(ТекущееВремя(), ":", "");
Если (ФС.СуществуетФайл(ИмяФайла+".tmp") = 1) или (ФС.СуществуетФайл(ИмяФайла+".xls") = 1) Тогда
ФС.УдалитьФайл(ИмяФайла+".tmp");
ФС.УдалитьФайл(ИмяФайла+".xls")
Иначе
Прервать;
КонецЕсли
КонецЦикла;
Таблица.Записать(ИмяФайла+".tmp", "XLS");
Если ФС.СуществуетФайл(ИмяФайла+".tmp") = 0 Тогда
Сообщить("Ошибка записи файла """ + ИмяФайла + "tmp""","!");
Excel = "";
Возврат 0;
КонецЕсли;
Рез = 1;
Попытка
ExcelWB = Excel.Workbooks.Add(ИмяФайла+".tmp"); //Откроем временный файл в Excel в режиме шаблона (чтобы не блокировать файл)
Попытка //Если на клиентской машине не установлен принтер, обращение к настройкам страницы вызывает ошибку. Поэтому работаем в "Попытка ... КонецПопытки"
ExcelPS = ExcelWB.Sheets(1).PageSetup; //Исправим спецсимволы в колонтитулах
Зн = ExcelPS.LeftHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftHeader = Зн1 КонецЕсли;
Зн = ExcelPS.CenterHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterHeader = Зн1 КонецЕсли;
Зн = ExcelPS.RightHeader; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightHeader = Зн1 КонецЕсли;
Зн = ExcelPS.LeftFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftFooter = Зн1 КонецЕсли;
Зн = ExcelPS.CenterFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterFooter = Зн1 КонецЕсли;
Зн = ExcelPS.RightFooter; Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightFooter = Зн1 КонецЕсли;
Исключение
КонецПопытки;
ExcelWB.SaveAs(ИмяФайла+".xls", -4143); //Сохраним, чтобы обновить формат файла до текущего (xlNormal = -4143)
ExcelWB.Close(0); //Закроем книгу ...
ExcelWB = Excel.Workbooks.Add(ИмяФайла+".xls"); //... и вновь откроем в режиме шаблона
Попытка
ExcelSh = ExcelWB.Sheets(1);
Если ПустаяСтрока(ИмяЛиста) = 0 Тогда //Зададим имя ярлычка
ExcelSh.Name = ИмяЛиста
КонецЕсли;
Если ОтображатьЯрлычки = 1 Тогда //Сделаем видимыми ярлычки листов
ExcelWB.Windows(1).Display WorkbookTabs = 1;
ExcelWB.Windows(1).TabRatio = 0.6 //... и отодвинем горизонтальную полосу прокрутки от левого края
КонецЕсли;
Если ОтображатьСетку = 0 Тогда //Скроем линии сетки
ExcelWB.Windows(1).Display Gridlines = 0
КонецЕсли;
Если УдалитьСтроки > 0 Тогда //Удалим верхние строки
ExcelSh.Range(ExcelSh.Rows(1), ExcelSh.Rows(УдалитьСтроки)).Delete()
КонецЕсли;
Если УдалитьСтолбцы > 0 Тогда //Удалим левые столбцы
ExcelSh.Range(ExcelSh.Columns(1), ExcelSh.Columns(УдалитьСтолбцы)).Delete()
КонецЕсли;
Исключение
КонецПопытки;
ExcelWB.Saved = 0;
Исключение
Сообщить("Ошибка открытия файла в MS Excel","!"); Рез = 0
КонецПопытки;
Попытка
Excel.Visible = 1
Исключение
КонецПопытки;
ExcelWB = ""; ExcelSh = ""; ExcelPS = ""; Excel = "";
ФС.УдалитьФайл(ИмяФайла+".tmp");
ФС.УдалитьФайл(ИмяФайла+".xls");
Возврат Рез
КонецФункции //глОткрытьТаблицуВExcel
Автор неизвестен, если код ваш, напишите в комментариях Категория:
Работа с Microsoft Office и OpenOffice Подключение к EXCEL и чтение данных из листа Excel Код 1C v 8.х Ex = Новый COMObject("Excel.Application");
Ex.Workbooks.Open(Путь);
Ex.Visible = 1;
ТекЛист=Ex.WorkSheets(1);
Для Ячейка = 1 по 400 цикл
Если НЕ ТекЛист.Cells(Ячейка,1).Value = Неопределено тогда
Сообщить(Строка(ТекЛист.Cells(Ячейка,1).Value));
Карта = Справочники.Номенклатура.НайтиПоКоду(ИзЧислаВСтроку(ТекЛист.Cells(Ячейка,1).Value));
Если Карта.Пустая() тогда
Сообщить(" Пустой элемент " + ТекЛист.Cells(Ячейка,1));
иначе
Объект = Карта.ПолучитьОбъект();
Объект.ОсновнойПоставщик = ОсновнойКлиент;
Объект.Записать();
конецесли;
конецесли;
конеццикла;
Примеры процедур для чтения данных из EXCEL
Код 1C v 8.х
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_ADO(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0) Экспорт
#Если Клиент Тогда
Состояние("Установка соединения с Excel");
#КонецЕсли
//ЗаголовкиВСтроке1 = "HDR=YES;"
ЗаголовкиВСтроке1 = "HDR=NO;";
СтрокаСоединения ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(пФайл) +" ;Extended Properties=""Excel 8.0;" + ЗаголовкиВСтроке1 + "IMEX=1;""";
Connection = Новый COMОбъект("ADODB.Connection");
Connection.ConnectionString = СтрокаСоединения;
Попытка
Connection.Open();
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;
RS = Новый COMОбъект("ADODB.Recordset");
ТекстЗапроса =
"S_elect
| Лист.*
|FROM
| [" + пЛист + "$] as Лист";
Попытка
RS.Open(ТекстЗапроса, Connection);
Исключение
Сообщить ("Проблемы с выполнением запроса");
Возврат Неопределено;
КонецПопытки;
Таблица = Новый ТаблицаЗначений;
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По RS.Fields.Count Цикл
Поле = RS.Fields.Item(Счетчик - 1);
Колонка = Таблица.Колонки.Добавить("К" + Счетчик, , Поле.Name);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
КонецЦикла;
КонецЕсли;
НомерСтроки = 0;
КолвоСтрок = RS.RecordCount;
Пока RS.EOF() = 0 Цикл
НомерСтроки = НомерСтроки + 1;
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
ОбработкаПрерыванияПользователя();
#КонецЕсли
Если НомерСтроки < НачСтрока Тогда
RS.MoveNext();
Продолжить;
КонецЕсли;
Если КонСтрока > 0 И НомерСтроки > КонСтрока Тогда
Прервать;
КонецЕсли;
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По RS.Fields.Count Цикл
Поле = RS.Fields.Item(Счетчик - 1);
НоваяСтрока["К" + Счетчик] = Поле.Value;
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Поле = RS.Fields.Item(КлючИЗначение.Значение - 1);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value;
КонецЦикла;
КонецЕсли;
// Обработка других полей
RS.MoveNext();
КонецЦикла;
// Завершение работы
RS.Close();
Connection.Close();
Возврат Таблица;
КонецФункции
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_COM(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт
#Если Клиент Тогда
Состояние("Открытие Excel");
#КонецЕсли
Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.Display Alerts = Ложь;
КонецЕсли;
Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;
Лист = Book.Sheets(1);
КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Таблица = Новый ТаблицаЗначений;
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По КолвоКолонок Цикл
Колонка = Таблица.Колонки.Добавить("К" + Счетчик);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
КонецЦикла;
КонецЕсли;
НачСтрока = ?(НачСтрока = 0, 1, НачСтрока);
КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока);
КонСтрока = Мин(КонСтрока, КолвоСтрок);
Для НомерСтроки = НачСтрока По КонСтрока Цикл
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КонСтрока));
ОбработкаПрерыванияПользователя();
#КонецЕсли
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для НомерКолонки = 1 По КолвоКолонок Цикл
Поле = Лист.Cells(НомерСтроки, НомерКолонки);
НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Поле.Value;
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Поле = Лист.Cells(НомерСтроки, КлючИЗначение.Значение);
НоваяСтрока[КлючИЗначение.Ключ] = Поле.Value;
КонецЦикла;
КонецЕсли;
КонецЦикла;
XLSОбъект.Application.Quit();
Возврат Таблица;
КонецФункции
// Функция получает данные из файла Excel
//
// Параметры:
// пФайл - Имя файла
// пЛист - Имя листа с данными
// СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
// если не задано, созадуться колонки вида "К1", "К2"
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_COMArray(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт
#Если Клиент Тогда
Состояние("Открытие Excel");
#КонецЕсли
Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.Display Alerts = Ложь;
КонецЕсли;
Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Сообщить ("Проблемы с подключением к Excel" );
Возврат Неопределено;
КонецПопытки;
Лист = Book.Sheets(1);
КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
КолвоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Таблица = Новый ТаблицаЗначений;
Если СтруктураКолонок = Неопределено Тогда
Для Счетчик = 1 По КолвоКолонок Цикл
Колонка = Таблица.Колонки.Добавить("К" + Счетчик);
КонецЦикла;
Иначе
МаксимальныйНомерКолонки = 0;
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
МаксимальныйНомерКолонки = Макс(МаксимальныйНомерКолонки, КлючИЗначение.Значение);
КонецЦикла;
КолвоКолонок = Мин(КолвоКолонок, МаксимальныйНомерКолонки);
КонецЕсли;
НачСтрока = ?(НачСтрока = 0, 1, НачСтрока);
КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока);
КонСтрока = Мин(КонСтрока, КолвоСтрок);
// Массив типа COMSafeArray
Массив = Лист.Range(Лист.Cells(НачСтрока, 1), Лист.Cells(КонСтрока, КолвоКолонок)).Value;
КолвоСтрок = Массив.GetUpperBound(1);
Для НомерСтроки = 1 По КолвоСтрок Цикл
#Если Клиент Тогда
Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
ОбработкаПрерыванияПользователя();
#КонецЕсли
НоваяСтрока = Таблица.Добавить();
Если СтруктураКолонок = Неопределено Тогда
Для НомерКолонки = 1 По КолвоКолонок Цикл
НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Массив.GetValue(НомерКолонки, НомерСтроки);
КонецЦикла;
Иначе
Для каждого КлючИЗначение Из СтруктураКолонок Цикл
НоваяСтрока[КлючИЗначение.Ключ] = Массив.GetValue(КлючИЗначение.Значение, НомерСтроки);
КонецЦикла;
КонецЕсли;
КонецЦикла;
XLSОбъект.Application.Quit();
Возврат Таблица;
КонецФункции
// Функция получает список листов Excel
//
// Параметры:
// пФайл - Имя файла
// XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
// СписокЗначений
//
Функция Excel_ПолучитьСписокЛистов(пФайл, XLSОбъект = Неопределено) Экспорт
Если XLSОбъект = Неопределено Тогда
XLSОбъект = Новый COMОбъект("Excel.Application");
XLSОбъект.Visible = Ложь;
XLSОбъект.Display Alerts = Ложь;
КонецЕсли;
Попытка
Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
Исключение
Возврат Новый СписокЗначений;
КонецПопытки;
СписокЛистов = Новый СписокЗначений;
Для каждого Лист Из XLSОбъект.Sheets Цикл
СписокЛистов.Добавить(Лист.Name);
КонецЦикла;
XLSОбъект.Application.Quit();
Возврат СписокЛистов;
КонецФункции
Код 1C v 7.x Попытка
Excel = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки()+"; программа Excel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
РабочиеКниги=Excel.WorkBooks; // создаем рабочую книгу
Попытка // открываем файл
Отчет=РабочиеКниги.Open(Каталог+ИмяФайла);
Исключение
Сообщить(ОписаниеОшибки()+"; фаил с макросом не найден!");
Возврат;
КонецПопытки;
// заносим в таблицу какие-либо данные
Лист = Отчет.Worksheets(1);
Для Ном=1 По 20 Цикл
Ячейка = Лист .Cells(ном,1); Ячейка.Value;
Сообщить(Ячейка );
КонецЦикла;
Excel.Visible=1;
Попытка
Отчет.Save();
Исключение
Сообщить(ОписаниеОшибки()+"; не могу сохранить отчет!");
Возврат;
КонецПопытки;
Категория:
Работа с Microsoft Office и OpenOffice Как сохранить поле BLOB (image) как файл на диск? Наиболее эффективно это можно сделать с помощью объектов OLE Automation , работа с которыми осуществляется при помощи:
sp_OACreate, sp_OAGetProperty, sp_OASetProperty, sp_OAMethod, sp_OAGetErrorInfo, sp_OADestroy (подробное описание есть в http://technet.microsoft.com/ru-ru/library/ms203721(sql.90).aspx).
Рабочий пример процедуры (была написана для сохранения zip-архивов, хранящихся в базе):
Код CREATE PROCEDURE dbo.SaveRequestDataAsFile (
@FileName varchar(1024) --имя файла
,@FilePath varchar(1024) --путь файла
,@ReqID --некое условие на таблицу
)
AS
BEGIN
DECLARE
@Stream integer,
@Buffer varbinary(4096),
@Size integer,
@Pos integer,
@BufSize integer,
@FileNameLocal varchar(1024),
@HR integer
if RIGHT(@FilePath, 1)<>'&# 092;' begin set @FilePath=@FilePath+'&# 092;' end
set @FileNameLocal = @FilePath + @FileName
SET @BufSize = 4096
EXEC @HR = sp_OACreate 'ADODB.Stream',@Stream OUT
if @HR<>0
begin
--обработка ошибки создания объекта
EXEC [dbo].[sp_display oaerrorinfo] @Stream ,@HR
end
EXEC @HR = sp_OASetProperty @Stream,'Type',1 -- binary
EXEC @HR = sp_OASetProperty @Stream,'Mode',3 -- write|read
EXEC @HR = sp_OAMethod @Stream,'Open'
S_elect
@Size = DATALENGTH(SrvRequests.RequestData)
FROM SrvRequests WHERE SrvRequests.RequestID = @ReqID
Set @Pos=0
WHILE @Pos < @Size BEGIN
SET @BufSize = CASE WHEN @Size - @Pos < 4096 THEN @Size - @Pos ELSE 4096 END
S_elect @Buffer = substring(SrvRequests.RequestData ,@Pos+1, @BufSize)
from SrvRequests where SrvRequests.RequestID = @ReqID
EXEC @HR = sp_OAMethod @Stream, 'Write', NULL, @Buffer
SET @Pos = @Pos + @BufSize
END
EXEC @HR = sp_OAMethod @Stream,'SaveToFile',null, @FileNameLocal,2
EXEC @HR = sp_OAMethod @Stream,'Close'
EXEC @HR = sp_OADestroy @Stream
END
Рекомендуется создать еще пару процедур для внятного описания ошибок в случае их возникновения
Код CREATE PROCEDURE sp_hexadecimal
@binvalue varbinary(255),
@hexvalue varchar(255) OUTPUT
AS
DECLARE @charvalue varchar(255)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
S_elect @charvalue = '0x'
S_elect @i = 1
S_elect @length = DATALENGTH(@binvalue)
S_elect @hexstring = '0123456789abcdef'
WHILE (@i <= @length)
BEGIN
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
S_elect @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
S_elect @firstint = FLOOR(@tempint/16)
S_elect @secondint = @tempint - (@firstint* 16)
S_elect @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
S_elect @i = @i + 1
END
----------------------------------------------------------------------
CREATE PROCEDURE sp_display oaerrorinfo
@object int,
@hresult int
AS
DECLARE @output varchar(255)
DECLARE @hrhex char(10)
DECLARE @hr int
DECLARE @source varchar(255)
DECLARE @description varchar(255)
PRINT 'OLE Automation Error Information'
EXEC sp_hexadecimal @hresult, @hrhex OUT
S_elect @output = ' HRESULT: ' + @hrhex
PRINT @output
EXEC @hr = sp_OAGetErrorInfo @object, @source OUT, @description OUT
IF @hr = 0
BEGIN
S_elect @output = ' Source: ' + @source
PRINT @output
S_elect @output = ' Description: ' + @description
PRINT @output
END
ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
Категория:
OLE, ActiveX