База знаний Одина — Одинэсника Форумы 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 ветки ответов
  • Для ответа в этой теме необходимо авторизоваться.