Имя: Пароль:
1C
1С v8
Удаление записей из непериодического независимого регистра сведений.
0 Румата
 
20.03.18
17:03
Написал вот такой код :

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

Запрос.УстановитьПараметр("ТипыДокументов", ТипыДокументов);
Запрос.УстановитьПараметр("ДатаСвертки", ДатаСвертки);



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

//ТаблицаОставляемыхЗаписей.ВыбратьСтроку();
НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей);
НаборЗаписей.Записать();  


=======================

Код не отрабатывает, вылетает с ошибкой. Подскажите пожалуйста, как подправить, чтобы заработало.
1 Румата
 
20.03.18
17:25
Пишет не однократно :
Штрих код : ХХХ уже имеет владельца YYY

А в самом конце:

НаборЗаписей.Записать();  
по причине:
Не удалось записать: "Штрихкоды"!
2 Cyberhawk
 
20.03.18
17:26
Это прикладной код конфигурации
3 Cyberhawk
 
20.03.18
17:26
Подписка или модуль набора записей
4 Cyberhawk
 
20.03.18
17:26
Режим загрузки может поможет, если прикладной код умеет его понимать
5 Румата
 
20.03.18
17:28
Процедура ПередЗаписью(Отказ, Замещение)

    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    Для Каждого ТекущаяЗапись Из ЭтотОбъект Цикл
        Если ТипЗнч(ТекущаяЗапись.Владелец) = Тип("СправочникСсылка.Номенклатура") И Не ЗначениеЗаполнено(ТекущаяЗапись.Качество) Тогда
            Сообщить("Для товара """ + СокрЛП(ТекущаяЗапись.Владелец) + """ со штрихкодом: " + ТекущаяЗапись.ШтрихКод + " не заполнено качество.");
            Отказ = Истина;
        КонецЕсли;
    КонецЦикла;

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

                Запрос.УстановитьПараметр("ШтрихКод", ТекущаяЗапись.ШтрихКод);

                РезультатЗапроса = Запрос.Выполнить();
                Если Не РезультатЗапроса.Пустой() Тогда
                    Выборка = РезультатЗапроса.Выбрать();
                    Выборка.Следующий();

                    Сообщить("Штрихкод: " + Выборка.ШтрихКод + " уже имеет владельца """ + СокрЛП(Выборка.Владелец) + """.");
                    Отказ = Истина;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

КонецПроцедуры // ПередЗаписью()
6 Румата
 
20.03.18
17:28
(Cyberhawk)  НаборЗаписей.ОбменДанными.Загрузка = Истина ?
7 Cyberhawk
 
20.03.18
17:29
Да
8 Румата
 
20.03.18
17:30
(Cyberhawk)

НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
НаборЗаписей.Загрузить(ТаблицаОставляемыхЗаписей);
НаборЗаписей.Записать();  


Вот так вроде прокатило. Нормальный код ? Если на копии базы делать ? )
9 Cyberhawk
 
20.03.18
17:31
Нет, код избыточный и на большом объеме данных может никогда не выполниться
10 Румата
 
20.03.18
17:32
(Cyberhawk) Спасибо !