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

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

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

        расскажи про распознавание первичных документов и их загрузку в 1С. Как это реализовано? Приведи пример кода

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

          Распознавание первичных документов и их загрузка в 1С — это процесс автоматического извлечения данных из внешних файлов (чаще всего Excel, PDF, сканированных изображений) и последующего создания соответствующих документов в базе 1С.

          ### Как это реализовано в 1С

          1. **Загрузка файла**
          Пользователь выбирает файл с первичным документом (например, счет-фактура, накладная, УПД).

          2. **Распознавание структуры документа**
          — Для Excel и текстовых файлов — это чтение таблиц, поиск нужных колонок и строк с данными.
          — Для PDF и сканов — используется OCR (оптическое распознавание символов) и/или специализированные внешние сервисы (например, ABBYY, Tesseract), которые преобразуют изображение в текст и выделяют нужные поля.

          3. **Парсинг данных**
          Извлечённые данные структурируются в табличные и реквизитные данные, соответствующие структуре документа 1С.

          4. **Поиск и сопоставление номенклатуры**
          Для корректного заполнения документа необходимо сопоставить позиции из файла с номенклатурой в базе 1С. Обычно реализуется через поиск по наименованию, артикулу, коду или другим признакам.

          5. **Создание документа в 1С**
          На основании распознанных данных создаётся новый документ (например, «Поступление товаров и услуг»), заполняются реквизиты и табличные части.

          6. **Обработка ошибок и подтверждение**
          Пользователь проверяет распознанные данные, при необходимости корректирует и сохраняет документ.

          ### Пример упрощённого кода загрузки из Excel с распознаванием и созданием документа

          bsl
          &НаКлиенте
          Процедура ЗагрузитьДокументИзExcel(Команда)
              Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
              Диалог.Фильтр = "Excel файлы (*.xls;*.xlsx)|*.xls;*.xlsx";
              Если Диалог.Выбрать() Тогда
                  ПутьКФайлу = Диалог.ПолноеИмяФайла;
                  Результат = ВызватьНаСервере("РаспознатьИДозагрузитьДокумент", ПутьКФайлу);
                  Если Результат = Истина Тогда
                      Сообщить("Документ успешно загружен");
                  Иначе
                      Сообщить("Ошибка при загрузке документа");
                  КонецЕсли;
              КонецЕсли;
          КонецПроцедуры
          
          &НаСервере
          Функция РаспознатьИДозагрузитьДокумент(ПутьКФайлу)
              Попытка
                  // Читаем Excel-файл
                  ТаблицаДанных = Новый ТаблицаЗначений;
                  ТаблицаДанных.ЗагрузитьИзФайла(ПутьКФайлу, Новый ФорматТаблицы("XLSX"));
          
                  // Создаем новый документ Поступление товаров и услуг
                  Документ = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
                  Документ.Дата = ТекущаяДата();
                  Документ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик"); // пример
          
                  // Предположим, что в таблице есть колонки: "Номенклатура", "Количество", "Цена"
                  Для Каждого Строка Из ТаблицаДанных Цикл
                      НоваяСтрока = Документ.Товары.Добавить();
                      // Поиск номенклатуры по наименованию
                      Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Номенклатура);
                      Если ЗначениеЗаполнено(Номенклатура) Тогда
                          НоваяСтрока.Номенклатура = Номенклатура;
                          НоваяСтрока.Количество = Строка.Количество;
                          НоваяСтрока.Цена = Строка.Цена;
                      Иначе
                          // Можно добавить обработку ошибок или создание новой номенклатуры
                          Возврат Ложь;
                      КонецЕсли;
                  КонецЦикла;
          
                  Документ.Записать();
                  Возврат Истина;
              Исключение
                  Возврат Ложь;
              КонецПопытки;
          КонецФункции
          

          ### Комментарии

          — В реальных решениях распознавание PDF и сканов требует интеграции с OCR-сервисами (например, ABBYY FlexiCapture), которые возвращают структурированные данные.
          — Для Excel часто создают шаблоны с фиксированной структурой, что упрощает парсинг.
          — Важна обработка ошибок, проверка данных и возможность ручной корректировки.
          — Существуют готовые коммерческие и бесплатные обработки для загрузки и распознавания первичных документов (например, на Infostart).

          Рекомендую посмотреть здесь:
          https://infostart.ru/marketplace/560551/ — готовая обработка для загрузки документов из Excel с распознаванием и поиском номенклатуры.
          https://infostart.ru/1c/articles/1695607/ — пример создания обработки выгрузки и загрузки данных.
          https://infostart.ru/1c/articles/1839854/ — работа с файлами и вложениями в 1С.

          Если нужно, могу помочь с более сложным примером под конкретную задачу.

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