Имя: Пароль:
1C
1С v8
Изменение записей непериодического независимого РС
0 Alekzander
 
18.02.13
21:32
В Рознице 1.0 есть РС "Штрихкоды". Мне нужно перевыбрать характеристику со связью по владельцу, делаю так, как описано в:

v8: Как изменить записи независимого непериодического регистра сведений.

, но не фурычет - ошибка та же, и в ТЗ загонял, не получается.

   НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
   НаборЗаписей.Прочитать();
   
   Для каждого СтрокаРегистра из НаборЗаписей Цикл
       Штрихкод = СтрокаРегистра.Штрихкод;
       Номенклатура = СтрокаРегистра.Владелец;
       ЕдИзм = СтрокаРегистра.ЕдиницаИзмерения;
       ТипШК = СтрокаРегистра.ТипШтрихкода;
       Характеристика = СтрокаРегистра.ХарактеристикаНоменклатуры;
       Если ТипЗнч(Номенклатура) <> Тип("СправочникСсылка.Номенклатура")  Тогда
           Продолжить;        
       Иначе
           Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(Характеристика,,,Номенклатура);

       КонецЕсли;
   КонецЦикла;
   
   НаборЗаписей.Записать();


То же самое, пишет, например, Штрихкод: 1000000630589 уже имеет владельца "МК 115 Жакет" и в конце "{Форма.Форма.Форма(21)}: Ошибка при вызове метода контекста (Записать)
   НаборЗаписей.Записать();
по причине:
Не удалось записать: "Штрихкоды"!"

Что не так делаю?
1 ДенисЧ
 
18.02.13
21:33
" Штрихкод: 1000000630589 уже имеет владельца "
Явно не платформенное сообщение. Смотри подписки ПриЗаписи
2 Alekzander
 
18.02.13
21:33
(1) где смотреть?
3 ДенисЧ
 
18.02.13
21:34
(2) слово "подписка" совершшенно не знакомо?
тогда запусти поиск по всей конфе по фразе "уже имеет владельца"
4 Alekzander
 
18.02.13
21:40
А, ну собсно то, что я и читал по ссылке. Мне вот одно непонятно, сделал также, а ничего не выходит, в чём может быть загвоздка?
5 Очкарик
 
18.02.13
21:41
(4) отркой модуль набора записей регистра и посмотри чего там написано
6 Alekzander
 
18.02.13
21:42
(5) да уже смотрю

Для Каждого ТекущаяЗапись Из ЭтотОбъект Цикл
           Если ЗначениеЗаполнено(ТекущаяЗапись.ШтрихКод) Тогда
               Запрос = Новый Запрос("
               |ВЫБРАТЬ ПЕРВЫЕ 1
               |    РегШтрихкоды.Владелец КАК Владелец,
               |    РегШтрихкоды.ШтрихКод КАК Штрихкод
               |ИЗ
               |    РегистрСведений.Штрихкоды КАК РегШтрихкоды
               |ГДЕ
               |    РегШтрихкоды.ШтрихКод = &ШтрихКод
               |");
               
               Запрос.УстановитьПараметр("ШтрихКод", ТекущаяЗапись.ШтрихКод);
               
               РезультатЗапроса = Запрос.Выполнить();
               Если Не РезультатЗапроса.Пустой() Тогда
                   Выборка = РезультатЗапроса.Выбрать();
                   Выборка.Следующий();
                   
                   Сообщить("Штрихкод: " + Выборка.ШтрихКод + " уже имеет владельца """ + СокрЛП(Выборка.Владелец) + """.");
                   Отказ = Истина;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
7 Alekzander
 
18.02.13
21:43
В коде-то что подправить?
8 Очкарик
 
18.02.13
21:44
(7) закомментируй нафиг
9 Очкарик
 
18.02.13
21:44
(7) вот как сделай
//Отказ = Истина;
10 Alekzander
 
18.02.13
21:45
(8) базовая конфа, да и была бы проф, не очень-то хотелось бы менять
11 Alekzander
 
18.02.13
21:45
В моём коде что нужно исправить, чтобы он работал?
12 Очкарик
 
18.02.13
21:46
(11) Сделай так, чтобы твой код не противоречил (6)
13 Очкарик
 
18.02.13
21:48
(11) Ниче ты в своем коде не поправишь, не трогая (6)
14 Alekzander
 
18.02.13
21:48
(12) ясное дело, вопрос весь в том, как это сделать, уже все мозги сломал
15 Очкарик
 
18.02.13
21:50
(14) Процедура (6) обращается к существующим записям регистра и проверяет указан ли владелец - владелец уже указан - посылает тебя нафиг.

Если ты не собираешься трогать (6), то ты можешь только новые записи формировать.
16 Alekzander
 
18.02.13
21:51
(15) о, это уже лучше, я пробовал новые создавать, но цикл зацикливался. Код был такой:

НоваяЗапись = НаборЗаписей.Добавить();
           НоваяЗапись.Штрихкод = Штрихкод;
           НоваяЗапись.ЕдиницаИзмерения = ЕдИзм;
           НоваяЗапись.ТипШтрихкода = ТипШК;
           НоваяЗапись.Владелец = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаРегистра.Владелец);
           НоваяЗапись.ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(Характеристика,,,НоваяЗапись.Владелец);
17 Очкарик
 
18.02.13
21:53
(16) и че там зациклилось?
18 Alekzander
 
18.02.13
21:54
(17) оно:

Для каждого СтрокаРегистра из НаборЗаписей Цикл
       Штрихкод = СтрокаРегистра.Штрихкод;
       Номенклатура = СтрокаРегистра.Владелец;
       ЕдИзм = СтрокаРегистра.ЕдиницаИзмерения;
       ТипШК = СтрокаРегистра.ТипШтрихкода;
       Характеристика = СтрокаРегистра.ХарактеристикаНоменклатуры;
       Если ТипЗнч(Номенклатура) <> Тип("СправочникСсылка.Номенклатура")  Тогда
           Продолжить;        
       Иначе
           НоваяЗапись = НаборЗаписей.Добавить();
           НоваяЗапись.Штрихкод = Штрихкод;
           НоваяЗапись.ЕдиницаИзмерения = ЕдИзм;
           НоваяЗапись.ТипШтрихкода = ТипШК;
           НоваяЗапись.Владелец = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаРегистра.Владелец);
           НоваяЗапись.ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(Характеристика,,,НоваяЗапись.Владелец);

       КонецЕсли;
   КонецЦикла;
19 Очкарик
 
18.02.13
21:59
(18)
1.Выгрузи регистр во временную таблицу.
2.НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
НаборЗаписей.Записать();

Это ты очистил регистр сведений.

3. Далее по циклу НоваяЗапись = НаборЗаписей.Добавить();

4. НаборЗаписей.Записать().

Если ты такой принципиальный и не хочешь закомментировать (6)
20 Alekzander
 
18.02.13
22:00
(19) не, ну это не я принципиальный, это конфа базовая)))))

Спасибо, щас попробую.
21 Очкарик
 
18.02.13
22:01
(20) Смотри, если выполнится п.2, но не выполнятся остальные - ты потеряешь данные.
22 Alekzander
 
18.02.13
22:03
(21) сейчас не так страшно, архивок куча
23 Alekzander
 
18.02.13
22:11
(21) Спасибо большое, всё работает!
24 Очкарик
 
18.02.13
22:12
(23) пожалуйста :)
AdBlock убивает бесплатный контент. 1Сергей