Вход | Регистрация

1С:Предприятие ::

Метки: 

Правильный порядок записи регистра сведений

Я
   alexshape
 
15.11.17 - 16:37
Привет Всем, есть регистр сведений в котором нужно изменить данные:

1. Я отбираю данные из регистра Через конструкцию вида
набор.Отбор.Измерение1.Установить(Значение);
2. Далее я изменяю в этом наборе значение "Измерение1"
3. Выдает ошибку что нельзя изменять значения Измерений которые участвуют в отборе.

Как обойти данную проблему?
 
  Рекламное место пустует
   Cyberhawk
 
1 - 15.11.17 - 16:48
Создать набор с нужными данными, записать, а ненужные данные удалить
   SeregaMW
 
2 - 15.11.17 - 17:09
(1) Не согласен с начало надо удалить а потом создать! ;-)
   Cyberhawk
 
3 - 15.11.17 - 17:10
(2) Садись, два. Если сначала удалить, а потом при создании будет ошибка, то повторно создать уже не получится.
Это если без транзакции, конечно же.
   SeregaMW
 
4 - 15.11.17 - 17:25
(3) Прекрасно работает!                НаборЗапПлощадь = РегистрыСведений.ГУТА_ИнформацияОПомещениях.СоздатьНаборЗаписей();
                    НаборЗапПлощадь.Отбор.Период.Установить(НаДату);
                    НаборЗапПлощадь.Отбор.Помещение.Установить(НовыйЭлементСпрПом.Ссылка);
                    НаборЗапПлощадь.Прочитать();
                    НаборЗапПлощадь.Очистить();
                    НовЗапись = НаборЗапПлощадь.Добавить();
                    НовЗапись.Период = НаДату;
                    НовЗапись.Помещение = НовыйЭлементСпрПом.Ссылка;
                    НовЗапись.Площадь = СтрТаб.ПлощадьПомещенияПоБТИ;
                    НовЗапись.ТипПомещения = СтрТаб.ТипПомещения;
                
                        НаборЗапПлощадь.Записать();
   Ненавижу 1С
 
5 - 15.11.17 - 17:29
(4) так не сработает, у тебя ошибка будет: "нельзя изменять значения Измерений которые участвуют в отборе"
   Мыш
 
6 - 15.11.17 - 17:30
(0) Нужно удалить запись с одним значением измерения и затем создать запись с другим значением измерения.
   Ненавижу 1С
 
7 - 15.11.17 - 17:31
1. создать набор записей со старым отбором и прочитать его
2. создать другой набор записей с новым отбором
3. скопировать данные из старого в новый, изменяя данные касательные отбора
4. записать новый набор
5. создать набор записей со старым отбором и не читая записать его (то есть удалить!)
   Cyberhawk
 
8 - 15.11.17 - 17:32
(4) Помимо сказанного в (5) не ясно, зачем ты читаешь набор перед его очисткой
   SeregaMW
 
9 - 15.11.17 - 17:33
(5,6,7,8) Согласен!
   Cyberhawk
 
10 - 15.11.17 - 17:33
Хотя... без Прочитать() в нем записей и не будет, ничего не очистится по идее
 
  Рекламное место пустует
   Мыш
 
11 - 15.11.17 - 17:34
(10) Очистится
   SeregaMW
 
12 - 15.11.17 - 17:51
Прекрасно работает вот такой код!


Процедура КнопкаВыполнитьНажатие(Кнопка)
        НаборЗапПлощадь = РегистрыСведений.ГУТА_ИнформацияОПомещениях.СоздатьНаборЗаписей();
            //        НаборЗапПлощадь.Отбор.Период.Установить(НаДату);

                    НаборЗапПлощадь.Отбор.Помещение.Установить(НовыйЭлементСпрПом.Ссылка);
                    НаборЗапПлощадь.Записать();
                
                    НовЗапись = НаборЗапПлощадь.Добавить();
                    НовЗапись.Период = НаДату;
                    НовЗапись.Помещение = НовыйЭлементСпрПом.Ссылка;
                    НовЗапись.Площадь = ПлощадьПомещенияПоБТИ;
                    НовЗапись.ТипПомещения = ТипПомещения;
                    Попытка
                        НаборЗапПлощадь.Записать();
                        Сообщить("Элемент справочника ""Помещения для сдачи в аренду"" с наименованием - " + НовыйЭлементСпрПом.Наименование + " успешно записан."); 
                    Исключение
                        Сообщить(ОписаниеОшибки());
                    КонецПопытки;

КонецПроцедуры
   SeregaMW
 
13 - 15.11.17 - 17:51
(0) Покажи листинг!
   Chameleon1980
 
14 - 15.11.17 - 17:55
отбор
прочитать
кукуку
записать
   alexshape
 
15 - 15.11.17 - 18:10
(12) Мне не нужно создавать новую запись, а нужно исправить старую
   Chameleon1980
 
16 - 15.11.17 - 18:22
(15) в (14) что не понятно?
   breezee
 
17 - 15.11.17 - 18:32
(15) А в чем разница? Вы знаете что у записей регистров нет ссылок на себя?
   alexshape
 
18 - 16.11.17 - 10:33
Разобрался, Всем спасибо, Итог такой:

1. Выбираю записи
2. Копирую текущую запись
3. Изменяю что нужно
4. Удаляю старый набор
5. Записываю новый набор в режиме "Не замещать"

Код:

НаборЗаписей = РегистрыСведений.МОЭСК_КомментарииКДокументам.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.ОтветПолучен.Установить(Ложь);
    НаборЗаписей.Отбор.РуководителиПроинформированыОПросрочке.Установить(Ложь);
    НаборЗаписей.Отбор.КлиентПроинформирован.Установить(Ложь);
    НаборЗаписей.Прочитать();
    
    Для каждого Запись Из НаборЗаписей Цикл
        
        НовыйНаборДляЗаписи = РегистрыСведений.МОЭСК_КомментарииКДокументам.СоздатьНаборЗаписей();
        НоваяЗапись  = НовыйНаборДляЗаписи.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяЗапись, Запись);
        
        Если УсловиеВыполняется  Тогда
            
            НоваяЗапись.РуководителиПроинформированыОПросрочке = Истина;
            НоваяЗапись.ОтветПолучен = Истина;
            НоваяЗапись.ТекстОтвета = "Это Победа";

        КонецЕсли; 
        
    КонецЦикла; 
    
    
    Если НаборЗаписей.Количество() > 0 Тогда
        НаборЗаписей.Очистить();
        НаборЗаписей.Записать();
        НовыйНаборДляЗаписи.Записать(Ложь);        
    КонецЕсли;


Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует