1C: Генератор паролей

Функция ГенерацияСлучайногоПароля(длн)
    ГСЧ = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());    
    СлучайнаяСтрока = "";
    Для Сч = 1 по длн Цикл        
        Набор = ГСЧ.СлучайноеЧисло(1,7);    
        Если Набор = 1 Тогда
            // это число
            СлучайныйСимвол = ГСЧ.СлучайноеЧисло(0,9);    
        ИначеЕсли Набор = 2 Тогда
            // это Большая буква латиницы
            СлучайныйСимвол = Символ(ГСЧ.СлучайноеЧисло(65,90));
        ИначеЕсли Набор >= 3 Тогда
            // это маленькая буква латиницы
            СлучайныйСимвол = Символ(ГСЧ.СлучайноеЧисло(97,122));
		КонецЕсли;			
        Если Набор >= 7 Тогда
            // это спецсимвол
			спецсимволы="!@#$&*()_-+[]^";
			поз=ГСЧ.СлучайноеЧисло(0,стрдлина(спецсимволы));
            СлучайныйСимвол =Сред(спецсимволы,поз,1);						
        КонецЕсли;
		
        СлучайнаяСтрока = СлучайнаяСтрока + СлучайныйСимвол;
    КонецЦикла;      
    Возврат(СлучайнаяСтрока);    
КонецФункции

Получение координат полигона очерчивающего районы Вологодской области

Ну или собственно легко адаптировать под любую область.

Одной и задач явилось отрисовывание контуров районов Вологодской области на карте. Для этого нужно знать координаты точек полигона очерчивающего районы. Через API Яндекс.Карты возможно получить только полигоны областей, а не районов. Поэтому было принято решение вытянуть координаты точек из OpenStreetMap. Из нюансов:

  1. Обязательно нужно указывать UserAgent — иначе сервис забанит
  2. Ограничение — 1 запрос в секунду. Именно поэтому координаты «складируем» в файлы для последующего использования, а не вытягиваем «на лету»
  3. Координаты в OpenStreetMap хранятся «наоборот», а не как в Яндексе, поэтому сразу «переворачиваем»
<?php

 function GetAreaPolygon($region,$area,$filename){

            $address= urlencode($region.",".$area);
            $rul="https://nominatim.openstreetmap.org/search?q=".$address."&format=json&polygon_geojson=1&limit=2";
            var_dump($rul);
            $ch = curl_init($rul);
            $config['useragent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0';
            curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']);
            curl_setopt($ch, CURLOPT_REFERER, 'https://укмцукму.ru/');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
            $res_curl=curl_exec($ch);
            $res=json_decode($res_curl);
            if ($res!=null){
                $geo=$res[0]->geojson->coordinates;
                // переворачиваем координаты..
                foreach ($geo as &$coors) {
                    foreach ($coors as &$coor) {
                        $tmp=$coor[0];
                        $coor[0]=$coor[1];
                        $coor[1]=$tmp;
                    };
                };
                file_put_contents($filename,json_encode($geo));
            };
            sleep(2); //делаем паузу, чтоб не забанили
 }

    GetAreaPolygon("Вологодская область","Вологодский район","1.json");
    GetAreaPolygon("Вологодская область","Бабаевский район","2.json");
    GetAreaPolygon("Вологодская область","Бабушкинский район","3.json");
    GetAreaPolygon("Вологодская область","Белозерский район","4.json");
    GetAreaPolygon("Вологодская область","Вашкинский район","5.json");
    GetAreaPolygon("Вологодская область","Великоустюгский район","6.json");
    GetAreaPolygon("Вологодская область","Верховажский район","7.json");
    GetAreaPolygon("Вологодская область","Вожегодский район","8.json");
    GetAreaPolygon("Вологодская область","Вытегорский район","9.json");
    GetAreaPolygon("Вологодская область","Грязовецкий район","10.json");
    GetAreaPolygon("Вологодская область","Кадуйский район","11.json");
    GetAreaPolygon("Вологодская область","Кирилловский район","12.json");
    GetAreaPolygon("Вологодская область","Кичменгско-Городецкий район","13.json");
    GetAreaPolygon("Вологодская область","Междуреченский район","14.json");
    GetAreaPolygon("Вологодская область","Никольский район","15.json");
    GetAreaPolygon("Вологодская область","Нюксенский район","16.json");
    GetAreaPolygon("Вологодская область","Сокольский район","17.json");
    GetAreaPolygon("Вологодская область","Сямженский район","18.json");
    GetAreaPolygon("Вологодская область","Тарногский район","19.json");
    GetAreaPolygon("Вологодская область","Тотемский район","20.json");
    GetAreaPolygon("Вологодская область","Усть-Кубинский район","21.json");
    GetAreaPolygon("Вологодская область","Устюженский район","22.json");
    GetAreaPolygon("Вологодская область","Харовский район","23.json");
    GetAreaPolygon("Вологодская область","Чагодощенский район","24.json");
    GetAreaPolygon("Вологодская область","Череповецкий район","25.json");
    GetAreaPolygon("Вологодская область","Шекснинский район","26.json");

?>

Сохранив файлы, отрисуем районы на карте:

<script src="https://api-maps.yandex.ru/2.1/?lang=RU_ru&apikey=<?=$config->api_map?>" type="text/javascript"></script>    

<div id="map"></div>

<script>
 ymaps.ready(init);
 
 function GetAreaPolygon(region,area,filename,fillcolor){
    var url = "https://eуцкацукаc/areas/"+filename;
    $.getJSON(url, {})
    .then(function (data) {    
        var p = new ymaps.Polygon(
            data,
            {
              hintContent: area   
            },
            {
                fillColor: fillcolor,
                strokeColor: '#0000FF',
                opacity: 0.2,
                strokeWidth: 2,
                strokeStyle: 'shortdash'
            }                            
            );
    myMap.geoObjects.add(p);                                                        
    });     
 }
 
 function init () {
    latitude=59.2084992;
    longitude=39.8491648;

    myMap = new ymaps.Map('map', {
        center: [latitude, longitude], 
        controls: ['routeButtonControl','geolocationControl'],
        zoom: 7,
    }, {
        searchControlProvider: 'yandex#search',
        geoObjectBalloonAutoPan: false,
        geoObjectBalloonPanelMaxMapArea: Infinity,
        balloonPanelMaxMapArea: Infinity // балун-всегда панель - проблема с наложением надписи "Открыть на яндекс картах", из-за динамической загрузки
    });
    GetAreaPolygon("Вологодская область","Вологодский район","1.json","#FF0000");
    GetAreaPolygon("Вологодская область","Бабаевский район","2.json","#dcec3c");
    GetAreaPolygon("Вологодская область","Бабушкинский район","3.json","#3c9cec");
    GetAreaPolygon("Вологодская область","Белозерский район","4.json","#ec813c");
    GetAreaPolygon("Вологодская область","Вашкинский район","5.json","#ca5784");
    GetAreaPolygon("Вологодская область","Великоустюгский район","6.json","#57cab2");
    GetAreaPolygon("Вологодская область","Верховажский район","7.json","#467623");
    GetAreaPolygon("Вологодская область","Вожегодский район","8.json","#764923");
    GetAreaPolygon("Вологодская область","Вытегорский район","9.json","#236c76");
    GetAreaPolygon("Вологодская область","Грязовецкий район","10.json","#3eb9ca");
    GetAreaPolygon("Вологодская область","Кадуйский район","11.json","#4fca3e");
    GetAreaPolygon("Вологодская область","Кирилловский район","12.json","#cab13e");
    GetAreaPolygon("Вологодская область","Кичменгско-Городецкий район","13.json","#e47694");
    GetAreaPolygon("Вологодская область","Междуреченский район","14.json","#e176e4");
    GetAreaPolygon("Вологодская область","Никольский район","15.json","#7694e4");
    GetAreaPolygon("Вологодская область","Нюксенский район","16.json","#76e4e4");
    GetAreaPolygon("Вологодская область","Сокольский район","17.json","#76e4af");
    GetAreaPolygon("Вологодская область","Сямженский район","18.json","#80e476");
    GetAreaPolygon("Вологодская область","Тарногский район","19.json","#b2e476");
    GetAreaPolygon("Вологодская область","Тотемский район","20.json","#e4a576");
    GetAreaPolygon("Вологодская область","Усть-Кубинский район","21.json","#e48676");
    GetAreaPolygon("Вологодская область","Устюженский район","22.json","#e4768a");
    GetAreaPolygon("Вологодская область","Харовский район","23.json","#d776e4");
    GetAreaPolygon("Вологодская область","Чагодощенский район","24.json","#a876e4");
    GetAreaPolygon("Вологодская область","Череповецкий район","25.json","#76dae4");
    GetAreaPolygon("Вологодская область","Шекснинский район","26.json","#FF0000");
    
    
};

</script> 

Отображение контура области на карте

Задача: отобразить контур Вологодской области на яндекс картах

Решение:

<script src="https://api-maps.yandex.ru/2.1/?lang=RU_ru&apikey=<?=$config->api_map?>" type="text/javascript"></script>    

<div id="map"></div>

<script>
 ymaps.ready(init);
 
 function init () {
    latitude=59.2084992;
    longitude=39.8491648;

    myMap = new ymaps.Map('map', {
        center: [latitude, longitude], 
        controls: ['routeButtonControl','geolocationControl'],
        zoom: 7,
    }, {
        searchControlProvider: 'yandex#search',
        geoObjectBalloonAutoPan: false,
        geoObjectBalloonPanelMaxMapArea: Infinity,
        balloonPanelMaxMapArea: Infinity // балун-всегда панель - проблема с наложением надписи "Открыть на яндекс картах", из-за динамической загрузки
    });
    
    
ymaps.borders.load('RU', {
    lang: 'ru'
}).then(function (geojson) {
    for (var i = 0; i < geojson.features.length; i++) {        
        if (i==8){  // Вологодская область  
            var geoObject = new ymaps.GeoObject(geojson.features[i],{
                fillColor: '#ffff6f',
                strokeOpacity: 1,
                fillOpacity: 0.3,
            });            
            myMap.geoObjects.add(geoObject);            
            console.log(geojson.features[i]);
            console.log(geoObject);        
        };
    }
});
    
};

</script> 

Получение геокординат по адресу

Задача: получить координаты по известному адресу

Решение: воспользуемся API Яндекс.Карты по геокодированию. К сожалению бесплатная версия ограничена 1000 запросов в сутки. Но это обходимо возможностью «растягивать» во времени заполнение БД


            $address= urlencode($maddress->address);
            $rul="https://geocode-maps.yandex.ru/1.x/?geocode=".$address."&format=json&results=1&apikey=".$api_map;
            var_dump($rul);
            $ch = curl_init($rul);        
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
            $res_curl=json_decode(curl_exec($ch));            
            if ($res_curl!=null){
                if (isset($res_curl->response->GeoObjectCollection->featureMember[0]->GeoObject->Point->pos)){
                 $coors=$res_curl->response->GeoObjectCollection->featureMember[0]->GeoObject->Point->pos;     
                 $coors= explode(" ",$coors);
                 var_dump($coors);
                }              
            };            

1С: Еще раз о создании файла DOCX по шаблону без Word на сервере

Подобная статья уже была где-то на сайте, но вот еще одна, но решил актуализировать.

Итак, задача: при нажатии кнопки «В Word», сформировать на сервере файл по шаблону, сохранить его на клиент и открыть любым зарегистрированным приложением. Работать должно кроссплатформенно Linux/Windows

Создадим docx файл вида:

Решение:

{v8 Область.Тушка}

какойто текст, текст, текст. Бла-бла-бла..

{v8 АрбитражныйСудНаименование}

{/v8 Область.Тушка}

Загрузим его в макет как бинарные данные.

Далее код кнопки:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)	
	ПоказатьОповещениеПользователя("Формирую документ", "", "Формируем документ. Это может занять некоторое время", БиблиотекаКартинок.БизнесПроцесс);	
	Для Каждого ДокументСсылка Из ПараметрКоманды Цикл
		БинарныеДанные = СформироватьДокументНаСервере(ДокументСсылка);
		врмф = ПолучитьИмяВременногоФайла(".docx");
		БинарныеДанные.Записать(врмф);
		
		Оповещение = Новый ОписаниеОповещения("ЗапускПриложения", ЭтотОбъект);
		НачатьЗапускПриложения(Оповещение, врмф, , Ложь);
	 	ПоказатьОповещениеПользователя("Документ сформирован", "", "Дождитесь открытия приложения для работы с документом", БиблиотекаКартинок.БизнесПроцесс);
	КонецЦикла;		
КонецПроцедуры

&НаКлиенте
Процедура ЗапускПриложения(КодВозврата, ДополнительныйПараметр) Экспорт

КонецПроцедуры



&НаСервере
Функция СформироватьДокументНаСервере(ДокументСсылка);
	Возврат Документы.СК_КалькуляторИндексации.СгенерироватьДокумент(ДокументСсылка,"ЗаявлениеОбИндексации");
КонецФункции

Код формирования файла на сервере:

Процедура ДобавитьОписаниеОбласти(НаборОбластей, знач ИмяОбласти, знач ТипОбласти) Экспорт
	НоваяОбласть = Новый Структура;	
	НоваяОбласть.Вставить("ИмяОбласти", ИмяОбласти);
	НоваяОбласть.Вставить("ТипОбласти", ТипОбласти);	
	НаборОбластей.Вставить(ИмяОбласти, НоваяОбласть);	
КонецПроцедуры

Функция ПолучениеОписанияОбластей() Экспорт
	ОписаниеОбластей = Новый Структура;	
	ДобавитьОписаниеОбласти(ОписаниеОбластей, "Тушка", "Общая");
	ДобавитьОписаниеОбласти(ОписаниеОбластей, "Подвал", "Общая");
	ДобавитьОписаниеОбласти(ОписаниеОбластей, "ВерхнийКолонтитул", "ВерхнийКолонтитул");
	ДобавитьОписаниеОбласти(ОписаниеОбластей, "НижнийКолонтитул", "НижнийКолонтитул");
	ДобавитьОписаниеОбласти(ОписаниеОбластей, "НижнийТитульныйКолонтитул", "НижнийТитульныйКолонтитул");		
	Возврат ОписаниеОбластей;		
КонецФункции		


функция ПолучитьДанныеМакета(Знач ИмяМакета)
	
	ОписаниеОбластей = Новый Соответствие;
	ДвоичныеДанныеМакетов = Новый Соответствие;
	ТипыМакетов = Новый Соответствие; 	
	ДвоичныеДанныеМакетов.Вставить(ИмяМакета, ПолучитьМакет(ИмяМакета)); 	
	ОписаниеОбластей.Вставить(ИмяМакета, ПолучениеОписанияОбластей());
	
	Макет = Новый Структура;
	Макет.Вставить("ОписаниеОбластей", ОписаниеОбластей);
	Макет.Вставить("ДвоичныеДанныеМакетов", ДвоичныеДанныеМакетов);
	Макет.Вставить("ТипыМакетов", ТипыМакетов);
	Макет.Вставить("ЛокальныйКаталогФайловПечати", Неопределено); 
	Если НЕ Макет.Свойство("ТипыМакетов") Тогда
		Макет.Макеты.Вставить("ТипыМакетов", Новый Соответствие); 
	КонецЕсли;
	
	
	Возврат Макет;                               
	
Конецфункции                    

Функция СгенерироватьДокумент(ДокументСсылка,ИмяМакета) Экспорт
	
	ДанныеОбъекта = Новый Структура;
	ДанныеОбъекта.Вставить("АрбитражныйСуд", "Самый гуманный суд в мире!");
	
	ДанныеМакетов = ПолучитьДанныеМакета(ИмяМакета);	
	
	ТипМакета = ДанныеМакетов.ТипыМакетов[ИмяМакета];
	ДвоичныеДанныеМакета = ДанныеМакетов.ДвоичныеДанныеМакетов;
	Области = ДанныеМакетов.ОписаниеОбластей;
		
	
	Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета[ИмяМакета],ТипМакета,ИмяМакета);
	
	Если Макет = Неопределено Тогда
		Возврат "";
	КонецЕсли;
	
	ЗакрытьОкноПечатнойформы = Ложь;	
	

	ПечатнаяФорма = УправлениеПечатью.ИнициализироватьПечатнуюФорму(ТипМакета, Макет.НастройкиСтраницыМакета,Макет);
	АдресХранилищаПечатнойФормы = "";
		
	Если ПечатнаяФорма = Неопределено Тогда
		УправлениеПечатью.ОчиститьСсылки(Макет);
		Возврат "";
	КонецЕсли;	
	
	Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["Тушка"]);
	УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта);
		
	АдресХранилищаПечатнойФормы = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма);
			
	УправлениеПечатью.ОчиститьСсылки(ПечатнаяФорма, ЗакрытьОкноПечатнойФормы);
	УправлениеПечатью.ОчиститьСсылки(Макет);
	
	докбин = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресХранилищаПечатнойФормы));
	док = докбин.Получить();
	Возврат док;

		
КонецФункции	
1 46 47 48 49 50 310