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

Изменение разрядности числа

Автор бухг123, 10 июл 2015, 13:25

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

бухг123

Всем привет.
Столкнулся с проблемой ОграничениеТипа в табличной части. Если кто что знает пишите.

Задача такая:
В табличной части документа есть реквизит "Ручная скидка" тип у реквизита "Число" необходимо чтобы разрядность этого реквизита менялась в зависимости от того какой результат процента будет возвращен в данный реквизит.

- Самому реквизиту табличной части установил разрядность 16,14
- В процедуру ПриСозданииНаСервере этому элементу через метод ОграничениеТипа установил разрядность 10,2.

Как можно добиться ОграничениеТипа для реквизита табличной части? (Ограничение нарушается в табличной части)

Более наглядно в обработке "Изменение разрядности числа" и файле word пояснение по задаче

Обработка по задаче - обработка

Пояснение - пояснение по задаче

BotMan

Пока Прав(ЧислоСтрокой,1)="0" Цикл ЧислоСтрокой=Лев(ЧислоСтрокой, СтрДлина(ЧислоСтрокой)-1);КонецЦикла;

бухг123

Цитата: BotMan от 10 июл 2015, 13:32
Пока Прав(ЧислоСтрокой,1)="0" Цикл ЧислоСтрокой=Лев(ЧислоСтрокой, СтрДлина(ЧислоСтрокой)-1);КонецЦикла;


Поясните пожалуйста где вы видите такой код. Т.к куда вы его хотели бы вставить?

Предполагаю что ограничение реквизита табличной части можно добиться либо каким то еще методом. Либо по другому изначально. Но пока в голову ничего не приходит.
- Думал создавать ТЧ программно. Но тут проблема в том что тогда все процедуры табличной части придется привязывать к программно созданной табличной части.
- Также думал может попробовать создать еще одну колонку которая будет будет иметь разрядность 10, 2 потом менять одну на другую, но и тут могут быть проблемы. А если первая строка с большой дробной частью вторая с маленькой. Тогда как их выводить пользователю.

BotMan

я дал вам тело функции которая убирает последние нули. я понял, что вам они не нужны, так?

бухг123

Цитата: BotMan от 10 июл 2015, 13:47
я дал вам тело функции которая убирает последние нули. я понял, что вам они не нужны, так?
Да, последние нули не нужны.

Решил попробовать ваш способ. Сделал так


     Если ДанныеСтроки.РучнаяСкидка > 0 Тогда
ОбработатьПроцент(ДанныеСтроки.РучнаяСкидка);
ОбработатьРазрядностьРеквизита(ЧислоРазрядов, Элемент.Имя);

ЧислоСтрокой = ДанныеСтроки.РучнаяСкидка;
Пока Прав(ЧислоСтрокой,1)="0" Цикл
ЧислоСтрокой=Лев(ЧислоСтрокой, СтрДлина(ЧислоСтрокой)-1);
КонецЦикла;
ДанныеСтроки.РучнаяСкидка = Число(ЧислоСтрокой);

КонецЕсли;

Но нет. Все равно при переходе на другой реквизит пользователь видит разрядность реквизита установленную в конфигураторе

cska-fanat-kz

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

бухг123

Цитата: cska-fanat-kz от 10 июл 2015, 13:53
Может быть ПриВыводеСтроки() применить и изменить текст в ячейке в зависимости от текущей разрядности.

Пробовал. Пробовал изменять все события табличной части и строки. Но как только изменяешь реквизит ТЧ все тут же сбивается.

BotMan

ручнаяскидка = 0.03000000;
Пока Прав(ручнаяскидка ,1)="0" Цикл ручнаяскидка =Лев(ручнаяскидка , СтрДлина(ручнаяскидка )-1);КонецЦикла;


покажет ручкая скидка 0.03

бухг123

Цитата: BotMan от 10 июл 2015, 14:05
ручнаяскидка = 0.03000000;
Пока Прав(ручнаяскидка ,1)="0" Цикл ручнаяскидка =Лев(ручнаяскидка , СтрДлина(ручнаяскидка )-1);КонецЦикла;


покажет ручкая скидка 0.03

Вы правы. В момент получения в табличную часть т.е и в конфигураторе при отладке он покажет 0.03 но дальше когда начинаешь создавать новую строку ТЧ все сбивается.

BotMan

ну не знаю насколько будет правильно, но добавьте цикл на обработку всех строк ТЧ. как много у вас там строк бывает? не видя тяжело тут что-то придумать.

Теги:

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

Рейтинг@Mail.ru

Поиск