Как изменить количество разрядов в поле табличной части документов

1. newborn 09.12.16 17:12 Сейчас в теме
Сильно переделанная конфа.
В ППВ табличной части расшифровка платежа есть реквизит Курс. В конфигураторе добавили количество разрядов в это поле. Но на форме количество разрядов должно зависить от значения константы. Никак не могу это сделать. Пробовал через условное оформление. Не получилось.
Что я делаю не так?
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. lefthander 10.12.16 12:08 Сейчас в теме
(1)можно попробовать завести реквизит ТЧ курса с другой разрядностью, и показывать на форме в зависимости от константы нужную колонку. Это конечно костыль, но в чем смысл разной разрядности? можно курс в зависимости от константы округлять до нужного разряда, тогда оставшиеся разряды будут нулевые.
4. newborn 10.12.16 12:49 Сейчас в теме
(3)
Ню, буду иметь в виду такое решениее. Хотя, конечно, это некрасиво и может потребовать допонительного кода, если от содержания поля Курс может зависеть другие реквизиты.
5. alxarz 31 10.12.16 15:43 Сейчас в теме
(4) так у этого поля же есть свойство формат - меняйте его и будет нужное количество знаков отображаться
6. newborn 10.12.16 17:52 Сейчас в теме
(5)
Вот я попробовал. Нифига. Есть примеры кода?
7. lefthander 10.12.16 18:21 Сейчас в теме
(6)учитывая совет из (4) можно попробовать на форме реквизит создать и управлять разрядностью через константу, и писать курс в реквизит объекта.
8. alxarz 31 10.12.16 21:07 Сейчас в теме
(6) а) если менять через конфигуратор - изменения происходят?
б) после того как пробовали менять, вызывали что-то типа форма.обновить() ?
9. newborn 10.12.16 21:53 Сейчас в теме
(8)
И из конфигуратора тоже пробовал. А вот из меню формы [Изменить форму]. Получилось. Но - получилось насовсем. Я там изменил разрядность. Но это не то, что нужно, ибо непрограммно, а ручками...
11. starik-2005 3036 10.12.16 23:43 Сейчас в теме
(1) есть у поля такая штука, как ограничение типа.
karpik666; +1 Ответить
13. newborn 11.12.16 12:44 Сейчас в теме
(11)
И как эта штука влияет на мою задачу?
2. newborn 10.12.16 11:01 Сейчас в теме
10. as 10.12.16 22:51 Сейчас в теме
Что вы в константе собираетесь ставить и какой тип?
Обычно проблема с недостаточной разрядностью решается указанием кратности курса валюты. В каждой валюты может быть своя кратность, притом может меняться с течением времени.
12. newborn 11.12.16 12:43 Сейчас в теме
(10)
Нет, константа булева. Клиент сформулировал задачу так: нужно увеличить разрадность поля Курс и по константе изменять видимость разрядов на форме. Все два возможных состояния.
14. newborn 13.12.16 16:08 Сейчас в теме
Блин, так ничего и не получилось. Изменить разрядность числа в поле табличной части на управляемой форме не получается. Релиз платформы 8.3.8.1933
16. starik-2005 3036 13.12.16 17:26 Сейчас в теме
(14) а что не так с ограничением типа?
Прикрепленные файлы:
18. newborn 13.12.16 17:34 Сейчас в теме
(16)
Код дай. У меня не получилось.
19. starik-2005 3036 13.12.16 17:41 Сейчас в теме
(18) ну попробуй сам. Фактически тебе в элемент формы нужно записать ограничение типа, и если это табличная часть, то в свойство "формат" элемента нужно записать соответствующую форматную строку. Типа если константа = истина тогда элемент.ограниченитипа = ...; элемент.формат = "..." иначе ...
21. newborn 13.12.16 17:52 Сейчас в теме
(19)
Дык я пробовал так. В том-то и дело, что не получилось.
22. spacecraft 13.12.16 18:05 Сейчас в теме
(21) чтобы в табличной части сработало, нужно установить формат, причем на сервере. Если делать на клиенте, то требуется ОбновитьИнтерфейс.
Разрядность = 15;
РазрядностьДробнойЧасти = 5;
Элементы.ИмяТЧНаФорме.ПодчиненныеЭлементы.ИмяТЧНаФормеИмяКолонки.Формат = "ЧЦ="+Разрядность +"; ЧДЦ="+РазрядностьДробнойЧасти;
23. newborn 13.12.16 18:08 Сейчас в теме
26. starik-2005 3036 13.12.16 18:43 Сейчас в теме
(23) и стоит иметь ввиду, что при изменении разрядности если не использовать ограничения типа, то будет так:
Прикрепленные файлы:
24. starik-2005 3036 13.12.16 18:35 Сейчас в теме
(22) зачем так много точек-то?
Элементы.ТаблицаЧисло1.Формат = "...";
И, да... У меня все и на клиенте работает.
Прикрепленные файлы:
25. spacecraft 13.12.16 18:37 Сейчас в теме
(24) согласен. Но суть от этого не меняется.
27. spacecraft 13.12.16 18:53 Сейчас в теме
(24) для самого документа с его ТЧ работает и на клиенте.
Я пробовал во внешней обработке, со ссылкой. Там и требовался сервер.
28. starik-2005 3036 13.12.16 19:36 Сейчас в теме
(27) тоже это во внешней обработке делал - сервер дергать оказалось не нужно. Платформа 8.3.9.какая-то-там.
29. spacecraft 13.12.16 19:47 Сейчас в теме
(28) потому что ТЧ самой обработки. Я же использовал ссылку. И ТЧ на форме была от ссылки.
17. starik-2005 3036 13.12.16 17:31 Сейчас в теме
(14) с табличной частью то же самое + формат.
15. SGordon1 13.12.16 16:15 Сейчас в теме
3 сообщение по моему Ваш случай... А программно добавить в ТЧ свою колонку не получится?
20. newborn 13.12.16 17:50 Сейчас в теме
(15) Разрядность поля табличной части зависит только от количества знаков после запятой в описании этого поля в конфигураторе. Во вском случае я это проверял на платформе 8.3.8.1933.
30. karpik666 3774 13.12.16 20:07 Сейчас в теме
Жесть какая-то, а чем такой код не устраивает?
Элементы.Реквизит1.ОграничениеТипа = Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(Разрядность,РазрядностьДробнойЧасти));

Все прекрасно работает на клиенте, а что константа была доступна на клиенте ее можно поместить в параметры сеанса, либо при создании формы получать, и кэшировать ее значение.
31. spacecraft 13.12.16 20:14 Сейчас в теме
(30) без Формат для табличной части не изменится отображение.
32. karpik666 3774 13.12.16 20:42 Сейчас в теме
(31) что-то такого не помню, ну если так. то что мешает использовать команду "Обновить" для конкретного элемента формы, а не с помощью "ОбновитьИнтерфейс"?
33. spacecraft 13.12.16 20:50 Сейчас в теме
(32) да как бы уже определились. Для родной ТЧ все работает.
Не хочу повторяться. Лучше еще раз перечитать все сообщения.
34. newborn 03.01.17 00:24 Сейчас в теме
Выбрал время, чтобы проверить всё. (Делать нефиг на праздники, да?!)
Так вот, всё, что вы мне посоветовали действительно работает, когда речь идёт о таблице на форме или о табличной части внешней обработки. Для документа это не действует. Или действует не совсем. На рисунке видно, что если начинаешь редактировать элемент, то Формат и ОграничениеТипа срабатывает.
Код применил вот такой

	Если _аКонстатнта Тогда
	
		Разрядность = 6;
		РазрядностьДробнойЧасти = 1;
		Элементы.Товары.ПодчиненныеЭлементы.ТоварыКоличество.ОграничениеТипа = Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(Разрядность,РазрядностьДробнойЧасти));
		Элементы.Товары.ПодчиненныеЭлементы.ТоварыКоличество.Формат = "ЧЦ="+Разрядность +"; ЧДЦ="+РазрядностьДробнойЧасти;
		Элементы.Товары.Обновить();	
	
	КонецЕсли;
	
	ОбновитьИнтерфейс();
Показать


Там два раза я пытался обновить внешний вид, так это я пробовал, может хоть какой-нибудь метод сработает.
Ещё раз: во внешней обработке это работает. Для табличной части документа - нет.
Прикрепленные файлы:
35. spacecraft 03.01.17 01:43 Сейчас в теме
(34) все работает и для табличной части документа. В каком обработчике используете?
Условие убрать пробовали?
Достаточно вот этого кода (разрядность только подставить):
Элементы.ТоварыКоличество.Формат = "ЧЦ=10; ЧДЦ=2";
Элементы.ТоварыКоличество.ОграничениеТипа = Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(10,2));
Элементы.Товары.Обновить();


Если _аКонстатнта Тогда
Это опечатка в коде?
36. newborn 03.01.17 01:52 Сейчас в теме
(35) Oleg Space
Я на картинке показал ситуацию. На первой строке 10 знаков после запятой, на второй - та, где количество в данный момент редактируется - 1 знак после запятой. Это документ.
Условие "Если _аКонстатнта Тогда" - это в принципе по задаче надо: если константа выставлена, то уменьшаем количество знаков.
Платформа 8.3.9.1850
Ставил и в ПриСозданииНаСервере() и в ПриОткрытии(), т.е. и на сервере и на клиенте.
Если выложишь тестовую конфу с работающим кодом, буду очень благодарен.
37. spacecraft 03.01.17 01:59 Сейчас в теме
(36) на пустой конфе с одним документом все работает.
Для начала, убрать проверку на время тестирования.
Код поместить в ПриОткрытии() в самый конец.
39. newborn 03.01.17 02:02 Сейчас в теме
(37) Oleg Space
А я, кстати, пробовал и в конец процедуры ПриОткрытии() ставить.
38. newborn 03.01.17 02:00 Сейчас в теме
Там впереди такая строка

_аКонстатнта = Константы._аКонстатнта.Получить();

Я тут подумал: а может быть в коде как-то заблокировано необходимое мне изменение вида поля формы? Тогда какой это может быть код?
40. spacecraft 03.01.17 02:04 Сейчас в теме
(38) _аКонстатнта это реквизит формы документа, или Перем в коде?
41. newborn 03.01.17 02:05 Сейчас в теме
(40) Oleg Space
Реквизит формы.
Люди уже как-то обошлись без этого. Просто мне самому непонятно, почему так происходит...
42. spacecraft 03.01.17 02:06 Сейчас в теме
(41) убирать проверку пробовали?
43. newborn 03.01.17 02:10 Сейчас в теме
(42) Oleg Space
Не пойму, на что это повлияет...
Нет не пробовал, но я не вижу смысла. Я отладчиком смотрел - сам по себе код выполняется. Отлавливаю в отладчике состояние элемента поля формы ПриИзменении элемента ТоварыКоличество - так там и свойства Формат и ОграничениеТипа стоят именно те, которые я проставляю: 6-1.
44. spacecraft 03.01.17 02:41 Сейчас в теме
(43) при отладке желательно исключить все возможные неопределенности.
Для колонки на форме в свойствах Формат указан? Если указан, попробуйте убрать.
Ну и версия платформы не исключается.
На 8.3.9.1818 работает.
45. newborn 03.01.17 10:27 Сейчас в теме
(44) Oleg Space
Нет ничего такого
46. spacecraft 03.01.17 10:51 Сейчас в теме
(45) тогда надо смотреть саму конфигурацию.
Может там не реквизит табличной части "Количество" выводится, а (например) КоличествоУпаковок.
Попробовал на типовых. Все работает.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот