Получение ExecutorGUID и orgPPAGUID

При работе с ГИС ЖКХ это первоочередные идентификаторы, которые в самой панели ГИС ЖКХ спрятаны так, что не каждый с первого раза и найдёт. Поэтому есть способ чуть попроще.

  1. Авторизуемся на ГИС ЖКХ https://portal.dom.gosuslugi.ru/
  2. В браузере нажимаем F12 и переходим на вкладку «Сеть»
  3. В правом верхнем углу нажимаем на название своей организации -> посмотреть информацию об организации, и смотрим содержимое запроса из вкладки «Сеть»

guid в «полезной нагрузке» это и есть orgPPAGUID

Для получения ExecutorGUID, точно так-же нажимаем на название своей организации -> Посмотреть информацию о представителе организации. Ничего не меняя нажимаем «Сохранить». В сетевом запросе updateinfo, видим требуемый guid:

1С: Открыть форму и получить результат работы

Задача: из формы документа открыть форму подбора чего-либо, и по результату получить результат в исходную форму.

Ну собственно задача штатная и обыденная, никаких изобретений тут нет. Оставляю, т.к. не часто этим пользуюсь и забывается

Решение:

В исходной форме вызываем новую форму:

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

&НаКлиенте
Функция ПолучитьФИАСДомаИзФормыПодбора(Результат, ДополнительныеПараметры) экспорт
	нс=объект.Дома.Добавить();
	нс.ИдДома="-";
	нс.КодФиас=Результат.ВыбранныйФиас;
КонецФункции	

В открываемой форме, пропишем обработку закрытия формы:

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

Присоеденяясь к хайпу про Долину

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

Вот и пригодилась опять теория вероятности ;)

Задача: есть два исполнителя. Необходимо обеспечить, чтобы исполнителю №1 доставалось 2/3 заявок, и исполнителю №2 — 1/3 задач.

Решение: высчитывать какому исполнителю сколько перепало уже заявок и в каком порядке, мне показалось излишним. Тем более, если думать на перспективу, то скорее всего окажется что потом будет добавлено еще несколько исполнителей со своими долями. Поэтому был реализован следующий алгоритм выбора исполнителя:

  • Исполнитель 1, с долями 2/3
  • Исполнитель 2, с долями 1/3

Как вычисляем исполнителя:

Всего долей: 3

  • — Создаем кость, с гранями 1,2,3
  • — Грани 1 и 2  = Исполнитель 1
  • — Грань 3  = Исполнитель 2

Кидаем «кость». Какая грань выпадет, такой исполнитель и назначается. В принципе при достаточном количестве бросков, процентное соотношение выпадений исполнителя выходит:

  • Исполнитель 1:  67%
  • Исполнитель 2:  33 %

Ну и кому интересно, вот код реализации:

&НаСервере
Функция ВыбратьИсполнителяНаСервере()
	Наименование=объект.Район;
	нама=СтрРазделить(Наименование," ");
	Район=ВРег(нама[0]);
	Исполнители=Новый Массив();
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДоступВЛКДляКонтрагентаРайоныОбслуживания.Ссылка.Ссылка КАК Ссылка,
		|	ДоступВЛКДляКонтрагентаРайоныОбслуживания.Доля КАК Доля
		|ИЗ
		|	Справочник.ДоступВЛКДляКонтрагента.РайоныОбслуживания КАК ДоступВЛКДляКонтрагентаРайоныОбслуживания
		|ГДЕ
		|	ВРЕГ(ДоступВЛКДляКонтрагентаРайоныОбслуживания.Район.Наименование) ПОДОБНО &Наименование";	
	Запрос.УстановитьПараметр("Наименование", "%"+Район+"%");	
	РезультатЗапроса = Запрос.Выполнить();	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();		
	ВсегоДолей=0;
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Исполнители.Добавить(Новый Структура("исполнитель,доля",ВыборкаДетальныеЗаписи.Ссылка,ВыборкаДетальныеЗаписи.Доля));	
		ВсегоДолей=ВсегоДолей+ВыборкаДетальныеЗаписи.Доля;
	КонецЦикла;
	
	Если Исполнители.Количество()=0 тогда
		возврат неопределено;
	конецесли;	
	// если исполнитель один, то с долями не морочимся
	Если Исполнители.Количество()=1 тогда
		Возврат   Исполнители[0].исполнитель;
	конецесли;	
	
	// если всего долей 0, а исполнителей более чем 1, то тогда исполнитель - первый попавшийся
	если ВсегоДолей=0 тогда
		Возврат   Исполнители[0].исполнитель;
	конецесли;	
	
	
	// А вот тут уже мудрим с долями
	ЗаполненныеДоли=Новый Массив();
	для каждого исполнитель из Исполнители цикл
		для поз=1 по исполнитель.доля цикл
			ЗаполненныеДоли.Добавить(исполнитель.исполнитель);
		конеццикла	
	конеццикла;	
	
	// Здесь уже имеем массив с заполненными развернутыми исполнителями. Например: Вася,Вася,Вася,Петя,Петя
	// Осталось сгенерировать случайное число 1-5, и назначить в соответствии с выпавшим числом исполнителя
	Генератор = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
	СлучайноеЧисло = Генератор.СлучайноеЧисло(0,ЗаполненныеДоли.Количество()-1);
	Возврат ЗаполненныеДоли[СлучайноеЧисло];
		
КонецФункции

API Map Yandex: Изменение содержимого метки «на лету»

Задача: разместить внутри метки поле ввода текста (комментарий) и сохранять его значение

Решение:

При формировании Json данных FeatureCollection, внутри каждой метки, в настройке balloonContentBody разместим теги <textarea style=’width: 100%;’></textarea>. И кнопку сохранения результата. Но! Сохранить результат в БД не сложно. Сложно добиться того, чтобы то что пользователь ввел в поле, сохранилось, после перевыбора метки мышкой. Содержимое поля скидывается каждый раз к изначальному, т.к. движек яндекса каждый раз перерисовывает отображение html на основании данных которые у него » в душе». Поэтому функция сохранения будет выглядеть как-то так:

function SaveComment(ls_id){
    console.log("-сохраняем комментарий "+ls_id);
    comment=$("#comment_"+ls_id).val();
    $.post("?r=receipts2/savecomment", {  
            ls_id:ls_id,
            comment:comment
    }).done(function(data) {                        
        console.log(data);
        balloonContentBody=objectManager.objects.getById(ls_id).properties.balloonContentBody;
        start_=balloonContentBody.slice(0,balloonContentBody.search("%;'")+4);
        end_=balloonContentBody.slice(balloonContentBody.search("</textarea>"),balloonContentBody.length);
        balloonContentBody=start_+comment+end_;
        objectManager.objects.setObjectProperties(ls_id,{balloonContentBody:balloonContentBody});
    });                      
}

Что тут происходит?

  1. Изменения сохраняются в базу данных при помощи вызова скрипта receipts2/savecomment
  2. Читаем данные которые яндекс хранит у себя в нутри
  3. Изменем эти данные, добавив комментарий
  4. Сохраняем данные «внутри»

В результате после перещелкивания по метке, комментарий сохраняется.

1 2 3 4 310