Имя: Пароль:
1C
1С v8
Как удалить записи РН по регистратору выборочно?
,
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) нет, неуникальны.