30.09.2019 Роман Барабанов 6784
Использование 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С:ERP Управление предприятием 2.0

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

ООО ХДМ Рус
ООО ХДМ Рус

Отрасль:
Торговля

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

Управление цепочками поставок Оптовая торговля ...

ООО "Эскорт-Центр"
ООО "Эскорт-Центр"

Отрасль:
Профессиональные услуги

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

- Сквозной учет затрат по объектам
- Бухгалтерский учет
- Расчет зарплаты...

ОАО «Интер РАО – Электрогенерация»
ОАО «Интер РАО – Электрогенерация»

Отрасль:
Электрогенерация

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

Для работы 2500 пользователей в 9 часовых поясах организована территориально-...

Компания IBS
Компания IBS

Отрасль:
Системный интегратор

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

- Интеграция систем – АСУП и «1С:Управление производственным предприятием»...

ООО «Мир Аксиомы»
ООО «Мир Аксиомы»

Отрасль:
Аудиторские и консалтинговые услуги

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

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

ЗАО «Инвестгеосервис»
ЗАО «Инвестгеосервис»

Отрасль:
Нефтесервис

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

Объемно-календарное планирование производства Автоматизация бизнес-проце...

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

Отрасль:

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

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

ООО "НЦКТ"
ООО "НЦКТ"

Отрасль:
Профессиональные услуги

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

Взаиморасчеты с покупателями
Автоматизация бизнес-процессов...

Группа компаний АО «Киномакс»
Группа компаний АО «Киномакс»

Отрасль:
Культура, шоу-бизнес

Внедренное типовое решение:
БИТ.Финанс

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

Апгрейд 1С:Бухгалтерия 8 ПРОФ (USB) до версии 1С:Бухгалтерия 8 КОРП (USB)
ООО «Ява Строй»

Отрасль:
Строительство

Внедренное типовое решение:
1С:Бухгалтерия 8 КОРП (USB)

- Создание чистых конфигураций. Внесение изменений в БД ЗУП и новая расчетна...

АО «Аэроклуб»
АО «Аэроклуб»

Отрасль:
Услуги в области делового туризма

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

Проведение серии интервью с руководством и ключевыми специалистами Разраб...

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

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

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

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