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