RE: Как сформировать запрос к базе данных на основе распознанного текста?

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

    Для формирования запроса к базе данных на основе распознанного текста в 1С:Предприятии необходимо выполнить следующие шаги:

    1. **Получение и обработка распознанного текста**
    После распознавания речи у вас есть строка с текстом, например:

      
       "Показать все документы продажи за август"  
       

    Важно выделить из этой строки ключевые параметры для запроса: тип объекта (документы продажи), период (август), и т.д.

    2. **Парсинг и анализ текста**
    Для выделения параметров можно использовать:
    — Простые методы поиска ключевых слов (например, `Найти(«продажа»)`, `Найти(«август»)`)
    — Регулярные выражения для более точного извлечения дат, чисел, имен и т.п.
    — Встроенные средства 1С для работы с датами и строками

    3. **Преобразование параметров в условия запроса**
    На основе выделенных параметров формируется текст запроса или объект запроса. Например:

    1C
       Запрос = Новый Запрос;
       Запрос.Текст = 
           "ВЫБРАТЬ
               ДокументПродажи.Ссылка,
               ДокументПродажи.Дата,
               ДокументПродажи.Сумма
            ИЗ
               Документ.Продажа КАК ДокументПродажи
            ГДЕ
               ДокументПродажи.Дата МЕЖДУ &ДатаНачала И &ДатаКонца";
       
       Запрос.УстановитьПараметр("ДатаНачала", НачалоАвгуста);
       Запрос.УстановитьПараметр("ДатаКонца", КонецАвгуста);
       

    Здесь `НачалоАвгуста` и `КонецАвгуста` — вычисленные даты на основе распознанного текста.

    4. **Выполнение запроса и обработка результата**

    1C
       Результат = Запрос.Выполнить();
       ТаблицаРезультатов = Результат.Выгрузить();
       // Далее вывод или обработка данных
       

    5. **Пример упрощённого алгоритма**

    1C
       ТекстРаспознанный = "Показать все документы продажи за август";
    
       Если Найти(ТекстРаспознанный, "продажа") > 0 Тогда
           // Определяем период
           Если Найти(ТекстРаспознанный, "август") > 0 Тогда
               НачалоАвгуста = Дата(2025, 8, 1);
               КонецАвгуста = КонецМесяца(НачалоАвгуста);
           КонецЕсли;
    
           // Формируем и выполняем запрос
           Запрос = Новый Запрос;
           Запрос.Текст = 
               "ВЫБРАТЬ
                   ДокументПродажи.Ссылка,
                   ДокументПродажи.Дата,
                   ДокументПродажи.Сумма
                ИЗ
                   Документ.Продажа КАК ДокументПродажи
                ГДЕ
                   ДокументПродажи.Дата МЕЖДУ &ДатаНачала И &ДатаКонца";
           Запрос.УстановитьПараметр("ДатаНачала", НачалоАвгуста);
           Запрос.УстановитьПараметр("ДатаКонца", КонецАвгуста);
    
           Результат = Запрос.Выполнить();
           ТаблицаРезультатов = Результат.Выгрузить();
           // Вывод результатов
       КонецЕсли;
       

    **Рекомендации:**
    — Для сложного анализа текста можно использовать внешние библиотеки NLP (например, Python + NLP), а в 1С передавать уже структурированные параметры.
    — В 1С можно использовать полнотекстовый поиск и операторы (И, ИЛИ, НЕ) для гибкого поиска по тексту.
    — Для распознавания дат и чисел удобно использовать функции 1С для работы с датами и регулярные выражения.

    Рекомендую посмотреть здесь:
    https://its.1c.ru/db/v8std#content:456:hdoc

    https://its.1c.ru/db/v8std#content:456:hdoc:search

    https://its.1c.ru/db/v8std#content:456:hdoc:query

    Оценка ответа: 9/10

    База знаний 1С