Как исправить автоподбор в процедуре 1С?

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

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

        Есть код, который я сделал для процедуры автоподбор, при вводе нескольких букв он видет, нажимаю, а он не добавляет сам код 1с » Процедура НовыйПланАдресов_ОтправленияИНазначения_АвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)

        //Объект.НовыйПлан
        СтандартнаяОбработка = Ложь;

        КоличествоСтрок = Объект.НовыйПлан.Количество();
        Строка = КоличествоСтрок -1;
        СтрокаДляАвтозаполнения = Объект.НовыйПлан.НайтиПоИдентификатору(Строка );
        АдресОтправления =СтрокаДляАвтозаполнения.АдресОтправления;
        МатрицаСтавок = Истина;
        Структура= Новый Структура;
        Структура.Вставить(«АдресОтправления» ,АдресОтправления);
        Структура.Вставить(«МатрицаСтавок» , МатрицаСтавок);
        Структура.Вставить(«ТекстЗапол» , Текст);

        ТекстДляАвтоПодбора = СокрЛП(Текст);
        Если СтрДлина(ТекстДляАвтоПодбора) < 3 Тогда
        Возврат;
        КонецЕсли;
        ДанныеВыбора = Общий.АвтоПодборПунктаНазначения(Текст,,Структура);
        //СтандартнаяОбработка = Ложь;

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

        "

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

          Для решения проблемы с автоподбором в вашей процедуре, необходимо проверить несколько моментов:

          1. **Проверка данных**: Убедитесь, что в `Объект.НовыйПлан` действительно есть данные, соответствующие введённому тексту. Если данных нет, то автоподбор не сможет вернуть результаты.

          2. **Логика автоподбора**: Ваша процедура использует функцию `Общий.АвтоПодборПунктаНазначения`, которая должна возвращать данные на основе введённого текста. Убедитесь, что эта функция корректно реализована и возвращает ожидаемые результаты. Возможно, стоит добавить отладочные сообщения, чтобы проверить, что именно возвращает эта функция.

          3. **Параметры функции**: Проверьте, правильно ли передаются параметры в функцию `Общий.АвтоПодборПунктаНазначения`. Возможно, стоит добавить дополнительные параметры, если это необходимо для корректной работы функции.

          4. **Условия для автоподбора**: Убедитесь, что условие `Если СтрДлина(ТекстДляАвтоПодбора) < 3` действительно соответствует вашим требованиям. Возможно, стоит уменьшить минимальную длину текста для автоподбора.

          5. **Обработка результата**: После вызова функции `Общий.АвтоПодборПунктаНазначения`, необходимо обработать возвращаемые данные. Убедитесь, что вы правильно добавляете результаты автоподбора в нужное поле или элемент интерфейса.

          6. **Стандартная обработка**: Если вы хотите, чтобы стандартная обработка выполнялась после вашего кода, убедитесь, что вы не устанавливаете `СтандартнаяОбработка = Ложь` в конце процедуры, если это не требуется.

          Вот пример, как можно улучшить вашу процедуру:

          1C
          Процедура НовыйПланАдресов_ОтправленияИНазначения_АвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
            
            СтандартнаяОбработка = Ложь;
          
            ТекстДляАвтоПодбора = СокрЛП(Текст);
            Если СтрДлина(ТекстДляАвтоПодбора) < 3 Тогда      
              Возврат;
            КонецЕсли;  
          
            // Проверка наличия данных
            КоличествоСтрок = Объект.НовыйПлан.Количество();
            Если КоличествоСтрок = 0 Тогда
              Возврат; // Нет данных для автоподбора
            КонецЕсли;
          
            // Получение адреса отправления
            Строка = КоличествоСтрок - 1;
            СтрокаДляАвтозаполнения = Объект.НовыйПлан.НайтиПоИдентификатору(Строка);
            Если СтрокаДляАвтозаполнения = Неопределено Тогда
              Возврат; // Не удалось найти строку
            КонецЕсли;
          
            АдресОтправления = СтрокаДляАвтозаполнения.АдресОтправления;
            МатрицаСтавок = Истина;
            
            // Подготовка структуры
            Структура = Новый Структура;
            Структура.Вставить("АдресОтправления", АдресОтправления);
            Структура.Вставить("МатрицаСтавок", МатрицаСтавок);
            Структура.Вставить("ТекстЗапол", Текст);
            
            // Вызов автоподбора
            ДанныеВыбора = Общий.АвтоПодборПунктаНазначения(Текст, , Структура);
            
            // Обработка результата автоподбора
            Если Не ЗначениеЗаполнено(ДанныеВыбора) Тогда
              Возврат; // Нет результатов для автоподбора
            КонецЕсли;
          
            // Здесь добавьте код для обработки и добавления результатов в интерфейс
          
          КонецПроцедуры
          

          Проверьте указанные моменты и внесите необходимые изменения в код.

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