|
Подчиненный регистр сведений удалить одну запись. | ☑ | ||
---|---|---|---|---|
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) Покажи запрос
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |