Заполнение PDF формы c полями ввода Сбербанка из 1С для ЗУП


Сбербанк, осваивая новые технологии, теперь требует заполнять PDF формы c полями. Формы очень замысловатые и трудно поддаются воспроизведению штатными средствами 1С. Делюсь опытом интеграции 1С и Adobe Acrobat.

Заполнение сделано в виде простейшей обработки, которая для списка физ.лиц заполняет форму заявления Сбербанка на банковское обслуживание в рамках зарплатного проекта.

Работает в ЗУП, переделав запрос, можно заставить работать и в УПП и другой конфигурации.

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

Добавлена новая версия бланка заявления 2024 года

18 Comments

  1. BigB

    (0) я правильно понимаю, что Вы напрямую разбираете структуру PDF файла из 1С, заполняете поля и потом обратно формируете PDF файл?

    Reply
  2. lopatin

    (1) BigB, По идеи разбирать там ни чего не надо.. используются средства соответствующего COM-объекта для прямого доступа к полям PDF

    Reply
  3. BigB

    (2) lopatin, если не секрет, какой COM объект используется?

    Reply
  4. vals

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

    doc = Новый COMОбъект(«AcroExch.PDDoc»);

    form = Новый COMОбъект(«AFormAut.App»);

    Reply
  5. deadman66

    (4) эти объекты доступны только с полной версией Acrobat? C ридером нет возможности создать такие объекты, как я понял.

    Reply
  6. vals

    (5) deadman66, верно, нужен Adobe Acrobat либо стандарт либо про.

    Reply
  7. grrus

    Можно ли получить полный код?

    пришлите пожалуйста на grrus@mai.ru

    Reply
  8. vals

    (7) Так там и лежит полный код, ничего не запаролено. Я что-то не так понимаю?

    Reply
  9. user652881_verbatim1976

    Добрый вечер! Скачал Вашу обработку. А где в ней собственно взаимодействие с pdf документом?

    Поля = ОткрытьНовыйШаблон(«Шаблон»); // Шаблон в двоичных данных

    Это как бы самое интересное….

    Reply
  10. vals

    (9) Код открыт. Доступ осуществляется непосредственно к полям документа PDF, в котором эти поля предварительно созданы, и который отрывается как com объект.

    Что именно Вам непонятно? С удовольствием поясню.

    Reply
  11. user652881_verbatim1976

    Код слишком мудреный, а пояснений так и не дождался. СомОбъект form = Новый COMОбъект(«AFormAut.App») не подключался, выдавал ошибку, требуя его «прикручивания к системе». Перерыв английский сегмент сети, нашел изящное решение по работе только с СомОбъектом doc = Новый COMОбъект(«AcroExch.PDDoc»).

    Reply
  12. vals

    (11) Мудреного там мало.

    Готовим PDF документ с полями, храним его в макете в двоичных данных, создаем запрос для получения данных, которыми нужно заполнить поля (имена полей в запросе и в документе совпадают, это желательно для упрощения кода — простой цикл на несколько строк.)

    Идея такова: достаем файл из макета, открываем как СОМ, из него получаем через AFormAut.App из слоя полей документа коллекцию полей, значения которых заполняем данными запроса, убирая пробелы из имени поля, так чтобы они совпадали с именами в запросе, попутно различаем типы полей — если булево, то проставляем соотв. значение:

    Для Каждого поле ИЗ Поля Цикл
    Если поле.IsTerminal Тогда
    ИмяПоля = СтрЗаменить(поле.Name, » «, «»);
    Если Заполнить.Свойство(ИмяПоля, ЗнПоля) Тогда
    Если ТипЗнч(ЗнПоля) = Тип(«Булево») Тогда
    Если ЗнПоля Тогда
    ЗнПоля = «On»;
    Иначе
    ЗнПоля = «Off»;
    КонецЕсли;
    КонецЕсли;
    поле.Value = ЗнПоля;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла; 

    Показать

    А вся «мудреность» относится к форматированию номера телефона и трансформации некоторых значений из запроса в значок «Х» по требованиям заполнения перед циклом заполнения.

    Reply
  13. sly2k

    Пытаюсь адаптировать вашу обработку под заполнение форм из из 1с 77. Для наглядности форма лежит по фиксированному пути.

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

     Док=СоздатьОбъект(«AcroExch.PDDoc»);
    Док.Open(«C:1CPDFformp1.pdf»);
    Сообщить(«Страниц: «+Док.GetNumPages());
    ВремДок = Док.OpenAVDoc(«C:1CPDF	m.pdf»);
    Формы=СоздатьОбъект(«AFormAut.App»);
    Сообщить(«Полей: «+Формы.Fields.Count);
    Формы.Fields.Item(«Аппарат»).Value=»Проверка заполнения поля Аппарат»;
    

    Отрабатывает без ошибок, но форма C:1CPDFformp1.pdf остается незаполненной, а «C:1CPDF m.pdf» нет, что вроде бы не удивительно — явно не хватает сохранения сделанных изменений, в вашем коде сохранения я тоже не заметил — оно точно работает в выложенном вами виде? (имею в виду посл версию 2017г)

    Reply
  14. sly2k

    (13)

    По факту вот такой код оказался рабочим, т.е. из OpenAVDoc имя файла я вообще убрал — по описанию метода на адоб сайте там титул, а не путь к файлу.

    Док=СоздатьОбъект(«AcroExch.PDDoc»);
    Док.Open(«C:1CPDFformp1.pdf»);
    Сообщить(«Страниц: «+Док.GetNumPages());
    ВремДок = Док.OpenAVDoc(«»);
    Формы=СоздатьОбъект(«AFormAut.App»);
    Сообщить(«Полей: «+Формы.Fields.Count);
    Сообщить(Формы.Fields.Item(«Аппарат»).Value);
    Формы.Fields.Item(«Аппарат»).Value=»Проверка заполнения поля Аппарат»;
    Док.Save(0,»C:1CPDFformp1.pdf»);

    Показать

    Reply
  15. vals

    (14) Отличный результат! Я под 7.7 не заморачивался.

    Также не было задачи сохранять заполненный ПДФ, кадровик просто его печатает и закрывает.

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

    Я эту форму делал всего день, скачал API reference, да и сделал по-быстрому, чтобы кадровиков освободить от вала ручной работы.

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

    Reply
  16. echonok
    doc = Новый COMОбъект(«AcroExch.PDDoc»);
    

    Проблема в этой строке, на новых версиях Adobe Reader DC этот метод уже не работает. Не решали эту проблему?

    Вы на какой версии Adobe Reader проверяли?

    Reply
  17. vals

    Не проверял. На новых версиях чего?

    Насколько помню, Adobe X

    Reply
  18. vals

    Reader не катит, нужна про либо стандарт.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *