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

Проблема элемент не выбран

Автор Timkimk, 10 фев 2024, 08:38

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

Timkimk

Процедура ПередЗаписью(Отказ, СтандартнаяОбработка)
   
    Если ЭтоНовый() ИЛИ ТипСкладаГлав И ТипСкладаДоп Тогда
        Если ТипСкладаГлав = Истина И ТипСкладаДоп = Истина Тогда
            Сообщить("Невозможно провести справочник, если склад одновременно является и главным, и дополнительным.");
            Отказ = Истина;
      КонецЕсли;
    КонецЕсли;

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


Процедура ПриЗаписи(Источник, СтандартнаяОбработка)
   
    // Получаем список всех элементов справочника "Склады"
    ВыборкаСкладов = Справочники.Склады.Выбрать();
    Пока ВыборкаСкладов.Следующий() Цикл
        СуммаНаСкладе = 0;
        // Получаем коллекцию всех материалов на складе через соответствующее свойство
        ВыборкаМатериалов = ВыборкаСкладов.Материалы;
        Для каждого Материал из ВыборкаМатериалов Цикл
            // Суммируем количество материала
            СуммаНаСкладе = СуммаНаСкладе + Материал.Количество;
        КонецЦикла;
       Сообщить(СуммаНаСкладе);
   
Запрос = Новый Запрос;
Запрос.Текст = "
    |ВЫБРАТЬ Номенклатура.ОбщиеКоличествоНаВсехСкладах
    |ИЗ Справочник.Номенклатура КАК Номенклатура
    |ГДЕ Номенклатура.Наименование = &Наименование ";
Запрос.УстановитьПараметр("Наименование", ВыборкаСкладов.Наименование);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
    ОбщееКоличество = Результат.ОбщиеКоличествоНаВсехСкладах;
Иначе
    ОбщееКоличество = 0;
КонецЕсли;
       
        // Обновляем значение общего количества с учетом количества на данном складе
        ОбщееКоличество = ОбщееКоличество + СуммаНаСкладе;

// Поиск объекта справочника "Номенклатура" по наименованию
НоменклатураСсылка = Справочники.Номенклатура.НайтиПоНаименованию(ВыборкаСкладов.Наименование);

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





    КонецЦикла;
   
       
КонецПроцедуры

Ошибка

{Справочник.Склады.МодульОбъекта(49)}: Ошибка при вызове метода контекста (ПолучитьОбъект)
    НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект();
по причине:
Элемент не выбран!
Элемент не выбран!




alexandr_ll

Timkimk, В вашем случае конструкция НайтиПоНаименованию возвращает не "Неопределено", а "ПустаяСсылка()". Поэтому при записи объекта проверку измените.

LexaK

Timkimk, вот здесь ошибка
НоменклатураСсылка = Справочники.Номенклатура.НайтиПоНаименованию(ВыборкаСкладов.Наименование);

вы по наименованию Склада ищите Номенклатуру!

вообше лучше переделать весь код! убрать запрос из цикла!
и в процедуре при Записи не надо все пересчитывать и перезаписывать все элементы! иначе будет сильно тормозить!
если помогло нажмите: Спасибо!

Timkimk

LexaK, Могли бы вы примерно написать структуру исправленого кода?

LexaK

Цитата: Timkimk от 13 фев 2024, 15:35LexaK, Могли бы вы примерно написать структуру исправленого кода?
что-ж, вы так не внимательно читаете ответы?
вам не код надо переписывать! а саму задачу переосмыслить! в том плане
что в Товары (элементы справочника) НЕ НАДО ПИСАТЬ остатки! - вот что здесь не понятного?

Как у вас вообще звучит задача? описание задачи есть?
четкое понимание:

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

если помогло нажмите: Спасибо!

Afinogen

Запрос = Новый Запрос;
Запрос.Текст = "
    |ВЫБРАТЬ Номенклатура.ОбщиеКоличествоНаВсехСкладах
    |ИЗ Справочник.Номенклатура КАК Номенклатура
    |ГДЕ Номенклатура.Наименование = &Наименование ";
Запрос.УстановитьПараметр("Наименование", ВыборкаСкладов.Наименование);
что это за абракадабра? в запрос к таблице с номенклатурой передается параметр - наименование склада?  :xfbnsdfb: так тут всегда пусто будет в ответ приходить

Afinogen

ЦитироватьНоменклатураСсылка = Справочники.Номенклатура.НайтиПоНаименованию(ВыборкаСкладов.Наименование);

1.  ищете как уже было сказано выше по наименованию склада номенклатуру,  в итоге у вас ВСЕГДА будет результат поиска  - тип СправочникСсылка.Номенклатура.ПустаяСсылка()

ПустаяСсылка() возвращает значение типа СправочникСсылка, а не объект СправочникСсылка.

2. вам надо исправить п.1 и вместо

Если Не НоменклатураСсылка = Неопределено Тогда

написать

Если ЗначениеЗаполнено(НоменклатураСсылка )

Теги:  

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

Рейтинг@Mail.ru

Поиск