30.09.2019 Роман Барабанов 6063
Использование HTTP-сервиса в 1С 8.3 для получ...

Содержание:

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.


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

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

Наши проекты

ООО «Фипар»
ООО «Фипар»

Отрасль:

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Специалисты «Кодерлайн» внедрили «1С:ERP. Управление предприятием 2» и автоматизировали блоки: продажи, закупки, производство, складская и т...

ПЭК
ПЭК

Отрасль:
Грузоперевозки

Внедренное типовое решение:
«1С: Управление торговлей»

- Создание прототипа SRM-системы на базе «1С: Управление торговлей»
- Автоматизация бизнес-процессов компании, связанных с поиском постав...

ПАО «АрселорМиттал Кривой Рог»
ПАО «АрселорМиттал Кривой Рог»

Отрасль:
Металлургическая промышленность

Внедренное типовое решение:
1С:Управление производственным предприятием для Украины

- Кадровый учет
- Расчет зарплаты
- Регламентированная отчетность
- Учет рабочего времени ...

Автоматизация складских операций на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
1С:Управление холдингом

Реализовали разработку уникального модуля «Интернет-магазины» на базе программного продукта «1С:Управление холдингом» согласно технического ...

Филиал ГлавУпДК при МИД России фирма «Инпредкадры»
Филиал ГлавУпДК при МИД России фирма «Инпредкадры»

Отрасль:
Государственное управление

Внедренное типовое решение:
1С:Бухгалтерия

- Расчеты с контрагентами;
- Управленческий учет;
- Формирование отраслевой отчетности;
- Интеграция с отраслевыми продуктами ст...

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

Внедренное типовое решение:
1С:Управление торговлей

- Оформление заказов поставщикам
- Оформление заказов покупателей
- Управление складскими запасами ...

Внедрение блока бухгалтерского учета «1С:Управление производственным предприятием»
ОАО «Издательство «Просвещение»

Отрасль:
Производство

Внедренное типовое решение:
1С:Управление производственным предприятием

Бухгалтерский учет:
- Завершение периода;
- Регламентированная отчетность...

ООО «ПраксисКом»
ООО «ПраксисКом»

Отрасль:
Аутсорсинг бухгалтерских услуг

Внедренное типовое решение:
1С:Управление небольшой фирмой 8 ПРОФ

- Взаиморасчеты с поставщиками
- Учет прихода ТМЦ
- Взаиморасчеты с покупателями
- Учет продаж ТМЦ
- Управление складскими ...

МГК "Световые Технологии"
МГК "Световые Технологии"

Отрасль:

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Специалисты "Кодерлайн" произвели доработки в системе 1С:ЕРП 2.4 с учетом требований заказчика, осуществили настройки загрузки и выгрузки н...

ООО "ОМЗ"
ООО "ОМЗ"

Отрасль:
Металлургическая промышленность, металлообработка

Внедренное типовое решение:
1С:Управление производственным предприятием

Автоматизация бизнес-процессов...

Доработка конфигурации Заказчика «1С:Управление строительной организацией»
ЗАО «Стройтрансгаз»

Отрасль:
Проектирование

Внедренное типовое решение:
1С:Управление строительной организацией

Взаиморасчеты с поставщиками;
- Оформление заказов поставщикам;
- Склад и логистика;
- Транспорт;
- Планирование расхода ГС...

МИР ХОББИ
МИР ХОББИ

Отрасль:
Торговля. Интернет магазин

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Оформление заказов поставщикам
Взаиморасчеты с покупателями
Оформление заказов покупателей
Логистика адресного склада
Управление...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение