|
Подскажите как удобнее хранить величину Долю в Квартире внутри базы 1С | ☑ | ||
---|---|---|---|---|
0
m1_1976
26.11.15
✎
10:58
|
Есть необходимость хранить в ресурсе регистра сведений долю в квартире. А она чаще всего выделена как 5/16, или может быть 35/76...
Потом надо ее еще в число приводить и использовать в расчетах. Как организовать? Доли могут быть разными 7/101 - да! Даже 1/11000 доли... :( В голове только справочник с двумя реквизитами число - ЧИСЛИТЕЛЬ и ЗНАМЕНАТЕЛЬ... и в наименование их "конкатенировать" при записи... Но чего-то мне самому такое решение не очень. Может кто уже делал более красивао? |
|||
1
m1_1976
26.11.15
✎
11:01
|
Или хранить число как строку с форматом типа "NNNN/NNNNN"...
|
|||
2
Лефмихалыч
26.11.15
✎
11:05
|
(0) технически эта задача ни чем не отличается от хранения курсов валют. Там в общем случае тоже два числа - курс и кратность
|
|||
3
Лефмихалыч
26.11.15
✎
11:06
|
ну и раздели в голове хранение от пользовательского представления. Так жить проще сразу станет.
|
|||
4
m1_1976
26.11.15
✎
11:06
|
еще нужно удобство ручного ввода при заполнении картчоки... Курсы валют руками никто давно не заполняет!
пробую через маску 99999/99999... |
|||
5
Лефмихалыч
26.11.15
✎
11:10
|
(4) >Курсы валют руками никто давно не заполняет!
и чо? |
|||
6
m1_1976
26.11.15
✎
11:12
|
(3) да разделил. С маской не удобно. Просто Проверяю при вводе строки вида дроби правильность заполнения...
Закрыто. Спасибо. |
|||
7
spock
26.11.15
✎
11:13
|
(2) Не совсем. В случае с курсами есть общественная договоренность, что курс имеет точность 4 символа + стандартная кратность, при операциях с которым получаем значение с точностью до копеек нац. валюты.
В долях используется обыкновенная дробь, чтобы не приводить к проблемам округления, при операциях. Округление будет выполняться всегда в самом конце, когда будет рассчитываться денежный эквивалент в нац. валюте с известными ограничениями. Пример с 1/3 <> 0.333 + 0.333 + 0.333 показателен, и кратность здесь не сильно спасет. |
|||
8
stix2010
26.11.15
✎
11:15
|
(0) 1/11000 - это че хатой 11 000 чел владеют?
|
|||
9
Лефмихалыч
26.11.15
✎
11:15
|
![]() ... |
|||
10
Лефмихалыч
26.11.15
✎
11:16
|
(8) это одному принадлежит 1/11000, а второму - все остальное
|
|||
11
m1_1976
26.11.15
✎
11:16
|
(8) Вот такие бывают. Да... :( прописка в РФ - когда то это было важно.
|
|||
12
Лодырь
26.11.15
✎
11:17
|
За числитель и знаменатель. Такой формат хранения позволит в запросе чтото считать.
|
|||
13
VikingKosmo
26.11.15
✎
11:18
|
(8) нормальная таджикская квартира...
|
|||
14
m1_1976
26.11.15
✎
11:18
|
(12) в виде числа каждый?
наверное добавлю и хранение текстового вида. И два числа. Всегда пригодиться. Верно. Спасибо |
|||
15
m1_1976
26.11.15
✎
11:19
|
Закрыто.
Спасибо. |
|||
16
Лефмихалыч
26.11.15
✎
11:23
|
(14) >добавлю и хранение текстового вида
тогда в передЗаписью набора записей надо втрумлять проверку на соответствие строкового преставления числовым значениям. Или там же без проверки всегда строковое представление апдэйтить. Избыточность - она, бессердечная сука, всегда дорого обходится... |
|||
17
m1_1976
26.11.15
✎
11:41
|
Вот так сделал.
Это модуль формы записи регистра. Процедура АктиввироватьДОлю() Предупреждение("Доля всегда должна вводиться в виде ЧИСЛО / ЧИСЛО"); ЭтаФорма.ТекущийЭлемент = ЭтаФорма.ЭлементыФормы.Доля; КонецПроцедуры Функция ТолькоЦифры(СтрокаПроверяемая) СтрокаПроверяемая = СТРЗаменить(СтрокаПроверяемая," ",""); ДЛя а1 =1 по СтрДлина(СтрокаПроверяемая) Цикл если Найти("0123456789",Сред(СтрокаПроверяемая,а1,1)) = 0 Тогда Возврат ЛОЖЬ; Конецесли; КонецЦикла; Возврат Истина; КонецФункции // ТолькоЦифры(СтрокаПроверяемая) Процедура ДоляПриИзменении(Элемент) Симвпалки = Найти(Доля,"/") ; Если Симвпалки = 0 Тогда АктиввироватьДОлю(); Возврат; Конецесли; // наклонная палка есть! ЛЕВ_Число = ЛЕВ(Доля,Симвпалки-1); ПравЧисло = Сред(Доля,Симвпалки+1); Если ПустаяСтрока(ЛЕВ_Число) или ПустаяСтрока(ПравЧисло) Тогда АктиввироватьДОлю(); Возврат; Конецесли; /////////////////////////////// Если (НЕ ТолькоЦифры(ЛЕВ_Число)) или (НЕ ТолькоЦифры(ПравЧисло)) ТОгда АктиввироватьДОлю(); Возврат; Конецесли; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |