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

Структура

Автор Дмитрий Корнилов, 28 окт 2025, 17:24

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

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

Здравствуйте помогите пожалуйста, основная проблема в том что нет реакции, даже через привязку, может что то нитак сделано, помогите пожалуйста. Заранее буду благодарен

Создайте в обработке переменную типа Структура, которая будет глобальным объектом обработки (разместите в модуле обработки). Создайте две формы – основная форма (она будет открываться при запуске обработки) и форма поиска (она будет открываться при нажатии на кнопку на основной форме). В форме поиска разместите поле ввода (тип значения строка) и заполните структуру следующим образом: введите в форму поля ввода название марки автомобиля, и, если есть марка с таким названием, то создайте новый элемент структуры, ключ которого будет название марки, а значение - ссылка на элемент справочника. В основной форме разместите два поля: поле поиска (тип строка) и поле «Марка» (тип ссылка на справочник Автомобили). Введите название марки в поле поиска основной формы, выполните поиск одноименного ключа в структуре. Если есть ключ с таким названием, то значение данного элемента введите в поле «Марка». Если нет такого значения, то сообщите об этом пользователю.

Основная форма
&НаКлиенте
Процедура ОткрытьФормуПоиска(Команда)
    ФормаПоиска = ПолучитьФорму("Обработка.СтруктурыIII.Форма.ФормаПоиска", , ЭтаФорма);
    ФормаПоиска.Открыть();
КонецПроцедуры

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

&НаСервере
Процедура НайтиМаркуНаСервере(ИскомыйКлюч)
    // 1. Получаем объект обработки (экземпляр) из реквизита формы
    // Предполагаем, что реквизит формы с типом "Обработка.СтруктурыIII" называется "Объект"
    ОбъектОбработки = РеквизитФормыВЗначение("Объект");

    // 2. ГАРАНТИРУЕМ ИНИЦИАЛИЗАЦИЮ:
    // Если реквизит "ГлобальнаяСтруктураМарок" еще не является структурой (т.е. Неопределено),
    // мы его инициализируем. Это устранит ошибку "Значение не является значением объектного типа".
    Если ТипЗнч(ОбъектОбработки.ГлобальнаяСтруктураМарок) <> Тип("Структура") Тогда
        ОбъектОбработки.ГлобальнаяСтруктураМарок = Новый Структура();
    КонецЕсли;

    // 3. Теперь безопасно вызываем метод Свойство()
    МаркаНайдена = Неопределено;

    Если ОбъектОбработки.ГлобальнаяСтруктураМарок.Свойство(ИскомыйКлюч) Тогда
        // Получаем значение (ссылку на элемент справочника)
        МаркаНайдена = ОбъектОбработки.ГлобальнаяСтруктураМарок[ИскомыйКлюч];
        Сообщить("Марка найдена!");
    Иначе
        Сообщить("Ключ '" + ИскомыйКлюч + "' не найден в структуре.", СтатусСообщения.Важное);
    КонецЕсли;

    // 4. Присваиваем результат поиска реквизиту формы "Марка"
    Марка = МаркаНайдена;

    // 5. Записываем измененный объект обратно в реквизит формы (важно для сохранения инициализации)
    ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект");
КонецПроцедуры

ФормаПоиска
// Функция для получения ссылки на элемент справочника
// Имитация поиска по наименованию (нужен реальный справочник "Автомобили")
&НаСервере
Функция ПолучитьСсылкуНаМарку(ИмяМарки)
    // В реальной системе:
    // Марка = Справочники.Автомобили.НайтиПоНаименованию(ИмяМарки);
    // Если Марка.Пустая() Тогда
    //    Возврат Неопределено;
    // Иначе
    //    Возврат Марка;
    // КонецЕсли;

    // Для примера (если нет реального справочника):
    Если ИмяМарки = "Lada" Тогда
       // Предположим, что это некая ссылка
       Возврат ИмяМарки;
    Иначе
       Возврат Неопределено;
    КонецЕсли;
КонецФункции

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

&НаСервере
Процедура ЗаписатьМаркуНаСервере()
    // Получаем объект обработки
    ОбъектОбработки = РеквизитФормыВЗначение("Объект");

    // Проверяем, существует ли марка в справочнике
    СсылкаНаМарку = ПолучитьСсылкуНаМарку(МаркаАвтомобиля);

    Если СсылкаНаМарку <> Неопределено Тогда
        // Ключ - название марки, Значение - ссылка
        ОбъектОбработки.ГлобальнаяСтруктураМарок.Вставить(МаркаАвтомобиля, СсылкаНаМарку);
        ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект"); // Обновляем реквизит формы
        Сообщить("Марка '" + МаркаАвтомобиля + "' добавлена в структуру.");
    Иначе
        Сообщить("Марка '" + МаркаАвтомобиля + "' не найдена в справочнике.");
    КонецЕсли;
КонецПроцедуры

sali

Нет реакции на что?
даже на точку остановки нет реакции??
Тебе ж надо сделать что-то вроде обработки выбора. Делаешь кнопку, в процедуре ее команды пишешь обращение к форме поиска (как понял подобие формы выбора или подбора) (дальше как фп).
Там же в фп заполняется твоя структура , как?
Ты делаешь поле ввода и кнопку запомнить - все что ты ввел будет записывать в твою глобальную структуру.
Когда идёт твое обращение с фо к фп начинаешь перебирать или искать по свойству
Если структура марок.свойство(твоялада) тогда нашлась красавица иначе пшел отсюда конец
А ну и возврат значения конечно же

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

Если возникает вопрос, что не работает, посмотрите выгрузки, чтобы лишние вопросы отпали, заранее буду благодарен

sali

выгрузки? это ты про свой сжатый файл с твоей обработкой?
амм... смотри , здесь как работает, если ты создаешь тему и с первого сообщения же сразу кидаешь вопрос, фото и саму обработку - не жди следующим сообщением готовую обработку. можно отправить только через какое-то время, ну когда уже прям не понятно что происходит в программе, ни автору, ни советчикам. тебе вначале помогут словом, подскажут, код подправят или укажут где твоя ошибка в коде (в строке) и так далее

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

sali, Я не жду готовой обработки, я всегда скидываю обработку, по причине того, что раньше, когда я задавал вопросы, на различные темы 1С, юзеры, часто говорили где обработка, с целью лучшее понять ситуацию, c которой столкнулся, так как, давая голый код и фотографий, ничего особо непонятно, и если я пишу на форум, это не означает, сижу сложа руки, это значит, что с ситуацией, не могу справиться большее дня, заранее буду благодарен

antoneus

Цитата: Дмитрий Корнилов от 28 окт 2025, 17:24Создайте в обработке переменную типа Структура, которая будет глобальным объектом обработки (разместите в модуле обработки).

В управляемых формах не взлетит.

sali


depb

У тебя Объект.ГлобальнаяСтруктураМарок тип строка, а ты пытаешься работать с ней как с структурой  ОбъектОбработки.ГлобальнаяСтруктураМарок.Вставить(МаркаАвтомобиля, СсылкаНаМарку);
и начнем с того, что элемент с типом структура ты на форму в качестве элемента не добавишь, добавляй реквизит с типом произвольный, присваивай ему тип через Новый ОписаниеТипов() и потом уже заполняй

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


sali

Дмитрий Корнилов,  покажи. где такое было? когда?

Теги:

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

Рейтинг@Mail.ru

Поиск