Доброго времени суток. Дело в следующем: Добавил в справочник новую кнопку, при нажатии которой открывается внешняя обработка:
Далее, в обработке две функции: 1 - найти расхождения в фактических данных и данных, которые забиты в справочник + показать их; 2 - перезаписать расхождения
Первая функция отрабатывает, все расхождения видны, а вот записать полученные данные не удается. Прошу подсказать в чем причина. Код:
кнопка просмотра расхождений:
кнопка записи:
Процедура ИзменитьРасценкиНажатие(Элемент)
ОткрытьОбработку = ВнешниеОбработки.Создать("C:\Работы.epf");
ОткрытьФорму=ОткрытьОбработку.ПолучитьФорму("Форма");
ОткрытьФорму.Открыть();
КонецПроцедуры
Далее, в обработке две функции: 1 - найти расхождения в фактических данных и данных, которые забиты в справочник + показать их; 2 - перезаписать расхождения
Первая функция отрабатывает, все расхождения видны, а вот записать полученные данные не удается. Прошу подсказать в чем причина. Код:
кнопка просмотра расхождений:
Расценки = Новый Запрос
("ВЫБРАТЬ
| Работы.Код,
| Работы.Наименование,
| Работы.Расценка,
| Работы.НормаЧасов,
| Работы.Родитель
|ИЗ
| Справочник.Работы КАК Работы
|ГДЕ
| Работы.ЭтоГруппа = Ложь И
| Работы.ПометкаУдаления = Ложь");
Выборка = Расценки.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Найти(НРег(Выборка.Наименование), "набор арматуры")
ИЛИ Найти(НРег(Выборка.Наименование), "обрыв перемычки")
ИЛИ Найти(НРег(Выборка.Наименование), "мат 1000х1000 (вулкнизация)")
Тогда Продолжить;
КонецЕсли;
Если Найти(НРег(Выборка.Родитель.Родитель.Наименование), "праздничные")
ИЛИ Найти(НРег(Выборка.Родитель.Родитель.Родитель.Наименование), "праздничные") Тогда
Если Найти(Выборка.Наименование, "вулканизац") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
Показатькнопка записи:
Выборка = Справочники.Работы.Выбрать();
Пока Выборка.Следующий() Цикл
Если Найти(НРег(Выборка.Наименование), "набор арматуры")
ИЛИ Найти(НРег(Выборка.Наименование), "обрыв перемычки")
ИЛИ Найти(НРег(Выборка.Наименование), "мат 1000х1000 (вулкнизация)")
Тогда Продолжить;
КонецЕсли;
Если Найти(НРег(Выборка.Родитель.Родитель.Наименование), "праздничные")
ИЛИ Найти(НРег(Выборка.Родитель.Родитель.Родитель.Наименование), "праздничные") Тогда
Если Найти(Выборка.Наименование, "вулканизац") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
ВыборкаОбъект = Выборка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать();
ПоказатьПо теме из базы знаний
- Загрузка данных из табличного документа в справочники, документы, планы видов характеристик, планы видов расчетов, планы счетов, бизнес-процессы, задачи, в движения документов, поточная загрузка документов (EXCEL, управляемые формы, универсальная)
- Журнал регистрации изменений во внешней информационной базе 1С
- Учет розничных продаж по менеджерам. УТ 10.3
- Необычное решение для хранения настроек внешней обработки
- Загрузка данных из внешних файлов в документ Перемещение товаров (ERP 2, КА 2, УТ 11)
Найденные решения
(11) (1)
Тут только вторая формула будет записываться.
Если Найти(Выборка.Наименование, "вулканизац") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
ВыборкаОбъект = Выборка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать();
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
ВыборкаОбъект = Выборка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать();
Тут только вторая формула будет записываться.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(11) (1)
Тут только вторая формула будет записываться.
Если Найти(Выборка.Наименование, "вулканизац") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
ВыборкаОбъект = Выборка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать();
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
ВыборкаОбъект = Выборка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать();
Тут только вторая формула будет записываться.
ВЫБРАТЬ
| Работы.Ссылка как Ссылка,
| Работы.Код,
| Работы.Наименование,
| Работы.Расценка,
| Работы.НормаЧасов,
| Работы.Родитель
|ИЗ
| Справочник.Работы КАК Работы
|ГДЕ
| Работы.ЭтоГруппа = Ложь И
| Работы.ПометкаУдаления = Ложь
ПоказатьИ вот уже Выборка.Ссылка.ПолучитьОбъект()
ВыборкаОбъект = Выборка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = 1;
ВыборкаОбъект.Записать();
Вы сначало попрбуйте так . Посмотрите значение реквизита можете поменять. Если да тогда проблема в формуле иначе напишите посмотрим в чем проблема дальще
(35)
Сейчас добавил следующий код:
Что-то я уже совсем не понимаю почему так происходит:
Сначала попробовал так:
Данные не поменялись
Затем так
;
Данные не поменялись.
И затем так, как я пробовал в первый раз:
;
Данные поменялись
Сейчас добавил следующий код:
Что-то я уже совсем не понимаю почему так происходит:
Сначала попробовал так:
ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = 1565.12;
//ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать();
Данные не поменялись
Затем так
ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = 30;
//ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать()
Данные не поменялись.
И затем так, как я пробовал в первый раз:
ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
ВыборкаОбъект.Расценка =ВыборкаОбъект.Расценка+ 30;
//ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать()
Данные поменялись
(37)
Дак вот, я сделал
таким образом, и подумал что это будет идентичным вашему варианту.
Сейчас откачу все то, что назаписывал в справочник и попробую
Дак вот, я сделал
ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
ВыборкаОбъект.Расценка =ВыборкаОбъект.Расценка+ 30;
//ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать()
таким образом, и подумал что это будет идентичным вашему варианту.
Сейчас откачу все то, что назаписывал в справочник и попробую
(42)
Выражаю огромную благодарность пользователю с ником Elnur54442.
Ошибка была в том, что я не добавил условие записи в одну из веток условия. Вот рабочий код. Может кому-нибудь пригодится
Выражаю огромную благодарность пользователю с ником Elnur54442.
Ошибка была в том, что я не добавил условие записи в одну из веток условия. Вот рабочий код. Может кому-нибудь пригодится
РасценкиЗапись = Новый Запрос
("ВЫБРАТЬ
| Работы.Ссылка как Ссылка,
| Работы.Код,
| Работы.Наименование,
| Работы.Расценка,
| Работы.НормаЧасов,
| Работы.Родитель
|ИЗ
| Справочник.Работы КАК Работы
|ГДЕ
| Работы.ЭтоГруппа = Ложь И
| Работы.ПометкаУдаления = Ложь");
Выборка = РасценкиЗапись.Выполнить().Выбрать();
//Выборка = Справочники.Работы.Выбрать();
Пока Выборка.Следующий() Цикл
Если Найти(НРег(Выборка.Наименование), "набор арматуры")
ИЛИ Найти(НРег(Выборка.Наименование), "обрыв перемычки")
Тогда Продолжить;
КонецЕсли;
Если Найти(НРег(Выборка.Родитель.Родитель.Наименование), "праздничные")
ИЛИ Найти(НРег(Выборка.Родитель.Родитель.Родитель.Наименование), "праздничные") Тогда
Если Найти(Выборка.Наименование, "вулканизац") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("5-разряд (Сде-щики СОВ)"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка, 2);
ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать();
ИначеЕсли Найти(Выборка.Наименование, "шероховка") Тогда
Отбор = Новый Структура("Разряд", Справочники.ТарифныеСетки.НайтиПоНаименованию("2-разряд (Сде-щики СН"));
Расчет = РегистрыСведений.РазрядыТарифныхСеток.СрезПоследних(ТекущаяДата(), Отбор);
Формула= Окр(2*Выборка.НормаЧасов * Расчет[0].Ставка,2);
ВыборкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
ВыборкаОбъект.Расценка = Формула;
ВыборкаОбъект.Записать();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот