Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
08 янв 2026, 02:42

СписокЗначений

Автор Дмитрий Корнилов, 25 окт 2025, 19:20

0 Пользователей и 1 гость просматривают эту тему.

Дмитрий Корнилов

Здравствуйте, помогите пожалуйста исправить, данный код, кнопки которые должный передвигаться вниз или вверх, при любом нажатии дает один ответ "Элемент не найден в списке данных"

// --- Процедура заполнения списка (выполняется на сервере) ---
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 
    // Убедитесь, что реквизит формы "СписокМесяцев" имеет тип СписокЗначений
    СписокМесяцев.Очистить();
    СписокМесяцев.Добавить("Январь");
    СписокМесяцев.Добавить("Февраль");
    СписокМесяцев.Добавить("Март");
    СписокМесяцев.Добавить("Апрель");
    СписокМесяцев.Добавить("Май");
    СписокМесяцев.Добавить("Июнь");
    СписокМесяцев.Добавить("Июль");
    СписокМесяцев.Добавить("Август");
    СписокМесяцев.Добавить("Сентябрь");
    СписокМесяцев.Добавить("Октябрь");
    СписокМесяцев.Добавить("Ноябрь");
    СписокМесяцев.Добавить("Декабрь");
 
КонецПроцедуры
 
 
// --- Процедура перемещения ВВЕРХ (выполняется на клиенте) ---
&НаКлиенте
Процедура Вверх(Команда)
 
    // 1. Получаем значение текущей строки (например, "Март")
    ТекущееЗначение = Элементы.СписокМесяцев.ТекущаяСтрока;
   
    Если ТекущееЗначение <> Неопределено Тогда
       
        // 2. Находим объект ЭлементСпискаЗначений по значению
        // (Требуется для метода Индекс)
        НайденныйЭлемент = СписокМесяцев.НайтиПоЗначению(ТекущееЗначение);
       
        Если НайденныйЭлемент <> Неопределено Тогда
           
            // 3. Получаем индекс элемента
            ИндексТекущий = СписокМесяцев.Индекс(НайденныйЭлемент);
           
            // 4. Обработка перемещения и граничных условий
            Если ИндексТекущий > 0 Тогда
                СписокМесяцев.Сдвинуть(ИндексТекущий, ИндексТекущий - 1);
               
                // 5. Возвращаем фокус на то же значение
                Элементы.СписокМесяцев.ТекущаяСтрока = ТекущееЗначение;
            Иначе
                Сообщить("Элемент уже находится в начале списка.", СтатусСообщения.Важное);
            КонецЕсли;
        Иначе
            Сообщить("Элемент не найден в списке данных.", СтатусСообщения.Внимание);
        КонецЕсли;
    Иначе
        Сообщить("Не выбран элемент для перемещения.", СтатусСообщения.Внимание);
    КонецЕсли;
   
КонецПроцедуры
 
 
// --- Процедура перемещения ВНИЗ (выполняется на клиенте) ---
&НаКлиенте
Процедура Вниз(Команда)
    // 1. Получаем значение текущей строки (например, "Июнь")
    ТекущееЗначение = Элементы.СписокМесяцев.ТекущаяСтрока;
   
    Если ТекущееЗначение <> Неопределено Тогда
       
        // 2. Находим объект ЭлементСпискаЗначений по значению
        НайденныйЭлемент = СписокМесяцев.НайтиПоЗначению(ТекущееЗначение);
       
        Если НайденныйЭлемент <> Неопределено Тогда
           
            // 3. Получаем индекс элемента
            ИндексТекущий = СписокМесяцев.Индекс(НайденныйЭлемент);
           
            // 4. Обработка перемещения и граничных условий
            Если ИндексТекущий < СписокМесяцев.Количество() - 1 Тогда
                СписокМесяцев.Сдвинуть(ИндексТекущий, ИндексТекущий + 1);
               
                // 5. Возвращаем фокус на то же значение
                Элементы.СписокМесяцев.ТекущаяСтрока = ТекущееЗначение;
            Иначе
                Сообщить("Элемент уже находится в конце списка.", СтатусСообщения.Важное);
            КонецЕсли;
           
        Иначе
            Сообщить("Элемент не найден в списке данных.", СтатусСообщения.Внимание);
        КонецЕсли;
    Иначе
        Сообщить("Не выбран элемент для перемещения.", СтатусСообщения.Внимание);
    КонецЕсли;   
КонецПроцедуры

sali

Цитата: Дмитрий Корнилов от 25 окт 2025, 19:20// 1. Получаем значение текущей строки (например, "Март")     ТекущееЗначение = Элементы.СписокМесяцев.ТекущаяСтрока;
попробуй ТекущиеДанные

Дмитрий Корнилов

Ошибка при вызове метода контекста (ЗначениеЗаполнено)
{Обработка.СЗ_III.Форма.Форма.Форма(35)}:Если Не ЗначениеЗаполнено(ТекущееЗначение) Тогда

по причине:
Проверка мутабельных значений на заполненность не поддерживается

Дмитрий Корнилов

sali, Ошибка при вызове метода контекста (ЗначениеЗаполнено)
{Обработка.СЗ_III.Форма.Форма.Форма(35)}:Если Не ЗначениеЗаполнено(ТекущееЗначение) Тогда

по причине:
Проверка мутабельных значений на заполненность не поддерживается

Дмитрий Корнилов

sali, По мере возможности помогите пожалуйста с https://www.cyberforum.ru/1c/thread3215903.html и https://www.cyberforum.ru/1c/thread3215896.html, просто уже работаю с ними 4 день, и никак, не выходит нужного результата


Дмитрий Корнилов

sali, Заранее буду благодарен

sali

а списокмесяцев у тебя это что? массив?

antoneus

Попробуй так.

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

Вниз - аналогично.

Дмитрий Корнилов

antoneus, Я слегка не понял это получается надо половину вырезать кода

antoneus

Нет, этим надо заменить вот это

&НаКлиенте
Процедура Вверх(Команда)
 
    // 1. Получаем значение текущей строки (например, "Март")
    ТекущееЗначение = Элементы.СписокМесяцев.ТекущаяСтрока;
   
    Если ТекущееЗначение <> Неопределено Тогда
       
        // 2. Находим объект ЭлементСпискаЗначений по значению
        // (Требуется для метода Индекс)
        НайденныйЭлемент = СписокМесяцев.НайтиПоЗначению(ТекущееЗначение);

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск