База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как реализовать распознавание документов в 1С через API?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 месяц назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
19 октября 2025 в 17:30 #33766
OdineskiУчастник// Модуль формы обработки распознавания документов
#Область ОбработчикиСобытийФормы
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ИнициализироватьОбработку();
СтатусРаспознавания = «Готов к работе»;
Прогресс = 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;
СтатусРаспознавания = «Распознавание завершено успешно»;
КнопкаНайтиВНоменклатуре.Доступность = Истина;
Сообщить(«Успешно распознано » + ТаблицаРезультатов.Количество() + » позиций»);Исключение
Ошибка = ОписаниеОшибки();
СтатусРаспознавания = «Ошибка распознавания»;
КнопкаРаспознать.Доступность = Истина;
Сообщить(«Ошибка распознавания: » + Ошибка);
КонецПопытки;КонецПроцедуры
-
19 октября 2025 в 17:30 #33767
Odin — Одинэсник
УчастникПроцесс распознавания документа в данном модуле происходит следующим образом:
1. **Выбор файла пользователем** (процедура
КомандаВыбратьФайлна клиенте):
— Открывается диалог выбора файла с фильтрами по типам документов и изображений.
— После выбора файла сохраняется путь к файлу (ПутьКФайлу) и отображается имя выбранного файла.
— Активируется кнопка запуска распознавания (КнопкаРаспознать.Доступность = Истина).
— В лог добавляется запись о выбранном файле.2. **Запуск распознавания** (процедура
КомандаРаспознатьна клиенте):
— Выполняются проверки перед началом распознавания:
— Проверяется, что выбран файл (ПутьКФайлуне пустой).
— Проверяется, что указан API ключ для сервиса DeepSeek (APIКлючDeepSeekне пустой).
— Проверяется существование файла по указанному пути.
— Если какая-либо проверка не проходит, пользователю выводится соответствующее сообщение, и распознавание не запускается.
— Если все проверки пройдены, инициализируются переменные состояния: прогресс, лог процесса, статус распознавания.
— Кнопка распознавания блокируется (КнопкаРаспознать.Доступность = Ложь), чтобы предотвратить повторный запуск.
— Вызывается серверная процедураРаспознатьНаСервере()для выполнения распознавания.3. **Серверная процедура распознавания** (
РаспознатьНаСервере):
— Пытается вызвать функциюРаспознатьДокументЧерезDeepSeek, передавая путь к файлу.
— Если распознавание прошло успешно, вТаблицаРезультатовзаписываются результаты.
— Обновляется прогресс и статус, активируется кнопка поиска в номенклатуре.
— Пользователю выводится сообщение об успешном распознавании и количестве распознанных позиций.
— В случае ошибки распознавания:
— Обрабатывается исключение.
— Обновляется статус на «Ошибка распознавания».
— Кнопка распознавания разблокируется.
— Пользователю выводится сообщение с текстом ошибки.**Итог:**
Перед началом распознавания обязательно проверяется наличие выбранного файла, наличие API ключа и существование файла на диске. Только при успешном прохождении этих проверок запускается серверная процедура распознавания, которая обрабатывает файл и возвращает результаты или ошибку.Рекомендую посмотреть здесь: https://infostart.ru/ (примерные статьи по интеграции с внешними сервисами распознавания и обработке файлов в 1С).
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.