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

Автоматический расчет суммы, на форме документа.

Автор AIBOLIT47, 05 мая 2014, 19:58

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

AIBOLIT47

Всем привет.
Я студент, поэтому по знаниям не судите строго, к тому же с 1С:Предприятием 8.2 знаком всего 3 месяца. За все это время знакомства успел сделать конфигурацию "Ремонт оборудования" :zebzdr: и то по инструкционной карте :^454^:
Исходя из этого шаблона и знаний собственного любопытства :xfbnsdfb: сейчас разрабатываю конфигурацию связанная с тематикой ломбарда (курсовое проектирование),  и застрял при попытки создания автоматизации на Форме Документа, а именно автоматический расчет суммы на самой форме.
Пример заполнения формы документа см. - 1.jpg и 2.jpg
Суть такова, этот документ "Акт Залогового билета" заполняется на основе записи Справочника "Товары". Мне необходимо, чтобы "Сумма выкупа залога" автоматически высчитывалась по формуле после выбора "Тарифной ставки" (При выборе Тарифной ставки в поле "Процент" сразу заносится число).

Формула:
СуммаВыкупаЗалога = (Процент/100 * ОцененнаяСтоимость) + ОцененнаяСтоимость

Я знаю как привязать эту формулу, если работать через Табличную часть, но мне нужно что бы эта формула работала на самой форме документа.
Поиски за ответом привили к такому коду, но в нем явно есть косяки, в чем не могу понять.

&НаКлиенте
Процедура РасчетСуммыВыкупа()
Объект.СуммаВыкупаЗалога = (Объект.Процент * Объект.ОцененнаяСтоимость) + Объект.ОцененнаяСтоимость;
КонецПроцедуры

&НаКлиенте
Процедура ПроцентПриИзменении(Элемент)
РасчетСуммыВыкупа();
КонецПроцедуры

&НаКлиенте
Процедура ОцененнаяСтоимостьПриИзменении(Элемент)
РасчетСуммыВыкупа();
КонецПроцедуры


Как я понимаю, чтобы формула срабатывала ей необходимы текущие данные, а как это указать и где прописать, я не понимаю. Подскажите как сделать чтобы данная формула заработала на этой форме. Заранее спасибо.

Извините за косяки при оформлении, впервые на этом форуме и еще не разобрался здесь что к чему.

cska-fanat-kz

ну все правильно написано (если закрыть глаза на то, что на 100 не делите).
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

AIBOLIT47

Цитата: cska-fanat-kz от 06 мая 2014, 04:12
ну все правильно написано (если закрыть глаза на то, что на 100 не делите).

Спасибо за новость про правильный код, но по поле вывода "Сумма выкупа залога" все равно не выдает ответ. Может я событие не правильное выбрал, но какие тогда?
По сути в поля "Оцененная стоимость" и "Процент" я ни чего не ввожу, они заполняются автоматически. "Оцененная стоимость" вбивается, когда форма документа открывается на основе одного товара из списка в справочнике (От туда он берет значение "Оцененная стоимость"). А процент как я уже написал заносится в зависимости от выбранной тарифной ставки.
Может у кого нибудь есть еще варианты или кто-то сталкивался уже с подобной ситуацией?
Добавлено: 06 мая 2014, 07:09


Цитата: AIBOLIT47 от 06 мая 2014, 06:41

Спасибо за новость про правильный код, но по поле вывода "Сумма выкупа залога" все равно не выдает ответ. Может я событие не правильное выбрал, но какие тогда?
По сути в поля "Оцененная стоимость" и "Процент" я ни чего не ввожу, они заполняются автоматически. "Оцененная стоимость" вбивается, когда форма документа открывается на основе одного товара из списка в справочнике (От туда он берет значение "Оцененная стоимость"). А процент как я уже написал заносится в зависимости от выбранной тарифной ставки.
Может у кого нибудь есть еще варианты или кто-то сталкивался уже с подобной ситуацией?

Сейчас создал другой документ, опробовал код еще раз, все работает. Создал я три реквизита "Процент", "ТарифнаяСтавка" и "СуммаВыкупаЗалога" и тип события "при изменении" поставил, код все сработало.
Сейчас в свой код к объектам, указал путь к данным, вот что получилось:


&НаКлиенте
Процедура РасчетСуммыВыкупа()
Объект.СуммаВыкупаЗалога = (Объект.ТарифнаяСтавка.Процент * Объект.Товар.ОцененнаяСтоимость) + Объект.Товар.ОцененнаяСтоимость;
КонецПроцедуры

&НаКлиенте
Процедура ПроцентПриИзменении(Элемент)
РасчетСуммыВыкупа();
КонецПроцедуры

&НаКлиенте
Процедура ОцененнаяСтоимостьПриИзменении(Элемент)
РасчетСуммыВыкупа();
КонецПроцедуры

aleon

Не очень понял, ты меняешь тарифную ставку а событие указываешь при изменении процента. Я бы попробовал событие обработка выбора тарифной ставки. обработал, установил процент, пересчитал сумму. Чтобы все по человечески работало.

cska-fanat-kz

Расчет суммы у Вас стоит в событиях ПриИзменении полей Процент и ОцененнаяСтоимость.
Оно срабатывает если непосредственно в этих полях изменить значения.
А вот если заполнение этих полей происходит "извне", то событие естественно не сработает.
Нужно именно в тех местах где происходит изменение вышеназванных полей (например как я понимаю в ПриОткрытии()) вызывать метод РасчетСуммыВыкупа();

Объект.СуммаВыкупаЗалога = (Объект.ТарифнаяСтавка.Процент * Объект.Товар.ОцененнаяСтоимость) + Объект.Товар.ОцененнаяСтоимость;
В этом месте система ругнется (во всяком случае должна ;) ). Реквизиты через точку (".Процент" и ".ОцененнаяСтоимость") нужно получать только на сервере.
Да и не нужно этого делать - все данные у вас есть на форме (если конечно уточнить путь к данным полей Процент и ОцененнаяСтоимость).
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

2Casp

Цитата: AIBOLIT47 от 05 мая 2014, 19:58Суть такова, этот документ "Акт Залогового билета" заполняется на основе записи Справочника "Товары". Мне необходимо, чтобы "Сумма выкупа залога" автоматически высчитывалась по формуле после выбора "Тарифной ставки" (При выборе Тарифной ставки в поле "Процент" сразу заносится число).
Добрый день!
Если я правильно понял, Вы не можете получить данные из базы данных на клиенте.

&НаКлиенте
Процедура РасчетСуммыВыкупа()
   Объект.СуммаВыкупаЗалога = (Объект.ТарифнаяСтавка.Процент * Объект.Товар.ОцененнаяСтоимость) + Объект.Товар.ОцененнаяСтоимость;
КонецПроцедуры

Тут часть необходимо выполнить на сервере

AIBOLIT47

Ура получилось!!!:ooifh: Спасибо всем кто откликнулся и протянул руку помощи.

Да кстати о коде, вот код, если у кого то возникла такая же ситуация:

&НаСервере
Процедура РасчетСуммыВыкупа()
   Объект.СуммаВыкупаЗалога = (Объект.ТарифнаяСтавка.Процент/100 * Объект.Товар.ОцененнаяСтоимость) + Объект.Товар.ОцененнаяСтоимость;
КонецПроцедуры


&НаКлиенте
Процедура ТарифнаяСтавкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
РасчетСуммыВыкупа();
КонецПроцедуры

&НаКлиенте
Процедура ТарифнаяСтавкаПриИзменении(Элемент)
РасчетСуммыВыкупа();
КонецПроцедуры

&НаКлиенте
Процедура ТоварПриИзменении(Элемент)
РасчетСуммыВыкупа();
КонецПроцедуры

&НаКлиенте
Процедура ТоварНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
РасчетСуммыВыкупа();
КонецПроцедуры


Событие "При Изменении" должно быть обязательно, так как без него формула срабатывает не сразу, то есть выбираем из списка значение, а система высчитывает формулу по предыдущему значению. И события в данном случае должны быть указанны не на "переменные" а на их справочнике, это как я понял. Спасибо всем за помощь!

cska-fanat-kz

Не совсем правильно. Данные для расчетов должны быть на форме. А у вас для их получения приходится обращаться на сервер.
Это не есть гуд.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

Зачем Вам событие НачалоВыбора()?? События ПриИзменении() вполне достаточно.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

AIBOLIT47

Цитата: cska-fanat-kz от 06 мая 2014, 19:10
Зачем Вам событие НачалоВыбора()?? События ПриИзменении() вполне достаточно.

И вправду, спасибо. Сейчас убрал не нужный код и все вполне отлично работает. Учту в следующий раз.

Теги:

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

Рейтинг@Mail.ru

Поиск