Имя: Пароль:
1C
1С v8
Подскажите в чем ошибка записи регистра сведений
0 espanol
 
25.05.12
12:13
Процедура ТабличноеПолеБрендыМодельОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
   
   ТекДан       = ЭлементыФормы.ТабличноеПолеБренды.ТекущиеДанные;
   НаборЗаписей = РегистрыСведений.Аксессуары.СоздатьНаборЗаписей();
   НаборЗаписей.Отбор.Номенклатура.Установить(Ссылка);
   НаборЗаписей.Отбор.Бренд.Установить(ТекДан.Бренд);
   НаборЗаписей.Отбор.Модель.Установить(ТекДан.Модель);
   НаборЗаписей.Отбор.Комплектация.Установить(ТекДан.Комплектация);
   НаборЗаписей.Отбор.УникальныйИД.Установить(ТекДан.УникальныйИД);
   НаборЗаписей.Отбор.СвязанныеНоменклатурыИРаботы.Установить(ЭлементыФормы.ТабличноеПолеТоварыРаботы.ТекущиеДанные.СвязанныеТоварыРаботы);
   НаборЗаписей.Прочитать();
   Если НЕ НаборЗаписей.Количество() = 0 Тогда
       НоваяЗапись = НаборЗаписей[0];
       НоваяЗапись.Модель = ВыбранноеЗначение;
   КонецЕсли;
   НаборЗаписей.Записать();
   
КонецПроцедуры




{Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(2095)}: Ошибка при вызове метода контекста (Записать)
   НаборЗаписей.Записать();
по причине:
Запись не верна! Значение поля не соответствует установленному отбору: Аксессуары: Металлический телескопический стержень с фонариком и магнитом, Ferrari, Ceed, AMBIENTE, , cc5ae5ad-9359-4e50-8cb1-9623085d4629 (Регистр сведений: Аксессуары; Поле: Модель)
1 zak555
 
25.05.12
12:14
зачем при выборе что-то писать ?
2 espanol
 
25.05.12
12:16
(1) дак просто меняем значение и это новое значение должно взамен старого записаться в строку регистра
3 YF
 
25.05.12
12:16
(0) Ты прочитал с одним значением модели, а пишешь с другим
4 YF
 
25.05.12
12:17
(2) Удаляй старую запись и пиши новую
5 espanol
 
25.05.12
12:17
(4) ясно, так и думал что единственный выход...
6 Нуф-Нуф
 
25.05.12
12:17
а чем менеджер записи не угодил?
7 YF
 
25.05.12
12:18
(6) А в книжках рекомендуют писать в регистры наборами, хотя мне тоже непонятно зачем наборами, если в них влезает только одна запись
8 Нуф-Нуф
 
25.05.12
12:22
(7) менеджер сначала удаляет, а потом пишет, если не ошибаюсь. и он это делает для одной записи
и при записи большого набора это не оптимально. а набор может сразу много...
9 YF
 
25.05.12
12:28
(8) Дык набор с несколькими записями с отбором фиг прочитаешь, там везде отбор на равенство
10 Maxus43
 
25.05.12
12:30
(9) это если отбор по всем измерениям... а пачкой по всей Номенклатура заколебёшся писать менеджером
11 YF
 
25.05.12
12:32
(10) А, ну да, если так, то оно самое.
12 JesteR
 
25.05.12
12:36
Если хочешь наборами, я предполагаю что тебе придется:
1. установить отбор по старому значению и записать набор, все записи удовлетворяющие отбору удалятся;
2. создать новый набор с отбором по выбранной модели, добавить новые записи и записать.
Т.е. по любому сначала удаляешь старые записи, потом добавляешь новые.
13 espanol
 
25.05.12
12:41
Если НЕ Результат.Количество() = 0 Тогда
           Для Каждого Стр Из Результат Цикл
               
               НаборЗаписей = РегистрыСведений.Аксессуары.СоздатьНаборЗаписей();
               НаборЗаписей.Отбор.Номенклатура.Установить(Ссылка);
               НаборЗаписей.Отбор.Бренд.Установить(Стр.Бренд);
               НаборЗаписей.Отбор.Модель.Установить(Стр.Модель);
               НаборЗаписей.Отбор.Комплектация.Установить(Стр.Комплектация);
               НаборЗаписей.Отбор.УникальныйИД.Установить(Стр.УникальныйИД);
               НаборЗаписей.Отбор.СвязанныеНоменклатурыИРаботы.Установить(Стр.СвязанныеНоменклатурыИРаботы);
               
               НаборЗаписей.Прочитать();
               НаборЗаписей.Удалить(0);
               НаборЗаписей.Записать();
               
               НаборЗаписейНовая                             = РегистрыСведений.Аксессуары.СоздатьНаборЗаписей();
               НоваяЗаписьНовая                              = НаборЗаписейНовая.Добавить();
               НоваяЗаписьНовая.Модель                       = ВыбранноеЗначение;
               НоваяЗаписьНовая.Номенклатура                 = Ссылка;
               НоваяЗаписьНовая.Бренд                        = Стр.Бренд;
               НоваяЗаписьНовая.Комплектация                 = Стр.Комплектация;
               НоваяЗаписьНовая.УникальныйИД                 = Стр.УникальныйИД;
               НоваяЗаписьНовая.СвязанныеНоменклатурыИРаботы = Стр.СвязанныеНоменклатурыИРаботы;
               НоваяЗаписьНовая.Количество                   = Стр.Количество;
               
               НаборЗаписейНовая.Записать();
               
           КонецЦикла;
       КонецЕсли;




Попробовал сделать так, не прокатывает, он при записи все данные в регистре затирает... в чем причина?
14 espanol
 
25.05.12
12:48
А все разобрался
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.