Динамические роли в 1С Документооборот

Меня всегда удивляло что в 1С Документообороте не работает автоматическая подстановка ролей с объектами адресации. Небольшая доработка код и вуаля — работает.

В приведенном коде сделано заполнение только для одного типа объекта адресации — Организация. Для других типов объектов адресации и для дополнительного объекта адресации проверка делается аналогично.

Свои объекты адресации можно добавить в ПланыВидовХарактеристик.ОбъектыАдресацииЗадач.

Что бы роль с объектом адресации не требовала указать объект адресации при добавлении в шаблон, ставим флаг что роль «Используется без объектов адресации» .

Бизнес-процесс Согласование: Модуль объекта

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

Есть несколько нюансов:

  • Если ОсновнойОбъектАдресации заполнен — не стоит перезаполнять его.
  • Если роль не заполнена для выбранных объектов адресации, задача уйдет в никуда.

Custom segue

Промучился вечер с настраиваемыми Segue. На новое окно переходило, а обратно — никак. Возвращаешь стандартный Segue — все работает. Фишка оказалась в порядке вызова функции present.

Изначальный вариант выглядел так:

class FlipSegue: UIStoryboardSegue {
 
    override func perform() {
        let fromViewController = self.source
        let toViewController = self.destination
 
        UIView.transition(from: fromViewController.view, to: toViewController.view, duration: 0.5, options: .transitionFlipFromLeft ) {
            fromViewController.present(toViewController, animated: false, completion: nil)
        }
    }
}

а правильный так:

class FlipSegue: UIStoryboardSegue {
 
    override func perform() {
        let fromViewController = self.source
        let toViewController = self.destination
 
        fromViewController.present(toViewController, animated: false, completion: nil)
        UIView.transition(from: fromViewController.view, to: toViewController.view, duration: 0.5, options: .transitionFlipFromLeft )
    }
}

притом unwind segue должно быть таким:

class UnFlipSegue: UIStoryboardSegue {
    override func perform() {
        let fromViewController = self.source
        let toViewController = self.destination
 
 
        UIView.transition(from: fromViewController.view, to: toViewController.view, duration: 0.5, options: .transitionFlipFromRight) { _ in
            fromViewController.dismiss(animated: false, completion: nil )
        }
    }
 
}

Интересная статистика

Divination под Android делит установки, практически поровну, между 4, 5 и 6 версией. Установок на 7-й версии — мизер.

А вот Apple, статистику распределения по версиям, не дает. Зато дает распределение между планшетом и телефоном 10% к 90%. На Android, распределение между телефонами и планшетами, аналогичное.

Сравнивать доходность между двумя платформами пока нельзя, слишком разное количество установок. Но вот доход на тысячу показов у iOS версии в 10 раз больше чем у Android.

Реклама

Рекламный сервис Apple iAD приказал долго жить.  Это сподвигло меня перейти на Google Admob и теперь я могу сравнить эти две рекламные площадки.

  1. Интеграция iAD в приложение намного проще. Для Admob надо не только подключить сам фреймворк, но и добавить в проект кучу фреймворков от которых он зависит. iAD вытащил на форму и забыл, а для Admob надо еще прописать запрос на получение рекламы.
  2. По возможности кастомизации лидирует Admob. Ему можно указать ключевые слова, местоположение, пол, возраст…  Учитывает ли данные пользователя и местоположение iAD — не знаю. Но ключевые слова он точно не учитывал, а жаль.
  3. Доходы iAD и Admob давали сопоставимые. Правда сравнивать можно только первые месяцы размещения рекламы. Под конец использования iAD сильно «сдулся». А Admob еще не так долго эксплуатировался, что бы делать какие-то выводы.

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

Хотя создать одно приложение и разбогатеть, это скорее исключение чем правило.

Получить целые числа языком запросов 1С

Интересная задачка с собеседования — получить средствами языка запросов числа от -500 до 500. Само решение тривиально, но для него нужно получить перечень чисел от 0 до… ну хотя бы до 500. А это уже интереснее. Одно из возможных решений приведено ниже. Продолжая подставляя степени двойки можно получить очень длинную последовательность целых чисел.

ВЫБРАТЬ
0 КАК Числа
ПОМЕСТИТЬ Шаг0
 
ОБЪЕДИНИТЬ ВСЕ
 
ВЫБРАТЬ
1
;
 
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Лево.Числа * 2 + Право.Числа КАК Числа
ПОМЕСТИТЬ Шаг2
ИЗ
Шаг0 КАК Лево,
Шаг0 КАК Право
;
 
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Лево.Числа * 4 + Право.Числа КАК Числа
ПОМЕСТИТЬ Шаг4
ИЗ
Шаг2 КАК Лево,
Шаг2 КАК Право
;
 
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Лево.Числа * 8 + Право.Числа КАК Числа
ПОМЕСТИТЬ Шаг8
ИЗ
Шаг4 КАК Лево,
Шаг4 КАК Право
;
 
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Лево.Числа * 16 + Право.Числа КАК Числа
ПОМЕСТИТЬ Шаг16
ИЗ
Шаг8 КАК Лево,
Шаг8 КАК Право
;
 
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Лево.Числа * 32 + Право.Числа КАК Числа
ИЗ
Шаг16 КАК Лево,
Шаг16 КАК Право

IIS & 1C

Если веб-интерфейс у 1С не работает, не отображает элементы,  выходят ошибки  и т.п. можно попробовать отредактировать web.config на сервере IIS:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <system.webServer>
      <handlers>
         <remove name="ISAPI-dll" />
         <add name="1C Web-service Extension" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Program Files\1cv8\8.3.5.1443\bin\wsisapi.dll" resourceType="Unspecified" requireAccess="None" />
         <add name="ISAPI-dll" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Program Files\1cv8\8.3.5.1443\bin\wsisapi.dll" resourceType="File" requireAccess="Execute" allowPathInfo="true" preCondition="bitness64" />
      </handlers>
   </system.webServer>
</configuration>

Подключение приложений*32 к серверу*64

v83.ComConnector на x64

Объект V83.Application выполняется в рамках нового процесса 1cv8.exe.
Объект V83.COMConnector является внутрипроцессным сервером. На удаленном компьютере нет процесса, в котором он может быть создан.
Чтобы объект V83.COMConnector можно было создать на удаленном компьютере, регистрации компоненты comcntr.dll в COM утилитой regsvr32.exe недостаточно. Требуется выполнить регистрацию на удаленном компьютере компоненты comcntr.dll в качестве приложения COM+.

Для этого:
запустите утилиту Component Services;
создайте пустое COM+ приложение с:
Activation type — Server application;
именем, например, V83_COMConnector;
укажите имя пользователя Windows, от имени которого компонента будет запускаться специальный процесс dllhost.exe;
в ветке Components добавьте новую компоненту comcntr.dll из каталога загрузочных модулей 1С:Предприятия.
В результате при создании объекта V83.COMConnector на удаленном компьютере будет запущен специальный системный процесс dllhost.exe, и в нем будет создан объект V83.COMConnector.