Имя: Пароль:
1C
1С v8
Удаление записи в регистре сведений
,
0 Dmitriy Dmitriy1
 
25.11.13
10:02
Добрый день, конфа БП 2.0, не могу удалить запись из РегистраСведений, она уже коряво записана, нет значения в поле Объект, при редактировании или попытке удаления выдает ошибку:
Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика - 'ПередЗаписью': {ОбщийМодуль.ПроцедурыОбменаТорговляБухгалтерия.Модуль(450)}: Значение не является значением объектного типа (Предопределенный)

Помогите плз!
78 Dmitriy Dmitriy1
 
25.11.13
12:14
(77) та же шляпа
79 Maxus43
 
25.11.13
12:15
(77) там хрень в том что регистрация в обменах работает и для старого объекта, т.е. для набора с незаполненным объектом
80 Dmitriy Dmitriy1
 
25.11.13
12:16
Может ее как то можно отключить чтобы с поддержики не снимать...
81 zakidonoff
 
25.11.13
12:17
(79) Надо как-нить у себя такую же хрень воссоздать -)
82 Dmitriy Dmitriy1
 
25.11.13
12:21
Так какие варианты есть?
83 Maxus43
 
25.11.13
12:21
(80) надо смотреть условия в подписке... ещё как вариант на прямую в скуле удалить (клиент-сервер же?)
84 Dmitriy Dmitriy1
 
25.11.13
12:23
"на прямую в скуле удалить" что это значит?)))
85 Dmitriy Dmitriy1
 
25.11.13
12:23
да, клиент сервер)
86 Maxus43
 
25.11.13
12:24
(84) пичаль
(80) код смотри, ищи подписку на событие, которая вызывает ошибку в (68)
87 Dmitriy Dmitriy1
 
25.11.13
12:27
Процедура ДополнитьМассивУзловДляВыгрузкиСправочника(Элемент, МассивУзловДляПередачи,
    ТипЭлемента = Неопределено, ВыгружатьДляВсехУзлов = Ложь, ВозвращатьМассивВсехУзлов = Истина,
    СоответствиеУзловИОрганизаций = Неопределено)
    
    Перем ЭтоГруппа, СсылкаНаЭлемент;
    
    // пердопределенные элементы выгружаем и загружаем послностью
    Если Элемент.Предопределенный Тогда //ВОТ ТУТ СПОТЫКАЕТСЯ
        
        ОбеспечитьВыгрузкуОбъектаДляВсехУзлов(ВыгружатьДляВсехУзлов, ВозвращатьМассивВсехУзлов, МассивУзловДляПередачи);
        Возврат;
        
    КонецЕсли;
88 m-serg74
 
25.11.13
12:27
(82) ты бы все таки уже к 90 му посту то косолью запросов наверняка определил, что там записано в объект? а то все угадайки какие то
89 Maxus43
 
25.11.13
12:28
(88) неопределено там, потому и спотыкается, у Неопределено нет через точку нифига
90 m-serg74
 
25.11.13
12:29
(89) покажи где ТС это указал, надпись в форме списка не факт что там именно Неопределено
91 Maxus43
 
25.11.13
12:30
(87) в предыдущих процедурах ищи по каким условиям не выполняется регистрация... подписку саму найди и смотри что там изначально проверяется. Возможно будет достаточно изменить параметр сеанса, как в типовых обычно делается
(90) на скринах "буква Т" у объекта, выбор типа. У составного типа это значит Неопределено
92 m-serg74
 
25.11.13
12:31
(91) так формы дофига чего могут понарисовать, что наверняка то в данных не глянуть?
93 Maxus43
 
25.11.13
12:33
(92) почитай чего автор пишет, отладчик для него это магия, как заставить то?)
Ну продолжайте без меня, я на обед
94 Dmitriy Dmitriy1
 
25.11.13
12:33
Там неопределено, в консоле выдало!
95 Dmitriy Dmitriy1
 
25.11.13
12:34
Не, максус стой! =))0
96 Wobland
 
25.11.13
12:34
(92) мы верим, что там неопределено, и автор ничего с этим не может поделать
97 zakidonoff
 
25.11.13
12:34
(92) Я посмотрел в бухии что выставляется при попытке открыть регистр через операции - неопределено ставится.
Фильтр по неопределено выдаёт два объекта.
__
У меня получилось создать битые ссылки в регистре. Пытаюсь теперь через тестирование базы подменить их на неопределено.
Жуть. Этож как постараться-то надо было? XD
98 Dmitriy Dmitriy1
 
25.11.13
12:35
Закидонов как это исправить вообще7)
99 zakidonoff
 
25.11.13
12:36
(98) Чтоб понять как это исправить мне нужно сначала так же испортить.
Вот испорчу - тогда и скажу как исправить -)
100 Wobland
 
25.11.13
12:36
а СТО
101 Dmitriy Dmitriy1
 
25.11.13
12:36
Уже в процессе порчи??7)
102 m-serg74
 
25.11.13
12:37
(98) ВыгрузкаЗагрузкаХМЛ выгружаешь записи с отбором по тем параметрам какие можешь задать в ХМЛ ставишь правильную какую нить ссылку и обратно загрузить
103 Dmitriy Dmitriy1
 
25.11.13
12:37
(102) подробней можно?
104 m-serg74
 
25.11.13
12:37
куда уж подробнее? обработка для переносов между одинаковыми конфами знаешь?
105 m-serg74
 
25.11.13
12:39
(103) хотя нет, наверное (102) сторно, он тебе по другим измерениям после правки ХМЛ сделает еще одну запись
106 m-serg74
 
25.11.13
12:39
есть тим вьюер, пока обед
107 Dmitriy Dmitriy1
 
25.11.13
12:42
НЕ ТИм вивера нету... Мля пипец....
108 m-serg74
 
25.11.13
12:42
скачай)))
109 Dmitriy Dmitriy1
 
25.11.13
12:43
ВыгрузкаЗагрузкаХМЛ где взять эту обработку?
110 zakidonoff
 
25.11.13
12:43
(101) Не могу я так испортить. Отладчик вылетел с ошибкой у меня(!)
Ппц. -)
111 m-serg74
 
25.11.13
12:43
(109) - (105) прочитай, думаю я ошибся
112 zakidonoff
 
25.11.13
12:44
(109) Она тебе вряд ли поможет.
Вылетет та же ошибка при записи (удалении старого) регистра.
113 Dmitriy Dmitriy1
 
25.11.13
12:44
(110) во-во))) как так умудрились я хз)
114 Dmitriy Dmitriy1
 
25.11.13
12:45
Если снять с поддержики и закоментить то получится?)
115 m-serg74
 
25.11.13
12:45
(114) ты прочитать эту запись не можешь причем тут пока Запись?
116 Dmitriy Dmitriy1
 
25.11.13
12:47
Я прочитал, все ок, записать не получается
117 zakidonoff
 
25.11.13
12:47
(113) Как ты умудрился - вот в чём вопрос!
Даже для того чтобы сделать битую ссылку, мне пришлось создавать спец. обработку.
При интерактивном удалении справочников регистры чистятся... Ну это ладно - не твоя вина.
А вот как ты так тестирование и исправление делал, что у тебя битые ссылки на неопределено подменились - это я хз...
118 m-serg74
 
25.11.13
12:47
(116) Я прочитал, все ок, записать не получается

на куа? Удалить() и все
119 m-serg74
 
25.11.13
12:48
(117) при обновлении тип мог полететь, вот и неопределено
120 Dmitriy Dmitriy1
 
25.11.13
12:49
Удалить тоже не выходит, та же ошибка...
121 m-serg74
 
25.11.13
12:49
(116) и еще:
/http://s020.radikal.ru/i720/1311/dd/9a5a6e609348.jpg/

здесь вроде у тебя форма записи этой открывается, выбери любой доступный тип, потом значение и жми записать
122 Dmitriy Dmitriy1
 
25.11.13
12:51
Так же ошибку кидает
123 zakidonoff
 
25.11.13
12:51
Пробуй


    ПараметрыСеанса.НаличиеОбменаТорговляБухгалтерия = Ложь;
    Набор = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();  
    Набор.ОбменДанными.Загрузка = Истина;
    Набор.Отбор.Объект.Установить(Неопределено);
    Набор.Прочитать();
    Для каждого стрзапись Из Набор Цикл
        Набор.Объект = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор());
    КонецЦикла;
    набор.Записать();
124 m-serg74
 
25.11.13
12:52
(123) /Набор.Объект = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор());/

а это зачем? пусть какого нить существующего контра тогда уж записывает
125 zakidonoff
 
25.11.13
12:53
(124) Зачем она ему - пусть просто сотрёт да и всё.
126 m-serg74
 
25.11.13
12:54
(125) сотрет что?
127 m-serg74
 
25.11.13
12:56
ИМХО после (123) будет Объект не найден
128 Dmitriy Dmitriy1
 
25.11.13
12:56
{Форма.Форма.Форма(11)}: Ошибка при вызове метода контекста (Записать)
    набор.Записать();
по причине:
Запись не верна! Значение поля не соответствует установленному отбору: КонтактнаяИнформация: <Объект не найден> (49:9ebb8448269dc66a4ae669faa821679e), Телефон, сот (Регистр сведений: Контактная информация; Номер строки: 1; Поле: Объект)
129 m-serg74
 
25.11.13
12:57
(128) запиши в набор существующего любого контра, потом смени Отбор с неопределено на него, а только потом пробуй записать
130 Dmitriy Dmitriy1
 
25.11.13
13:01
стрзапись.Объект = Справочники.ФизическиеЛица.НайтиПоКоду( "Р00000042");

как потом по этому же коду сделать отбор?
131 m-serg74
 
25.11.13
13:01
(130) Набор.Отбор.Объект.Установить(Справочники.ФизическиеЛица.НайтиПоКоду( "Р00000042"));
132 m-serg74
 
25.11.13
13:02
(130) но боюсь это все лажа и оно не удалит старые записи а запишет новый набор по другому измерению
133 m-serg74
 
25.11.13
13:03
(130) а так не пробовал:
    ПараметрыСеанса.НаличиеОбменаТорговляБухгалтерия = Ложь;
    Набор = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();  
    Набор.ОбменДанными.Загрузка = Истина;
    Набор.Отбор.Объект.Установить(Неопределено);
    набор.Записать();
134 hhhh
 
25.11.13
13:05
(28) ну и напишите отбор по этому объекту. Зачем вы по НЕопределено тогда делали отбор. Если у вас объект определен?
135 zakidonoff
 
25.11.13
13:06
(128) Да, я ступил -)
Но радует, что обмен данными таки обошли. Вот это будет рабочее.

ПараметрыСеанса.НаличиеОбменаТорговляБухгалтерия = Ложь;
Набор = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();  
Набор.ОбменДанными.Загрузка = Истина;
Набор.Отбор.Объект.Установить(Неопределено);
Набор.Прочитать();
Для каждого стрзапись Из Набор Цикл
   СтрЗапись.Объект = Справочники.ФизическиеЛица.НайтиПоКоду( "Р00000042");
КонецЦикла;
набор.Записать();
136 m-serg74
 
25.11.13
13:06
(135) не прокати
137 m-serg74
 
25.11.13
13:06
(134) где он определен?
138 Maxus43
 
25.11.13
13:07
Спокойствие!

У меня в подписках есть такая хрень, у автора тоже есть наверняка

    Если Отказ
        ИЛИ НЕ ПараметрыСеанса.НаличиеОбменаУТУПП Тогда
        
        Возврат;
        
    КонецЕсли;


Надо найти какой параметр сеанса отвечает за это и перед выполнением кода (133)
делать
параметрыСеанса.НужныйПараметр = Ложь;
//запись грёбаного регистра - сиречь удаление записей
параметрыСеанса.НужныйПараметр = Истина;
139 Dmitriy Dmitriy1
 
25.11.13
13:07
(135) это сработало, БОЛЬШОЕ СПАСИБО ЗА ПОМОЩЬ!!!
140 Maxus43
 
25.11.13
13:09
пля, всё решили, я не прочитал  даже))
141 Dmitriy Dmitriy1
 
25.11.13
13:09
ПараметрыСеанса.НаличиеОбменаТорговляБухгалтерия = Ложь;
эта строчка все решила)))
142 Wobland
 
25.11.13
13:10
какой долгий путь к (1)
143 Dmitriy Dmitriy1
 
25.11.13
13:10
Спасибо еще раз большое, я на ОБЕД! =)))
144 zakidonoff
 
25.11.13
13:13
(142) Он не мог - вылетала ошибка.
(139) Странно. У меня не работает... Ну да ладно xD
145 m-serg74
 
25.11.13
13:42
(144) счас попробовал записать с контра на Неопределено, появилась копия набора записей только с Объектом Неопределено,
потом сделал:

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


созданный набор с косячным Объектом легко и непринужденно потерся...
146 zakidonoff
 
25.11.13
13:49
(145) Видимо, у ТС были ещё какие-то скрытые дубли реестра в SQL, которые вызывали процедуру передзаписью при попытке записать набор, но на которые ОбменДанными.Загрузка не распространялось.
Спасла только установка параметров сеанса...
147 m-serg74
 
25.11.13
13:51
ХЗ что его там спасло:-) и что он там делал...
148 m-serg74
 
25.11.13
13:51
но на 150 постов что то долго...
149 Maxus43
 
25.11.13
13:53
(147) мешал код (138) ему, загрузка = Истина в этом случае не помогает, ибо регистрировать изменения нужно и при загрузке данных с обмена
150 m-serg74
 
25.11.13
14:04
(149) без смены Отбора не даст записать набор, думаю, а после смены Отбора будет копия набора с другим измерением Объект, что то ТС не договаривает, пишет что (135) сработало, хотя у самого zakidonoff который и написал (135) не прокатило и я пробовал - не прокатывает
151 zakidonoff
 
25.11.13
14:06
(149) Не отрабатывает подписка при параметре загрузки.
m-serg74 же воссоздал - у него без параметров всё удалилось
(150) Есть подозрение, что когда отбор = неопределено, он пропускает запись, так как не считает смену с неопределено изменениями.
152 Dmitriy Dmitriy1
 
25.11.13
14:07
ПараметрыСеанса.НаличиеОбменаТорговляБухгалтерия = Ложь;
Набор = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();  
Набор.ОбменДанными.Загрузка = Истина;
Набор.Отбор.Объект.Установить(Неопределено);
Набор.Прочитать();
Для каждого стрзапись Из Набор Цикл
   СтрЗапись.Объект = Справочники.ФизическиеЛица.НайтиПоКоду( "Р00000042");
КонецЦикла;
Набор.Отбор.Объект.Установить(Справочники.ФизическиеЛица.НайтиПоКоду( "Р00000042"););
Набор.Прочитать();
набор.Записать();

Вот так заработало)))
153 m-serg74
 
25.11.13
14:08
(152)
Набор.Отбор.Объект.Установить(Справочники.ФизическиеЛица.НайтиПоКоду( "Р00000042"););
Набор.Прочитать();
набор.Записать();


чего???
154 m-serg74
 
25.11.13
14:09
ты этим просто очистил набор
155 Dmitriy Dmitriy1
 
25.11.13
14:09
Еще раз устанавливаю отбор по тому физлицу на которое переименовал запись регистра
156 Dmitriy Dmitriy1
 
25.11.13
14:09
набор.Удалить(Истина);
157 m-serg74
 
25.11.13
14:09
(155) /на которое переименовал запись регистра/
только не записал еще ничего, да?
158 m-serg74
 
25.11.13
14:10
(156) /набор.Удалить(Истина);/

че это за ???
159 Dmitriy Dmitriy1
 
25.11.13
14:10
ща, может что то напутал))) Обновляется конфа, щас обновится скажу)
160 Dmitriy Dmitriy1
 
25.11.13
14:10
(158) ну сработало же)
161 Dmitriy Dmitriy1
 
25.11.13
14:10
Это 1с)
162 m-serg74
 
25.11.13
14:11
(161) не верю (С)
163 Dmitriy Dmitriy1
 
25.11.13
14:11
Ну реально все пусто)))
164 m-serg74
 
25.11.13
14:13
(160)
РегистрСведенийНаборЗаписей.<Имя регистра сведений>.Удалить (InformationRegisterRecordSet.<Имя регистра сведений>.Delete)
РегистрСведенийНаборЗаписей.<Имя регистра сведений> (InformationRegisterRecordSet.<Имя регистра сведений>)
Удалить (Delete)
Синтаксис:

Удалить(<Запись>)
Параметры:

<Запись> (обязательный)

Тип: Число; РегистрСведенийЗапись.<Имя регистра сведений>.
Индекс удаляемой записи либо сама запись.
Описание:

Удаляет запись из набора записей регистра сведений.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

НаборКурсов.Удалить(0);
165 zakidonoff
 
25.11.13
14:15
(164) Кароч, допилил он мой код.
Тогда всё понятно -)
166 m-serg74
 
25.11.13
14:16
(165) ты смотрел что он там написал?
167 m-serg74
 
25.11.13
14:18
(165) устанавливает отбор по Неопределено, читает набор, заполняет другим Объектом, потом устанавливает Отбор по этому другому Объекту, снова читает а таких записей может есть до него были может нету тогда набор будет пустой, и в конце что то записывает...
168 Maxus43
 
25.11.13
14:19
(167) ну рандомно человек код вставляет, авось прокатит :)
169 m-serg74
 
25.11.13
14:20
(168) так (156) должно материться
170 zakidonoff
 
25.11.13
14:20
(167) скорее всего у него взлетело так:
ПараметрыСеанса.НаличиеОбменаТорговляБухгалтерия = Ложь;
Набор = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();  
Набор.Отбор.Объект.Установить(Неопределено);
Набор.Прочитать();
Для каждого стрзапись Из Набор Цикл
   РегистрСведенийНаборЗаписей.КонтактнаяИнформация.Удалить(стрзапись);
КонецЦикла;
171 Maxus43
 
25.11.13
14:22
ПараметрыСеанса.НаличиеОбменаТорговляБухгалтерия = Ложь;
Набор = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();  
Набор.Отбор.Объект.Установить(Неопределено);
Набор.Записать();
араметрыСеанса.НаличиеОбменаТорговляБухгалтерия = Истина;

Этого достаточно для удаления
172 m-serg74
 
25.11.13
14:22
(170) тоже самое
Набор.Отбор.Объект.Установить(Неопределено);
Набор.Записать();

тоже самое
Набор.Отбор.Объект.Установить(Неопределено);
Набор.Очистить();
Набор.Записать();

тоже самое
Набор.Отбор.Объект.Установить(Неопределено);
Набор.Прочитать();
Набор.Очистить();
Набор.Записать();
173 m-serg74
 
25.11.13
14:24
(171) я ему в (133) это писал - типа не подошло ему...
174 Dmitriy Dmitriy1
 
25.11.13
14:27
Ребята, спасибо большое, главное что все вышло)))
175 zakidonoff
 
25.11.13
14:29
(174) Да им уже пофиг, что у тебя получилось.
Тут, видишь ли, мистикой попахивает. xD
176 Maxus43
 
25.11.13
14:31
я б сказал пованивает копрокодом :)
177 Dmitriy Dmitriy1
 
25.11.13
14:33
=)))