Имя: Пароль:
1C
 
Подчиненный регистр сведений удалить одну запись.
,
0 Kongo2019
 
29.01.21
14:23
Доброго.
Нужно в подчиненном регистре сведений удалить одну запись(вообще несколько).
Запросом нахожу нужные мне данные, через них знаю регистраторы. Тут уже цикл обработки выборки запроса.
А надо еше удалить конкретную запись, умнее ничего не придумал. Но дико долго оно все работает.


НаборЗаписей = РегистрыСведений.Хранилище.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Прочитать();

сзУдаляемыеЗаписи = Новый СписокЗначений;
Для Каждого Запись Из НаборЗаписей
    Если [мое условие] Тогда
        сзУдаляемыеЗаписи.Добавить(Запись);
    КонецЕсли;
КонецЦикла;

Для каждого ЭлтСз Из сзУдаляемыеЗаписи
    НаборЗаписей.Удалить(ЭлтСз.Значение);
КонецЦикла;

НаборЗаписей.Записать();

Как этих циклов поменьше сделать?
1 RomanYS
 
29.01.21
14:26
(0) Так найди запросом номера строк и удаляй (только в обратном порядке конечно же)
2 Михаил Козлов
 
29.01.21
14:32
Отбор по регистратору все равно придется делать. Разве что не нужен будет цикл по поиску удаляемой.
3 Малыш Джон
 
29.01.21
14:32
(0) получи в запросе этот набор записей уже без ненужных записей
    создай набор записей
    загрузи туда данные из  запроса
    запиши набор (только отбор установи, а то весь регистр затрёшь)
4 Kongo2019
 
29.01.21
14:32
(1) НаборЗаписей.Удалить(ЗдесьИндекс); типа такого?
5 Kongo2019
 
29.01.21
14:35
(3) Регистр починенный, нужен отбор по регистратору.
6 Фрэнки
 
29.01.21
14:36
Что-то странное тут пишите

У тебя есть Набор записей. Прочитать сделал. Выгрузи это набор Таблицу Значений. Как привык с ТЗ работай с ней. Затем Загрузить в Набор записей. Записывай.
7 Малыш Джон
 
29.01.21
14:37
(4) советуют что-то типо такого:

КоличествоЗаписей = НаборЗаписей.Количество();
Для Номер=1  По КоличествоЗаписей Цикл
    ТекЗапись = НаборЗаписей[КоличествоЗаписей-Номер];
    Если <условие> Тогда
        НаборЗаписей.Удалить(ТекЗапись);
    КонецЕсли;
КонецЦикла;

но если набор большой, то времени это может занять все равно много
8 Малыш Джон
 
29.01.21
14:37
(5) так я ж и написал "(только отбор установи, а то весь регистр затрёшь)"
9 RomanYS
 
29.01.21
14:37
(2) Вопрос что у него в [мое условие], если там условия через несколько точек, то (1) однозначно поможет.

А если и так всё время уходит на запись, то только оптимизировать запись (ОбменДанными.Загрузка?). А всё остальное это незначительная фигня
10 Kongo2019
 
29.01.21
14:39
(8) И как в отбор запихать с сотню регистраторов? Там же только на равно работает.
11 Kongo2019
 
29.01.21
14:41
(7) Одним циклом меньше. И то хлеб.
12 RomanYS
 
29.01.21
14:41
(10) сделай уже замер и посмотри где основной расход времени
на
Если [мое условие] Тогда
или
на
НаборЗаписей.Записать();
13 Малыш Джон
 
29.01.21
14:43
(10) по каждому регистратору отдельно, ясен пень
14 Kongo2019
 
29.01.21
14:50
(12)Естественно НаборЗаписей.Записать(); там условие простое.
15 Малыш Джон
 
29.01.21
14:51
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                |    *
                |ИЗ
                |    РегистрСведений.ТвойРегистр КАК ТвойРегистр
                |ГДЕ
                |    <твое условие>
                |
                |УПОРЯДОЧИТЬ ПО
                |    Регистратор
                |ИТОГИ ПО
                |    Регистратор";
    
    ВыборкаРегистратор = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаРегистратор.Следующий() Цикл
        ВыборкаДетальныеЗаписи = ВыборкаРегистратор.Выгрузить();
        НаборЗаписей = РегистрыСведений.СвязьШтрихкодовСДвижениямиПоДатам.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(ВыборкаРегистратор.Регистратор)
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Запись = НаборЗаписей.Добавить();
            ЗаполнитьЗначенияСвойств(Запись,ВыборкаДетальныеЗаписи);            
        КонецЦикла;
        Попытка
            НаборЗаписей.Записать();
        Исключение
            Сообщение(ОписаниеОшибки());
        КонецЦикла;
    КонецЦикла;
16 RomanYS
 
29.01.21
14:52
(14) Тогда что ты пытаешься оптимизировать? Сколько %% на записать?
17 RomanYS
 
29.01.21
14:54
(0) Покажи запрос