|
Как удалить записи РН по регистратору выборочно? | ☑ | ||
---|---|---|---|---|
0
Gorr
26.06.14
✎
15:44
|
Делал поиск по сабжу, но непонятно толи через запрос отбирать записи которые должны остаться в регистре по документу затем загружать их в набор записей с послудующей записью, толи читать все записи из регистра по регистратору в набор с последующим удалением ненужных и опять таки записью замещением? Как правильно?
|
|||
1
Serg_1960
26.06.14
✎
15:46
|
Выгрузить/изменить/загрузить движения
|
|||
2
Gorr
26.06.14
✎
16:02
|
Остался вопрос как идентифицировать запись в наборе. Первоначально, запросом выполняю поиск записей из регистра которые необходимо удалить. Теперь необходимо прочитать все записи регистратора в набор. И далее каким-то образом сопоставить записи из запроса с записями в наборе.
Как? Интересно уникально ли сочитание измерений в наборе РН по регистратору как в РС? |
|||
3
Bober
26.06.14
✎
16:25
|
(0)
- запросом считывать то что нужно и перезаписывать - считывать весь набор записей и в цикле выкидывать - записывать сторно записи по регистратору в режиме замещение = Ложь |
|||
4
Gorr
26.06.14
✎
16:32
|
(3)
1. непонятно что имеете в виду считывать то что нужно оставить или удалить? 2. как идентифицировать запись которую нужно выкидывать? 3. это что свойство набора? |
|||
5
Bober
26.06.14
✎
16:36
|
(4)
- а откуда я знаю как требуется? - эээ, цикле применять ЕСЛИ ТОГДА - это параметр записи набора записей |
|||
6
acsent
26.06.14
✎
16:38
|
номера записей, так же как у документа. Удаление в обратном порядке
|
|||
7
Lex2k2k
26.06.14
✎
16:42
|
Если регистратор известен выгрузи в ТЗ. Обработай в ТЗ, и загрузи на место.
|
|||
8
КонецЦикла
26.06.14
✎
16:42
|
Выгрузить в ТЗ, наколдовать и загрузить
|
|||
9
КонецЦикла
26.06.14
✎
16:43
|
Вообще звиздец конечно придумали, просто звиздец...
Ждем девятку в которой справят |
|||
10
Gorr
26.06.14
✎
16:44
|
(5)
1. это я вас спрашиваю как в (0). ваша идея считывания и перезаписывания запросом не понятна. 2. как идентифицировать запись ведь у записи нет ссылки и вопросом ее не вернешь. Запись не объектна. Отсюда мой вопрос в (2) "Интересно уникально ли сочитание измерений в наборе РН по регистратору как в РС?" 3. не нашел такого параметра. |
|||
11
ptiz
26.06.14
✎
16:45
|
Ты сам не знаешь, что хочешь удалить? :)
|
|||
12
Lex2k2k
26.06.14
✎
16:46
|
РегНабор = РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей();
Для каждого регистратор из регистраторы цикл РегНабор.Отбор.Регистратор.Установить(Регистратор,истина); ТЗ = РегНабор.Выгрузить(); Для каждого СтрокаТЗ из ТЗ цикл // Нут делаешь чё тебе надо. Нужно удалить - удаляешь. КонецЦикла; РегНабор.Загрузить(ТЗ); РегНабор.Записать(истина); КОнецЦикла; как то так |
|||
13
РенеДекарт
26.06.14
✎
16:46
|
(0)>>и опять таки записью замещением?
1с работает только так с регситрами. Никаких "удаляю напрямую". (9)>>Ждем девятку в которой справят в пятнадцатой версии не хочешь? )) (8)>>Выгрузить в ТЗ, наколдовать и загрузить автор в шоке, что на каждый Регистратор - нужны разные НЗ (ТЗ), и их обрабатывать отдельно. А хочется сразу и всем волосы подстричь, без учета регистратора... |
|||
14
РенеДекарт
26.06.14
✎
16:47
|
(10)>> ваша идея считывания и перезаписывания запросом не понятна.
запрос ничего не перезаписывает. Запрос только читает данные, создает ТЗ, обрабатываешь ТЗ, получаешь НЗ по регситратору, и заменяшь своим из обработанной ТЗ. Других вариантов нет. И не будет. |
|||
15
РенеДекарт
26.06.14
✎
16:48
|
(12)>> ТЗ = РегНабор.Выгрузить();
Gorr, это тот же запрос, только скрытый. |
|||
16
КонецЦикла
26.06.14
✎
16:48
|
(10) Да, нет ссылки на запись... и нет инсерт, делете и апдейт
|
|||
17
РенеДекарт
26.06.14
✎
16:49
|
(10)>>как идентифицировать запись ведь у записи нет ссылки и вопросом ее не вернешь.
Запись и есть ссывлка сама по себе. Для тебя, глядя из 1С. >> Запись не объектна В 1С - объектна. |
|||
18
Gorr
26.06.14
✎
16:51
|
Таким образом найти записи которые нужно удалить из результата запроса в наборе никак?
|
|||
19
РенеДекарт
26.06.14
✎
16:51
|
(16)>>Да, нет ссылки на запись.
А РегистрНаборЗаписей.ТакаяТозапись - это что? |
|||
20
Lex2k2k
26.06.14
✎
16:52
|
(15) к таблице записей он что ли будет обращаться? не к вирт.таблице регистра (- там не те поля)? А если там миллиарды записей? Отобрать и РегНабор.Выгрузить() - будет быстрей. Или колхозить запрос из оборотов, но так чтоб вернул результат как в записях.
|
|||
21
КонецЦикла
26.06.14
✎
16:52
|
(19) И дальше что с ней делать? Удалить можно?
|
|||
22
РенеДекарт
26.06.14
✎
16:52
|
(18)>>из результата запроса в наборе никак?
никак. Удаляет только НаборЗаписей. Или МенеджерРегистра, если запись одна. Это тот же "набор", только по одной записи выковыривает. |
|||
23
РенеДекарт
26.06.14
✎
16:53
|
(21) ты её вне контекста НЗ не получишь. А "удаление в 1С" - это перезапись полученного НЗ новыми значениями.
|
|||
24
РенеДекарт
26.06.14
✎
16:54
|
(21) точнее, запросом ты получишь данные по записям (из записей), а не сами записи.
Как раз те самые ссылки, чтобы "удалить и поменять" - это только НЗ. |
|||
25
КонецЦикла
26.06.14
✎
16:54
|
(23) Ну так ждем пока все наладится
|
|||
26
Gorr
26.06.14
✎
16:55
|
т.е. результат запроса из регистра для поиска записей в наборе использовать никак нельзя?
|
|||
27
РенеДекарт
26.06.14
✎
16:56
|
(26) тебе что в ( 14) непонятно?
|
|||
28
Gorr
26.06.14
✎
16:58
|
(27) нет! в (14) бред - там говориться о использвании запроса для перезаписи.
|
|||
29
РенеДекарт
26.06.14
✎
16:59
|
(21)>>И дальше что с ней делать? Удалить можно?
можешь. Получаешь весь регистр без Отбора. Делаешь Записть(). Получаешь идеально чистый регистр. Получаешь НЗ по Регситратору - делаешь "Записать()" - получаешь "ноль записей по этому регистратору". |
|||
30
РенеДекарт
26.06.14
✎
16:59
|
(28) читай внимательно, что там используется для перезаписи.
|
|||
31
Lex2k2k
26.06.14
✎
17:00
|
(28) А что там будет по твоему если не перезапись?
|
|||
32
РенеДекарт
26.06.14
✎
17:01
|
(28) я спрашиваю, что непонятного написано в ( 14), а не "понятен вывод из ( 14)"?
|
|||
33
Gorr
26.06.14
✎
17:01
|
Вы меня вообще не слышите.
у меня есть исходная информация (ДАНО) результат запроса и внем записи регистра которые надо удалить. |
|||
34
РенеДекарт
26.06.14
✎
17:02
|
(31) он не все слова там идентифицировал )
|
|||
35
РенеДекарт
26.06.14
✎
17:03
|
(33)>>результат запроса и внем записи регистра которые надо удалить.
нет в результате запроса никаких записей, и никогда не было. Читай ( 24). |
|||
36
Gorr
26.06.14
✎
17:03
|
понятно что для удаления нужно использовать набор. впрос только как?
|
|||
37
Lex2k2k
26.06.14
✎
17:03
|
РегНабор = РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей();
Для каждого регистратор из регистраторы цикл РегНабор.Отбор.Регистратор.Установить(Регистратор,истина); РегНабор.Прочитать(); ТЗ = РегНабор.Выгрузить(); Для каждого СтрокаТЗ из ТЗ цикл // Нут делаешь чё тебе надо. Нужно удалить - удаляешь. КонецЦикла; РегНабор.Очистить(); РегНабор.Загрузить(ТЗ); РегНабор.Записать(истина); КОнецЦикла; |
|||
38
РенеДекарт
26.06.14
✎
17:03
|
(33) разбери на составные части ( 14), и скажи, что конкретно тебе не понятно.
|
|||
39
acsent
26.06.14
✎
17:03
|
А почему номер строки не подошел то?
|
|||
40
Lex2k2k
26.06.14
✎
17:04
|
Будет неплохо еще прочитать() и очистить() подумал я))
|
|||
41
РенеДекарт
26.06.14
✎
17:04
|
(36) запрос видишь в ( 37)? А он есть... )
|
|||
42
Gorr
26.06.14
✎
17:05
|
(35) это плохо
|
|||
43
РенеДекарт
26.06.14
✎
17:05
|
(39) он вообще разницы не видит между результатом запроса и НЗ.
|
|||
44
Gorr
26.06.14
✎
17:05
|
Всем спасибо.
|
|||
45
РенеДекарт
26.06.14
✎
17:06
|
(40) хорошо хоть не так )
РегНабор.Загрузить(ТЗ); РегНабор.Очистить(); |
|||
46
Gorr
26.06.14
✎
17:06
|
может быть еще одно. Ключа записи у РН нет?
|
|||
47
РенеДекарт
26.06.14
✎
17:07
|
(44) ты вообще ничего не понял.
У тебя тема какая? "Как удалить записи РН по регистратору выборочно?" А ты что спрашиваешь, да еще и "всем спасибо"? |
|||
48
РенеДекарт
26.06.14
✎
17:07
|
ВЫБОРОЧНО
а это - проблема в реализации 1С. |
|||
49
acsent
26.06.14
✎
17:09
|
(43) так в запросе получаем номера строк к удалению.
создаем набор записей удаляем из набора записи с (номерстроки-1) Записываем |
|||
50
acsent
26.06.14
✎
17:10
|
В запросе с итогами по регистратору
Дерево = мРезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); Колво = Дерево.Строки.Количество(); Счетчик = 0; Для каждого Строка1 Из Дерево.Строки Цикл Счетчик = Счетчик + 1; ОбработкаПрерыванияПользователя(); Состояние(Строка(Счетчик) + " из " + Строка(Колво) + " " + Строка(Строка1.Регистратор)); НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(Строка1.Регистратор); НаборЗаписей.Прочитать(); Для каждого Строка2 Из Строка1.Строки Цикл Запись = НаборЗаписей[Строка2.НомерСтроки - 1]; Если Строка2.ДтКт = "Дт" Тогда Иначе КонецЕсли; КонецЦикла; НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(); КонецЦикла; |
|||
51
РенеДекарт
26.06.14
✎
17:12
|
(46)>>Ключа записи у РН нет?
ключ есть у любого регистра 1С. Уникальность - только РС проверяется. В РН просто находится отбором нужные записи и заменяются. |
|||
52
Serg_1960
26.06.14
✎
17:18
|
Вместо того, чтобы запросом получить нужные(!) записи, ТС решил зайти "с другой стороны" - (33) - получить запросом ненужные(?!) записи, запутался и теперь для него сверх-архи-важным стало идентифицировать записи запроса и записи регистра. Ну, ну. Продолжайте далее.
"Дальше всех зайдет тот, кто не знает куда идти" (не я придумал). |
|||
53
РенеДекарт
26.06.14
✎
17:20
|
(50) и что самое главное не написал?
Если Строка2.ДтКт = "Дт" Тогда НаборЗаписей.Удалить(Запись); Иначе КонецЕсли; |
|||
54
РенеДекарт
26.06.14
✎
17:21
|
(52)>>Вместо того, чтобы запросом получить нужные(!) записи
|
|||
55
РенеДекарт
26.06.14
✎
17:22
|
+ .. удалять-то все равно через НЗ будет, идентификация нужна.
|
|||
56
Lex2k2k
26.06.14
✎
17:24
|
(33) Сгруппируй в запросе итогами по регистратору. Обойди в моем цикле эти регистраторы. Для детальных записей запроса в цикле по их обходу (данных регистра, которые нужно удалить) создай структуру со свойствами полей этих записей, которые нужно удалить. Далее СтрокиРегистратораНаудаление ТЗ.НайтиСтроки(структура) - это будет массив. Далее обходишь элементы этого массива (строки ТЗ) и удаляешь их из ТЗ. Когда заргузишь ТЗ в набор их там не будет.
|
|||
57
Lex2k2k
26.06.14
✎
17:24
|
И будет тебе счастье
|
|||
58
Serg_1960
26.06.14
✎
17:26
|
(55) Нет, не нужно. Если запросом сформировать записи, то они в регистр пишутся "затирая" предыдущие записи (нужные и не нужные).
|
|||
59
РенеДекарт
26.06.14
✎
17:26
|
(56) + забыл объяснить, что в момент загрузки модифицированного ТЗ в НЗ произойдет создание нового НЗ, а не удаление строк. Хотя результат аналогичен.
А то опять ничего не поймет )) |
|||
60
Serg_1960
26.06.14
✎
17:28
|
Попробую :) расшифровать свой пост (1)
Объект.Движения[ИмяРегистра].Прочитать(); ТаблицаЗаписей = Объект.Движения[ИмяРегистра].Выгрузить(); // редактируем таблицу записей, оставляя нужные записи и удаляя ненужные, а потом: Объект.Движения[ИмяРегистра].Загрузить(ТаблицаЗаписей); Объект.Движения[ИмяРегистра].Записать(Истина); |
|||
61
РенеДекарт
26.06.14
✎
17:28
|
(58) выборочно - это когда разные регистраторы. А вариант "затереть записи" ему уже объяснили еще в (7 ) и (12 )
|
|||
62
РенеДекарт
26.06.14
✎
17:30
|
(60) движения - это те же НаборЗаписей, так что разницы никакой )
|
|||
63
Serg_1960
26.06.14
✎
17:38
|
(62) А я и не спорю с этим :) Соль в другом: запрос должен возвращать нужные записи. Можно и несколько регистраторов в запросе - регистратор в группировку и обход выборки соответствующий
|
|||
64
Coldboy
26.06.14
✎
17:44
|
63 сообщения, а ведь задача вроде не сложная, стандартные методы все предлагают.
|
|||
65
Lex2k2k
26.06.14
✎
17:45
|
(64) уже 65 ))))
|
|||
66
РенеДекарт
26.06.14
✎
17:58
|
(63)>>Можно и несколько регистраторов в запросе - регистратор в группировку и обход выборки соответствующий
ьудут разные НЗ. И их обрабатывать по-разному (разные отборы, запись каждый раз). (64)>>стандартные методы все предлагают метод вообще один. Он же стандартный ) |
|||
67
Gorr
26.06.14
✎
21:49
|
Ответов много, но вопрос был в другом.
Еще раз повторю - можно ли найти запись в наборе, если известны значения всех измерений? Так понятно? Униально ли сочетание измерений вкупе с регистратором у регистра накопления? Вопрос понятен? |
|||
68
hhhh
26.06.14
✎
22:32
|
(67) нет, неуникальны.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |