8.х СписокЗначений.Удалить();

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Dem0lisher, 29 сен 2010.

  1. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Здравствуйте!
    Помогите удалить из списка значений элемент.
    Решаю простяцкую студенческую задачку "Справочная Отеля" Есть двухуровневый справочник Структура- В нем на уровне групп : Номер(Число), Этаж(Число), количествоМест(Число). На уровне элементов реквизит "Место"(тип строка: А,Б,В,Г,Д,Е).
    Документ Заполняемость: ФИО,НомерОтеля,Этаж,Место(Тип-справочникСсылка.Структура)
    Отчет: На форме Номер отеля, Этаж, Место.
    При изменении номера отеля создаю список значений и в ктороый добавляю незаняте этажи. "Не занятость" этажей определяю перебором вышеуказанных документов. Тут все ОК!
    Проблема начинается с абсолютно идентичной процедурой при выборе реквизита "место". Добавляю в Список значений Места, и после этого пытаюсь удялить из списка занятые, но Список значений выводится полный.. Кроме свободных мест в списке оказываются и занятые..
    Могу код кинуть, несмотря на всю запутанность там 20 строчек
  2. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Мне кажется Вы пошли неправильным путем, надо не удалять из списка значения, а сделать такой запрос, который бы выбрал только те места, которые свободны.
  3. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Да, Габец и Гончаров в умной книжке велят так и делать. Но я пробовал-У меня в циклах засосы-Слишком много элементов в список лезет, путаюсь в циклах. поэтому решил попробовать сделать через опу..
  4. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    ну выкладывайте код, а лучше выгрузку из базы...
  5. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Спасибо за внимание! Сначала лучше код..

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

    Снабдил кое-где комментами для ясности.
    Условия все выполняются корректно, ошибка возникает в последней строке "Место=Выбрали.Значение"
    "Значение не является значением объектного типа(Значение)"
  6. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Очень сложно описывать запрос без структуры метаданных.
    Но в общем схема запроса такая:
    Из таблицы документа Заполняемость выбираешь Этаж и НомерОтеля, делаешь группировку и третьим полем Количество(*) КАК Количество, скидываешь все это во временную таблицу ВыборкаИзДокументов. Затем делаешь выборку по справочнику Структура, объединяешь ее с полученной временной таблицей по Этаж и НомерОтеля и ставишь условие, ГДЕ СправочникСтруктура.КвоМест < ВыборкаИзДокументов.Количество.

Поделиться этой страницей