Ошибка: Неверная дата ранее 01.01.1991 или позднее текущей даты как исправить? Большая часть контрагентов в справочнике покраснели с ошибкой "Неверная дата ранее 01.01.1991 или позднее текущей даты"
Решение:
1. Удалить Состояния контрагентов в регистре сведений. Открываем в программе обработку: Удаление и изменение записей регистра сведений
Выбираем регистр "Состояние сотрудников" и жмем Удалить записи
2. Потом в поддержке и обслуживании в фоновых заданиях (регламентированные), нашел проверка контрагентов нажал выполнить
Все проверилось и статусы в списках контрагентов стали актуальными
Категория:
Системные Ошибки Как очистить справочник удалив все не используемые элементы? Очень часто менеджеры дублируют информацию в справочниках и время от времени их приходится чистить.
Но как удалить только те элементы справочника, которые не используются в документах?
Следующий пример кода поможет это сделать(в примере обрабатывается 4 справочника: Сотрудники, ФизЛица, Договора и Контрагенты) Скачать: Обработка для УТ 10 :
Код 1C v 8.х сп=Новый СписокЗначений;
сп.Добавить("СотрудникиОрганизаций");
сп.Добавить("ФизическиеЛица");
сп.Добавить("ДоговорыКонтрагентов");
сп.Добавить("Контрагенты");
Для Каждого стр из сп Цикл
текСпр=стр.Значение;
Запрос = Новый Запрос;
Текст =
"ВЫБРАТЬ
| СотрудникиОрганизаций.Ссылка
|ИЗ
| Справочник.%текСпр% КАК СотрудникиОрганизаций
|ГДЕ
| НЕ СотрудникиОрганизаций.ПометкаУдаления И НЕ СотрудникиОрганизаций.ЭтоГруппа";
Запрос.Текст = СтрЗаменить(Текст,"%текСпр%",текСпр);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
итЗаписей = Строка(ВыборкаДетальныеЗаписи.Количество());
ном=0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ном=ном+1; Состояние(текСпр+": "+Строка(ном)+" из "+итЗаписей);
СсылкаНаУдаляемыйЭлемент = ВыборкаДетальныеЗаписи.Ссылка;
// Найти ссылки на удаляемый элемент - СсылкаНаУдаляемыйЭлемент.
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(СсылкаНаУдаляемыйЭлемент);
НайденныеСсылки = НайтиПоСсылкам(МассивСсылок);
Если НайденныеСсылки.Количество() > 0 Тогда
Сообщить("Нельзя удалять элемент:"+Строка(СсылкаНаУдаляемыйЭлемент)+", на него имеются ссылки",СтатусСообщения.Внимание);
Иначе
Сообщить("Удаляем элемент:"+Строка(СсылкаНаУдаляемыйЭлемент),СтатусСообщения.Информация);
// Получаем объект
УдаляемыйЭлемент = СсылкаНаУдаляемыйЭлемент.ПолучитьОбъект();
// Установить пометку
//УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);
// Удалить сразу
УдаляемыйЭлемент.Удалить();
КонецЕсли;
КонецЦикла;
КонецЦикла;
Категория:
Справочники Как выбрать запросом записи регистра сведений и удалить их? В регистре сведений штрих кодов появились ошибочные записи, которые надо было быстро удалить... можно конечно и ручками выбирать и жать Delete, но это не наш метод!
Код 1C v 8.3 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Штрихкоды.Штрихкод,
| Штрихкоды.Владелец,
| Штрихкоды.ТипШтрихкода,
| Штрихкоды.ЕдиницаИзмерения,
| Штрихкоды.ХарактеристикаНоменклатуры,
| Штрихкоды.СерияНоменклатуры,
| Штрихкоды.Качество
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.СерияНоменклатуры.ПометкаУдаления";
Результат = Запрос.Выполнить();
РезультатТаблица = Результат.Выгрузить();
ТекПозиция = 0;
Для каждого СтрокаЗапроса из РезультатТаблица Цикл
ОбработкаПрерыванияПользователя();
ТекПозиция = ТекПозиция + 1;
Состояние("Выполнено " + Окр(ТекПозиция / РезультатТаблица.Количество() * 100) + "%");
НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Штрихкод.Установить(СтрокаЗапроса.Штрихкод);
НаборЗаписей.Отбор.Владелец.Установить(СтрокаЗапроса.Владелец);
НаборЗаписей.Отбор.ТипШтрихкода.Установить(СтрокаЗапроса.ТипШтрихкода);
НаборЗаписей.Отбор.ЕдиницаИзмерения.Установить(СтрокаЗапроса.ЕдиницаИзмерения);
НаборЗаписей.Отбор.ХарактеристикаНоменклатуры.Установить(СтрокаЗапроса.ХарактеристикаНоменклатуры);
НаборЗаписей.Отбор.СерияНоменклатуры.Установить(СтрокаЗапроса.СерияНоменклатуры);
// Удаляем записи
НаборЗаписей.Записать(Истина);
КонецЦикла;
Предупреждение("Обработка закончена.");
Категория:
Регистры сведений 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
Можно ее использовать как макет для создания обработки под свои требования.
Пример автоматизации в котором это использовалось.
Категория:
Географическая схема Яндекс карта : вывод точек на карту Пример о том,как вывести яндекс карту на форму и далее работать с ней:
Основной HTML код карты хранится в макете:
Код VBS <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Примеры. Геокодирование.</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkFAAAAf7jmJwMAHGZHrcLKDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==" type="text/javascript"></script>
<script type="text/javascript">
var router;
var myPoints = new Array();
var myRouts = new Array();
var strOpen = "OPEN";
var strKontr = "Kontragent";
var t = new YMaps.Template('<b>$[name]</b><div id="descrID" >$[description]</div>');
YMaps.Templates.add("my#template", t);
var KopdinatShirota = 0;
var KopdinatDolgota = 0;
var UID_Zakaza = "";
/*vstavkaStiley;
var map, geoResult;
YMaps.jQuery(function () {
map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
map.setCenter(new YMaps.GeoPoint(37.62, 55.75), 12);
});
function showAddress (value, contrag, Styles, UID) {
var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
if (this.length()) {
geoResult = this.get(0);
var point = new YMaps.GeoPoint(geoResult._point.__lng, geoResult._point.__lat);
var placemark = new YMaps.Placemark(point, {style: Styles});
placemark.name = UID;
placemark.description = contrag;
myPoints.push(placemark);
map.addOverlay(placemark);
return placemark;
}else {
}
});
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
alert("Произошла ошибка: " + error);
return null;
})
}
function showAddressCoord (shirota, dolgota, contrag, Styles, UID) {
var point = new YMaps.GeoPoint(dolgota, shirota);
var placemark = new YMaps.Placemark(point, {style: Styles});
placemark.name = UID;
placemark.description = contrag;
myPoints.push(placemark);
map.addOverlay(placemark);
return placemark;
}
function removeAllOverlays (map) {
map.removeAllOverlays();
}
function AddRoute(wayPoint1, wayPoint2) {
if (myRouts.length>0) {lastRouter = myRouts[myRouts.length-1]; map.removeOverlay(lastRouter)};
var myRouter = new YMaps.Router([wayPoint1, wayPoint2], [], {viewAutoApply: true});
map.addOverlay(myRouter);
YMaps.Events.observe(myRouter, myRouter.Events.Success, function (myRouter) {
myRouter.getWayPoint(0).setIconContent('Начало маршрута');
myRouter.getWayPoint(1).setIconContent('Конец маршрута');
dlMar = myRouter.getDistance()/1000;
document.title = 'Дистанция: '+ dlMar.toFixed(2);
});
myRouts.push(myRouter);
return true;
}
function mapRazmer(map, SentrSh, SentrDlg, razmer) {
map.setCenter(new YMaps.GeoPoint(SentrSh, SentrDlg), razmer);
}
function changeStyle(numTochki, imStyle){
var restoreDefault = true;
tochka = myPoints[numTochki];
tochka.setOptions({style: imStyle}, restoreDefault);
point = tochka.getCoordPoint();
map.setCenter(new YMaps.GeoPoint(point.__lng, point.__lat), 12);
map.redraw();
return tochka.description;
}
</script>
</head>
<body //~~onload~~>
<div id="YMapsID" style="width:100%;height:100%"></div>
</form>
</body>
</html>
Код вывода карты:
Код 1C v 8.х //берем HTML-текст из макета и доделываем его
//создаем столько стилей, сколько есть различных картинок в папке "icons_"
//Загружаем в поле HTML-документа
//и позиционируем центр карты на Москву
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Макет = ПолучитьМакет("Макет");
КодХТМЛ = Макет.ПолучитьТекст();
СтрокаСтиляНачальная = "var BurG = new YMaps.Style();
|BurG.iconStyle = new YMaps.IconStyle();
|BurG.iconStyle.offset = new YMaps.Point(-12, -12);
|BurG.iconStyle.href = ""http://www.burgerking.ru/favicon.ico"";
|BurG.iconStyle.size = new YMaps.Point(20, 20);
|BurG.hideIcon = false;
|BurG.balloonContentStyle = new YMaps.BalloonContentStyle(""my#template"");";
СтрокаСтиляИтоговая = "";
//
//имяКаталогаКартинок = "D:\!1C\MAPS\icons_";
//КаталогКартинок = Новый Файл(имяКаталогаКартинок);
//Если КаталогКартинок.ЭтоКаталог() тогда
// списокИменКартинок = новый таблицаЗначений;
// списокИменКартинок.Колонки.Добавить("ИмяСтиля");
// списокИменКартинок.Колонки.Добавить("ИмяФайлаКартинки");
// МассивНайденных = НайтиФайлы(имяКаталогаКартинок, "*.gif");
// Для Каждого Файл из МассивНайденных Цикл
//
// времСтрокаСтиля = СтрокаСтиляНачальная;
// времСтрокаСтиля = стрЗаменить(времСтрокаСтиля, "BurG", сокрЛП(Файл.ИмяБезРасширения));
// времСтрокаСтиля = стрЗаменить(времСтрокаСтиля, "C:/icons_/kv2_5_x.gif", "C:/icons_/" + сокрЛП(Файл.Имя));
//
// СтрокаСтиляИтоговая = СтрокаСтиляИтоговая + времСтрокаСтиля + символы.ПС;
//
// КонецЦикла;
//конецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыОбъектов.Ссылка,
| ВидыОбъектов.ПутьКИконке,
| ВидыОбъектов.Код
|ИЗ
| Справочник.ВидыОбъектов КАК ВидыОбъектов
|ГДЕ
| ВидыОбъектов.ПометкаУдаления = ЛОЖЬ";
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
времСтрокаСтиля = СтрокаСтиляНачальная;
времСтрокаСтиля = стрЗаменить(времСтрокаСтиля, "BurG", "s"+Строка(ВыборкаДетальныеЗаписи.код));
времСтрокаСтиля = стрЗаменить(времСтрокаСтиля, "http://www.burgerking.ru/favicon.ico", сокрЛП(ВыборкаДетальныеЗаписи.ПутьКИконке));
СтрокаСтиляИтоговая = СтрокаСтиляИтоговая + времСтрокаСтиля + символы.ПС;
КонецЦикла;
СтрокаСтиляИтоговая = СтрокаСтиляИтоговая + СтрокаСтиляНачальная + символы.ПС;
КодХТМЛ = стрЗаменить(КодХТМЛ, "/*vstavkaStiley;", СтрокаСтиляИтоговая);
путьККаталогуКартинок = СтрЗаменить(КаталогПрограммы(), "\", "/");
КодХТМЛ = СтрЗаменить(КодХТМЛ,"C:/",путьККаталогуКартинок);
ЭлементыФормы.Карта.УстановитьТекст(КодХТМЛ);
табАдресов = получитьтабАдресов();
табУникальныхАдресов = табАдресов.скопировать();
табУникальныхАдресов.свернуть("Уник");
тзДанных = табАдресов.скопировать();
табАдресов.очистить();
Для Каждого стр из табУникальныхАдресов Цикл
Отбор = Новый Структура();
Отбор.Вставить("Уник",стр.Уник);
Строки = тзДанных.НайтиСтроки(Отбор);
НовСтр = табАдресов.добавить();
НовСтр.уник = стр.уник;
Если Строки.Количество() > 0 Тогда
для Каждого тздстр из Строки Цикл
НовСтр.Адрес = тздстр.Адрес;
НовСтр.КД = тздстр.КД;
НовСтр.КШ = тздстр.КШ;
НовСтр.ВидОбъекта = тздстр.ВидОбъекта;
НовСтр.Наименование=Строка(НовСтр.Наименование)+Строка(тздстр.Наименование)+"; ";
КонецЦикла;
КонецЕсли;
КонецЦикла;
ЭлементыФормы.табАдресов.СоздатьКолонки();
ВыборМасштаба = "50%";
ВыборРегиона = "Москва";
ЭлементыФормы.Надпись24.Заголовок = "Точек: "+Строка(табАдресов.количество());
КонецПроцедуры
// Вывод точек на карту
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
//имя стиля совпадает с именем картинки без расширения
Всего=Строка(табАдресов.Количество()); н=0;
Для каждого строкаАдреса Из табАдресов Цикл
н=н+1; Состояние("Вывод "+Строка(н)+" из "+Всего);
////ЭТО ПРИМЕР ВЫВОДА ТОГО ИЛИ ИНОГО МАРКЕРА В ЗАВИСИМОСТИ ОТ НЕКОЕГО ПАРАМЕТРА
//Если строкаАдреса.ДокументПродажи.суммаДокумента <1000 тогда
// имяСтиля = "BurG";
//ИначеЕсли строкаАдреса.ДокументПродажи.суммаДокумента <10000 тогда
// имяСтиля = "tr2_3_x";
//ИначеЕсли строкаАдреса.ДокументПродажи.суммаДокумента <20000 тогда
// имяСтиля = "kv3_4_x";
//ИначеЕсли строкаАдреса.ДокументПродажи.суммаДокумента <50000 тогда
// имяСтиля = "tr4_1_x";
//ИначеЕсли строкаАдреса.ДокументПродажи.суммаДокумента <100000 тогда
// имяСтиля = "kv5_2_x";
//Иначе
// имяСтиля = "cr6_3_x";
//конецЕсли;
УИД_Дока = Строка(н);
имяСтиля = "s"+Строка(строкаАдреса.ВидОбъекта.код);
Попытка
Если ЗначениеЗаполнено(строкаАдреса.КД) Тогда
ВызовФункции = "showAddressCoord(" + сокрЛП(строкаАдреса.КШ) + ", " + сокрЛП(строкаАдреса.КД) + ", '"+ сокрЛП(строкаАдреса.адрес) + "', " + имяСтиля + ", '" + сокрЛП(строкаАдреса.ВидОбъекта.наименование) + "')";
Иначе
ВызовФункции = "showAddress('" + сокрЛП(строкаАдреса.адрес) + "', '" + сокрЛП(строкаАдреса.адрес) + "', " + имяСтиля + ", '" + сокрЛП(строкаАдреса.ВидОбъекта.наименование) + "')";
КонецЕсли;
ЭлементыФормы.Карта.Document.parentWindow.eval(ВызовФункции);
исключение
Сообщить("Точка с адресом " + сокрЛП(строкаАдреса.адрес) + " не может быть отбражена на карте!" );
конецПопытки
КонецЦикла;
ТочкиНеСозданы = Ложь;
ЭлементыФормы.Карта.ПолучитьТекст();
КонецПроцедуры
//Изменение масштаба
Процедура Кнопка1Нажатие(Элемент)
если ЭлементыФормы.ВыборРегиона.значение = "Москва" Тогда
СтрокаКоординат = "37.64, 55.76, ";
ИначеЕсли ЭлементыФормы.ВыборРегиона.значение = "Тверь" Тогда
СтрокаКоординат = "35.90, 56.83, ";
ИначеЕсли ЭлементыФормы.ВыборРегиона.значение = "Балашиха" Тогда
СтрокаКоординат = "37.97, 55.82, ";
Иначе
СтрокаКоординат = "37.64, 55.76, ";
конецесли;
Если ВыборМасштаба = "" тогда
возврат;
конецесли;
числоМасштаба = Число(Лев(ВыборМасштаба, стрдлина(ВыборМасштаба)-1));
числоМасштаба = числоМасштаба + 5;
ВыборМасштаба = строка(числоМасштаба) + "%";
ТекущийМасштаб = Строка(Цел((числоМасштаба/125)*(20)+4));
если стрДлина(ТекущийМасштаб) =1 тогда
ТекущийМасштаб = "0" + ТекущийМасштаб;
конецесли;
ЭлементыФормы.Карта.Document.parentWindow.eval("mapRazmer(map," + СтрокаКоординат + ТекущийМасштаб + ")");
КонецПроцедуры
Пример обратного геокодирования - получение координат по адресу:
Код 1C v 8.х Процедура ПолучитьКоординаты() Экспорт
Яндекс = Новый HTTPСоединение("geocode-maps.yandex.ru",,,,,Истина);
ВременныйФайл = КаталогВременныхФайлов() + "Yandex_geocode_" + СокрЛП(Новый УникальныйИдентификатор);
Попытка
Яндекс.Получить("/1.x/?geocode=" + Адрес + "&results=1", ВременныйФайл);
Исключение
Сообщить("Ошибка при попытке геокодировать по яндексу адрес: " + Адрес);
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ВременныйФайл);
ПостроительDOM = Новый ПостроительDOM;
ДокументДОМ = ПостроительDOM.Прочитать(ЧтениеXML);
СписокText = ДокументДОМ.ПолучитьЭлементыПоИмени("text");
СписокPos = ДокументДОМ.ПолучитьЭлементыПоИмени("pos");
Если (СписокText.Количество() = 0) ИЛИ (СписокPos.Количество() = 0) Тогда
Возврат;
КонецЕсли;
Для ъ = 0 по СписокText.Количество()-1 Цикл
Координаты = СписокPos[Ъ].ТекстовоеСодержимое;
Разделитель = Найти(Координаты," ");
Широта = Число(Сред(Координаты, Разделитель + 1));
Долгота = Число(Лев(Координаты, Разделитель - 1));
Если Широта = 0 ИЛИ Долгота = 0 Тогда
Продолжить;
КонецЕсли;
КД = Долгота;
КШ = Широта;
КонецЦикла;
КонецПроцедуры
Обработка вырванная из конфигурации: YandexMap.rar
Можно ее использовать как макет для создания обработки под свои требования.
Пример автоматизации в котором это использовалось.
Категория:
Географическая схема Как узнать текущие релизы 7.7 для Украины Код 1C v 7.x
Функция ПолучитьВерсии()
Перем Url, HtmlTab, Строк, Р, НомСтроки, Таб, Версия, ДатаВремя;
ОчиститьОкноСообщений();
СтатусВозврата(0);
Url = "http://www.1c.ru/ukraina/support/release.jsp?time=" + _GetPerformanceCounter();
Сообщить(Url);
IE = СоздатьОбъект("InternetExplorer.Application");
IE.Navigate(Url);
Пока (IE.readyState <> 4) Или (IE.Busy = -1) Цикл
Состояние("Получение страницы... " + Url);
КонецЦикла;
HtmlTab = IE.Document.getElementsByTagName("table").item(4).rows(0).cells(4).childNodes.item(10);
Строк = HtmlTab.rows.length;
Таб = СоздатьОбъект("ТаблицаЗначений");
Таб.НоваяКолонка("Версия" , "Строка");
Таб.НоваяКолонка("Дата" , "Дата");
Таб.НоваяКолонка("Время" , "Строка");
Таб.НоваяКолонка("Продукт" , "Строка");
Для НомСтроки = 1 По Строк Цикл
Р = HtmlTab.rows(НомСтроки - 1);
Если Р.cells.length <> 3 Тогда
Продолжить;
КонецЕсли;
Версия = Р.cells(2).innerText;
Если Найти(Версия, "7.70.") = 0 Тогда
Продолжить;
КонецЕсли;
ДатаВремя = Р.cells(0).innerText;
Таб.НоваяСтрока();
Таб.Дата = ДатаВремя;
Таб.Время = Сред(ДатаВремя, 12);
Таб.Продукт = Р.cells(1).innerText;
Таб.Версия = Версия;
КонецЦикла;
Таб.Сортировать("Дата-,Время-");
Возврат Таб;
КонецФункции
Категория:
HTML, JS, VML Полезные функции: Принятые и Уволенные, работающие сотрудники, Неполное рабочее время, Отпуск без ЗП Дорабатывая у клиента отчет по данным для предоставления в статистику - появилось несколько готовых функций, которые Вам наверняка понадобятся:
Код 1C v 8.х Функция ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём(Запрос)
Запрос.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(Работники.НеполноеРабочееВремя) КАК НеполноеРабочееВремя,
| Работники.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТ_СписокРаботниковНаНеполномРабочемГрафике
|ИЗ
| (ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
| РаботникиОрганизацийСрезПоследних.ГрафикРаботы.СокращенноеРабочееВремя КАК НеполноеРабочееВремя
| ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, Организация =Организация) КАК РаботникиОрганизацийСрезПоследних
| ГДЕ
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| РаботникиОрганизаций.Сотрудник,
| РаботникиОрганизаций.ГрафикРаботы.СокращенноеРабочееВремя
| ИЗ
| РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ГДЕ
| РаботникиОрганизаций.Период МЕЖДУНачалоПериода ИКонецПериода
| И РаботникиОрганизаций.Организация =Организация
| И РаботникиОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)) КАК Работники
|ГДЕ
| Работники.НеполноеРабочееВремя
|
|СГРУППИРОВАТЬ ПО
| Работники.Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СписокРаботниковНаНеполномРабочемГрафике.Сотрудник) КАК КоличествоСотрудниковНаСокрРабВремени
|ИЗ
| ВТ_СписокРаботниковНаНеполномРабочемГрафике КАК ВТ_СписокРаботниковНаНеполномРабочемГрафике";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.КоличествоСотрудниковНаСокрРабВремени
Иначе
Возврат 0
КонецЕсли;
КонецФункции //ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём()
Функция ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП(Запрос)
Запрос.Текст =
"ВЫБРАТЬ
| СостояниеРаботниковСрезПоследних.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиВОтпускахБезСохрЗП
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&НачалоПериода, Организация =Организация) КАК СостояниеРаботниковСрезПоследних
|ГДЕ
| СостояниеРаботниковСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты)
| И ВЫБОР
| КОГДА СостояниеРаботниковСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА СостояниеРаботниковСрезПоследних.ПериодЗавершения >=НачалоПериода
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И СостояниеРаботниковСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СостояниеРаботниковОрганизаций.Сотрудник
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
|ГДЕ
| СостояниеРаботниковОрганизаций.Период МЕЖДУНачалоПериода ИКонецПериода
| И СостояниеРаботниковОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты)
| И СостояниеРаботниковОрганизаций.Организация =Организация
| И СостояниеРаботниковОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиВОтпускахБезСохрЗП.Сотрудник) КАК КоличествоСотрудниковВОтпускеБезСохраненияЗП
|ИЗ
| ВТ_СотрудникиВОтпускахБезСохрЗП КАК ВТ_СотрудникиВОтпускахБезСохрЗП";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.КоличествоСотрудниковВОтпускеБезСохраненияЗП
Иначе
Возврат 0
КонецЕсли;
КонецФункции //ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП()
Функция ПолучитьКоличествоПринятыхСотрудников(Запрос)
Запрос.Текст =
"ВЫБРАТЬ
| ПриемНаРаботуВОрганизациюРаботникиОрганизации.Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиПринятыеПоПриемуНаРаботу
|ИЗ
| Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ПриемНаРаботуВОрганизациюРаботникиОрганизации
|ГДЕ
| ПриемНаРаботуВОрганизациюРаботникиОрганизации.ДатаПриема МЕЖДУНачалоПериода ИКонецПериода
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Проведен
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Организация =Организация
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиПринятыеПоПриемуНаРаботу.Сотрудник) КАК КоличествоСотрудниковПринятыхНаРаботу
|ИЗ
| ВТ_СотрудникиПринятыеПоПриемуНаРаботу КАК ВТ_СотрудникиПринятыеПоПриемуНаРаботу";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.КоличествоСотрудниковПринятыхНаРаботу
Иначе
Возврат 0
КонецЕсли;
КонецФункции //ПолучитьКоличествоПринятыхСотрудников()
Функция ПолучитьКоличествоУволенныхСотрудников(Запрос)
Запрос.Текст =
"ВЫБРАТЬ
| УвольнениеИзОрганизацийРаботникиОрганизации.Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиУволенные
|ИЗ
| Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацийРаботникиОрганизации
|ГДЕ
| УвольнениеИзОрганизацийРаботникиОрганизации.ДатаУвольнения МЕЖДУНачалоПериода ИКонецПериода
| И УвольнениеИзОрганизацийРаботникиОрганизации.Ссылка.Проведен
| И УвольнениеИзОрганизацийРаботникиОрганизации.Ссылка.Организация =Организация
| И УвольнениеИзОрганизацийРаботникиОрганизации.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиУволенные.Сотрудник) КАК КоличествоУволенныхСотрудников
|ИЗ
| ВТ_СотрудникиУволенные КАК ВТ_СотрудникиУволенные";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.КоличествоУволенныхСотрудников;
Иначе
Возврат 0
КонецЕсли;
КонецФункции
Функция ПолучитьКоличествоСотрудниковСписочногоСостава(Запрос)
Запрос.Текст =
"ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиСписочногоСостава
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, 1), Организация =Организация) КАК РаботникиОрганизацийСрезПоследних
|ГДЕ
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И (РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
| ИЛИ РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство))
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиСписочногоСостава.Сотрудник) КАК КоличествоСотрудниковСписочногоСостава
|ИЗ
| ВТ_СотрудникиСписочногоСостава КАК ВТ_СотрудникиСписочногоСостава";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.КоличествоСотрудниковСписочногоСостава;
Иначе
Возврат 0
КонецЕсли;
КонецФункции
---------- Использование -------------------
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(мДатаНачалаПериодаОтчета));
Запрос.УстановитьПараметр("КонецПериода", КонецДня(мДатаКонцаПериодаОтчета));
// Сотрудники с неполным рабочим днём
СтруктураПолей.П0001000201 = ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём(Запрос);
// Отпуска без сохранения зп
СтруктураПолей.П0001000501 = ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП(Запрос);
// Принятые сотрудники
СтруктураПолей.П0001000601 = ПолучитьКоличествоПринятыхСотрудников(Запрос);
// Выбывшие сотрудники
СтруктураПолей.П0001000801 = ПолучитьКоличествоУволенныхСотрудников(Запрос);
// По собственному желанию
СтруктураПолей.П0001001201 = СтруктураПолей.П0001000801;
// Количество сотрудников списочного состава на конец месяца
СтруктураПолей.П0001001301 = ПолучитьКоличествоСотрудниковСписочногоСостава(Запрос);
Категория:
1С Зарплата и Управление Персоналом 2.5 1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? Код 1C v 7.x
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе
Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯчейки, Док, ТекстВЯчейке, ТабКурсов;
Url = "http://www.bank.gov.ua/control/uk/curmetal/currency/search?formType=searchFormDate&time_step=" + ?(Ежедневно = 1, "daily", "monthly") +
"&date=" + Формат(ДатаКурса, "ДДДММГГГГ") + "&outer=table&execute=run&time=" + _GetPerformanceCounter();
Сообщить(Url);
Reader = СоздатьОбъект("MSXML2.XMLHTTP");
Reader.Open("Get", Url, 0);
Reader.Send();
Пока Reader.ReadyState <> 4 Цикл
Состояние("Чтение данных за <" + ДатаКурса + "> ");
КонецЦикла;
Док = СоздатьОбъект("HtmlFile");
Док.open("text/html");
Док.write(Reader.ResponseText);
Док.close();
HtmlTab = Док.getElementsByTagName("table").item(5);
ТабКурсов = СоздатьОбъект("ТаблицаЗначений");
ТабКурсов.НоваяКолонка("ЦифрКод" , "Строка", 3, , "Цифр. код");
ТабКурсов.НоваяКолонка("БуквКод" , "Строка", 3, , "Букв. код");
ТабКурсов.НоваяКолонка("Название" , "Строка");
ТабКурсов.НоваяКолонка("Курс" , "Число" ,14, 4);
ТабКурсов.НоваяКолонка("Кратность" , "Число" , 9, 0);
Строк = HtmlTab.rows.length;
Для НомСтроки = 1 По Строк Цикл
Р = HtmlTab.rows(НомСтроки - 1);
Если (НомСтроки = 1) Или (Р.cells.length <> 5) Тогда // 1 - я заголовок, остальные не с данными
Продолжить;
КонецЕсли;
ТабКурсов.НоваяСтрока();
ТабКурсов.ЦифрКод = СокрЛП(Р.cells(0).innerText);
ТабКурсов.БуквКод = СокрЛП(Р.cells(1).innerText);
ТабКурсов.Название = СокрЛП(Р.cells(3).innerText);
ТабКурсов.Курс = 0 + СтрЗаменить(СокрЛП(Р.cells(4).innerText), " ", "");
ТабКурсов.Кратность = 0 + СтрЗаменить(СокрЛП(Р.cells(2).innerText), " ", "");
КонецЦикла;
Reader = 0;
ТабКурсов.ВыбратьСтроку(, "Курсы за " + ДатаКурса);
Возврат ТабКурсов;
КонецФункции
Категория:
HTML, JS, VML Как получить курсы валют с сайта http://finance.ua/ за любую дату ? Код 1C v 7.x
Функция ПолучитьТаблицуКурсов(ДатаКурса)
Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯчейки, Док, ТекстВЯчейке, ТабКурсов;
Reader = СоздатьОбъект("MSXML2.XMLHTTP");
Url = "http://tables.finance.ua/ru/currency/official/-/1/" + ДатаГод(ДатаКурса) + "/" + ДатаМесяц(ДатаКурса) + "/" + ДатаЧисло(ДатаКурса) + "?time=" + _GetPerformanceCounter();
Сообщить(Url);
Reader.Open("Get", Url, 0);
Reader.Send();
Пока Reader.ReadyState <> 4 Цикл
Состояние("Чтение данных за <" + ДатаКурса + "> ");
КонецЦикла;
Док = СоздатьОбъект("HtmlFile");
Док.open("text/html");
Док.write(Reader.ResponseText);
Док.close();
HtmlTab = Док.getElementByID("currency-official-table");
Строк = HtmlTab.rows.length;
ТабКурсов = СоздатьОбъект("ТаблицаЗначений");
ТабКурсов.НоваяКолонка("ЦифрКод" , "Строка", 3, , "Цифр. код");
ТабКурсов.НоваяКолонка("БуквКод" , "Строка", 3, , "Букв. код");
ТабКурсов.НоваяКолонка("Название" , "Строка");
ТабКурсов.НоваяКолонка("Курс" , "Число" ,14, 4);
ТабКурсов.НоваяКолонка("Кратность" , "Число" , 9, 0);
Для НомСтроки = 1 По Строк Цикл
Р = HtmlTab.rows(НомСтроки - 1);
Если (НомСтроки = 1) Или (Р.cells.length <> 7) Тогда // 1 - я заголовок, остальные не с данными
Продолжить;
КонецЕсли;
ТабКурсов.НоваяСтрока();
ТабКурсов.ЦифрКод = СокрЛП(Р.cells(0).innerText);
ТабКурсов.БуквКод = СокрЛП(Р.cells(1).innerText);
ТабКурсов.Название = СокрЛП(Р.cells(3).innerText);
ТабКурсов.Курс = 0 + СтрЗаменить(СокрЛП(Р.cells(4).innerText), " ", "");
ТабКурсов.Кратность = 0 + СтрЗаменить(СокрЛП(Р.cells(2).innerText), " ", "");
КонецЦикла;
Reader = 0;
ТабКурсов.ВыбратьСтроку(, "Курсы за " + ДатаКурса);
Возврат ТабКурсов;
КонецФункции
Категория:
HTML, JS, VML Как правильно оформить отсутствие по болезни кадровыми документами? При оформлении отсутствия по болезни кадровые документы составляются в следующей последовательности: 1.Неявки и болезни на дату невыхода, состояние -по невыясненной причине 2.Возврат на работу на дату окончания больничного 3.Начисление по больничному листу 4.Табель учета рабочего времени последним днем месяца 5.Начисление зарплаты.
Категория:
1С Зарплата и Управление Персоналом 2.5 Откуда берутся отрицательные числа в отчете «Остатки товаров»? Вопрос: При формировании отчета «Остатки товаров» по некоторым позициям получаются отрицательные числа. Почему это происходит? Ответ: Рассмотрим, как в данной ситуации изменялось состояние регистра учета «РЕЗЕРВЫ ТОВАРОВ»:Допустим, было зарезервировано 100 единиц товара. При выписке счета покупателю мы получаем РЕЗЕРВЫ ТОВАРОВ +100 (по данному товару - помним, что для покупателя отложено 100 единиц).Далее предположим, покупатель оплатил всего 20 единиц товара, которые были потом отгружены по расходной накладной. Мы видим РЕЗЕРВЫ ТОВАРОВ -20 (резерв по товару уменьшился на 20).Покупатель решил не оплачивать оставшиеся 80 единиц товара.Теперь, если удалить первоначальный документ «Счет» (либо отменить его проведение), то получим РЕЗЕРВЫ ТОВАРОВ -100. То есть программа вполне обоснованно будет считать, что первоначальный резерв товара отменен. В регистре учета «РЕЗЕРВЫ ТОВАРОВ» после всех этих действий останется 100-20-100= -20.Чтобы такой ситуации не возникало, не удаляйте счет, а пользуйтесь специальным документом «Снятие резерва». Он снимет с резерва товар, оставшийся невостребованным.
Категория:
1С Управление торговлей 10.3 Универсальный парсер RSS для 1С На одном проекте - клиент попросил отображать в программе данные, которые выдаю специализированные сайта в формате RSS - Что делать !?
Писать парсер rss для 1С
Первым делом, взглянув на ссылки, подумал что - обычный XML, сейчас его разложу и быстренько загружу в базу, но:
Выяснилось что сайты имеют разные форматы ввода RSS и главное они не валидные(
таким образом, написав небольшой код, который получает ссылку, далее XMLФайл.Прочитать() на одном сайте проходил на ура (этот пример я описывал в статье: Чтение данных с сайта в формате XML и загрузка в 1С ), а вот второй сайт, и третий тоже, при попытке прочитать() выдавали:
{ОбщийМодуль.РегЗадания.Модуль(79)}: Ошибка при вызове метода контекста (Прочитать)
Пока XMLФайл.Прочитать() Цикл
по причине:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Extra content at the end of the document
SystemId url rss
решил попробовать на rss других известных сайтов - 80% из проверяемых выдавали ошибку
Пришлось написать прямой построчный парсер RSS: Структура конфигурации
ИсточникиRSS - URL на RSS, ДанныеRSS - сюда записываются загруженные данные новостей
Код получился таким(в принципе код универсальный, но возможно что-то придется подпилить):
Код 1C v 8.3
// RSS
Процедура ПрочитатьRSS(ИсточникRSS)
url = ИсточникRSS.UrlRSS;
// Получим Сервер
Если Найти(url,".ru")>0 Тогда urlСервер = Лев(url,Найти(url,".ru")+2);
ИначеЕсли Найти(url,".com")>0 Тогда urlСервер = Лев(url,Найти(url,".com")+3);
ИначеЕсли Найти(url,".org")>0 Тогда urlСервер = Лев(url,Найти(url,".org")+3);
ИначеЕсли Найти(url,".info")>0 Тогда urlСервер = Лев(url,Найти(url,".info")+4);
ИначеЕсли Найти(url,".pro")>0 Тогда urlСервер = Лев(url,Найти(url,".pro")+3);
КонецЕсли;
//Определим тип соединения
Если Лев(url,5)="https" Тогда
//ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
ssl = Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено );
ТекАдрес = СтрЗаменить(url,urlСервер,""); Сервер = СтрЗаменить(urlСервер,"https://","");
Соединение = Новый HTTPСоединение(Сервер,,,,,
5, // таймаут в секундах
ssl // защищенное HTTPS соединение
);
Иначе //Обычный HTTP
ТекАдрес = СтрЗаменить(url,urlСервер,""); Сервер = СтрЗаменить(urlСервер,"http://","");
Соединение = Новый HTTPСоединение(Сервер);
КонецЕсли;
Заголовки = Новый Соответствие;
Заголовки.Вставить("host", Сервер);
Запрос = Новый HTTPЗапрос(ТекАдрес, Заголовки);
Ответ =Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда // Данные получены, обрабатываем их
Содержимое= Ответ.ПолучитьТелоКакСтроку();
//Преобразуем содержимое
Содержимое = СтрЗаменить(Содержимое,"<br/>","|");
Содержимое = СтрЗаменить(Содержимое,"<![CDATA[",""); Содержимое = СтрЗаменить(Содержимое,"]]>","");
Содержимое = СтрЗаменить(Содержимое,Символы.ПС,""); Содержимое = СтрЗаменить(Содержимое,Символы.ВК,"");
Содержимое = СтрЗаменить(Содержимое,Символы.ВТаб,""); Содержимое = СтрЗаменить(Содержимое,Символы.Таб,"");
Содержимое = СтрЗаменить(Содержимое,"><",">"+Символы.ПС+"<");
RegExp = Новый COMОбъект("VBScript.RegExp"); //Регулярка
RegExp.IgnoreCase = Ложь;
RegExp.Global = Истина;
RegExp.MultiLine = Истина;
RegExp.Pattern = "<[^>]*>"; //Ищем теги HTML
//Разберем полученный текст в таблицу
ЭтоЗапись=Ложь;
Для н=1 По СтрЧислоСтрок(Содержимое)Цикл
обрТекст=СтрПолучитьСтроку(Содержимое,н);
Если обрТекст = "<item>" Тогда //Началась запись
ЗаписьСтр = Новый Структура(); ЭтоЗапись=Истина; Продолжить;
ИначеЕсли обрТекст = "</item>" Тогда //Закончилась запись
/////////////// ЗАПИСЬ Закончилась //////////////
/// теперь запишем ее в базу - Справочник ДанныеRSS
// сначала ПОИСК ДУБЛЕЙ - вдруг уже загружен
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеRSS.Ссылка
|ИЗ
| Справочник.ДанныеRSS КАК ДанныеRSS
|ГДЕ
| ДанныеRSS.ИсточникRSS =ИсточникRSS
| И ДанныеRSS.link ПОДОБНОlink";
Запрос.УстановитьПараметр("link", "%"+ЗаписьСтр.link+"%");
Запрос.УстановитьПараметр("ИсточникRSS", ИсточникRSS);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Если РезультатЗапроса.Следующий() Тогда
// Такая запись уже есть, пока ничего не делаем
Иначе
//СОЗДАЕМ Новый
НовЭлем = Справочники.ДанныеRSS.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(НовЭлем,ЗаписьСтр);
НовЭлем.ИсточникRSS = ИсточникRSS;
НовЭлем.Записать();
КонецЕсли;
/////////////////////// *** /////////////////////
ЭтоЗапись=Ложь; Продолжить;
КонецЕсли; //Данные записи
Если ЭтоЗапись Тогда
Если Найти(обрТекст,"title>")>0 и Найти(обрТекст,"/title>")>0 Тогда
обрТекст = СтрЗаменить(обрТекст,"title",""); обрТекст = СтрЗаменить(обрТекст,"<>",""); обрТекст = СтрЗаменить(обрТекст,"</>","");
ЗаписьСтр.Вставить("Наименование",СокрЛП(обрТекст));
КонецЕсли;
Если Найти(обрТекст,"link>")>0 и Найти(обрТекст,"/link>")>0 Тогда
обрТекст = СтрЗаменить(обрТекст,"link",""); обрТекст = СтрЗаменить(обрТекст,"<>",""); обрТекст = СтрЗаменить(обрТекст,"</>","");
ЗаписьСтр.Вставить("link",СокрЛП(обрТекст));
КонецЕсли;
Если Найти(обрТекст,"description>")>0 и Найти(обрТекст,"/description>")>0 Тогда
обрТекст = СтрЗаменить(обрТекст,"description",""); обрТекст = СтрЗаменить(обрТекст,"<>",""); обрТекст = СтрЗаменить(обрТекст,"</>","");
обрТекст=RegExp.Replace(обрТекст, ""); //Удалим все теги
ЗаписьСтр.Вставить("desc",СокрЛП(обрТекст));
КонецЕсли;
Если Найти(обрТекст,"pubDate>")>0 и Найти(обрТекст,"/pubDate>")>0 Тогда
обрТекст = СтрЗаменить(обрТекст,"pubDate",""); обрТекст = СтрЗаменить(обрТекст,"<>",""); обрТекст = СтрЗаменить(обрТекст,"</>","");
ЗаписьСтр.Вставить("pubDate",ПреобразоватьRFC822КДате0(СокрЛП(обрТекст)));
КонецЕсли;
Если Найти(обрТекст,"enclosure")>0 Тогда
обрТекст = СтрЗаменить(обрТекст,"""",""); обрТекст = СтрЗаменить(обрТекст,"<enclosure url=","");
обрТекст = СтрЗаменить(обрТекст,"<enclosure url=",""); обрТекст = СтрЗаменить(обрТекст,"type=image/png length=/>","");
ЗаписьСтр.Вставить("img",СокрЛП(обрТекст));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПроверкаRSS() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИсточникиRSS.Ссылка КАК Ссылка
|ИЗ
| Справочник.ИсточникиRSS КАК ИсточникиRSS
|ГДЕ
| ИсточникиRSS.Использовать
| И ДОБАВИТЬКДАТЕ(ИсточникиRSS.ДатаПоследнегоОбновления, СЕКУНДА, ИсточникиRSS.ПериодОбновленияВСекундах) <ТекДата";
Запрос.УстановитьПараметр("ТекДата", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ПрочитатьRSS(ВыборкаДетальныеЗаписи.Ссылка);
// Запишем дату последнего обновления
ТекОб = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
ТекОб.ДатаПоследнегоОбновления = ТекущаяДата();
ТекОб.Записать();
КонецЦикла;
КонецПроцедуры
Функция ПреобразоватьRFC822КДате0(ДатаВФорматеRFC822) Экспорт
КопияСтроки = ДатаВФорматеRFC822;
СтруктураДаты = Новый Структура("Год,Месяц,День,Час,Минута,Секунда", "","","","","","");
Месяцы = Новый Структура("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "01","02","03","04","05","06","07","08","09","10","11","12");
Для каждого КлючИЗначение Из Месяцы Цикл
Позиция = Найти(КопияСтроки,КлючИЗначение.Ключ);
Если Позиция > 0 Тогда
СтруктураДаты.Месяц = КлючИЗначение.Значение;
Прервать;
КонецЕсли;
КонецЦикла;
Состояние = 0;
КопияСтроки = СтрЗаменить(КопияСтроки,", 1 ",", 01 ");
КопияСтроки = СтрЗаменить(КопияСтроки,", 2 ",", 02 ");
КопияСтроки = СтрЗаменить(КопияСтроки,", 3 ",", 03 ");
КопияСтроки = СтрЗаменить(КопияСтроки,", 4 ",", 04 ");
КопияСтроки = СтрЗаменить(КопияСтроки,", 5 ",", 05 ");
КопияСтроки = СтрЗаменить(КопияСтроки,", 6 ",", 06 ");
КопияСтроки = СтрЗаменить(КопияСтроки,", 7 ",", 07 ");
КопияСтроки = СтрЗаменить(КопияСтроки,", 8 ",", 08 ");
КопияСтроки = СтрЗаменить(КопияСтроки,", 9 ",", 09 ");
Для ш=0 По СтрДлина(КопияСтроки) Цикл
ТекущийСимвол = Сред(КопияСтроки,ш,1); //ПолучитьСимвол(КопияСтроки, ш);
ТекСимволЦифра= ЭтоЦифра(ТекущийСимвол);
Если ТекСимволЦифра И Состояние = 0 Тогда
СтруктураДаты.День = СтруктураДаты.День + ТекущийСимвол;
Состояние = 1; //начало день
ИначеЕсли ТекСимволЦифра И Состояние = 1 Тогда
СтруктураДаты.День = СтруктураДаты.День + ТекущийСимвол;
Состояние = 2; //ждем год
ИначеЕсли ТекСимволЦифра И Состояние = 2 Тогда
СтруктураДаты.Год = СтруктураДаты.Год + ТекущийСимвол;
Состояние = 3; //продолжаем год
ИначеЕсли ТекСимволЦифра И Состояние = 3 Тогда
СтруктураДаты.Год = СтруктураДаты.Год + ТекущийСимвол;
ИначеЕсли ТекущийСимвол = " " И Состояние = 3 Тогда
Состояние = 4; //дальше час
ИначеЕсли ТекСимволЦифра И Состояние = 4 Тогда
СтруктураДаты.Час = СтруктураДаты.Час + ТекущийСимвол;
ИначеЕсли ТекущийСимвол = ":" И Состояние = 4 Тогда
Состояние = 5; //дальше минута
ИначеЕсли ТекСимволЦифра И Состояние = 5 Тогда
СтруктураДаты.Минута = СтруктураДаты.Минута + ТекущийСимвол;
ИначеЕсли ТекущийСимвол = ":" И Состояние = 5 Тогда
Состояние = 6; //дальше секунда
ИначеЕсли ТекСимволЦифра И Состояние = 6 Тогда
СтруктураДаты.Секунда = СтруктураДаты.Секунда + ТекущийСимвол;
ИначеЕсли ТекущийСимвол = " " И Состояние = 6 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Попытка
Результат = Дата(СтруктураДаты.Год+СтруктураДаты.Месяц+СтруктураДаты.День
+СтруктураДаты.Час+СтруктураДаты.Минута+СтруктураДаты.Секунда);
Исключение
Результат = Неопределено;
КонецПопытки;
Возврат Результат;
КонецФункции
Функция ЭтоЦифра(Символ) Экспорт
Если (КодСимвола(Символ)>=48) И (КодСимвола(Символ)<=57) Тогда Возврат Истина; Иначе Возврат ложь; КонецЕсли;
КонецФункции
Функция ПолучитьСимвол(КопияСтроки, ш)
Возврат Сред(КопияСтроки,ш,1);
КонецФункции
Результат загрузки новостей RSS HelpF.pro
Кстати, как позже выяснилось, здесь уже есть статья с примером через IE и DOM: Получения новостей с RSS-канала сайта buh.ru
Категория:
Работа с Интернет, Почтой (Mail), FTP Как преобразовать дату в формат RFC 822 и обратно? Создавая обмены данными между 1С и сайтами, часто приходится форматировать вывод даты в стандарт RCF-822 или преобразовывать его в понятную для 1С ДатуВремя.
Дата в формате RFC-822 выглядит так: Tue, 12 Aug 2013 14:15:00 +0400
Небольшая справка по стандартам:
Как дату перевести в формат RFC-822?
Код 1C v 8.2 УП ДатаВФорматеRFC822 = Формат(ТекущаяДата(),"Л=en_US; ДФ='ddd, dd MMM yyyy hh:mm:ss +0400 '");
Как из формата RFC-822 получить дату и время для 1С?
Код 1C v 8.2 УП // Функция преобразовывает дату в формате RFC822 к формату 1С - дата и время
// Параметры
// ДатаВФорматеRFC822 – Строка вида "Thu, 10 Aug 2006 14:48:27 +0400"
// Возвращаемое значение:
// <Дата> – Результат преобразования или Неопределено, если преобразование не удалось
Функция ПреобразоватьRFC822КДате0(ДатаВФорматеRFC822) Экспорт
КопияСтроки = ДатаВФорматеRFC822;
СтруктураДаты = Новый Структура("Год,Месяц,День,Час,Минута,Секунда", "","","","","","");
Месяцы = Новый Структура("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", "01","02","03","04","05","06","07","08","09","10","11","12");
Для каждого КлючИЗначение Из Месяцы Цикл
Позиция = Найти(КопияСтроки,КлючИЗначение.Ключ);
Если Позиция > 0 Тогда
СтруктураДаты.Месяц = КлючИЗначение.Значение;
Прервать;
КонецЕсли;
КонецЦикла;
Состояние = 0;
Для ш=0 По СтрДлина(КопияСтроки) Цикл
ТекущийСимвол = ПолучитьСимвол(КопияСтроки, ш);
ТекСимволЦифра= ЭтоЦифра(ТекущийСимвол);
Если ТекСимволЦифра И Состояние = 0 Тогда
СтруктураДаты.День = СтруктураДаты.День + ТекущийСимвол;
Состояние = 1; //начало день
ИначеЕсли ТекСимволЦифра И Состояние = 1 Тогда
СтруктураДаты.День = СтруктураДаты.День + ТекущийСимвол;
Состояние = 2; //ждем год
ИначеЕсли ТекСимволЦифра И Состояние = 2 Тогда
СтруктураДаты.Год = СтруктураДаты.Год + ТекущийСимвол;
Состояние = 3; //продолжаем год
ИначеЕсли ТекСимволЦифра И Состояние = 3 Тогда
СтруктураДаты.Год = СтруктураДаты.Год + ТекущийСимвол;
ИначеЕсли ТекущийСимвол = " " И Состояние = 3 Тогда
Состояние = 4; //дальше час
ИначеЕсли ТекСимволЦифра И Состояние = 4 Тогда
СтруктураДаты.Час = СтруктураДаты.Час + ТекущийСимвол;
ИначеЕсли ТекущийСимвол = ":" И Состояние = 4 Тогда
Состояние = 5; //дальше минута
ИначеЕсли ТекСимволЦифра И Состояние = 5 Тогда
СтруктураДаты.Минута = СтруктураДаты.Минута + ТекущийСимвол;
ИначеЕсли ТекущийСимвол = ":" И Состояние = 5 Тогда
Состояние = 6; //дальше секунда
ИначеЕсли ТекСимволЦифра И Состояние = 6 Тогда
СтруктураДаты.Секунда = СтруктураДаты.Секунда + ТекущийСимвол;
ИначеЕсли ТекущийСимвол = " " И Состояние = 6 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Попытка
Результат = Дата(СтруктураДаты.Год+СтруктураДаты.Месяц+СтруктураДаты.День
+СтруктураДаты.Час+СтруктураДаты.Минута+СтруктураДаты.Секунда);
Исключение
Результат = Неопределено;
КонецПопытки;
Возврат Результат;
КонецФункции // ПреобразоватьRFC822КДате()
В процессе изучения вопроса, встретил еще несколько вариантов:
Код 1C v 8.х // Автор: Mavka
// По типу: Wed, 30 Mar 2011 17:50:11 +0200
// Я написала код, но без учета часовых поясов(
Функция ВДатуRFC822(Дата1С, ПоправкаGMT) Экспорт
Перем ТемпДата;
Перем ТемпГод;
Перем ТемпМесяц;
Перем ТемпДень;
Перем ДатаRFC822;
Перем ТемпЧас;
Перем ТемпМинута;
Перем ТемпСекунда;
Перем НомерДняНедели;
Перем ТемпДеньНедели;
Перем МесяцИмя;
ТемпДата = Дата1С - 60 * 60 * ПоправкаGMT;
ТемпГод = СтрЗаменить(Формат(Год(ТемпДата),"ND=4; NLZ="),Символы.НПП,"");
ТемпМесяц = Месяц(ТемпДата);
Если ТемпМесяц = 1 Тогда
МесяцИмя = "Jan";
ИначеЕсли ТемпМесяц = 2 Тогда
МесяцИмя = "Feb";
ИначеЕсли ТемпМесяц = 3 ТОгда
МесяцИмя = "Mar";
ИначеЕсли ТемпМесяц = 4 Тогда
МесяцИмя = "Apr";
ИначеЕсли ТемпМесяц = 5 Тогда
МесяцИмя = "May";
ИначеЕсли ТемпМесяц = 6 Тогда
МесяцИмя = "Jun";
ИначеЕсли ТемпМесяц = 7 Тогда
МесяцИмя = "Jul";
ИначеЕсли ТемпМесяц = 8 ТОгда
МесяцИмя = "Aug";
ИначеЕсли ТемпМесяц = 9 Тогда
МесяцИмя = "Sep";
ИначеЕсли ТемпМесяц = 10 Тогда
МесяцИмя = "Oct";
ИначеЕсли ТемпМесяц = 11 Тогда
МесяцИмя = "Nov";
Иначе
МесяцИмя = "Dec";
КонецЕсли;
ТемпДень = Формат(День(ТемпДата),"ND=2; NLZ=");
НомерДняНедели = ДеньНедели(ТемпДата);
Если НомерДняНедели = 1 Тогда
ТемпДеньНедели = "Mon";
ИначеЕсли НомерДняНедели = 2 Тогда
ТемпДеньНедели = "Tue";
ИначеЕсли НомерДняНедели = 3 ТОгда
ТемпДеньНедели = "Wed";
ИначеЕсли НомерДняНедели = 4 Тогда
ТемпДеньНедели = "Thu";
ИначеЕсли НомерДняНедели = 5 Тогда
ТемпДеньНедели = "Fri";
ИначеЕсли НомерДняНедели = 6 Тогда
ТемпДеньНедели = "Sat";
Иначе
ТемпДеньНедели = "Sun";
КонецЕсли;
ТемпЧас = ?(Час(ТемпДата) = 0, "00", Формат(Час(ТемпДата),"ND=2; NLZ="));
ТемпМинута = ?(Минута(ТемпДата) = 0, "00", Формат(Минута(ТемпДата),"ND=2; NLZ="));
ТемпСекунда = ?(Секунда(ТемпДата) = 0, "00", Формат(Секунда(ТемпДата),"ND=2; NLZ="));
ДатаRFC822 = ТемпДеньНедели+ ", " + ТемпДень + " " + МесяцИмя + " " + ТемпГод + " " + ТемпЧас + ":" + ТемпМинута + ":" + ТемпСекунда + " +0200";
Возврат ДатаRFC822;
КонецФункции
Категория:
Работа с Датами (Временем) Как обновить динамический список или реквизит на форме клиента? Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закрыть форму и открыть снова - все обновится
НО если нужно обновить сразу в открытой форме , то используйте код:
Код 1C v 8.3 &НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
// Много кода обработки
//...
//...
//...
// ОБНОВИМ динамический список файлы
Элементы.Файлы.Обновить();
// для обновления Реквизитов
ЭтаФорма.Прочитать();
// Обновление данных
ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры
Обновить() - Обновляет данные в таблице.
Прочитать() - Обновляет объект управляемой формы.
ОбновитьОтображениеДанных() - В принудительном порядке обновляет содержание элементов управления. Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране.
Категория:
Работа с Формой (Диалог) и её элементами Инструкция по установке MS SQL Server 2014 Expres на Windows Server 2008 x64 и 1C 8.3 Microsoft® SQL Server® 2014 Express &- бесплатная система управления данными, используется для обеспечения хранения данных и организации сетевой работы некоторых программ.
Данный продукт устанавливается на сервере либо на компьютере, выполняющем роль сервера.
Разработчиком продукта Microsoft® SQL Server® 2014 Express является компания Microsoft.
При возникновении вопросов, связанных с работой данного продукта, необходимо обращаться к Вашему системному администратору либо в компанию Microsoft.
Дистрибутив Microsoft® SQL Server® 2014 Express размещен на сайте http://www.microsoft.com
Установка Microsoft® SQL Server® 2014 Express
1. Запустите на установку файл дистрибутива RUS\x86\SQLEXPR_x86_RUS.exe либо SQLEXPR_x86_RUS.exe (дважды щелкните по нему мышью). В фоновом режиме будет выполнена распаковка инсталлятора программы. Затем откроется форма Центр установки SQL Server.
В открывшейся форме левой кнопкой мыши нажмите на значении "Новая установка изолированного экземпляра SQL Server или добавление компонентов к существующей установке".
2. Откроется форма Программа установки SQL Server 2014.
При условии принятия Лицензионного соглашения установите флажок в поле «Я принимаю условия лицензионного соглашения» и нажмите на кнопку Далее.
Начнется процесс установки обязательных компонентов SQL Server 2014
Если потребуется обновление продукта – установите обновление.
3. На шаге Выбор компонентов формы Программа установки SQL Server 2014 проверьте, чтобы были установлены флажки по всем значениям раздела Компоненты.
При необходимости нажмите кнопку Выделить все, чтобы установить флажки по всем значениям. Затем нажмите кнопку Далее.
В моем варианте установки Вылетела ошибка .NET Framework 3.5 - не установлен
Устанавливаем .NET Framework 3.5
Если при попытке установить (распаковка, потом идет загрузка компонентов для установки, затем выскакивает сообщение:
Для установки и настройки Microsoft .Net Framework 3.5 SP1 необходимо использовать средство управления ролями)
то нужно:
- открыть "включение или отключение компонентов windows"
- нажать "добавить компоненты"
- выбрать пункт "Возможности .NET Framework 3.5.1'
- нажать кнопку "установить"
После установки Вы увидите сообщение
Установив .NET Framework запускаем проверку заново - Включить заново
4. Если все ОК, то Вы уведите следующем шаге "Настройка экземпляра" в поле "Именованный экземпляр" введите значение SQLExpress или введите другое имя латинскими буквами (например Express2014), если на компьютере уже установлен SQL Server с таким именем (например, установлен SQL Server 2008 с экземпляром SQLExpress). Мы оставим так:
5. На следующем шаге Конфигурация сервера в таблице Учетные записи служб проверьте, чтобы по всем службам в колонке Тип запуска было установлено значение Авто.
Если по службе Обозреватель SQL Server установлено значение Отключено, нажмите левой кнопкой мыши на выпадающей список в поле Тип запуска и выберите значение Авто.
Параметры сортировки Cyrillic_General_CI_AS
В интернете много описаний на эту тему, но чтобы много не запоминать, для правильной работы необходимо в «языке и региональных стандартах» выбрать «русский». в этом случае при установке sql server сам предложит правильную сортировку cyrillic_general_ci_as.
6. На следующем шаге Настройка компонента Database Engine установите переключатель в поле Смешанный режим (проверка подлинности SQL Server и Windows).
В поле Введите пароль группы полей Укажите пароль для учетной записи системного администратора SQL Server (sa) введите необходимый пароль (например, adminpsw).
Также продублируйте введенный пароль в поле Подтвердить пароль.
Обязательно запомните или запишите данный пароль.
Установленный пароль будет использоваться при подключении базы данных к SQL-серверу
На закладке Каталоги данных можете изменить основные каталоги, Нажмите на кнопку Далее.
7. На следующем шаге "Отчет об ошибках" нажмите на кнопку Далее.
8. На следующем шаге "Ход выполнения установки" начнется установка SQL Server 2014.
Дождитесь окончания установки.
9. При завершении установки SQL Server откроется форма "Завершено".
Проверьте, чтобы по всем компонентам в разделе "Сведения об операции установки или возможных следующих шагов" в колонке "Состояние" было приведено значение Выполнено успешно.
Нажмите на кнопку «Закрыть».
Установка MS SQL Server 2014 будет завершена.
Создание базы 1С 8.3 через консоль Администрирования
Думаю что описывать установку сервера 1С нет необходимости, там все банально и просто, перейдем сразу к добавлению баз.
Откройте Администрирование серверов 1С Предприятия и добавьте новую информационную базу
В окне добавления пропишите все параметры
В результате получаем:
В SQL Server Management Studio:
Теперь, чтобы загрузить Вашу базу необходимо добавить эту базу в список, открыть Конфигуратор и в пункте "Администрирование - Загрузить информационную базу..." указать путь к Вашей ранее выгруженной базе. Подробнее - Как загрузить базу из файла DT?
Чтобы иметь файл ранее выгруженной базы, нужно знать, как сделать резервную копию информационной базы .
В дополнении советую статью :
Установка 1С 8.x на MS SQL Server 2008 R2 Express Категория:
Администрирование