Использование HTTP-сервиса в 1С 8.3 для получ...

Использование HTTP-сервиса в 1С 8.3 для получения расчетного листа сотрудником

0
515
30.09.2019 Роман Барабанов

Содержание:

1.      Получение расчетного листа в 1С

2.      Формирование расчетного листа, формирование табеля и другие возможности  

 

1.      Получение расчетного листа в 1С


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


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


Далее необходимо создать в нашей конфигурации 1С 8.3 HTTP-Сервис:




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


Теперь нам необходимо определить Шаблон URL:




Название, как обычно, не играет для нас особой роли, интересен шаблон. Указали мы его как /Documents1C/{Пользователь}.

Теперь наша ссылка выглядит следующим образом:

http://<адрес_базы_1с>/hs/GetList/Documents1C/<Пользователь>.

Адрес вы уже знаете из публикации
hs–http-сервис

GetList – Название нашего HTTP-Сервиса.

Documents1C – Наш шаблон.

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

К шаблону я добавил метод GETс следующими свойствами:




Все очень просто: в обработчике мы создаем новую функцию и заполняем ее.

 

Функция ПолучитьЗарплатуGET(Запрос)

            Попытка

                        // Получим переданный в HTTP-запросе сотрудника. Желательно использовать какой-нибудь шифр.

                        Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(Запрос.ПараметрыURL["Пользователь"]);

                        Если Сотрудник = Справочники.Сотрудники.ПустаяСсылка() Тогда

                                    ВызватьИсключение;

                        КонецЕсли;

            Исключение

                        // Сотрудник не найден в системе.

                        HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - BadRequest

                        HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Сотрудник не найден'"));

                        Возврат HTTPОтвет;

            КонецПопытки;

           

            //Далее следуют параметры для формирования расчетного листа в 1С

            Идентификатор = "РасчетныйЛисток";

            ПодготовитьКоллекциюПечатныхФорм(Идентификатор);

           

           

            Если ТипЗнч(Сотрудник) = Тип("СправочникСсылка.Сотрудники") Тогда

                        ФизическоеЛицоСотрудника = СотрудникиКлиентСерверПовтИсп.ФизическиеЛицаСотрудников(Сотрудник)[0];

            Иначе

                        ФизическоеЛицоСотрудника = Сотрудник;

            КонецЕсли;

           

           

            РасчетныйЛисток = ПечатныеФормыСотрудников[Идентификатор].ПечатныеФормы.Получить(ФизическоеЛицоСотрудника);

           

            //Ищем последние начисления зарплаты в 1С

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1

                        |          НачислениеЗарплаты.Ссылка КАК Ссылка

                        |ИЗ

                        |          Документ.НачислениеЗарплаты КАК НачислениеЗарплаты

                        |

                        |УПОРЯДОЧИТЬ ПО

                        |          НачислениеЗарплаты.Дата УБЫВ";

           

            Запрос.УстановитьПараметр("Проведен", Проведен);

           

            РезультатЗапроса = Запрос.Выполнить();

           

            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

           

            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

                        Ссылка = ВыборкаДетальныеЗаписи.Ссылка;

            КонецЦикла;

           

            //В случае если документов в базе нет, то возвращаем ошибку.

            Если Ссылка = Документы.НачислениеЗарплаты.ПустаяСсылка() Тогда

                        HTTPОтвет = Новый HTTPСервисОтвет(400); // 400 - BadRequest

                        HTTPОтвет.УстановитьТелоИзСтроки(НСтр("ru='Документов нет'"));

                        Возврат HTTPОтвет;

            КонецЕсли;

           

            КарточкаУчета = Новый Массив;

            КарточкаУчета.Добавить(Объект.Ссылка);

            КарточкаУчета.Добавить(РасчетныйЛисток);

           

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

            ТабДок = УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Отчет.АнализНачисленийИУдержаний", "РасчетныйЛистокПодробнее",

            КарточкаУчета, Неопределено);

                       

            // Запишем 1С 8 табличный документ в поток в памяти в формате PDF.

            Поток = Новый ПотокВПамяти;

            ТабДок.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);

           

            // Получим двоичные данные файлов для отправки клиенту

            ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();

           

            #КонецОбласти

           

            #Область ОтправкаОтветаКлиенту

           

            // Сформируем имя файла, с которым печатная форма будет загружена у клиента.

            ИмяФайла = Строка(ДокументСсылка) + ".pdf";

            // Кодируем строку URL, чтобы избежать проблем с русскими буквами и другими символами (например, пробел).

            ИмяФайла = КодироватьСтроку(ИмяФайла, СпособКодированияСтроки.КодировкаURL);

           

            // Создадим ответ.

            HTTPОтвет = Новый HTTPСервисОтвет(200); // 200 - OK

           

            // Установим заголовки.

            HTTPОтвет.Заголовки.Вставить("Content-Type", "application/pdf"); // Чтобы браузер знал, что это PDF

            HTTPОтвет.Заголовки.Вставить("Content-Disposition", "attachment; filename=""" + ИмяФайла + """");

           

            // Телом ответа являются двоичные данные печатной формы.

            HTTPОтвет.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанные);

           

            // И, наконец, вернем ответ клиенту.

            Возврат HTTPОтвет;

КонецФункции  

    

2.      Формирование расчетного листа, формирование табеля и другие возможности


Осталось только разместить эту функцию, переделать формирование расчетного листа под себя и подумать над тем, как избежать того, чтобы пользователь мог подсмотреть чужую расчетку. Этот пример можно использовать для многих документов. Например, формирование остатка отпуска, формирование табеля. Если развивать мысль дальше, то можно использовать на сайте для клиента, для получения документов реализации в 1С 8.3.


Специалист компании ООО «Кодерлайн» 

Роман Барабанов.

Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Теги
#1С: CRM #1С: ERP #1С: ERP Управление строительной организацией #1С: ERP. Управление буровой компанией #1С: WMS Управление складом #1С: Аренда и управление недвижимостью #1С: БУХ #1С: Договорчики #1С: Документооборот #1С: ЗУП #1С: Интеграция #1С: КА #1С: Колледж #1С: Конвертация данных #1С: Модули #1С: Платформа #1С: Розница #1С: Сценарное тестирование #1С: ТОИР #1С: УАТ #1С: УКФ #1С: Университет #1С: УНФ #1С: УПП #1С: Управление строительной организацией #1С: УТ #1С: УХ #1С:ERP #1С.6-НДФЛ #ADO #APACHE #API #canonical #com-объекты #Excel #Excel в 1С #GoogleDrive #HTTP #ITIL #Koderline: Управление медиа-холдингом #Koderline: Управление проектами строительства скважин #LINUX #MS SQL Server #WEB #WEB-сервисы 1С #Word #XML #Администрирование 1С #Безопасность сервера #Бесшовная интеграция #БИТ.Финанc #Битрикс24 #Блокировки в 1С #БСП #БУ #Бурение скважин #Бюджетирование #Внедрение #Внедрение ERP #Закрытие месяца #Запросы 1С #Интеграция 1С #КАК ОТРАЖАЮТСЯ ТОВАРЫ В ПУТИ 1С #Как сделать в 1С #Конвертация данных #Корпоративное сопровождение #Лизинг #Лицензии 1С #Механизм Анализа Данных в 1С #Моделирование #Модуль Диадок #МСФО #Налоги #Обмен между базами #Обновления #Оптимизация #Отпуск #Отчетность #Отчеты в 1С #Оценка задач #Перенос данных #Планирование #Полезные обработки #Правила обмена #предопределенные элементы справочников #Проводки 1С #Программирование в 1С #Программные права #Продажи #Производство #Работа с объектами в 1С #Расширение конфигурации #РСБУ #СКД #Соединение COM в 1С платформе #Сравнение конфигураций #Тестирование 1С #Техническое задание #Торговое оборудование #Транспортная логистика #Управление проектами #Финансовый учет #Хранилище настроек #Ценообразование #Экзамен 1С #Яндекс.Касса Email или телефон Работа с объектами в 1С Функциональные опции в 1С
Услуги программиста 1С
Получите специалиста  
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.