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

Самопроизвольное удаление значений дополнительных реквизитов

Автор peregrine, 30 мая 2016, 15:32

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

peregrine

Здравствуйте. Столкнулся с такой проблемой.
1) Создаю строковый дополнительный реквизит для, например, ресурсной спецификации.
2) Условие доступа к этому реквизиту делаю следующее: доступен, когда Ссылка не заполнена (то есть, значение вводится при создании спецификации, в дальнейшем, его изменить нельзя).
3) Создаю ресурсную спецификацию, заполняю атрибут, записываю спецификацию, закрываю окно.
4) Открываю окно и, ничего не меняя (но можно и поменять - это не влияет), жму кнопку Записать и закрыть.
5) Снова открываю окно и нахожу, что значение моего дополнительного реквизита удалено и недоступно для редактирования.

Как с этим бороться? Никак не могу понять, это баг или какое-то хитрое, но штатное поведение, смысл которого ускользает от меня? Если убрать условие с реквизита, то ничего подобного не происходит, значение реквизита не удаляется. То же самое происходит на маршрутных картах и номенклатуре (думаю, такое поведение будет для любого справочника).

Версия платформы 8.3.8.1675 (на предыдущей работает так же). Одинаковое поведение и на файловой версии и на клиент-серверной.
Конфигурация: 1С:ERP Управление предприятием (2.1.3.93)

peregrine

Покопался в коде. Вот что удалось найти. Может кому-то пригодится.
Модуль: УправлениеСвойствамиСлужебный.
Процедура: ПеренестиЗначенияИзРеквизитовФормыВОбъект.
Процедура содержит следующий код (те строки, которые не касаются проблемы, я не привел)

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


То есть, при сохранении данных формы получается следующее:
1) Очищаются все допреквизиты объекта
2) Для каждого допреквизита проверяется видимость и доступность
3) Если допреквизит не виден и не доступен, то атрибут не создается
4) Если допреквизит виден и доступен, он вновь создается

Соответственно, так как у меня реквизит не доступен, он удаляется и снова не создается.
Добавлено: 31 мая 2016, 12:04


Продолжу говорить сам с собой. Оказывается, что такое поведение - это все-таки хитрое проектное решение, а не баг.
Официальный ответ:
Данная настройка предусматривалась для того, чтобы разрешать заполнение реквизитов (и их использование) для указанных условий (состояния объекта) и, соответственно, очищать для уменьшения объема хранимой информации, если условие перестает выполняться.
Ваш сценарий получается обратный, доступность используется для запрета его изменения и не был предусмотрен.


Теги:

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

Рейтинг@Mail.ru

Поиск