Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Удаление записей из непериодического независимого регистра сведений.

Удаление записей из непериодического независимого регистра сведений.
Я
   Румата
 
20.03.18 - 17:03
Написал вот такой код :

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

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



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

//ТаблицаОставляемыхЗаписей.ВыбратьСтроку();

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


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

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

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

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

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

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

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

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

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

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

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

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


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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует