Телефонный справочник организации: управляемые формы, вэб клиент, api

Публикация № 1160765 03.12.19

Разработка - Системная интеграция - Интеграция с WEB

вэб клиент телефон контакты состояние сотрудники отпуск график болезнь

Удобное представление информации по сотруднику: полное ФИО, должность, дата рождения, контакты и состояние сотрудника (работает, в отпуске или болеет, когда и на сколько собирается отпуск или когда запланировал). Рекомендуется работать через WEB интерфейс

Оглавление

1. Развертывание и автозапуск.

2. Поиск по введенному тексту и функция API speller.

3. Кнопки настройки

4. API и cookie

5. Карточка сотрудника и фото сотрудника

 

1. Развертывание и автозапуск.

Требуется поднять ВЭБ сервер (я использую Apache, быстро и бесплатно) и опубликовать данную систему.

Система тестировалась на платформе 1С:Предприятие 8.3.11.2867.

Для того, чтобы 1С не запрашивала авторизацию по пользователю при запуске, в файле default.vrd прописать имя пользователя и пароль, например: ib="File="D:\data\tell";usr=username;pwd=userpass;">

При публикации системы на вэб-сервере, не забываем проставить галки Публиковать Web-сервисы по умолчанию и Публиковать Web-сервисы, и галку Table.

Система стартует с условием:

1. Если нет избранных контактов, то ищет контакт с должностью "Генеральный директор", либо "Главный бухгалтер", либо "Бухгалтер". И фильтрует по полученному подразделению сотрудника.

2. Если есть избранные контакты, то выводит список избранных.

 

 

2. Поиск по введенному тексту и функция API speller.

Если же в поле поиска введен текст в отличной раскладке, система попытается произвести поиск по введенному тексту, если же ничего не найдено, то будет произведена замена раскладки введенного текста и заново произведен поиск. Если после этого будет что-то найдено, в шапке будет описание смены раскладки:

Также имеется функция, которая предлагает варианты, которые вы имели в виду при вводе в поле поиска, например опечатка. Можно не вводя заново выбрать предложенный вариант для поиска информации:

Для данной функции используется API speller от Яндекса.

 

3. Кнопки настройки

В шапке имеются кнопки Группировать по подразделениям, Подчиненные подразделения, Колонки и Обновить.

Разберем по отдельности:

1. При нажатии на Группировать по подразделениям все выводимые данные в таблице превратятся в иерархический вид:

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

2. При нажатии на кнопку Подчиненные подразделения, в результатах поиска, будут присутствовать также и починенные подразделения:

3. Кнопка Колонки дает возможность выбора выводимых колонок. Не всегда, и не всем нужна вся информация по сотрудникам. Кому-то требуется видеть только контакты, и более ничего:

Как видим, колонка Состояние исчезло. Настройка также сохраняется в системе, и в последующих входах в систему, будет найдена существующая настройка.

4. Кнопка Обновить обновляет таблицу данными. Так как данная система работает на виртуальной таблице, которая формируется при старте системы, то все проделанные изменения в данных при запущенной системе, отображены не будут. Для этого требуется обновить данные.

 

Также имеется возможность распечатать таблицу, нажав на значок сверху слева над таблицей.

 

При отжатой кнопки Группировать по подразделениям можно сортировать колонки, нажимая мышью по шапке.

В группе Информация содержатся отборы по тематикам:

1. Избранное

2. Весь справочник

3. На больничном

4. Собираются в отпуск

5. В отпуске

6. Отпуск по графику (данный пункт имеет список месяцев для отбора)

7. Дни рождения (данный пункт имеет список месяцев для отбора)

При нажатии на каждый пункт, производится поиск сотрудников.

 

4. API и cookie

Также в системе имеется api для обновления данных со сторонней системы, например учетной 1С.

В системе создаем пользователя для работы для web-сервисов, например: WEBServiceUser с паролем 12345

Используется get-запрос с одним параметром text, например:

WSОпределение = Новый WSОпределения("http://sql1c-2012/tell2/ws/text.1cws?wsdl", "WEBServiceUser", "12345");
WSПрокси = Новый WSПрокси(WSОпределения, "tell", "Table", "TableSoap");
WSПрокси.Пользователь = "WEBServiceUser";
WSПрокси.Пароль = "12345";

ТекстПараметр = "
|<?xml version=""1.0"" encoding=""UTF-8""?>
|<home>
|   <group department=""Центральный офис"" referencegroup=""1"">
|        <element department=""Центральный офис"" fio=""Мажеров Виктор Викторович"" fiomaiden=""Мажеров Виктор Викторович"" position=""Генеральный директор"" birthday=""01.09.1975"" tel=""7777777"" fax="""" telinternal=""0000"" email=""majorov@mail.ru"" |startdatestate=""25.11.2019"" enddatestate=""04.12.2019"" currentstate=""В ежегодном отпуске"" startdatefuture="""" enddatefuture="""" statefuture="""" schedule=""1_12_2019_12"" referencegroup=""0"" base64photo=""""/>
|        <group department=""IT отдел"" referencegroup=""1"">
|            <element department=""IT отдел"" fio=""Иванов Иван Иванович"" fiomaiden=""Иванов Иван Иванович"" position=""Начальник отдела"" birthday=""01.05.1980"" tel=""1234567"" fax="""" telinternal=""1111"" email=""ivanov@mail.ru"" startdatestate="""" enddatestate="""" currentstate="""" startdatefuture="""" enddatefuture="""" statefuture="""" schedule=""2_06_2020_14"" referencegroup=""0"" base64photo=""""/>
|            <element department=""IT отдел"" fio=""Петров Петр Петрович"" fiomaiden=""Петров Петр Петрович"" position=""Инженер"" birthday=""15.06.1995"" tel="""" fax="""" telinternal=""1112"" email=""petrov@mail.ru"" startdatestate="""" enddatestate="""" currentstate="""" startdatefuture="""" enddatefuture="""" statefuture="""" schedule="""" referencegroup=""0"" base64photo=""""/>
|        </group>
|        <group department=""Бухгалтерия"" referencegroup=""1"">
|            <element department=""Бухгалтерия"" fio=""Сидорова Мария Сидоровна"" fiomaiden=""Сидорова (Иванова) Мария Сидоровна"" position=""Главный директор"" birthday=""10.12.1979"" tel=""2345678"" fax=""6541651465"" telinternal=""2222"" email=""sidorova@mail.ru"" startdatestate="""" enddatestate="""" currentstate="""" startdatefuture="""" enddatefuture="""" statefuture="""" schedule="""" referencegroup=""0"" base64photo=""""/>
|            <element department=""Бухгалтерия"" fio=""Клинина Ольга Ивановна"" fiomaiden=""Клинина Ольга Ивановна"" position=""Бухгалтер"" birthday=""14.02.1993"" tel="""" fax="""" telinternal=""2223"" email=""klinina@mail.ru"" startdatestate="""" enddatestate="""" currentstate="""" startdatefuture="""" enddatefuture="""" statefuture="""" schedule="""" referencegroup=""0"" base64photo=""""/>
|        </group>
|        <group department=""Работа с клиентами"" referencegroup=""1"">
|            <element department=""Работа с клиентами"" fio=""Васин Василий Васильевич"" fiomaiden=""Васин Василий Васильевич"" position=""Начальник отдела"" birthday=""25.07.1987"" tel=""849849494"" fax="""" telinternal=""4444"" email=""vasin@mail.ru"" startdatestate="""" enddatestate="""" currentstate="""" startdatefuture="""" enddatefuture="""" statefuture="""" schedule="""" referencegroup=""0"" base64photo=""""/>
|            <element department=""Работа с клиентами"" fio=""Петин Петр Петрович"" fiomaiden=""Петин Петр Петрович"" position=""Инженер"" birthday=""30.01.1999"" tel="""" fax="""" telinternal=""4445"" email=""petin@mail.ru"" startdatestate="""" enddatestate="""" currentstate="""" startdatefuture="""" enddatefuture="""" statefuture="""" schedule="""" referencegroup=""0"" base64photo=""""/>
|        </group>
|        <group department=""Юридический отдел"" referencegroup=""1"">
|            <element department=""Юридический отдел"" fio=""Катина Екатерина Максимовна"" fiomaiden=""Катина Екатерина Максимовна"" position=""Главный юрист"" birthday=""20.03.1983"" tel=""654651981"" fax="""" telinternal=""7777"" email=""katina@mail.ru"" startdatestate="""" enddatestate="""" currentstate="""" startdatefuture="""" enddatefuture="""" statefuture="""" schedule="""" referencegroup=""0"" base64photo=""""/>
|        </group>
|    </group>
|</home>";

ВозвращаемоеЗначение = WSПрокси.apibase(ТекстПараметр);

В примере приведен пример текста XML для теста, для корректности проверки данного функционала. Функция WSПрокси.apibase(ТекстПараметр) возвращает ответ при корректности выполнения "ОК", при ошибке "ERROR".

Параметр referencegroup имеет 2 значения, "0" или "1", 0 - элемент; 1 - группа.

Формат записи параметра schedule, например: schedule="2_06_2020_14" - означает, что сотрудник планирует в отпуск в середине июня 2020г. на 14 дней.

Если же несколько плановых отпусков, то записываем через ";", например: "2_06_2020_14;4_08_2020_10"

Первый параметр: 1 - начало месяца, 2 - середина месяца, 3 - конец месяца, 4 - просто в указанном месяце (например: 4_06_2020_14 - в июне 2020г. на 14 дней).

Второй параметр: цифра месяца, в формате "ММ", например: 06 или 10 и т.п.

Третий параметр: год, в формате "гггг".

Четвертый параметр: дней отпуска, число.

 

Если система развернута через WEB, и в файле default.vrd прописано входить всем под одним пользователем, то нужно как-то разграничивать сохраненные настройки, например: избранных, использование Группировки подразделений, использование Подчиненных подразделений или настройку колонок. Для этого браузер хранит cookie: дату и время первого запуска в миллисекундах, которое используется в качестве идентификатора. При входе через тонкий клиент, в качестве идентификатора используется имя пользователя.

 

5. Карточка сотрудника и фото сотрудника

В карточке сотрудника описан каждый параметр XML.

Описание полей в XML таблицы Фактический отпуск / болезнь

Если сотрудник в данный момент или собирается в отпуск или болеет, например:

Дата начала и Дата окончания (при болезни в текущий момент, дата окончания пустая) и Причина

Если Дата начала больше текущей даты, то система распознает состояние как Собирается в отпуск, если Дата начала меньше или равна, а Дата окончания больше или равна текущей дате, то состояние В отпуске.

Формат причины: Текст (в поле Причина имеется список вариантов), варианты причин можно передавать со своей базы любые! Это текстовое поле.

НО! чтобы система корректно распознавала отборы:

1) На больничном: в состоянии должно быть слово "болеет" или "больным", например "Болеет" или "Уход за больным ребенком"

2) В отпуске: в состоянии должно быть слово "отпуск", например: "Ежегодный отпуск", "В отпуске по уходу за ребенком", "Отпуск по беременности и родам" и т.п.

 

В качестве фотографии сотрудника, при обновлении с помощью XML передаем через параметр base64photo. Также можно вручную выбрать фото сотруднику в регистре Фото сотрудников добавить вручную запись, указав сотрудника и выбрать фото. Фото сотрудников хранятся в отдельном регистре, и при обновлении данных не очищаются, заменяются только тогда, когда передано заполненное значение base64photo. Так было сделано специально, чтобы картинки не затирались при обновлении данных.

Если же сотруднику прикреплено фото, то оно будет отображаться при наведении на поле ФИО.

Меню для работы с системой вручную, имеется у пользователя с ролью Полные

 

Обновления:

04/03/2021г. v.7.04

Переработан блок хранения планового месяца отпуска, а также корректное склонение при выводе.

04/03/2020г. v.7

Исправлена ошибка установки прокси для блока speller от yandex.

23/01/2020г.

Переписан принцип хранения информации по состоянию в карточке (добавлена таблица, которая отвечает за текущее и ближайшее состояние сотрудника, система при формировании справочника учитывает период состояния, которые уже в прошлом, показаны не будут)

09/01/2020г.

Исправлена ошибка отображения списка отпуска по графику.

12/12/2019г.

Доработан api. Теперь подразделения (включая его родителя, это связано с тем, если подразделение переносится в другую группу) ищутся перед созданием новых, так как раньше очищался весь справочник, и пересоздавался заново. Сделано было для того, чтобы не возникала проблема поиска по УИН (появлялось сообщение о не найденном объекте), так как он менялся, если сотрудник не обновлял данные таблицы.

Также добавлена галка в константах Выполнять поиск по головному подразделению. Не всем нужно выполнять поиск по 1 уровню иерархии меню.

05/12/2019г.

Исправлен подход поиска по подразделениям. При формировании пункта подразделения, что в поле меню, что в в таблице результата, в параметр "id" передается "УИН" ссылки. По которому производится поиск. Возникло такое решение из-за найденного неудобства, когда существуют одинаковые по наименованию подразделения, например по разным филиалам.

04/12/2019г.

Исправлены некоторые интерфейсные моменты. В левом поле вывода фильтров и подразделений, изменен вывод подразделений (убран пункт "Подразделения", выводятся сразу же верхние уровни подразделений). Также при нажатой кнопке "Группировать по подразделениям" названия подразделений стали ссылками, при нажатии на которые происходит фильтрация.

03/12/2019г.

Изначальное представление

Скачать файлы

Наименование Файл Версия Размер
Телефонный справочник организации: управляемые формы, вэб клиент, api:

.cf 136,58Kb
3
.cf 7.04 136,58Kb 3 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. shell_maxim 37 14.12.20 08:02 Сейчас в теме
Почему бы не сделать веб интерфейс вместо веб клиента раз уж все равно развернут веб сервер? Можно сделать красивый кроссплатформенный интерфейс. Буквально одна страница html, js и файл css
2. iones 189 12.01.21 17:16 Сейчас в теме
(1)Тогда бы эта разработка находилась не на Инфостарте =) Код открыт. Скачивайте и дорабатывайте.
3. shell_maxim 37 12.01.21 19:04 Сейчас в теме
(2) ну так данные то из 1с брать через http сервисы. Так вроде безопаснее и с лицензированием , если таковое имеется, проще.
4. stepan_shock 110 12.08.21 00:13 Сейчас в теме
5. iones 189 16.08.21 16:50 Сейчас в теме
(4)Никак.
Попробую снять видео, чтобы было визуально видно что и как работает.
6. iones 189 19.08.21 14:07 Сейчас в теме
(4)Добавил видео, чтобы было как-то понятно, как реагирует система и выглядит в действии.
Оставьте свое сообщение

См. также

Публикаций не найдено

Попробуйте расширить область поиска, проверьте поисковый запрос и повторите попытку.

Или закажите индивидуальную разработку вашего решения.

Создать заказ на разработку