//функция устанавливает новое значение реквизита документа или справочника и задаёт вопрос, если новое значение не соответствует предыдущему Функция гЗначение(Ко,Атрибут,Значение) Экспорт Знач1=Ко.ПолучитьАтрибут(Атрибут); Знач2=Значение; //проверка Если Не(ТипЗначенияСтр(Знач1)=ТипЗначенияСтр(Знач2)) Тогда //несоответствие типов Возврат(0); ИначеЕсли Не(ТипЗначенияСтр(Знач2)="Число") И (ПустоеЗначение(Знач2)=1) Тогда //пустое новое значение Возврат(0); КонецЕсли; //реквизит Если Метаданные.Документ(Ко.Вид()).Выбран()=1 Тогда //документ Если Метаданные.Документ(Ко.Вид()).РеквизитШапки(Атрибут).Выбран()=1 Тогда Ж=Метаданные.Документ(Ко.Вид()).РеквизитШапки(Атрибут); Имя=Ж.Представление(); ИначеЕсли Метаданные.Документ(Ко.Вид()).РеквизитТабличнойЧасти(Атрибут).Выбран()=1 Тогда Ж=Метаданные.Документ(Ко.Вид()).РеквизитТабличнойЧасти(Атрибут); Имя=Ж.Представление()+" (строка "+Ко.НомерСтроки+")"; Иначе Ж=Метаданные.ОбщийРеквизитДокумента(Атрибут); Имя=Ж.Представление(); КонецЕсли; ИначеЕсли Метаданные.Справочник(Ко.Вид()).Выбран()=1 Тогда //справочник Ж=Метаданные.Справочник(Ко.Вид()).Реквизит(Атрибут); Имя=Ж.Представление(); Если ПустаяСтрока(Имя)=1 Тогда Имя=Атрибут; КонецЕсли; КонецЕсли; //форматирование Если ТипЗначенияСтр(Знач2)="Строка" Тогда Знач1=СокрЛП(Знач1); Знач2=СокрЛП(Знач2); ИначеЕсли ТипЗначенияСтр(Знач2)="Число" Тогда Знач2=Окр(Знач2,Ж.Точность); КонецЕсли; //проверка Если Знач1=Знач2 Тогда Возврат(0); КонецЕсли; //установка значения Если ПустоеЗначение(Знач1)=0 Тогда Текст= "Атрибут: "+Имя+" | |Старое значение: "+СимволТабуляции+Знач1+" |Новое значение: "+СимволТабуляции+Знач2+" | |Установить новое значение?"; Если Вопрос(Текст,"Да+Нет")="Нет" Тогда Возврат(0) КонецЕсли; КонецЕсли; //значение Ко.УстановитьАтрибут(Атрибут,Знач2); Возврат(1); КонецФункции