Как реализовать распознавание документов в 1С через API?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как реализовать распознавание документов в 1С через API?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33766
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        // Модуль формы обработки распознавания документов

        #Область ОбработчикиСобытийФормы

        &НаКлиенте
        Процедура ПриОткрытии(Отказ)
        ИнициализироватьОбработку();
        СтатусРаспознавания = «Готов к работе»;
        Прогресс = 0;
        КонецПроцедуры

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

        #Область КомандыКлиента

        &НаКлиенте
        Процедура КомандаВыбратьФайл(Команда)

        ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        ДиалогВыбораФайла.Фильтр =
        «Документы (*.pdf;*.doc;*.docx;*.xlsx;*.xls)|*.pdf;*.doc;*.docx;*.xlsx;*.xls|» +
        «Изображения (*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp|» +
        «Все файлы (*.*)|*.*»;

        ДиалогВыбораФайла.Заголовок = «Выберите документ для распознавания»;

        Если ДиалогВыбораФайла.Выбрать() Тогда
        ПутьКФайлу = ДиалогВыбораФайла.ПолноеИмяФайла;
        ИмяФайла = Файлы.ИмяФайла(ПутьКФайлу);
        ПолеИмяФайла.Заголовок = «Выбран файл: » + ИмяФайла;
        КнопкаРаспознать.Доступность = Истина;
        ДобавитьВЛог(«Выбран файл: » + ИмяФайла);
        КонецЕсли;

        КонецПроцедуры

        &НаКлиенте
        Процедура КомандаРаспознать(Команда)

        Если ПустаяСтрока(ПутьКФайлу) Тогда
        Сообщить(«Выберите файл для распознавания»);
        Возврат;
        КонецЕсли;

        Если ПустаяСтрока(APIКлючDeepSeek) Тогда
        Сообщить(«Укажите API ключ DeepSeek»);
        Возврат;
        КонецЕсли;

        Если НЕ Файлы.Существует(ПутьКФайлу) Тогда
        Сообщить(«Файл не существует: » + ПутьКФайлу);
        Возврат;
        КонецЕсли;

        Прогресс = 0;
        ЛогПроцесса = «»;
        СтатусРаспознавания = «Подготовка к распознаванию…»;
        КнопкаРаспознать.Доступность = Ложь;

        РаспознатьНаСервере();

        КонецПроцедуры

        &НаКлиенте
        Процедура КомандаНайтиВНоменклатуре(Команда)

        Если ТаблицаРезультатов.Количество() = 0 Тогда
        Сообщить(«Нет данных для поиска. Сначала выполните распознавание документа.»);
        Возврат;
        КонецЕсли;

        НайтиСоответствияНаСервере();

        КонецПроцедуры

        &НаКлиенте
        Процедура КомандаСформироватьКП(Команда)

        Если ТаблицаРезультатов.Количество() = 0 Тогда
        Сообщить(«Нет данных для формирования коммерческого предложения.»);
        Возврат;
        КонецЕсли;

        СформироватьКПНаСервере();

        КонецПроцедуры

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

        #Область СерверныеПроцедуры

        &НаСервере
        Процедура ИнициализироватьОбработку()

        ТаблицаРезультатов = Новый ТаблицаЗначений;
        ТаблицаРезультатов.Колонки.Добавить(«Наименование», Новый ОписаниеТипов(«Строка»));
        ТаблицаРезультатов.Колонки.Добавить(«Количество», Новый ОписаниеТипов(«Число»));
        ТаблицаРезультатов.Колонки.Добавить(«ЕдиницаИзмерения», Новый ОписаниеТипов(«Строка»));
        ТаблицаРезультатов.Колонки.Добавить(«Уверенность», Новый ОписаниеТипов(«Число»));
        ТаблицаРезультатов.Колонки.Добавить(«НайдоВСправочнике», Новый ОписаниеТипов(«Булево»));
        ТаблицаРезультатов.Колонки.Добавить(«Номенклатура», Новый ОписаниеТипов(«СправочникСсылка.Номенклатура»));
        ТаблицаРезультатов.Колонки.Добавить(«Цена», Новый ОписаниеТипов(«Число»));
        ТаблицаРезультатов.Колонки.Добавить(«Сумма», Новый ОписаниеТипов(«Число»));

        APIКлючDeepSeek = «»;
        ПутьКФайлу = «»;

        КонецПроцедуры

        &НаСервере
        Процедура РаспознатьНаСервере()

        Попытка
        ТаблицаРезультатов = РаспознатьДокументЧерезDeepSeek(ПутьКФайлу);

        Если ТаблицаРезультатов = Неопределено Тогда
        ВызватьИсключение «Не удалось распознать документ»;
        КонецЕсли;

        Прогресс = 100;
        СтатусРаспознавания = «Распознавание завершено успешно»;
        КнопкаНайтиВНоменклатуре.Доступность = Истина;
        Сообщить(«Успешно распознано » + ТаблицаРезультатов.Количество() + » позиций»);

        Исключение
        Ошибка = ОписаниеОшибки();
        СтатусРаспознавания = «Ошибка распознавания»;
        КнопкаРаспознать.Доступность = Истина;
        Сообщить(«Ошибка распознавания: » + Ошибка);
        КонецПопытки;

        КонецПроцедуры

      • #33767
        bot_avaOdin — Одинэсник
        Участник

          Процесс распознавания документа в данном модуле происходит следующим образом:

          1. **Выбор файла пользователем** (процедура `КомандаВыбратьФайл` на клиенте):
          — Открывается диалог выбора файла с фильтрами по типам документов и изображений.
          — После выбора файла сохраняется путь к файлу (`ПутьКФайлу`) и отображается имя выбранного файла.
          — Активируется кнопка запуска распознавания (`КнопкаРаспознать.Доступность = Истина`).
          — В лог добавляется запись о выбранном файле.

          2. **Запуск распознавания** (процедура `КомандаРаспознать` на клиенте):
          — Выполняются проверки перед началом распознавания:
          — Проверяется, что выбран файл (`ПутьКФайлу` не пустой).
          — Проверяется, что указан API ключ для сервиса DeepSeek (`APIКлючDeepSeek` не пустой).
          — Проверяется существование файла по указанному пути.
          — Если какая-либо проверка не проходит, пользователю выводится соответствующее сообщение, и распознавание не запускается.
          — Если все проверки пройдены, инициализируются переменные состояния: прогресс, лог процесса, статус распознавания.
          — Кнопка распознавания блокируется (`КнопкаРаспознать.Доступность = Ложь`), чтобы предотвратить повторный запуск.
          — Вызывается серверная процедура `РаспознатьНаСервере()` для выполнения распознавания.

          3. **Серверная процедура распознавания** (`РаспознатьНаСервере`):
          — Пытается вызвать функцию `РаспознатьДокументЧерезDeepSeek`, передавая путь к файлу.
          — Если распознавание прошло успешно, в `ТаблицаРезультатов` записываются результаты.
          — Обновляется прогресс и статус, активируется кнопка поиска в номенклатуре.
          — Пользователю выводится сообщение об успешном распознавании и количестве распознанных позиций.
          — В случае ошибки распознавания:
          — Обрабатывается исключение.
          — Обновляется статус на «Ошибка распознавания».
          — Кнопка распознавания разблокируется.
          — Пользователю выводится сообщение с текстом ошибки.

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

          Рекомендую посмотреть здесь: https://infostart.ru/ (примерные статьи по интеграции с внешними сервисами распознавания и обработке файлов в 1С).

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С