Имя: Пароль:
1C
1С v8
Выбор всех элементов справочника
, , ,
0 amaderassy
 
23.01.16
00:51
Доброй ночи)Ситуация такая, нужно отобрать все элементы справочника номенклатура(сами папки не нужны, только элементы), которых нету в ТЧ документа Оприходования. Вылетает с критом "Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!" и криво отрабатывает... Подскажите, как отобрать правильно и записать это дело...
Процедура Данные()
    //Создаем Таблицу значений
    НоменклатураДок = Новый ТаблицаЗначений;
    НоменклатураДок.Колонки.Добавить("Номенклатура");
    //Заполняем ее по периоду наименованиями из документа оприходования
    Выборка = Документы.ОприходованиеТоваров.Выбрать(Начало,Конец);
    Пока Выборка.Следующий()цикл
        Если Выборка.Проведен тогда
            Док = Выборка.Ссылка;            
            Для каждого строка Из Док.Товары Цикл
            НоваяСтрока = НоменклатураДок.Добавить();
            НоваяСтрока.Номенклатура = строка.Номенклатура.Наименование;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
        
    
выборкаСпр =  Справочники.Номенклатура.Выбрать();                                //Выбираем справочник номенклатура
     Пока выборкаСпр.Следующий() цикл                                            //перебираем Справочник    
         Для Каждого ТекущаяСтрока Из НоменклатураДок Цикл                         //перебираем ТЗ
            Если выборкаСпр.Наименование = ТекущаяСтрока.Номенклатура Тогда     //Сравниваем значие справочника со значеем из таблицы значений, полученной выше
            //ничего не делаем    
            Иначе
                Если  выборкаСпр.ПометкаУдаления = Истина Тогда                 //проверка на удаление элемнта справочника
                //ничего не делаем    
            Иначе
                выборкаСпр.ПолучитьОбъект().Разблокировать();
                 выборкаСпр.ПолучитьОбъект().УстановитьПометкуУдаления(Истина,Ложь); //помечаем на удаление
                выборкаСпр.ПолучитьОбъект().Записать();
                выборкаСпр.ПолучитьОбъект().Заблокировать();
                Сообщить("Поментка установлена:"+выборкаСпр.Наименование);
                КонецЕсли;
             КонецЕсли;
        КонецЦикла;    
    КонецЦикла;
    
КонецПроцедуры
1 kubik_live
 
23.01.16
00:57
А что, запросы отменили?
2 Defender aka LINN
 
23.01.16
00:58
(1) Видимо, у них за такое сразу отлучение
3 Zamestas
 
23.01.16
01:00
(2) 1C Анафема?
4 kubik_live
 
23.01.16
01:01
(0) "...нужно отобрать все элементы справочника номенклатур"

Если не секрет, зачем?
5 amaderassy
 
23.01.16
01:05
(4) Чтобы пометить на удаление, если их нету в оприходованиях.
6 amaderassy
 
23.01.16
01:06
(1) Запросом пробовал, не вышло...видать я не дорос до них еще...
7 kubik_live
 
23.01.16
01:08
(5) Типа... свёртку базы замутил?
8 Zamestas
 
23.01.16
01:08
(6) Пометить на удаление все элементы, удалить все что получилось, снять пометку - не предалагаю.
9 amaderassy
 
23.01.16
01:15
(7) Чищу базу от мусора, вернее пытаюсь.
10 GreatOne
 
23.01.16
02:26
(9) бугага))
11 amaderassy
 
23.01.16
02:46
(10) Я немного нетрезв) но допер как правильно:
выборкаСпр =  Справочники.Номенклатура.Выбрать();
Пока выборкаСпр.Следующий() Цикл
    Если  выборкаСпр.ЭтоГруппа = Истина Тогда                     
    Иначе    
        НайденнаяСтрока=НоменклатураДок.Найти(выборкаСпр.Наименование);    
        Если
            НайденнаяСтрока = Неопределено Тогда     
                 выборкаСпр.ПолучитьОбъект().УстановитьПометкуУдаления(Истина,Ложь);
                Сообщить("Поментка установлена:"+выборкаСпр.Наименование);
        КонецЕсли;
    КонецЕсли;
    КонецЦикла;
12 amaderassy
 
23.01.16
02:51
Можно закрывать этот стыд))))
13 Zamestas
 
23.01.16
03:20
(11) Я понимаю пятница (была), но это мощно... Я х.з. чем мощнее (8), но что то в этом есть...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший