Online телефонный справочник из 1С: Зарплата и управление персоналом

Публикация № 595832

Управление - Управление персоналом (HRM)

http-сервис телефонный справочник зарплата и управление персоналом web html javascript

33
В интернете представлено много реализаций online телефонных справочников организаций. Есть справочники, которые использует для хранения информации базу Active Directory (LDAP), есть справочники, которые реализованы с использованием СУБД (например, MySQL). Но я не нашел справочника, который использует информацию из базы 1С. Далее я рассмотрю данную разработку.

Во многих организациях используются телефонные справочники сотрудников. Сначала у нас был красивый бумажный вариант, разработанный в редакторе векторной графики. Но постепенно мне стало надоедать, что приходится его распечатать, затем вырезать и скрепить, а таких справочников варировалось от 10 до 25 штук. В общем, занимало много времени, и особого желания заниматься этим не было. Далее справочник эволюционировал в электронную версию в Excel. Для меня это был идеальный вариант: работает поиск, простота заполнения. Но акктуализировать информацию приходилось мне, возможно из-за сложности формы, а возможно из-за нежелания сотрудника заниматься изучением справочника. В общем со временем мне надоел и этот вариант.  Поспрашивав друзей из других компаний,  я выяснил, что online телефонный справочник у них реализован с использованием LDAP или PHP+MySQL. Мне не понравились данные реализации по ряду причин:

  • при использовании LDAP пришлось бы забивать в базу контакты людей, которые не пользуются корпоративной сетью вообще;
  • при использовании LDAP для поддержания акктуальной информации пришлось кому-то из сотрудников давать доступ к серверу, а точнее к редактированию данных LDAP;
  • при использовании PHP+MySQL необходимо было бы писать и серверную, и клиентскую часть с нуля, либо модифицировать наработки товарищей под свои нужды. Поскольку, я не силен в PHP, то рассматривать данный вариант не стал.

В итоге я решил использовать в качестве хранения и обработки данных 1C, а для удобного вывода HTML и JavaScript. 

Задача разделилась на 3 этапа:

1. Разработка серверной части, т.е.  разработать HTTP-сервис для конфигурации 1С: ЗУП

2.  Разработка клиентской части. Вот тут для меня было сложнее всего, поскольку HTML и JavaScript я знал меньше чем на базовом уровне.

3. Публикация на web-сервере. Об этом я в статье писать не буду, поскольку информации в интернете, да и на infostart.ru много по этому вопросу.

В результате получилась система отображающая контактыне данные о сотрудниках и их ближайшие дни рождения. Итак начнем.

Разработка серверной части

Для начала давайте разберемся, как работать с  HTTP-сервисами в 1С. HTTP-сервисы представляют обработчики HTTP-запросов по определенному URL. URL HTTP-сервиса используется специальный, например:

http://<адрес сервера>/<имя базы>/hs/<корневой URL>/<относительный URL>

где

  • адрес сервера - это адрес серевера публикации базы 1С;
  • имя базы - это название базы данных конфигурации 1С;
  • hs - указывает на то, что мы обращаемся к HTTP-сервису;
  • корневой URL - это группа запросов, объеденных общим смыслом. Указывается в свойствах HTTP-запроса;
  • относительный URL - это сам запрос, который может использоваться по шаблону и указывается в объекте Шаблон URL.

Для телефонного справочника используем корневой URL - person, а относительные URL следующие (рисунок 1):

  1. personList - получение списка сотрудников;
  2. personInfo - получение контактной информации по сотруднику;
  3. birthdayList - получение списка дней рождения и дней оставшихся до него.
Для написания HTTP-сервиса используем методы в шаблонах URL, которые связываются в модуле HTTP-сервиса с функциями. В модуле HTTP-сервиса будут 3 функции getPersonList, getPersonInfo, getBirthdayList.
Конфигуратор 1С: ЗУП
Рисунок 1. HTTP-сервис и шаблоны URL
Алгоритмы трех функций очень схожи и сводятся к одному:
  1. Проверяем парметры HTTP-запроса;
  2. Составляем запрос к базе данных
  3. Обрабатываем результаты базы данных в объекты массив и структуры
  4. Формируем из полученных объектов сериализированную строку JSON
  5. Формируем ответ и отправляем обратно клиенту

Поскольку, алгоритмы схожи, то расмотрим только функцию personList, если вы поймете как работает эта функция, то разобраться с другими не составит труда. При формировании HTTP-ответа мы создаем JSON строку, в которой будут содержаться данные для отображения.  

Для начала создадим объект HTTPСервисОтвет с числовым параметром, соответствующий коду HTTP-состояния и укажем тип возвращаемых данных (javascript). Более подробнее про коды HTTP состояния можно почитать тут.

Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-type","application/javascript");

Пока работа с объектом HTTPСервисОтвет закончена. Для того, чтобы получить параметры от клиента мы обрабатываем Запрос методом Получить, аргументом которого идет название параметра:

ПараметрСостояния = ?(Запрос.ПараметрыЗапроса.Получить("fired") = "0", Перечисления.СостоянияСотрудника.Увольнение, Неопределено);

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

Дальше мы производим запрос к базе данных с параметром:

ЗапросКБазе = Новый Запрос;
	ЗапросКБазе.Параметры.Вставить("Состояние",ПараметрСостояния);
	ЗапросКБазе.Текст = "ВЫБРАТЬ
	                    |	ДанныеДляПодбораСотрудников.Сотрудник.Код КАК КодСотрудника,
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Наименование КАК Подразделение,
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Код КАК КодПодразделения,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Фамилия КАК Фамилия,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Имя КАК Имя,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Отчество КАК Отчество
	                    |ИЗ
	                    |	РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников
	                    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияСотрудников.СрезПоследних КАК СостоянияСотрудниковСрезПоследних
	                    |		ПО ДанныеДляПодбораСотрудников.Сотрудник.Ссылка = СостоянияСотрудниковСрезПоследних.Сотрудник.Ссылка
	                    |ГДЕ
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Наименование <> """"
	                    |	И СостоянияСотрудниковСрезПоследних.Состояние.Ссылка <> &Состояние
	                    |
	                    |СГРУППИРОВАТЬ ПО
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Наименование,
	                    |	ДанныеДляПодбораСотрудников.Сотрудник.Код,
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Код,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Фамилия,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Имя,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Отчество
	                    |
	                    |УПОРЯДОЧИТЬ ПО
	                    |	Подразделение,
	                    |	Фамилия
	                    |ИТОГИ
	                    |	МАКСИМУМ(КодСотрудника),
	                    |	МАКСИМУМ(Подразделение)
	                    |ПО
	                    |	КодПодразделения";
	Результат = ЗапросКБазе.Выполнить();

Заострять внимание на зпросе не будем, поскольку я писать запросы не умею, тема публикации меньше отностися к запросам и поэтому перейду к обработке результатов запроса:

ВыборкаПодразделений = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"КодПодразделения");
СписокПодразделений = Новый Массив;
Пока ВыборкаПодразделений.Следующий() Цикл
	Подразделение = Новый Структура;
	Подразделение.Вставить("id",Строка(ВыборкаПодразделений.КодПодразделения));
	Подразделение.Вставить("open","true");	
	Подразделение.Вставить("value",Строка(ВыборкаПодразделений.Подразделение));
	СписокСотрудников = Новый Массив;
	ВыборкаСотрудники = ВыборкаПодразделений.Выбрать();
	Пока ВыборкаСотрудники.Следующий() Цикл
		Сотрудник = Новый Структура;
		ФИО = ВыборкаСотрудники.Фамилия + " " + Лев( ВыборкаСотрудники.Имя, 1) + ". " + Лев( ВыборкаСотрудники.Отчество, 1) + ".";
		Сотрудник.Вставить("id",Строка(ВыборкаСотрудники.КодСотрудника));
		Сотрудник.Вставить("value",Строка(ФИО));
		СписокСотрудников.Добавить(Сотрудник);		
	КонецЦикла; 	
	Подразделение.Вставить("data",СписокСотрудников);
	СписокПодразделений.Добавить(Подразделение);
КонецЦикла; 

При обработке результата формируется массив подразделений, состоящий из массива структур Подразделение. Подразделение включает в себя код подразделения, наименование и массив сотрудников. В подразделении также есть поле open, которое в дальнейшем в клиенте будет указывать на раскрытый элемент дерева. Структура Сотрудник состоит из фамилиии и инициалов.  Поля в структурах указываются на английском языке, чтобы в дальнейшем не возникло проблем при написании клиента.

Джсон = Новый ЗаписьJSON;
Джсон.УстановитьСтроку();
Настройка = Новый НастройкиСериализацииJSON;
ЗаписатьJSON(Джсон, СписокПодразделений,Настройка);
РезультатСтрока = Джсон.Закрыть(); 	
Ответ.УстановитьТелоИзСтроки(РезультатСтрока,КодировкаТекста.UTF8);
Возврат Ответ;

При формировании JSON использовал пример с its.1c.ru

Код функции GetPersonsList
Функция GetPersonsList(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-type","application/javascript");
	ПараметрСостояния = ?(Запрос.ПараметрыЗапроса.Получить("fired") = "0", Перечисления.СостоянияСотрудника.Увольнение, Неопределено); 

	ЗапросКБазе = Новый Запрос;
	ЗапросКБазе.Параметры.Вставить("Состояние",ПараметрСостояния);
	ЗапросКБазе.Текст = "ВЫБРАТЬ
	                    |	ДанныеДляПодбораСотрудников.Сотрудник.Код КАК КодСотрудника,
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Наименование КАК Подразделение,
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Код КАК КодПодразделения,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Фамилия КАК Фамилия,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Имя КАК Имя,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Отчество КАК Отчество
	                    |ИЗ
	                    |	РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников
	                    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияСотрудников.СрезПоследних КАК СостоянияСотрудниковСрезПоследних
	                    |		ПО ДанныеДляПодбораСотрудников.Сотрудник.Ссылка = СостоянияСотрудниковСрезПоследних.Сотрудник.Ссылка
	                    |ГДЕ
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Наименование <> """"
	                    |	И СостоянияСотрудниковСрезПоследних.Состояние.Ссылка <> &Состояние
	                    |
	                    |СГРУППИРОВАТЬ ПО
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Наименование,
	                    |	ДанныеДляПодбораСотрудников.Сотрудник.Код,
	                    |	ДанныеДляПодбораСотрудников.Подразделение.Код,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Фамилия,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Имя,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Отчество
	                    |
	                    |УПОРЯДОЧИТЬ ПО
	                    |	Подразделение,
	                    |	Фамилия
	                    |ИТОГИ
	                    |	МАКСИМУМ(КодСотрудника),
	                    |	МАКСИМУМ(Подразделение)
	                    |ПО
	                    |	КодПодразделения";
	Результат = ЗапросКБазе.Выполнить();
	ВыборкаПодразделений = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"КодПодразделения");
	СписокПодразделений = Новый Массив;
	Пока ВыборкаПодразделений.Следующий() Цикл
		Подразделение = Новый Структура;
		Подразделение.Вставить("id",Строка(ВыборкаПодразделений.КодПодразделения));
		Подразделение.Вставить("open","true");	
		Подразделение.Вставить("value",Строка(ВыборкаПодразделений.Подразделение));
		СписокСотрудников = Новый Массив;
		ВыборкаСотрудники = ВыборкаПодразделений.Выбрать();
		Пока ВыборкаСотрудники.Следующий() Цикл
			Сотрудник = Новый Структура;
			ФИО = ВыборкаСотрудники.Фамилия + " " + Лев( ВыборкаСотрудники.Имя, 1) + ". " + Лев( ВыборкаСотрудники.Отчество, 1) + ".";
			Сотрудник.Вставить("id",Строка(ВыборкаСотрудники.КодСотрудника));
			Сотрудник.Вставить("value",Строка(ФИО));
			СписокСотрудников.Добавить(Сотрудник);		
		КонецЦикла; 	
		Подразделение.Вставить("data",СписокСотрудников);
		СписокПодразделений.Добавить(Подразделение);
	КонецЦикла; 
	Джсон = Новый ЗаписьJSON;
	Джсон.УстановитьСтроку();
	Настройка = Новый НастройкиСериализацииJSON;
	ЗаписатьJSON(Джсон, СписокПодразделений,Настройка);
	РезультатСтрока = Джсон.Закрыть(); 	
	Ответ.УстановитьТелоИзСтроки(РезультатСтрока,КодировкаТекста.UTF8);
	Возврат Ответ;
КонецФункции
Код функции GetPersonInfo
Функция GetPersonInfo(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-type","application/javascript");
	КодФизлица = Запрос.ПараметрыЗапроса.Получить("id");

	ЗапросКБазе = Новый Запрос;
	ЗапросКБазе.Параметры.Вставить("КодФизлица",КодФизлица);
	ВидыКонтактнойИнформации = Новый Массив;
	ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Мобильный телефон").Ссылка);
	ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Email").Ссылка);
	ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Домашний телефон").Ссылка);
	ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Рабочий телефон").Ссылка);
	ВидыКонтактнойИнформации.Добавить(Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Адрес места проживания").Ссылка);
	ЗапросКБазе.УстановитьПараметр("ВидыКонтактов",ВидыКонтактнойИнформации);
	ЗапросКБазе.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
	                    |	ФизическиеЛицаКонтактнаяИнформация.Вид,
	                    |	ФизическиеЛицаКонтактнаяИнформация.Представление,
	                    |	ФизическиеЛицаКонтактнаяИнформация.Ссылка.Ссылка КАК СсылкаФизЛицо
	                    |ПОМЕСТИТЬ Контакты
	                    |ИЗ
	                    |	Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
	                    |ГДЕ
	                    |	ФизическиеЛицаКонтактнаяИнформация.Вид В(&ВидыКонтактов)
	                    |;
	                    |
	                    |////////////////////////////////////////////////////////////////////////////////
	                    |ВЫБРАТЬ
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.ФИО КАК ФИО,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.ДатаРождения КАК ДатаРождения,
	                    |	ДанныеДляПодбораСотрудников.Должность.Наименование КАК Должность,
	                    |	Контакты.Вид КАК ТипКонтакта,
	                    |	Контакты.Представление КАК Контакт
	                    |ИЗ
	                    |	Контакты КАК Контакты
	                    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников
	                    |		ПО Контакты.СсылкаФизЛицо = ДанныеДляПодбораСотрудников.ФизическоеЛицо.Ссылка
	                    |ГДЕ
	                    |	ДанныеДляПодбораСотрудников.Сотрудник.Код = &КодФизлица
	                    |	И ДанныеДляПодбораСотрудников.Должность.Наименование <> """"
	                    |
	                    |СГРУППИРОВАТЬ ПО
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.ФИО,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.ДатаРождения,
	                    |	ДанныеДляПодбораСотрудников.Должность.Наименование,
	                    |	Контакты.Вид,
	                    |	Контакты.Представление
	                    |
	                    |УПОРЯДОЧИТЬ ПО
	                    |	ФИО
	                    |ИТОГИ ПО
	                    |	ФИО";
	Результат = ЗапросКБазе.Выполнить();
	ВыборкаСотрудник = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"ФИО");
	Пока ВыборкаСотрудник.Следующий() Цикл
		Сотрудник = Новый Структура;
		Сотрудник.Вставить("fio",Строка(ВыборкаСотрудник.ФИО));
		СписокКонтактов = Новый Массив;
		ВыборкаКонтактов = ВыборкаСотрудник.Выбрать();
		Пока ВыборкаКонтактов.Следующий() Цикл
			Контакт = Новый Структура;
			Контакт.Вставить("type",Строка(ВыборкаКонтактов.ТипКонтакта));
			Контакт.Вставить("value",Строка(ВыборкаКонтактов.Контакт));
			Сотрудник.Вставить("birthday",Строка(Лев(ВыборкаКонтактов.ДатаРождения,10)));	
			Сотрудник.Вставить("who",Строка(ВыборкаКонтактов.Должность));
			СписокКонтактов.Добавить(Контакт);		
		КонецЦикла; 	
		Сотрудник.Вставить("contacts",СписокКонтактов);;
	КонецЦикла; 
	Джсон = Новый ЗаписьJSON;
	Джсон.УстановитьСтроку();
	Настройка = Новый НастройкиСериализацииJSON;
	ЗаписатьJSON(Джсон, Сотрудник, Настройка);
	РезультатСтрока = Джсон.Закрыть(); 	
	Ответ.УстановитьТелоИзСтроки(РезультатСтрока,КодировкаТекста.UTF8);
	Возврат Ответ;
	
КонецФункции
Код функции GetBirthdayList
Функция GetBirthdayList(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	КоличествоДней = Запрос.ПараметрыЗапроса.Получить("days");
	ЗапросКБазе = Новый Запрос();
	ЗапросКБазе.Параметры.Вставить("Дней", Число(КоличествоДней));
	ЗапросКБазе.Параметры.Вставить("Сегодня", ТекущаяДата());
	ЗапросКБазе.Текст = "ВЫБРАТЬ
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Наименование КАК ФИО,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.ДатаРождения КАК ДатаРождения,
	                    |	ДЕНЬГОДА(ДанныеДляПодбораСотрудников.ФизическоеЛицо.ДатаРождения) - ДЕНЬГОДА(&Сегодня) КАК ДоДняРождения
	                    |ИЗ
	                    |	РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудников
	                    |ГДЕ
	                    |	ДЕНЬГОДА(ДанныеДляПодбораСотрудников.ФизическоеЛицо.ДатаРождения) - ДЕНЬГОДА(&Сегодня) <= &Дней
	                    |	И ДЕНЬГОДА(ДанныеДляПодбораСотрудников.ФизическоеЛицо.ДатаРождения) - ДЕНЬГОДА(&Сегодня) > 0
	                    |
	                    |СГРУППИРОВАТЬ ПО
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.ДатаРождения,
	                    |	ДанныеДляПодбораСотрудников.ФизическоеЛицо.Наименование
	                    |
	                    |УПОРЯДОЧИТЬ ПО
	                    |	ДоДняРождения";
	Результат = ЗапросКБазе.Выполнить();
	ВыборкаСотрудник = Результат.Выбрать();
	СписокСотрудников = Новый Массив;
	Пока ВыборкаСотрудник.Следующий() Цикл
		Сотрудник = Новый Структура;
		Сотрудник.Вставить("fio",Строка(ВыборкаСотрудник.ФИО));
		Сотрудник.Вставить("days",Строка(ВыборкаСотрудник.ДоДняРождения));	
		Сотрудник.Вставить("birthday",Строка(Лев(ВыборкаСотрудник.ДатаРождения,10)));	
		СписокСотрудников.Добавить(Сотрудник);
	КонецЦикла; 
	Джсон = Новый ЗаписьJSON;
	Джсон.УстановитьСтроку();
	Настройка = Новый НастройкиСериализацииJSON;
	ЗаписатьJSON(Джсон, СписокСотрудников, Настройка);
	РезультатСтрока = Джсон.Закрыть(); 	
	Ответ.УстановитьТелоИзСтроки(РезультатСтрока,КодировкаТекста.UTF8);
	Возврат Ответ;
КонецФункции

Алгоритм остальных функций аналогичен. Переходим к разработке клиентской части

Разработка клиентской части

При разработке клиентской части я использовал библиотеку Webix. Данная библиотека позволяет ускорить разработку интерфейса и его алгоритма работы, а также уменьшить количество строк для написания кода.

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

До использования Webix UI

Рисунок 2. Интерфейс до использования Webix UI

Webix UI

Рисунок 3. Исопльзование Webix UI

Помимо данной библиотеки клиентская часть, состоит из  следующих файлов:

  • index.html - точка входа, именно на эту страницу попадает клиент и с нее уже подгружаются logic.js и ui.js
  • logic.js - файл описывающий логику интерфейса: действия при нажатии на элементы, запросы к серверу и т. д.
  • ui.js - файл описывающий сам интерфейс.
Код ui.js
var ui_scheme = {
	id:"phonebook",
	rows: [
	{view: "toolbar", cols: [
	{view: "label", label: "Телефонный справочник", align:"left"},
	{},
	{view: "label", label: "Отображать уволенных: ", align:"right"},
	{view: "toggle", id:"fired", offLabel:"нет", onLabel:"да", width:50},
	{view: "icon", id:"birthday", icon:"birthday-cake"}
	]},
	{cols:[
		{
			width: 300,
			rows:[
			{view: "search",id:"search", placeholder:"Поиск..."},
			{view: "tree", select:"true", id:"list_person"}
			]},
			{   
				id: "info",
				hidden:true ,
				width: "800",
				rows:[
				{view:"template", id:"main_info", template:"<h1>#fio#</h1><h3>Должность: #who#</h3><h5>Дата рождения: #birthday#</h5>",  autoheight:true},
				{
					view:"datatable", 
					id: "contact_info",
					header:false,
					autowidth:true,
					columns:[
					{ id:"type",    header:"", width:200},
					{ id:"value",   header:"", width:600}
					],
					fixedRowHeight:false,  rowLineHeight:25, rowHeight:25
				}
				]            
			}
			]}
			]
		};

		var win_birthday = {
			view:"window",
			id:"wBirthday",
			position: "center",
			modal: "true",
			resize: "true",
			move: "true",
			width: 500,
			head:{
				view: "toolbar", cols: [
				{view: "label", label: "Ближайшие дни рождения"},
				{view: "icon", icon:"close", id:"win_close", align: "right", click:"$$('wBirthday').hide();"}
				]
			},
			body:{
				rows:[
				{view:"counter", id:"days", label:"До дня рождения", labelWidth: 150, step:1, value:14, min:4, max:365},
				{view:"list", id: "birthday_persons",  template:"#fio# - #birthday# (#days#)", hidden:true, width:400}
				]
			}
		};

Интерфейс страницы (ui_scheme) представляет собой рабочую област,ь разделенную на три части:

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

Дерево подразделений и сотрудников - это иерархический список где родителями являются подразделения, а подчиненными являются сотрудники.

Также имеется окно (win_birthday), которое состоит из заголовка окна, кнопки закрыть и списка сотрудников с указанием даты рождения и дней до дня рождения. Размеры и положения окна можно изменять и оно является модальным.

Код logic.js
function update_list()
{
	var url = "/../zup3/hs/person/personList?fired="+$$('fired').getValue();
	var auth = 'Basic ' + btoa(unescape(encodeURIComponent("web:web")))
	var res = null;
	webix.attachEvent("onBeforeAjax", 
		function(mode, url, data, request, headers, files, promise){
			headers["Authorization"]= auth;
		});
	webix.ajax(url,{
		error:function(text, data, XmlHttpRequest){
			alert("Ошибка работы с сервером");
		},
		success:function(text, data, XmlHttpRequest){
			$$("list_person").clearAll();
			$$("phonebook").disable();
			$$("phonebook").showProgress({
				type:"icon",
				delay:100,
				hide:true
			});
			setTimeout(function(){
				$$("list_person").parse(data.json());
				$$("phonebook").enable();
			}, 100);
		}
	});
}

function update_info(id)
{
	var url = "/../zup3/hs/person/personInfo?id="+id;
	var auth = 'Basic ' + btoa(unescape(encodeURIComponent("web:web")))
	var res = null;
	webix.attachEvent("onBeforeAjax", 
		function(mode, url, data, request, headers, files, promise){
			headers["Authorization"]= auth;
		});
	webix.ajax(url,{
		error:function(text, data, XmlHttpRequest){
			alert("Ошибка работы с сервером");
		},
		beforeSend:function(req) {
				req.setRequestHeader('Authorization', auth);
		},
		success:function(text, data, XmlHttpRequest){
		$$("phonebook").disable();
		$$("phonebook").showProgress({
			type:"icon",
			delay:100,
			hide:true
		});
		setTimeout(function(){
			$$("main_info").parse(data.json());
			$$("contact_info").clearAll();
			$$("contact_info").parse(data.json().contacts);
			$$("contact_info").adjustRowHeight("value", true); 
            $$("contact_info").render();
			$$("phonebook").enable();
			$$("info").show();
		}, 100);
	}
	});
}


function update_birthday(days)
{
	var url = "/../zup3/hs/person/birthdayList?days="+days;
	var auth = 'Basic ' + btoa(unescape(encodeURIComponent("web:web")))
	var res = null;
	webix.attachEvent("onBeforeAjax", 
		function(mode, url, data, request, headers, files, promise){
			headers["Authorization"]= auth;
		});
	webix.ajax(url,{
		error:function(text, data, XmlHttpRequest){
			alert("Ошибка работы с сервером");
		},
		beforeSend:function(req) {
				req.setRequestHeader('Authorization', auth);
		},
		success:function(text, data, XmlHttpRequest){
		$$("birthday_persons").disable();
		$$("birthday_persons").showProgress({
			type:"icon",
			delay:100,
			hide:true
		});
		setTimeout(function(){
			$$("birthday_persons").clearAll();
			$$("birthday_persons").parse(data.json());
			$$("birthday_persons").enable();
			$$("birthday_persons").show();
		}, 100);
	}
	});
}

webix.ready(function(){
	webix.ui(ui_scheme);
	webix.ui(win_birthday);
	webix.extend($$("phonebook"), webix.ProgressBar);
	webix.extend($$("birthday_persons"), webix.ProgressBar);
	update_list();
	$$('fired').attachEvent("onItemClick", function(){
		update_list();
	})
	$$('list_person').attachEvent("onItemClick", function(id, e, node){
		if ($$('list_person').isBranch(id) == false)
			update_info(id);
	})
	$$('birthday').attachEvent("onItemClick", function(){
		$$("wBirthday").show();
		update_birthday($$('days').getValue());
	})

	$$("days").attachEvent("onChange",function(){
		update_birthday(this.getValue());
	})

	$$("search").attachEvent("onTimedKeyPress",function(){
		$$("list_person").filter("#value#",this.getValue());
	})

})

Когда выполняется файл logic.js, он загружает интерфейс и подключает индикатор загрузки

webix.ui(ui_scheme);
webix.ui(win_birthday);
webix.extend($$("phonebook"), webix.ProgressBar);
webix.extend($$("birthday_persons"), webix.ProgressBar);

Затем вызывается функция update_list(), которая формирует список сотрудников и подразделений, отправляя запрос на сервер. После чего добавляются события к следующим объектам

$$('fired').attachEvent("onItemClick", function(){
		update_list();
	})

При нажатии на клавишу "Показывать уволенных сотрудников" происходит обновление списка подразделений и сотрудников

$$('list_person').attachEvent("onItemClick", function(id, e, node){
		if ($$('list_person').isBranch(id) == false)
			update_info(id);
	})

При нажатии на элементе дерева подразделений и сотрудников проверяется, является ли этот элемент сотрудником или подразделением (имеет ли дочерние объекты), если сотрудник, то обновляется область информации.

$$('birthday').attachEvent("onItemClick", function(){
		$$("wBirthday").show();
		update_birthday($$('days').getValue());
	})

При нажатии на кнопку "День рождения" отображается окно и обновляется список сотрудников и дат рождений в данном окне.

$$("search").attachEvent("onTimedKeyPress",function(){
        $$("list_person").filter("#value#",this.getValue());
    })

При изменении значения "До дня рождения" обновляется список сотрудников и дат рождений

$$("search").attachEvent("onTimedKeyPress",function(){
        $$("list_person").filter("#value#",this.getValue());
    })

Если поле search будет изменено то применяется фильтр к дереву подразделений и сотрудников.

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

  1. Формируется URL для запроса
  2. Формируется строка авторизации
  3. До отправки запроса отправляется запрос авторизации
  4. Отправляется запрос на сервер
  5. Обрабатывается результат и парсится в объекты страницы.

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

33

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

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо
1. ruha 50 10.03.17 17:04 Сейчас в теме +3 $m
Исходники стоит прикреплять?
2. andrei.k 15.03.17 09:52 Сейчас в теме
(1) Если не сложно, прикрепите пожалуйста. Реализация интересная.
kraynev-navi; +1 Ответить
6. ruha 50 15.03.17 14:14 Сейчас в теме
(2)
(1) Если не сложно, прикрепите пожалуйста. Реализация интересная.

Не сложно. Прикрепил архив с клиентской частью, и там же файл http.txt с текстом для http-сервиса. Для работы клиентской части, необходимо добавить библиотеку webix.
Прикрепленные файлы:
phone.zip
Andr0med; +1 Ответить
12. Andr0med 27.05.19 09:46 Сейчас в теме
(6) Руслан, подскажите, пожалуйста, в чем может быть причина появления окна авторизации при запуске Вашего проекта? Как победить?
14. ruha 50 27.05.19 14:43 Сейчас в теме
3. DonAlPatino 128 15.03.17 12:13 Сейчас в теме
А что с клиентскими лицензиями на 1С в такой конфигурации происходит? Делал подобную разработку, но у меня получился комбинированный вариант AD + база в MS SQL, куда грузятся данные из 1С. Насчет AD могу сказать еще, что тормозное оно при отдаче данных (у меня там еще фотки сотрудников) до ужаса. Вот думаю может переделать.
4. ruha 50 15.03.17 14:08 Сейчас в теме
(3) А вот это интересный вопрос, даже не думал об этом. Если я не ошибаюсь, то 1С лицензия идет на сеанс, при открытие справочника, сеанс создается только на время обращения к базе. В консоле администрирования посмотрел сеансы только "живых душ", пользователь "web", который используется не висит. Вроде не зависал ни разу.
5. ruha 50 15.03.17 14:10 Сейчас в теме
(3) А сколько пользователей? Просто когда я делал, я все думал как реализовать: каждую запись с отдельным запросом к БД, или просто одним запросом все данные взять. И если вы будете реализовать у себя и будет большой объем данных, хотел узнать, как долго будут лететь данные общий запросом.
7. DonAlPatino 128 15.03.17 14:55 Сейчас в теме
(5) Под 200 человек. Соответственно тянется одним запросом весь список и отдельными запросами фотки.
8. ruha 50 15.03.17 16:00 Сейчас в теме
(7) Может отдельными запросами лучше? По необходимости подгружать информацию по нужному сотруднику
9. DonAlPatino 128 15.03.17 17:21 Сейчас в теме
(8)У меня был проект по замене "старого" списка, который целиком велся в ручную и где карточка сотрудника сразу отображалась. И меня за можай загнали с криком "сделать как было". А потом, я так понимаю, запрос к AD долгий вне зависимости от того просто ты список сотрудников получаешь или список сотрудников с полями. Скорость одна. Ну либо где-то в коде (там .Net и я на этом проектике его изучал) какие-то откровенные глупости. Сейчас рефачу по-немного когда время есть. Может найду.
10. user723770 20.04.17 17:38 Сейчас в теме
У нас крутится нечто подобное для рассылки корреспонденции. 1С на SQL и данные берем из базы на прямую из справочников. Лицензии 1С не задействованы.
11. Andr0med 21.05.19 13:57 Сейчас в теме
Бодрого времени суток! Искал варианты реализации корпоративного сайтика в связке с 1С, нашел эту статью. Помогло сильно, за что нечеловеческое спасибо!
Скачал, установил 32-разрядный Apache (64-разрядный на Win7 64x не взлетел).
В платформе 1С доустановил веб-расширение. В самописной конфигурации создал справочники, заполнил их данными, подправил функции в модуле HTTP-сервиса, чтобы возвращали данные той же структуры, что в примере. Опубликовал. Создался файл default.vrd. В httpd.conf всё, что положено, прописалось.
Захожу в браузере по нужному адресу и получаю форму входа, в которой нужно ввести имя пользователя и пароль.

Я вводил данные локального юзера. Не то.
Создал в конфигурации 1С пользователя, дал ему полные права на все объекты (в учебных целях!), вводил его данные - не то.
Подскажите, какого лешего пользователя нужно ввести ?
Может быть, дело в библиотеках webix'а? Я стандартную скачал/установил, там функционал немного урезан...
Прикрепленные файлы:
13. ruha 50 27.05.19 14:42 Сейчас в теме
Так постараюсь вспомнить) Давно уже это делал, но во-первых посмотрите права на использование сервисом (не помню есть ли они или нет). Во-вторых напишите как вы отправляете строку авторизации в скрипте, точнее как формируете
Оставьте свое сообщение

См. также

Простой способ опубликовать базу 1C из дома в интернет, когда Ваш провайдер этого не обеспечивает (3G, 4G модем и т.п.) 31

Статья Системный администратор Нет файла v8 1cv8.cf Бесплатно (free) WEB Облачные сервисы, хостинг

Если у Вас возникла потребность опубликовать из дома во всемирную паутину базу 1С (например, для тестирования), в т.ч. интерфейс OData, HTTP или Web-сервисы, а интернет-провайдер (например, 3G Мегафон) не предоставляет возможности инициировать соединения извне, то в конце статьи Вы найдете простой, быстрый и условно-бесплатный способ это сделать.

14.10.2019    1523    uno-c    16       

Объединение организаций в ЗУП при реорганизации с переносом данных из ЗУП 2.5 в ЗУП 3.1 9

Статья Программист Нет файла v8 v8::СПР ЗУП2.5 ЗУП3.x БУ Бесплатно (free) Зарплата Управление персоналом (HRM) Перенос данных из 1C8 в 1C8

В этой статье описан опыт объединения 2-х организаций при реорганизации в ЗУП 3.1 с переносом данных одной организации из ЗУП 2.5 (релизы баз более или менее свежие, но не самые последние на момент перехода, примерно двух- и трехмесячной давности). За основу было взято решение из этой статьи https://infostart.ru/public/833658/, в которой описан алгоритм решения задачи, за что автору статьи огромная благодарность! Здесь же даны некоторые комментарии и пояснения к алгоритму переноса и объединения, описаны выявленные мною ошибки. Также приведена небольшая инструкция по использованию обработки ирПодборИОбработкаОбъектовБД — она будет полезна для пользователей — «не программистов», впервые работающих в не управляемых формах.

09.10.2019    681    Neti    0       

Самый примитивный HTTP-сервис в мире 163

Статья Программист Нет файла v8 Бесплатно (free) WEB

Пошаговый пример создания простейшего HTTP-сервиса, который генерирует HTML-страницу для поиска товара, а также реализует асинхронное получение данных из базы.

12.09.2019    5970    YPermitin    25       

Отчеты ЗУП. Решения всех отчетов из сборника задач для подготовки к Специалист-консультант ЗУП с картинками 38

Статья Бухгалтер Стажер Нет файла v8 v8::СПР ЗУП3.x Россия БУ Зарплата Управление персоналом (HRM) Бесплатно (free) Решение задач на 1С:Специалист

Когда готовился к сдаче экзамена на Специалист консультант по ЗУП, в процессе решения задач из сборника обнаружил, что те решения отчетов, которые есть в сети и на Инфостарте, недостаточно проиллюстрированы, и для новичка это может быть довольно тяжело и затратно по времени - разобраться, что к чему, с "нуля". Делал как шпаргалку для себя. Экзамен сдал на отлично. Рекомендую тем, кто готовится - прорешать все отчеты.

26.08.2019    2474    user1024932    11       

Свой веб интерфейс к 1С: побеждаем CORS на IIS, сохраняя авторизацию 56

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) WEB Администрирование данных 1С

Если "веб морда" расположена не по тому же адресу, что и публикация 1С (что часто бывает, например, при разработке, публикация 1С на http://localhost/1c, а разрабатываемое веб-приложение на http://localhost:8080) или, например, мы заходим на веб приложение то по ip адресу, то по имени сервера, или просто веб сервер и сервер, на котором опубликована 1С - это разные сервера, то для большинства запросов от браузера к 1С срабатывает политика CORS, которая заключается в том, что браузер сначала посылает запрос OPTIONS, на который сервер должен ответить определенным образом, заголовками, содержащими разрешения, а потом уже (если разрешение есть), браузер посылает основной запрос. В случае, когда в публикации 1С (default.vrd) жестко прописан логин и пароль, разрулить ситуацию можно средствами 1С. В случае же, когда нужно сохранить авторизацию (или используется стандартный интерфейс odata), начинаются проблемы.

20.08.2019    3119    Fragster    7       

Вывод отчетов из Штрих-М Торговое предприятие 5 на кассовое ПО Кассир 5 через веб-сервис 3

Статья Системный администратор Программист Нет файла v8 1cv8.cf Розничная и сетевая торговля (FMCG) Россия УУ Windows Розничная торговля Бесплатно (free) WEB

Универсальный механизм вывода отчетов товароучетной системы Штрих-М Торговое предприятие в кассовое ПО Кассир 5 посредством веб-сервиса.

14.08.2019    905    Van2507    1       

Совсем простой обмен HTTP, 2 функции 60

Статья Программист Нет файла v8 Бесплатно (free) WEB

Функция для вызова рест-сервиса и функция для разбора результата. Быстро, просто, универсально.

12.08.2019    3565    Yashazz    15       

Использование HTTP-сервиса для создания "фронтенда" HTML/CSS/jQuery. Продолжение 51

Статья Программист Расширение (cfe) v8 1cv8.cf Бесплатно (free) WEB

Получение изображений из информационной базы и отправка файлов через "фронт" на HTML/CSS/JS.

08.08.2019    3220    Sedaiko    1       

1Script.Web. Интернет-приложения на языке 1С 119

Статья Программист Нет файла v8 Бесплатно (free) WEB OneScript

Запросы рынка таковы, что любое современное клиент-серверное приложение должно иметь веб-интерфейс. Почему бы не писать такие приложения на языке 1С? Андрей Овсянкин расскажет о возможностях разработки веб-приложений на базе 1Script, рассмотрит перспективы этого направления и в качестве демонстрации покажет «боевое» веб-приложение на новом движке – кроссплатформенную консоль администрирования парка кластеров 1С.

20.05.2019    11597    Evil Beaver    32       

Неверные остатки на сайте битрикс 2

Статья Программист Нет файла v8 УТ11 Бесплатно (free) WEB

Исправление процедуры выгрузки остатков на сайт битрикс из УТ 11

25.04.2019    1772    distorshion    4       

Отправка файлов через SOAP. SOAP with attachments, MTOM 38

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) WEB

В продолжение «своеобразной» поддержки 1С протокола SOAP, описанной в https://infostart.ru/public/965259/, опишу еще одну особенность. 1С не поддерживает возможность отправки файлов-вложений. Для решения этой проблемы пришлось самостоятельно писать формирование пакетов SOAP и разбор ответов сервера.

18.04.2019    2752    mysm    2       

HTML-клиент у конфигурации 1С 137

Статья Программист Нет файла v8 Бесплатно (free) WEB

Приветствую. В этой публикации опишу свой опыт создания html-клиента для конфигурации 1С с помощью http-сервисов. HTML-клиент в этом случае - это frontend (html + css+ js), который генерирует и выдает пользователю конфигурация + backend, который тоже реализован в этой же конфигурации.

17.04.2019    10872    Smaylukk    119       

Парсинг сайтов из 1С на примере ломбарды.рф с помощью XPATH для ДокументDOM 67

Статья Программист Нет файла v8 Бесплатно (free) WEB

На всякую хитрую гайку всегда найдется болт с резьбой (с)

01.04.2019    7099    starik-2005    33       

Неверный расчет СЗВ-СТАЖ. ЗУП 3.1 8

Статья Программист Нет файла v8 v8::СПР ЗУП3.x БУ Зарплата Управление персоналом (HRM) ФОМС, ПФ, ФСС Бесплатно (free) Адаптация типовых решений

При заполнении отчета СЗВ-СТАЖ на последних релизах ЗУП (ошибка не исправлена и в релизе 3.1.9.107) выявлены ошибки при расчете периодов, а также неверное выделение стажа ДЛОТПУСК.

01.03.2019    3043    dbachinsky    2       

Как сделать в ЗУП 2.5 зарплатную отчетность за 2018 год; полезности для ЗУП 3.1 и БП 3.0 (обзор) 7

Статья Бухгалтер Нет файла v8 v8::БУ v8::СПР ЗУП2.5 БП3.0 ЗУП3.x БУ Зарплата Управление персоналом (HRM) НДФЛ ФОМС, ПФ, ФСС Бесплатно (free) Бухгалтерский учет

Нашла на Инфостарте весьма полезные вещи для бухгалтеров, занимающихся зарплатной отчетностью. Если точнее, для тех, кто делает 2-НДФЛ в «Бухгалтерии 3.0», 6-НДФЛ – в «ЗУП 3.1», либо работает в «ЗУП 2.5» и должен подготовить 2-НДФЛ и СЗВ-СТАЖ за 2018 год.

27.02.2019    3903    udb2007    5       

Логируй больше! 1С + UPD + GELF + Graylog 28

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Практика программирования Администрирование данных 1С WEB Разработка

Наличие производительной платформы управления логами - это жизненно важный элемент в ландшафте систем с высокой активностью. Рассмотрим один из подходов логирования активности систем на платформе 1С в Graylog.

26.02.2019    5187    Lars Ulrich    15       

Переход на "Зарплату и управление персоналом 3.1" 35

Статья Программист Бухгалтер Пользователь Нет файла v8 v8::СПР ЗУП2.5 ЗУП3.x Россия БУ Управление персоналом (HRM) Бесплатно (free) Интеграция Пользователю системы Бухгалтерский учет

Сменила я тут работу и уже после того, как я приступила к исполнению обязанностей, мой новый начальник мне призналась, что выбор пал на меня только из-за того, что я знаю программу. Справедливости ради, эта уверенность была основана только на том, что я прошла тестирование, включающее только основные операции кадрового делопроизводства. Так или иначе, а работодатель попал в точку, нанимая меня в надежде, что я решу проблему: нужно перейти «с 8.2 на 8.3». Ничего сложного, скажет большинство, я тоже так говорю, но ситуация осложнялась некоторым количеством предшественников, которые уже «нафеячили» в программах до меня. Взять и сделать все заново мне не разрешили, так что пришлось исходить из того, что есть, и именно это дало пищу для размышлений и, в конце концов, привело к написанию этих рекомендаций. Если перед Вами стоит задача перехода с ЗУП 2.5 на ЗУП 3.1, я попробую облегчить Вам жизнь этой статьей.

01.02.2019    6786    VKuser24804875    33       

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке 463

Статья Программист Нет файла v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Зарплата Управление персоналом (HRM) Бесплатно (free) Универсальные функции

В статье размещен список стандартных процедур и функций с примерами, которые могут помочь при разработке (доработке) конфигураций Зарплата и управление персоналом ред. 3.1 и Зарплата и кадры государственного учреждения 3.1. Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур. Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.

14.11.2018    31454    GeterX    93       

Создание телеграм бота с гугл авторизацией, обратными вызовами и уведомлениями об обновлении через сервер-маршрутизатор 157

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) WEB

Статья детально рассказывает обо всех аспектах настройки телеграм бота, работающего через сервер-маршрутизатор посредством обратных вызовов. Приведены примеры работы отправки/исправления сообщений, отправки файлов, работы с внутренними и встроенными запросами. Создание клавиатуры. Авторизация пользователей через gmail.

07.11.2018    17163    🅵🅾️🆇    40       

Кадровые данные сотрудников в ЗУП 3.1 в отчетах 38

Статья Программист Нет файла v8 v8::СПР ЗУП3.x Россия Управление персоналом (HRM) Бесплатно (free) Универсальные функции

Параметры используемые для получения данных сотрудников в ЗУП 3.1. Пригодится для разработки отчетов как напоминалка.

07.11.2018    12804    fromlion    12       

Работа с подразделом "Специальная оценка условий труда" раздела "Охрана труда" в программе "1С:Зарплата и управление персоналом Корп, редакция 3.1" 4

Статья Бухгалтер Нет файла v8 v8::СПР ЗУП3.x Россия БУ Управление персоналом (HRM) Бесплатно (free) Пользователю системы Бухгалтерский учет

В процессе ввода в эксплуатацию блока "Охрана труда" столкнулась со скудным количеством информации по работе с данным разделом в сети Интернет, поэтому решила поделиться с сообществом своими наработками по данной теме. В публикации описана работа с подразделом "Специальная оценка условий труда" раздела "Охрана труда" в программе "1С:Зарплата и управление персоналом Корп, редакция 3.1".

16.10.2018    6587    opolyakova    0       

Мой опыт небольшого проекта с веб-сервисами (Часть 2) 20

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

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

05.10.2018    4220    alex_bitti    0       

Как запустить работу Google Maps в поле HTML формы 1С? 25

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования WEB

Как справиться с передачей события в поле HTML, если надо передать данные. Переход на новую версию Google Maps.

26.09.2018    6328    Green2    10       

Мой опыт небольшого проекта с веб-сервисами (Часть 1) 22

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

Хочу поделиться своим опытом использования веб-сервисов на небольшом проекте, который в принципе расширяем до чего-нибудь более существенного.

08.08.2018    6420    alex_bitti    33       

Создание web-площадки на технологиях 1С, или как Водоканал сделал "Личный кабинет потребителя" 54

Статья Программист Нет файла v8 Энергетика и ЖКХ УУ Управление взаимоотношениями с клиентами (СRM) Дебиторская и кредиторская задолженность Бесплатно (free) WEB

Гончаров Максим делится опытом создания «Личного кабинета потребителя» на сайте водоканала. Он описывает архитектуру системы и объясняет, какую роль в ней играют технологии: «Битрикс», OData, веб-сервисы, «1С:БСП». Также в статье раскрываются возможности использования подсистемы «Анкетирование» в «1С:БСП» как конструктора документов.

25.06.2018    10376    maxx    31       

На что действительно способны HTTP-сервисы 170

Статья Программист Нет файла v8 Бесплатно (free) WEB

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

14.06.2018    22428    dalgaso2010    44       

Подготовка тестового контура с помощью gitlab-ci и Яндекс.Диска 18

Статья Системный администратор Нет файла v8 1cv8.cf Бесплатно (free) WEB

В статье описан пример использования gitlab-ci для копирования продуктовой базы в Яндекс.Диск и разворачивания на другом контуре.

04.05.2018    7162    pallid    0       

Запуск Apache 2.4 с модулем 1С внутри Docker контейнера 87

Статья Системный администратор Программист Нет файла v8 Linux Бесплатно (free) Администрирование данных 1С WEB docker Apache

Про Apache и про Linux слышали, наверное, все. А вот про Docker пока нет, но он сильно набирает популярность последнее время и не зря. Поделюсь своим опытом и дам пошаговую инструкцию настройки веб-сервера Apache с модулем 1С внутри Docker контейнера на Linux хосте. При этом сам сервер 1С может находиться совсем на другой машине и на другой операционной системе. Это не важно, главное чтобы Apache смог достучаться до сервера 1С по TCP. В статье дам подробное пояснение по каждой используемой команде со ссылками на документацию по Docker, чтобы не создавалось ощущение непонятной магии. Также прилагаю git репозиторий с описанием всей конфигурации, можете попробовать развернуть у себя буквально за 10 минут.

04.04.2018    17750    petr.myazin    35       

Решение проблемы автоматического утверждения расчета кадровиком документов. Разграничение прав кадровиков и расчетчиков. ЗУП 3.1 25

Статья Программист Нет файла v8 v8::СПР v8::Права ЗУП3.x БУ Зарплата Управление персоналом (HRM) Бесплатно (free) Информационная безопасность

Статья посвящена тем, кто столкнулся с проблемой автоматической установки "Расчет утвердил". Также рассматривается решение проблемы с отображением ФОТ и оклада у кадровика. Добавление роли ЧтениеДанныхДляНачисленияЗарплатыРасширенная кадровику без последствий для расчетчика.

04.04.2018    14971    leaderonex    22       

Совместная работа БП 3.0 и ЗУП 3.1. Устранение ошибки синхронизации персональных данных физических лиц 12

Статья Системный администратор Программист Нет файла v8 БП3.0 ЗУП3.x Управление персоналом (HRM) Бесплатно (free) Перенос данных из 1C8 в 1C8

При совместной работе указанных конфигураций с использованием встроенного плана обмена «ОбменЗарплата3Бухгалтерия3» персональные данные физических лиц передаются некорректно. Это связано с ошибкой в правилах обмена (замшелой уже, с учётом того, сколько времени эта ошибка «кочует» из версии в версию правил).

31.03.2018    9834    ser73461014    11       

1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) ч.6 2

Статья Программист Нет файла v8 1cv8.cf Автомобили, автосервисы Бесплатно (free) WEB

Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу. PHP-Скрипт публикации выборки данных сайта работающего на WordPress.

19.03.2018    5861    osivv    0       

Интеграция 1С УТ 11.2 и Битрикс. Настройка выгрузки старой цены для интернет-магазина 8

Статья Программист Нет файла v8 УТ11 Россия УУ Розничная торговля Бесплатно (free) WEB

Настройки позволят вытащить информацию о старой цене из 1С и передать её в CMS Битрикс.

24.01.2018    7862    Consultant_1C    2       

1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) ч.3 3

Статья Программист Нет файла v8 1cv8.cf Автомобили, автосервисы УУ Windows Бесплатно (free) WEB

Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу. PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

09.01.2018    6748    osivv    0       

Готовим Soap для Web-сервисов. Рецепты 130

Статья Программист Нет файла v8 Россия Windows Бесплатно (free) WEB

В статье описаны различные варианты обмена данными с web-сервисами по протоколу Soap, основанные на личном опыте.

28.12.2017    28569    987ww765    27       

УкрПочта - групповая проверка трек-номеров 9

Статья Программист Нет файла v8 Украина Бесплатно (free) WEB

Необходимо в течение относительно небольшого промежутка времени получить актуальное состояние по трек номеру в системе УкрПочта большого количества сообщений? Тогда во второй раз воспользуемся неофициальным парсингом страницы сервиса УкрПочты.

23.10.2017    6120    abavas    2       

1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) 5

Статья Программист Нет файла v8 1cv8.cf Автомобили, автосервисы Windows Бесплатно (free) WEB

Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.

16.10.2017    8659    osivv    3       

1С, oauth2, Google API и Google Merchant. Сбор данных и парсинг 18

Статья Программист Нет файла v8 УТ10 Россия Бесплатно (free) Практика программирования WEB

Всем привет. Стала задача, собрать данные с Google Merchants и внести их в 1С, для более детального анализа того, что сейчас показывается, что нет и какие проблемы при этом есть. Если кому это интересно, прошу под кат.

14.09.2017    13107    Mi11er    8       

Отслеживание почтовых сообщений парсингом страницы (УкрПочта) 5

Статья Программист Нет файла v8 Украина Бесплатно (free) WEB

Когда официальное API есть, но по факту не работает. Возвращаемся к старому способу - парсинг страниц.

17.07.2017    7709    abavas    2       

XPath и пространства имен на примере разбора файла ответа сервиса геокодирования Яндекс 34

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования WEB

Есть некоторые нюансы разбора с помощью Xpath xml-файла, в котором используются несколько пространств имен. Приведен разбор такого файла на примере файла ответа сервиса геокодирования Яндекс.

14.04.2017    9784    brr    6       

PHP OData драйвер 17

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) WEB

Удобный доступ к OData данным через SQL синтаксис

03.04.2017    8134    virtex3    4       

Веб-сервисы и 1С: «Здравствуй, Name», время-деньги и «Жизнь» 75

Статья Программист Нет файла v8 Бесплатно (free) WEB

Несколько статей о создании веб-сервисов на платформе 1С

09.03.2017    20954    hayroff    11       

Интерактивный ввод капчи 26

Статья Программист Нет файла v8 Бесплатно (free) WEB

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

17.02.2017    8452    gaabora    3       

Отправка PUT запроса средствами 1С 8.3 65

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования WEB

HTTP запрос с использованием метода PUT средствами 1С 8.3 на практике - проблема и решение

16.02.2017    20293    hspeed79    16       

Нагрузочное тестирование сервера 1С при использовании WEB сервисов 51

Статья Системный администратор Программист Нет файла v8 ИТ-компания Бесплатно (free) Производительность и оптимизация (HighLoad) Внешние источники данных WEB

Проведение нагрузочного тестирования WEB-сервисов, развернутых на платформе 1С. Целью тестирования является ознакомление с возможностями платформы 1С при работе с большим количеством запросов через опубликованные WEB сервисы на IIS 7.5

01.02.2017    22947    BraunAlex    34