Константы, не объект конфигурации

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. user1342811 18 09.09.23 10:03 Сейчас в теме
Доброго времени суток.
Хотелось бы узнать, кто как обходит ограничение платформы: отсутствие констант в языке 1С. Например, в языке Java, можно объявить переменную как final, после этого она становить неизменяемой. Когда мне нужно сделать, что-то подобное в 1С я делаю что-то типа:
#Область Константы
Функция РАЗДЕЛИТЕЛЬ_СТРОК()
    Возврат " -"
КонецФункции;
#КонецОбласти
Строка = Строка + РАЗДЕЛИТЕЛЬ_СТРОК() + ДругаяСтрока;

Таким способом получается убрать из кода "магические числа".
Интересно, кто как решает эту проблему и вообще может это не является проблемой в 1С?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 09.09.23 15:43 Сейчас в теме
(1) нормальный вариант.
Еще можно использовать фиксированную структуру.
глКонстанты = Новый ФиксированнаяСтруктура("РАЗДЕЛИТЕЛЬ_СТРОК", " -");

Строка = Строка + глКонстанты.РАЗДЕЛИТЕЛЬ_СТРОК + ДругаяСтрока;

Но, нужно учитывать, что глобальные переменные могут быть только на клиенте.
И такую переменную в принципе можно переопределить.

Вариант с функцией, можно ее поместить в общий модуль КлиентСервер и Повт.Использованием. Это самый простой и надежный вариант.
4. user1880116 09.09.23 16:04 Сейчас в теме
(3)
и Повт.Использованием
Сеансовые данные не резиновые. Вот нахрена пихать туда то, что вычисляется быстрее, чем достается из синхронизируемых между рабочими серверами кластера файлов? Очередное "Универсальное решение"?
PlatonStepan; +1 Ответить
12. spacecraft 10.09.23 12:38 Сейчас в теме
(3) в пояснении варианта функции в общем модуле с Повт.Исп., все зависит от вариантов использования таких константных значений.
Примеры таких "константных" значений можно рассматривать ПараметрыКлиентаНаСервере в Параметрах сеанса.
И получение, к примеру, ЭтоВебКлиент() как вариант таких значений. Один раз устанавливается и далее только получается.
2. Gendelf 09.09.23 15:11 Сейчас в теме
Я не понял что он делает и зачем) поясните...
5. user1826630 09.09.23 19:07 Сейчас в теме
(2) Путает переменную с константой. Ничего необычного.
7. user1342811 18 10.09.23 01:33 Сейчас в теме
(5)Нельзя спутать то чего нет. В 1С нет констант, объект конфигурации Константа это не то о чем я говорю.
Константа - способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается. Использование именованных констант — приём, повышающий надёжность и безошибочность программ, позволяя избегать использования «магических чисел».
9. user1342811 18 10.09.23 02:01 Сейчас в теме
(2)А может и не стоит понимать, может оно Вам и не нужно.
Мне интересно узнать мнения, если кому-то не хватает констант, кто как решает эту проблему.
А если всего хватает, то зачем понимать, то чего не нужно.
6. provadyuga 99 09.09.23 19:54 Сейчас в теме
Разделитель строк это
Символы.ПС
8. user1342811 18 10.09.23 01:53 Сейчас в теме
(6) У меня в примере разделитель строк это " -", это просто для примера. Может быть так " <" + Символ.ВК, вообще может быть все что угодно.
Это просто пример без смысловой нагрузки.
10. user1880116 10.09.23 09:33 Сейчас в теме
(8)
без смысловой нагрузки.
Вот в этом вот всё и дело.

Сделай над собой усилие, напиши пример со смысловой нагрузкой на другом языке. А потом перенеси этот смысл в 1С. Не код, а именно его прикладной смысл. И всё поймешь сам.
Gendelf; Sashares; +2 1 Ответить
11. user1880116 10.09.23 10:41 Сейчас в теме
Какой красноречивый минус. Осознал, и тебе стало неприятно?
13. PlatonStepan 38 10.09.23 13:37 Сейчас в теме
(11) Это я минуснул )

для автора: - Думаю, это не ограничение платформы, а вариант нормы для скриптового языка.

Если пофантазировать...
Если реализуется что-то сложное, где можно запутаться в "магических числах", то это нужно выносить в подпрограммы - внешние обработки. Там есть свой набор табличных частей и они высвечиваются в контекстной подсказке в модуле обработки, это поможет к ним обращаться как к ключевым словам.
например, создадим табличные части: Константа1, Константа2.
Функция КонстантыМодуля(КлючКонстанты, кеш = неопределено)
	
	Если ТипЗнч(кеш) <> Тип("ФиксированноеСоответствие") Тогда//Инициализация
		кеш = Новый Соответствие();
		кеш.Вставить(ТипЗнч(Константа1), "1");
		кеш.Вставить(ТипЗнч(Константа2), "2");
		кеш = новый ФиксированноеСоответствие(кеш);
	КонецЕсли;
	
	Возврат кеш[ТипЗнч(КлючКонстанты)];
	
КонецФункции
....
Сообщить(КонстантыМодуля[Константа1]);//Выдаст 1
Сообщить(КонстантыМодуля[Константа2]);//Выдаст 2
Константа2 = 8;//присвоение вызовет ошибку
Показать


Но защитить от перезаписи значение переменной "кеш" вроде бы уже никак.
user1342811; +1 1 Ответить
15. user1342811 18 10.09.23 15:00 Сейчас в теме
(11)Минус красноречивый, но не мой, не ставил бы минус под комментариями под постами других людей в теме которую я создал.
14. user1342811 18 10.09.23 14:57 Сейчас в теме
(10)Мой вопрос это не про прикладную область, а про упрощение понимания кода.
Кстати о прикладном смысле
Первый пример:
Если НЕ ПустаяСтрока(ТекСтрока.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.МеждународноеСокращение) Тогда		
   лUNIT = СокрЛП(ТекСтрока.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.МеждународноеСокращение);				
КонецЕсли;

Второй пример:
лЕдИзмENG = ТекСтрока.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.МеждународноеСокращение;
Если НЕ ПустаяСтрока(лЕдИзмENG) Тогда		
   лUNIT = СокрЛП(лЕдИзмENG);				
КонецЕсли;

С точки зрения прикладного смысла , код делает одно и тоже, но для понимания второй пример понятнее ну и производительнее (правда, насчет производительности это о прикладном смысле или нет).
Со стороны прикладного смысла, вообще всё равно есть ли в коде константы или нет. Пишется ли код с отступами или без, выделяются ли части кода в отдельные процедуры или просто копипаститься, программа работает одинаково.
Попробуй почитать какие-нибудь книги по программированию, может поймёшь все сам.
16. user1880116 10.09.23 15:48 Сейчас в теме
(14)
для понимания второй пример понятнее ну и производительнее
Чой-та ржу.
Сокращение = МеждународноеСокращение(ТекСтрока.ЕдиницаИзмерения);
Если Не ПустаяСтрока(Сокращение) Тогда
    Модуль = СокрЛП(Сокращение);
КонецЕсли;

Функция МеждународноеСокращение(ЕдиницаИзмерения)
    Сокращение = ОбщегоНазначения.ЗначениеСвойстваОбъекта(ЕдиницаИзмерения, "ЕдиницаПоКлассификатору.МеждународноеСокращение");
    Результат = Строка(Сокращение);
    Возврат Результат;
КонецФункции
Показать
Sashares; +1 Ответить
20. user1342811 18 10.09.23 23:47 Сейчас в теме
(16)А я уже думал заметишь или нет через точку обращение, заметил.
Ну и твой вариант там не подойдёт, так как там нет БСП.
22. user1880116 11.09.23 07:31 Сейчас в теме
(20)
так как там нет БСП
Итого.

Начал с "констант", потом через "попробуй почитать какие-нибудь книги по программированию" внезапно оказалось, что это про "про упрощение понимания кода" и в конце неопредолимым препятствием стало отсутствие где-то там БСП.

А ты хорош.
Gendelf; Spurk; +2 Ответить
18. Sashares 35 10.09.23 18:23 Сейчас в теме
(14)
Мой вопрос это не про прикладную область, а про упрощение понимания кода.

Потрудитесь все же сначала сформулировать вопрос.
Описать задачу, которая решается, и какая проблема возникает.
21. user1342811 18 10.09.23 23:53 Сейчас в теме
(18)По-моему, вопрос был явно задан в теме.
Задачи никакой нет, более того и проблем-то нет.
Хотелось узнать мнения про отсутствие констант.
17. Sashares 35 10.09.23 18:18 Сейчас в теме
(8)
Это просто пример без смысловой нагрузки.

Если задавать вопросы без смысловой нагрузки, то ожидать ответы со смысловой нагрузкой - ну такое себе.
19. user1342811 18 10.09.23 23:32 Сейчас в теме
Можно закрыть тему, продолжать и желания нет.
По теме было два ответа (3) и (13) спасибо.
PlatonStepan; +1 Ответить
Оставьте свое сообщение

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