Имя: Пароль:
1C
1С v8
Изменить поле регистра сведений
, ,
0 Nzzzz
 
30.03.21
08:36
Здравствуйте! Как мне в регистре сведений поменять у каждой записи только одно поле?
как делалось: создаю набор записей, делаю отбор, читаю, далее изменяю поле в этой записи, далее набор.Записать()
Что в итоге: строка удаляется полностью из регистра..
1 Волшебник
 
30.03.21
08:37
нужно не менять, а удалять старую запись и создавать новую
2 Chameleon1980
 
30.03.21
08:38
выгрузить - поменять - загрузить
(1) почему?
3 Волшебник
 
30.03.21
08:41
(2) записи регистра сведений независимы. Если идёт речь об изменении поля-измерения, то суть именно в этом.
4 Мимохожий Однако
 
30.03.21
08:42
код показывай )
5 Chameleon1980
 
30.03.21
08:43
(3) соглашусь при условии, что изменяемое поле является измерением
6 Nzzzz
 
30.03.21
08:44
(5) Реквизит
7 Nzzzz
 
30.03.21
08:46
(4) мНаборЗаписей = РегистрыСведений.ПрикрепленныеПациентыСоглашений.СоздатьНаборЗаписей();
        
        // установили в нем отбор по измерениям
        мНаборЗаписей.Отбор.Соглашение.Установить(Справочники.СоглашенияСКлиентами.НайтиПоНаименованию(Соглашение));
        
        // прочитали то, что есть в базе
        мНаборЗаписей.Прочитать();
        Для каждого Запись из мНаборЗаписей Цикл
            Запись.Полис = СсылкаНаПолисИзЗапроса(СсылкаНаПациента, ПолисНомер, ПолисСрокДействия,Соглашение,ПолисДатаНачала);
        КонецЦикла;
        мНаборЗаписей.Записать();
8 Nzzzz
 
30.03.21
08:47
(2) Это мне нужно сделать так?

ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
  
  НаборЗаписей = РегистрыСведений.ПрикрепленныеПациентыСоглашений.СоздатьНаборЗаписей();
  НаборЗаписей.Загрузить(ТаблицаРезультат);
  Для Каждого Запись Из НаборЗаписей Цикл
          Запись.Полис= СсылкаНаПолисИзЗапроса(СсылкаНаПациента, ПолисНомер, ПолисСрокДействия,Соглашение,ПолисДатаНачала);
      КонецЕсли;    
КонецЦикла;  
НаборЗаписей.Записать();
9 Малыш Джон
 
30.03.21
08:54
(8) каждый хоть раз в жизни должен затереть регистр сведений записью набора записей без отбора
10 Nzzzz
 
30.03.21
08:57
(9) Отбор в цикле ставить?

ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
  
  НаборЗаписей = РегистрыСведений.ПрикрепленныеПациентыСоглашений.СоздатьНаборЗаписей();
  НаборЗаписей.Загрузить(ТаблицаРезультат);
  Для Каждого Запись Из НаборЗаписей Цикл
          НаборЗаписей.Отбор.Соглашение.Установить(Справочники.СоглашенияСКлиентами.НайтиПоНаименованию(Соглашение));
          Запись.Полис= СсылкаНаПолисИзЗапроса(СсылкаНаПациента, ПолисНомер, ПолисСрокДействия,Соглашение,ПолисДатаНачала);
      КонецЕсли;    
КонецЦикла;  
НаборЗаписей.Записать();
11 Ненавижу 1С
 
гуру
30.03.21
09:00
(10)
Плохо:
1. НайтиПоНаименованию
2. Запрос в цикле
12 Nzzzz
 
30.03.21
09:03
(11) 1 и 2 - ну мне как бы исправить то 1000 записей и один раз, больше мне это не понадобится. Но всё равно интересно, а как правильно сделать? Чтобы было Хорошо?) Ну на будущее.
13 Волшебник
 
30.03.21
09:18
(12) Используй МенеджерЗаписи
14 minsk1s
 
30.03.21
11:20
(0) Поиск и программное изменение записи документа в регистр сведений в 1С 8.3:
&НаСервере
Процедура ПоискИИзменениеЗаписи()

    УстановкаЦенСсылка = Документы.УстановкаЦен.НайтиПоНомеру("ПТО-00000001", '20201231');
    УстановкаЦен = УстановкаЦенСсылка.ПолучитьОбъект();

    // Получение набора записей документа Установка цен № ПТО-00000001 от 31.12.20 в регистр "ЦеныРеализации"
    НаборЗаписей = УстановкаЦен.Движения.ЦеныРеализации;

    // Чтение набора записей из базы данных.
    НаборЗаписей.Прочитать();

    Для Каждого Запись Из НаборЗаписей Цикл

        // Получение старых значений
        Сообщить(" по " + Запись.Организация + ", " + Запись.Контрагент + ", " + Запись.Номенклатура + " = " + Запись.Цена);
        // Проведение удорожания на 30%
        Запись.Цена = Запись.Цена + (Запись.Цена * (30/100));

    КонецЦикла;

    // Добавление новой записи
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("ОАО ""Гипермаркет АЗИЯ""");
    НоваяЗапись.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО ""БелИмпортТорг""");
    НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Молоко 3,2%");
    НоваяЗапись.Цена = 3;

    // Замещение старых записей и запись новых
    НаборЗаписей.Записать(Истина);

КонецПроцедуры
15 mikecool
 
30.03.21
11:45
если записей немного - прочитать весь РС, выгрузить в ТЗ, отобрать строки, изменить, загрузить снова в РС
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший