Имя: Пароль:
1C
Админ
Удаление несуществующих позиций из подчинённого регистра
0 Midasu
 
09.01.14
11:32
1С 8.1. УТ 10.3.
Задача - удалить из документа "Корректировки записей регистров" по регистру "Цены номенклатуры" несуществующие позиции, навроде "Объект не найден". Понятно, что нужно удалять из регистра, ибо документ ничего не хранит.

Док = Документы.КорректировкаЗаписейРегистров.НайтиПоНомеру("00000000001", '2013-12-31');
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Док);
НаборЗаписей.Прочитать();

В результате в этом наборе записей оказываются только существующие позиции, "объект не обнаружен" отфильтровываются.

Что делать? Руками умру. Корректировка создана свёрткой.
1 1Сергей
 
09.01.14
11:34
Перебором.

Если Запись.Регистратор = Запись.Регистратор.ПолучитьОбъект().Ссылка Тогда
    // Существует
2 Midasu
 
09.01.14
11:37
(1)
Ну, я из регистра-то получу нужные мне записи, а как их удалить, выдаёт ошибку, про то, что регистр подчинён регистратору и без указания его ничего он удалять не будет.
3 Рэйв
 
09.01.14
11:37
Запросом к регистру выбери бытые ссылки, перебирая установи по каждой отбор и .Записать(Истина)
4 Рэйв
 
09.01.14
11:38
хотя если подчинен регистратору, может и не дать отбор
5 Рэйв
 
09.01.14
11:41
Вот это наверное поможет.
Перебирай набор складывай в СЗ записи с битыми сслками, потом перебирай СЗ и...

РегистрСведенийНаборЗаписей.<Имя регистра сведений>.Удалить (InformationRegisterRecordSet.<Имя регистра сведений>.Delete)
РегистрСведенийНаборЗаписей.<Имя регистра сведений> (InformationRegisterRecordSet.<Имя регистра сведений>)
Удалить (Delete)
Синтаксис:

Удалить(<Запись>)
Параметры:

<Запись> (обязательный)

Тип: Число; РегистрСведенийЗапись.<Имя регистра сведений>.
Индекс удаляемой записи либо сама запись.
Описание:

Удаляет запись из набора записей регистра сведений.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

НаборКурсов.Удалить(0);
6 Midasu
 
09.01.14
11:47
(4)
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Выборка = РегистрыСведений.ЦеныНоменклатуры.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Выборка.Номенклатура.Ссылка.ПолучитьОбъект() = Неопределено Тогда
        Сообщить(Выборка.Номенклатура.Наименование);
        НаборЗаписей.Отбор.Добавить(Выборка.Номенклатура.Ссылка);
    КонецЕсли;
КонецЦикла;
НаборЗаписей.Записать(Истина);

Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Цены номенклатуры)
7 George Wheels
 
09.01.14
11:50
Процедура КнопкаВыполнитьНажатие(Кнопка)
    //Удаление данных из регистра сведений

    
    НаборЗаписей = РегистрыСведений.Регистр1.СоздатьНаборЗаписей();
    НаборЗаписей.Прочитать();
    
    Парам = 0;
    
    Пока Истина Цикл
        Если Парам = НаборЗаписей.Количество() Тогда
            Прервать;
        КонецЕсли;
        
        Запись = НаборЗаписей[Парам];
        Если Запись.Объект = Неопределено Тогда
            НаборЗаписей.Удалить(Парам);
        Иначе
            Парам = Парам + 1;
        КонецЕсли;
    КонецЦикла;
    НаборЗаписей.Записать();
КонецПроцедуры

Смотри мой пост.
В строке
Если Запись.Объект = Неопределено Тогда
ставишь нужное условие.
8 George Wheels
 
09.01.14
11:52
Кстати это РИБ?
9 Kalambur
 
09.01.14
11:53
запустить ТИИ со  всеми галками
10 Kalambur
 
09.01.14
11:53
да и радиобатон поставить в нужное положение
11 Midasu
 
09.01.14
11:58
(7)
Таже самая ошибка об отсутствии подчинённости регистратору, при попытке удаления.
(8)
Нет, не РИБ.
(9)
Не вариант.
12 Рэйв
 
09.01.14
12:06
(11)Установи отбор по регистратору, прочиатай набор, потом перебирай и дальше как в (5)
13 1Сергей
 
09.01.14
12:09
(12) по какому регистратору? несуществующему?
14 Рэйв
 
09.01.14
12:12
(13)У него вроде номенклатура пропала, а регистраторы- Корректировка записей регистров.
15 Kalambur
 
09.01.14
12:34
(11) потому что не путь самурая?
16 Kalambur
 
09.01.14
12:35
иди ТИИ делай и не выелывайся
17 Midasu
 
09.01.14
12:36
(14)
Так, т.е. я могу подчинить регистратору, но номенклатуру взять из запроса? КАК? *w*

(16)
Потому, что люди работают, файловая БД.
18 Рэйв
 
09.01.14
12:48
(14)Да зачем из запроса? Перебирай прочитанный набор
Набор=РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ссылкаНаДок);
сп=Новый СписокЗначений;
Набор.Прочитать();
Для каждого Запись Из Набор Цикл
   Если Лев(Строка(Запись.Номенклатура),7)="<Объект"  Тогда
       сп.Добавить(Запись);
   КонецЕсли;
Конеццикла;

Для Каждого Эл Из Сп Цикл
    Набор.Удалить(Сп.Значение);
КонецЦикла;
Набор.Записать();
19 Рэйв
 
09.01.14
12:48
(18) к (17)
20 Midasu
 
09.01.14
12:53
(18)
Да вот и не попадают они в набор.
Отсеивает пустые.
В результате и ЕСЛИ не срабатывает.
Надо как-то из запроса выгрузить, правда тогда я не знаю как связь с регистром организовать результатов запроса.
21 Рэйв
 
09.01.14
12:56
(20)странно. Почему не попадают. Должно все попасть где стоит регистратор отбора и бытые ссылки и нормальные