Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 сен 2024, 16:19

Запись в Регистр сведений

Автор Den, 18 сен 2019, 15:02

0 Пользователей и 1 гость просматривают эту тему.

Den

Всем доброго времени суток!
Если у кого есть время и желание помочь, заранее очень благодарен.
Есть обработка, включить / отключить настройки панели функций у пользователей. Пользователи в таб. часть выбираются. Галочки настроек снимаются и устанавливаются. Но при попытке записать изменения в регистр, выходит ошибка
"{ВнешняяОбработка.СписокПользователей.Форма.Форма.Форма(74)}: Ошибка при вызове метода контекста (Записать)
НаборЗаписей.Записать(Истина);
по причине: Запись не верна! Значение поля "Пользователь" не может быть пустым!: НастройкиПользователей: ,  (Регистр сведений: Настройки пользователей; Номер строки: 25410)".

Вот Код, подскажите, в чем моя ошибка?

Процедура ЗаписатьНажатие(Элемент)
   
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Настройка", ПланыВидовХарактеристик.НастройкиПользователей.НайтиПоКоду("000000065"));
   Запрос.Текст = "ВЫБРАТЬ
                  |   НастройкиПользователей.Пользователь КАК Пользователь,
                  |   НастройкиПользователей.Настройка КАК Настройка,
                  |   НастройкиПользователей.Значение КАК Значение
                  |ИЗ
                  |   РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
                  |ГДЕ
                  |   НастройкиПользователей.Настройка = &Настройка
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |   Пользователь
                  |АВТОУПОРЯДОЧИВАНИЕ";
   
   Рез = Запрос.Выполнить().Выбрать();
   
   Пока Рез.Следующий() Цикл
      НаборЗаписей = РегистрыСведений.НастройкиПользователей.СоздатьНаборЗаписей();
      НаборЗаписей.Прочитать();
      Для Каждого Стр Из ТаблицаПользователей Цикл
         НоваяЗапись = НаборЗаписей.Добавить();
         НоваяЗапись.Пользователь = Стр.ФИО;
         НоваяЗапись.Значение     = Стр.Флаг;
      КонецЦикла;
      НаборЗаписей.Записать(Истина);
   КонецЦикла;

КонецПроцедуры


KOI8-R

А какой тип значения у вас: Стр.ФИО?
Должен быть СправочникСсылка.Пользователи скорее всего.

Den


KOI8-R

Ну тогда смотрите в отладке, что у вас по ТаблицеПользователей. Пустое значение приходит оттуда.
И кстати с набором записей у вас тоже не корректно:
Пока Рез.Следующий() Цикл
      НаборЗаписей = РегистрыСведений.НастройкиПользователей.СоздатьНаборЗаписей();
      НаборЗаписей.Прочитать();
      Для Каждого Стр Из ТаблицаПользователей Цикл
         НоваяЗапись = НаборЗаписей.Добавить();
         НоваяЗапись.Пользователь = Стр.ФИО;
         НоваяЗапись.Значение     = Стр.Флаг;
....

Я так понимаю задумка такова, что вы считываете текущие значений настроек из регистра и проставляете им булево.
Но по факту вы выбираете все записи по определенной настройке без отбора по пользователям.
Затем для каждой считанной строки вы создаете новый набор записей и для каждой строки какой то таблицы пользователей создаете по ПУСТОЙ строке заполняя в нем всего два поля (Пользователь и флаг, остальные поля пусты) пытаетесь записать, потому как эта конструкция без отбора будет возвращать пустой набор:
НаборЗаписей.Прочитать();

Den


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск