Доброго времени суток. Дело в следующем: Добавил в справочник новую кнопку, при нажатии которой открывается внешняя обработка:

```1c
    Процедура ИзменитьРасценкиНажатие(Элемент)
    ОткрытьОбработку = ВнешниеОбработки.Создать("C:\Работы.epf");
    ОткрытьФорму=ОткрытьОбработку.ПолучитьФорму("Форма");
    ОткрытьФорму.Открыть();
    КонецПроцедуры
```

Далее, в обработке две функции: 1 - найти расхождения в фактических данных и данных, которые забиты в справочник + показать их; 2 - перезаписать расхождения
Первая функция отрабатывает, все расхождения видны, а вот записать полученные данные не удается. Прошу подсказать в чем причина. Код:
кнопка просмотра расхождений:

```1c
    Расценки = Новый Запрос
    ("ВЫБРАТЬ
    | Работы.Код,
    | Работы.Наименование,
    | Работы.Расценка,
    | Работы.НормаЧасов,
    | Работы.Родитель
    |ИЗ
    | Справочник.Работы КАК Работы
    |ГДЕ
    | Работы.ЭтоГруппа = Ложь И
    | Работы.ПометкаУдаления = Ложь");
    Выборка = Расценки.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Если Найти(НРег(Выборка.Наименование), "набор арматуры")
    ИЛИ Найти(НРег(Выборка.Наименование), "обрыв перемычки")
    ИЛИ Найти(НРег(Выборка.Наименование), "мат 1000х1000 (вулкнизация)")
    Тогда Продолжить;
    КонецЕсли;
    Если Найти(НРег(Выборка.Родитель.Родитель.Наименование), "праздничные")
    ИЛИ Найти(НРег(Выборка.Родитель.Родитель.Родитель.Наименование), "праздничные") Тогда
    Если Найти(Выборка.Наименование, "вулканизац") Тогда
    Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
    Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
    Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
    ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
    Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
    Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
    Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
```

кнопка записи:

```1c
    Выборка = Справочники.Работы.Выбрать();
    Пока Выборка.Следующий() Цикл
    Если Найти(НРег(Выборка.Наименование), "набор арматуры")
    ИЛИ Найти(НРег(Выборка.Наименование), "обрыв перемычки")
    ИЛИ Найти(НРег(Выборка.Наименование), "мат 1000х1000 (вулкнизация)")
    Тогда Продолжить;
    КонецЕсли;
    Если Найти(НРег(Выборка.Родитель.Родитель.Наименование), "праздничные")
    ИЛИ Найти(НРег(Выборка.Родитель.Родитель.Родитель.Наименование), "праздничные") Тогда
    Если Найти(Выборка.Наименование, "вулканизац") Тогда
    Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
    Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
    Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
    ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
    Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
    Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
    Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
    ВыборкаОбъект = Выборка.ПолучитьОбъект();
    ВыборкаОбъект.Расценка = Формула;
    ВыборкаОбъект.Записать();
```
---
(1) Если Найти(Выборка.Наименование, "вулканизац") Тогда
                Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
                Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
                Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
            ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
                Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
                Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
                Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
                ВыборкаОбъект = Выборка.ПолучитьОбъект();
                ВыборкаОбъект.Расценка = Формула;
                ВыборкаОбъект.Записать();

Тут только вторая формула будет записываться.
---
ВыборкаОбъект = Выборка.ПолучитьОбъект();
 ВыборкаОбъект.Расценка = Число(Формула);
 ВыборкаОбъект.Записать();
так попробуй
---
(1) Если Найти(Выборка.Наименование, "вулканизац") Тогда
                Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
                Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
                Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
            ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
                Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
                Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
                Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
                ВыборкаОбъект = Выборка.ПолучитьОбъект();
                ВыборкаОбъект.Расценка = Формула;
                ВыборкаОбъект.Записать();

Тут только вторая формула будет записываться.
---
Выборка.Ссылка.ПолучитьОбъект() так попробуй.
---
Вместо чего это использовать?
---
Если про эту строчку

```1c
    ВыборкаОбъект = Выборка.ПолучитьОбъект();
```

То не помогло :-(
---
Найти(Выборка.Наименование, "шероховка") что тут отладчик показывает?
---
свойство - Найти(Выборка.Наименование, "шероховка")
значение - 12
тип - число
---
Ну вот, что и требовалось доказать. Объект вы получить не можете.
---
Добавил запрос по аналогии с первой кнопкой, теперь вылетает ошибка

```1c
    Метод объекта не обнаружен (ПолучитьОбъект)
    ВыборкаОбъект = Выборка.ПолучитьОбъект();
```

Как можно побороть ее?
---
```1c
    ВЫБРАТЬ
    | Работы.Ссылка как Ссылка,
    | Работы.Код,
    | Работы.Наименование,
    | Работы.Расценка,
    | Работы.НормаЧасов,
    | Работы.Родитель
    |ИЗ
    | Справочник.Работы КАК Работы
    |ГДЕ
    | Работы.ЭтоГруппа = Ложь И
    | Работы.ПометкаУдаления = Ложь
```

И вот уже Выборка.Ссылка.ПолучитьОбъект()
---
Получил новую ошибку :(
---
Вру, ошибки нет, опечатку допустил в запросе.
Теперь обработка срабатывает, но все равно не перезаписывает данные
---
Ну, осталось посмотреть в отладчике, что происходит в строке

ВыборкаОбъект.Расценка = Формула;

(тип "Расценка", содержимое "Формула").
---
В строку Выборка.Ссылка.ПолучитьОбъект().Расценка
Получен объект

В строку ВыборкаОбъект.Расценка = Формула
Получено число
---
Да нет,
1) тип реквизита "Расценка" - "Строка"?
2) и содержимое переменной "формула" в момент выполнения строки?

               ВыборкаОбъект.Расценка = Формула;
---
Свойств ВыборкаОбъект.Расценка = Формула
Значение Истина
Тип Булево

Не понимаю, почему в булево преобразуется

Формула в момент выполнения содержит число
---
Или вас интересует какой тип данных имеет сам реквизит в справочнике? Если так, то Число
---
Может быть несоответствие типов в разных частях присвоения:

ВыборкаОбъект.Расценка = Формула

Если тип реквизита справочника "Расценка" - "число", то и в переменной "Формула", также должно быть число.
---
И в Расценке, и в Формуле содержится число, проверил
---
"Теперь обработка срабатывает, но все равно не перезаписывает данные"

А что значит "не перезаписывает"? Вываливается ошибка или просто в реквизите справочника остается прежнее значение?
---
остаются прежние значения
---
```1c
    ВыборкаОбъект = Выборка.ПолучитьОбъект();
    ВыборкаОбъект.Расценка = 1;
    ВыборкаОбъект.Записать();
```

Вы сначало попрбуйте так . Посмотрите значение реквизита можете поменять. Если да тогда проблема в формуле иначе напишите посмотрим в чем проблема дальще
---
Попробовал - данные остались прежние.
---
Еще может быть какое то условие стоит в модуле и в момент записи не дает записать новое значение. Или данные реквизита хранятся в регистре. Вариантов много
---
есть anydesk дай помогу
---
Или сам реквизит Расценку включи в табло и через f11 помотри когда значение меняетса на прежднюю
---
ВыборкаОбъект.Расценка = 1; после этой строки начни через f11 ходить
---
Не в ту ветку указал
ВыборкаОбъект.Расценка = 1;
Данные перезаписались, значит с формулой что-то не так?
Что с ней может быть не так?

Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2)
---
ВыборкаОбъект.Записать(); в этой строке остонавись и посмотри Формула и ВыборкаОбъект.Расценка какое значение возвращает ?
ВыборкаОбъект.Расценка = Формула тоже посмотри истина возвращает ?
---
Напиши если не трудно значение Формула
---
Значения одинаковые в Формула и ВыборкаОбъект.Расценка

```1c
    ВыборкаОбъект.Расценка=Формула - истина
    Значение Формула = число, 1565,12
```
---
Но значения одинаковые потому что не у всех позиций справочника есть расхождения, в моем понимании
---
в справочнике посмотри длина и точность реквизита Расценка какие?
---
Длина 11, точность 2
---
ВыборкаОбъект = Выборка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = 1565,12;
ВыборкаОбъект.Записать();
проверь этот код посмотри записывается число 1565,12
---
Сейчас добавил следующий код:
Что-то я уже совсем не понимаю почему так происходит:
Сначала попробовал так:

```1c
    ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ВыборкаОбъект.Расценка = 1565.12;
    //ВыборкаОбъект.Расценка = Формула;
    ВыборкаОбъект.Записать();
```

Данные не поменялись
Затем так

```1c
    ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ВыборкаОбъект.Расценка = 30;
    //ВыборкаОбъект.Расценка = Формула;
    ВыборкаОбъект.Записать()
```
;
Данные не поменялись.
И затем так, как я пробовал в первый раз:

```1c
    ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ВыборкаОбъект.Расценка =ВыборкаОбъект.Расценка+ 30;
    //ВыборкаОбъект.Расценка = Формула;
    ВыборкаОбъект.Записать()
```
;
Данные поменялись
---
ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
                ВыборкаОбъект.Расценка = 1;
                ВыборкаОбъект.Записать();
а когда так тогда меняется?
---
Дак вот, я сделал

```1c
    ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ВыборкаОбъект.Расценка =ВыборкаОбъект.Расценка+ 30;
    //ВыборкаОбъект.Расценка = Формула;
    ВыборкаОбъект.Записать()
```

таким образом, и подумал что это будет идентичным вашему варианту.
Сейчас откачу все то, что назаписывал в справочник и попробую
---
ВыборкаОбъект = Выборка.ПолучитьОбъект();
 ВыборкаОбъект.Расценка = Число(Формула);
 ВыборкаОбъект.Записать();
так попробуй
---
Все равно не перезаписываются значения
---
может я сам посмотрю если это здесь не запрешено?
---
так просто не может быть что типы одинакывые и значение не записывается. Значить в момент записи какое то условие не дает записать новое значение
---
Написал вам в ЛС
---
Выражаю огромную благодарность пользователю с ником Elnur54442.
Ошибка была в том, что я не добавил условие записи в одну из веток условия. Вот рабочий код. Может кому-нибудь пригодится

```1c
    РасценкиЗапись = Новый Запрос
    ("ВЫБРАТЬ
    | Работы.Ссылка как Ссылка,
    | Работы.Код,
    | Работы.Наименование,
    | Работы.Расценка,
    | Работы.НормаЧасов,
    | Работы.Родитель
    |ИЗ
    | Справочник.Работы КАК Работы
    |ГДЕ
    | Работы.ЭтоГруппа = Ложь И
    | Работы.ПометкаУдаления = Ложь");
    Выборка = РасценкиЗапись.Выполнить().Выбрать();

    //Выборка = Справочники.Работы.Выбрать();
    Пока Выборка.Следующий() Цикл
    Если Найти(НРег(Выборка.Наименование), "набор арматуры")
    ИЛИ Найти(НРег(Выборка.Наименование), "обрыв перемычки")
    Тогда Продолжить;
    КонецЕсли;
    Если Найти(НРег(Выборка.Родитель.Родитель.Наименование), "праздничные")
    ИЛИ Найти(НРег(Выборка.Родитель.Родитель.Родитель.Наименование), "праздничные") Тогда
    Если Найти(Выборка.Наименование, "вулканизац") Тогда
    Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
    Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
    Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
    ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ВыборкаОбъект.Расценка = Формула;
    ВыборкаОбъект.Записать();
    ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
    Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
    Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
    Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
    ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ВыборкаОбъект.Расценка = Формула;
    ВыборкаОбъект.Записать();
```