Имя: Пароль:
1C
1С v8
Удалить регистрацию изменений удаленных наборов записей регистра сведений
0 Соратник
 
26.05.15
09:25
День добрый. Вопрос следующий:

Необходимо почистить регистр сведений. Из-за того, что передается большой объем данных в обмены решил вычищать его поочередно в каждом из узлов РБД.

Вот такой код:
        НаборЗаписей=РегистрыСведений.СпецификацияВнутреннихРеализаций.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.ИДДокументаОтгрузки.Значение=Выборка.ИДДокументаОтгрузки;
        НаборЗаписей.Отбор.ИДДокументаОтгрузки.Использование=Истина;
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
        ПланыОбмена.УдалитьРегистрациюИзменений(ГлавныйУзел, НаборЗаписей.ЭтотОбъект);

Недопустимое значение параметра (параметр номер '2')

Как правильно очистить изменения по удаленным наборам записей?
Спасибо.
1 vicof
 
26.05.15
09:33
Убери ЭтотОбъект
2 Широкий
 
26.05.15
09:34
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();

Это тоже не надо
3 Соратник
 
26.05.15
09:53
(1)
ПланыОбмена.УдалитьРегистрациюИзменений(ГлавныйУзел, НаборЗаписей);
по причине:
Недопустимое значение параметра (параметр номер '2')
4 Соратник
 
26.05.15
09:54
(2) Как же вычистятся записи? что-то не понял
5 Defender aka LINN
 
26.05.15
10:12
(4) Записать() оставь.
6 Соратник
 
26.05.15
10:19
(5) Допустим... хорошо.

Как изменения не регистрировать :)
7 Stim
 
26.05.15
10:20
мде.
набор записей целиком не удаляется.
удаляй каждую запись из него в цикле.
Специалисты, тоже мне
8 Defender aka LINN
 
26.05.15
10:28
(7) шта?!
(6) Выкинуть "УдалитьРегистрациюИзменений", у тебя этот реистр в состав плана обмена не входит
9 Соратник
 
26.05.15
10:30
(7) Удаляется... метод Очистить() :)

Как изменения не регистрировать? :)
10 Соратник
 
26.05.15
10:31
(8) Входит и включена авторегистрация
11 Basilio
 
26.05.15
10:31
(7) Стаж: 6 лет 3 месяца 12 дней
И откуда вы такие беретесь?
12 Соратник
 
26.05.15
10:34
(11) Может как я из "семерки" ? :)
13 Stim
 
26.05.15
10:34
+ не точно сказал - набор записей удалится только в том случае, если он построен по всем измерениям с установленным признаком "ведущий отбор".
Если как у ТС - то не удалится, надо перебирать записи
14 Stim
 
26.05.15
10:35
15 Соратник
 
26.05.15
10:36
(13) Повторю... записи удаляются!!!!!!!

Как не регистрировать изменения? :)))))
16 Defender aka LINN
 
26.05.15
10:36
(13) ШТА?!
17 Defender aka LINN
 
26.05.15
10:37
(15) Еще раз: Регистр. Не. Входит. В. Состав. Плана. Обмена.
18 Stim
 
26.05.15
10:37
(15) блин. ну удалится с таблицы регистрации, мы про это.
про то, что записи удалятся из регистра никто не сомневается
19 Stim
 
26.05.15
10:38
(16) то, что видишь
20 Соратник
 
26.05.15
10:39
Думаю если бы я записывал в регистр, то все отрабатывало бы корректно. А поскольку удаляю, то вот такая проблема...
21 Defender aka LINN
 
26.05.15
10:40
(18) "Если как у ТС - то не удалится"
"про то, что записи удалятся из регистра никто не сомневается"

Как ты живешь-то так вообще?
22 Stim
 
26.05.15
10:40
+ регистрация изменений или удаление зарегистрированных изменений регистров сведений происходит наборами записей, отобранных по всем измерениям с основным отбором
23 hhhh
 
26.05.15
10:41
(20) так вам наоборот надо зарегистрировать, зачем удалять регистрацию?
24 Stim
 
26.05.15
10:41
(21) см 22
25 Соратник
 
26.05.15
10:43
26 Defender aka LINN
 
26.05.15
10:43
(22) Так тогда и говори про регистрацию. А то "набор записей удалится". Набор и без отбора прекрасно удалится.
27 Соратник
 
26.05.15
10:44
(23) Хочу удалить только в одном узле, чтоб не ушло в обмены... большой объем обмены стопорятся. Я хочу в каждом узле отдельно почистить.
28 Defender aka LINN
 
26.05.15
10:45
(24) Полностью рабочий код:

Набор = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
Набор.Отбор.Объект.Установить(Вид);

ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Набор);
29 Stim
 
26.05.15
10:45
(26) блин, ну я говорю про удаление регистрации изменений.

думаю, это понятно, раз мы об этом говорим
30 Defender aka LINN
 
26.05.15
10:45
(27) А ты тугой...
31 Соратник
 
26.05.15
10:47
(22) так речь про регистрацию изменений построчно.... вот оно как, возможно в этом и проблема
32 Defender aka LINN
 
26.05.15
10:49
У автора налицо тяжелое поражение зрительных нервов - он не умеет читать.
33 Соратник
 
26.05.15
10:53
Может и не вижу то, что перед носом... первый раз взялся за подобное (регистрация изменений вручную), чего хамить то? Проще надо быть!!!
34 Stim
 
26.05.15
10:53
(28) это полностью не рабочий код. ты его даже не проверял, а я сейчас проверил.


Отбор нужно строить по всем измерениям с основным отбором, только тогда удалится.
отбор должен быть кроме Объекта еще по Типу и по Виду
35 Stim
 
26.05.15
10:54
(32) зачем ему читать неправду. учи матчасть
36 Stim
 
26.05.15
10:55
+
только тогда удалится регистрация изменений.
а то опять не прочитаешь
37 Соратник
 
26.05.15
10:55
(34) Сейчас попробую по всем измерениям отбор. Отпишусь.
38 hhhh
 
26.05.15
10:56
(33) ну просто тупо бзик у вас. Зачем лазить построчно трахаться удалять эту регистрацию? Если можно тупо одной строчкой удалить регистрацию всего регистра.
39 Defender aka LINN
 
26.05.15
10:56
(34) Ащета проверил. ЧТО он регистрирует - это другой вопрос.
(32) Иногда лучше жевать... У долбоклюя из (0) возникает долбаное ИСКЛЮЧЕНИЕ.
40 Stim
 
26.05.15
10:58
(39) и что? у тебя удалился набор записей, отобранный всего по объекту?
41 Stim
 
26.05.15
10:59
+ проверь, к примеру, на БП 1.6, или поставь там, где проверяешь свойство измерения Основной отбор в Истина.
и поймешь всю суть (22)
42 Соратник
 
26.05.15
11:00
(39) Сгинь хам
43 Stim
 
26.05.15
11:01
(37) не по всем, а по тем, которые в основном отборе РС
44 Defender aka LINN
 
26.05.15
11:01
(40) У меня не удалился набор записей, потому что я его не удалял. У меня удалилась регистрация набора записей, у которого измерение с основным отбором (Объект) = Неопределено. И при этом не произошло ни единой исключительной ситуации, смекаешь?
45 Stim
 
26.05.15
11:04
(44) я смекаю. что ты не знаешь матчасть и ведешь себя по-хамски.
46 Соратник
 
26.05.15
11:06
(38) // Если можно тупо одной строчкой удалить регистрацию всего регистра.

Будьте добры подробнее
47 Stim
 
26.05.15
11:08
(46) указывай метаданные регистра в данных
48 Defender aka LINN
 
26.05.15
11:08
(45) Зашибись. Бред несете вы, а матчасть не знаю я.
Еще раз: у автора возникает ИСКЛЮЧЕНИЕ. Если бы регистр входил в состав плана обмена, то хоть какие отборы ставь или не ставь - этого бы не было. А ты продолжаешь гнуть про отборы.
49 Stim
 
26.05.15
11:10
(48) как ты определил, что регистр не входит в состав плана обмена?
50 hhhh
 
26.05.15
11:11
да. ГлавныйУзел в студию.
51 Stim
 
26.05.15
11:11
+ из-за того, что автор сказал, что по этому регистру передается по РИБ большой объем данных?
52 Defender aka LINN
 
26.05.15
11:12
(49) бьется головой в истерике
В (0) русским по белому написано: "Недопустимое значение параметра (параметр номер '2') ". НОМЕР ДВА.

К примеру, в БП для узла полного плана обмена вот этот код выдаст РОВНО ТУ ЖЕ ошибку:

Набор = РегистрыСведений.АдресныйКлассификатор.СоздатьНаборЗаписей();

ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Набор);
53 Stim
 
26.05.15
11:15
(52) Недопустимое значение параметра бывает не только когда данные не в составе узла. В случае наборов записей РС это бывает, когда отбор построен не по всем измерениям основного отбора.
54 Соратник
 
26.05.15
11:20
в посте 25 я скрин состава плана обмена размещал
55 Соратник
 
26.05.15
11:21
(47) хорошая мысль, сейчас попробую
56 Defender aka LINN
 
26.05.15
11:26
(53) Расскажи тогда, почему в (28) исключения не возникает. (54) Какие ваши доказательства, что "ГлавныйУзел" - узел этого плана обмена?
57 Stim
 
26.05.15
11:39
(56) потому что основной отбор указан только у одного измерения - Объект. Вид и Тип - не указан. Это в БП 2.0 я смотрел
В БП 1.6, Вид и Тип - в основном отборе РС, и код в (28) вызовет исключение.
58 Serg_1960
 
26.05.15
11:44
Я только одну фразу скажу а вы продолжайте дальше спорить:

Для удаление регистрации по регистру надо передавать во втором  параметре набор записей с установленным отборам по всем(!) измерениям, у которых стоит признак "основной отбор".
59 Соратник
 
26.05.15
11:44
Доказательства

https://cloud.mail.ru/public/MnCR/Yxb5gPAQr
60 Stim
 
26.05.15
11:46
(58) я это уже давно сказал
61 hhhh
 
26.05.15
11:50
(59) обычные формы или управляемые?
62 Соратник
 
26.05.15
11:53
(61) Обычные
63 Serg_1960
 
26.05.15
11:57
(59) Если я правильно разобрался в картинке, то нижеследующая строка должна вернуть истину:

Метаданные.ПланыОбмена.НормативноСправочнаяИнформация.Состав.Содержит(Метаданные.РегистрыСведений.СпецификацияВнутреннихРеализаций)
64 Соратник
 
26.05.15
11:58
(47) Вот такой код не выдаёт ошибок, но изменения остаются.

Пока Выборка.Следующий() Цикл
Сообщить("Удаляется " + Выборка.Получатель + " " + Выборка.ДатаДокумента + " №" + Выборка.НомерДокумента);
НаборЗаписей=РегистрыСведений.СпецификацияВнутреннихРеализаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ИДДокументаОтгрузки.Значение=Выборка.ИДДокументаОтгрузки;
НаборЗаписей.Отбор.ИДДокументаОтгрузки.Использование=Истина;
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
ОбработкаПрерыванияПользователя();
КонецЦикла;
ПланыОбмена.УдалитьРегистрациюИзменений(ГлавныйУзел, Метаданные.РегистрыСведений.СпецификацияВнутреннихРеализаций);
65 Соратник
 
26.05.15
11:59
(63) В табло возвращает Истину
66 Serg_1960
 
26.05.15
12:04
ТС, проверь отбор на предмет соответствия (58)... и второй части фразы (53) :) (Stim я тебе услышал, но услышали ли тебя другие?)
67 Соратник
 
26.05.15
12:07
(66) отбор не соответствует этому условию, мне как и говорил Stim, придется видимо построчно удалять, так как каждое измерение с признаком "основной отбор"
68 Serg_1960
 
26.05.15
12:10
Построчно удалять? Чай не в каменном веке живём :) Запрос на записи с "неполным" отбором с выводом всех различных измерений записей. Потом в цикле обход; построение отбора по всем измерениям, удаление записей и регистрации. Как-то типа так.
69 Соратник
 
26.05.15
12:13
(68) ну так и делаю уже :)
70 Serg_1960
 
26.05.15
12:17
Удачи (вышел).
71 Соратник
 
26.05.15
12:45
Спасибо Stim и Serg_1960 - именно они были целиком и полностью правы.
Defender aka LINN - сам оказался хамом и долбоклюем.

Итак результат. Вот работоспособный код, привожу целиком вместе с запросом:

ТекстЗапросаСтарыхСпецификаций = "ВЫБРАТЬ
|СпецификацияВнутреннихРеализаций.ИДДокументаОтгрузки,
|СпецификацияВнутреннихРеализаций.Номенклатура,
|СпецификацияВнутреннихРеализаций.ЕдиницаИзмерения,
|СпецификацияВнутреннихРеализаций.ХарактеристикаНоменклатуры,
|СпецификацияВнутреннихРеализаций.ДатаДокумента,
|СпецификацияВнутреннихРеализаций.НомерДокумента,
|СпецификацияВнутреннихРеализаций.Отправитель,
|СпецификацияВнутреннихРеализаций.Получатель,
|СпецификацияВнутреннихРеализаций.НомерСтрокиОтправителя
|ИЗ
|РегистрСведений.СпецификацияВнутреннихРеализаций КАК СпецификацияВнутреннихРеализаций
|ГДЕ
|СпецификацияВнутреннихРеализаций.ДатаДокумента < &ДатаКонца
|
|УПОРЯДОЧИТЬ ПО
|СпецификацияВнутреннихРеализаций.ДатаДокумента";

ЗапросСтарыхСпецификаций = Новый Запрос(ТекстЗапросаСтарыхСпецификаций);
ЗапросСтарыхСпецификаций.УстановитьПараметр("ДатаКонца",ТекущаяДата()-(ОставитьКоличествоДней*24*60*60));
Выборка = ЗапросСтарыхСпецификаций.Выполнить().Выбрать();
Счетчик = 0;
БылДокумент = "";
Пока Выборка.Следующий() Цикл
Счетчик = Счетчик + 1;
Если Выборка.ИДДокументаОтгрузки <> БылДокумент Тогда
Сообщить("Удаляется " + Выборка.Получатель + " " + Выборка.ДатаДокумента + " №" + Выборка.НомерДокумента);
БылДокумент = Выборка.ИДДокументаОтгрузки;
КонецЕсли;
        НаборЗаписей=РегистрыСведений.СпецификацияВнутреннихРеализаций.СоздатьНаборЗаписей();
Для каждого Отбор из НаборЗаписей.Отбор Цикл
Отбор.Использование = Истина;
Отбор.Значение = Выборка[Отбор.Имя]
КонецЦикла;

НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
        ПланыОбмена.УдалитьРегистрациюИзменений(ГлавныйУзел,НаборЗаписей);
ОбработкаПрерыванияПользователя();

КонецЦикла;

Сообщить("Обработка очистки старых спецификаций завершена");
Сообщить("Всего удалено " + Счетчик + " спецификаций");
72 SUA
 
26.05.15
13:05
для двухуровневой РИБ есть вариант проще - например так

НаборЗаписей.ОбменДанными.Загрузка = Истина
НаборЗаписей.ОбменДанными.Отправитель = ГлавныйУзел
НаборЗаписей.Записать()

если там подписок нет левых
73 Stim213
 
26.05.15
15:21
(71) и отключи автоматическую регистрацию у регистра не забудь