Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=49079)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Как сменить булевое значение заполнения по умолчанию на булевую константу?
Автор: Gigi 25.11.18, 12:43
Всем привет!
http://pro1c.org.ua/index.php?showtopic=41564
Однако ... ну опять вижу чего то не хватает ... вечно что то не хватает ...и опять какой то ерунды ...
Всем хорошая платформа, но в кое каких тонких вопросах опять малые не доработки.
Поэтому никто не подскажет как сменить на Истину то, что по умолчанию Ложь. Имею ввиду булевый тип константы.
Дело в том, что когда создаешь булевый реквизит объекта, там есть опция "ЗначениеЗаполнения". Обычно по умолчанию всегда стоит Ложь. И поэтому есть возможность сменить на Истину. А вот когда создаешь тот же булевый тип но константу, такая опция как "ЗначениеЗаполнения", и вовсе отсутствует. ПОЧЕМУ? По крайней мере че то ее не нахожу.
А нужно что бы значение созданной булевой константы было не Ложь, а ИСТИНА!
Никто не подскажет пути как это сделать?
Буду опять признателен!
Gigi @ Сегодня, 12:45
,
Короче ... понятно ... такой опции просто нет... Скорее всего.
А на этом сайте мне еще говорили что просто идеальная среда разработки.
Согласен что очень удобная и функциональная... но с тем что идеальная НЕТ. Это далеко не так. И это лишь малая часть многих не больших но не доработок.
И это не удивительно.... идеал может быть только у самого Бога ... и точно не в том, что от рук человека.
Поэтому опять придется делать двойную работу. И во всех процедурах в соответствующих местах кода менять Истину на Ложь или наоборот. И приспосабливаться под возможности системы 1С.
Ладно.. так и быть.
Автор: Vladal 26.11.18, 15:41
Создайте свою обработку или доработайте обработчик обновления информационной базы, который бы заполнял значения новых реквизитов.
Автор: Gigi 27.11.18, 8:19
Vladal @ Вчера, 16:41
,
Ну конечно ... "создайте" ... "доработайте" А в опциях просто сменить значение заполнения константы по умолчанию без "создайте/доработайте" это конечно невозможно.
У меня уже глаза квадратные из-за этих "создайте/доработайте"
Ладно! Так и быть .... опять буду "создавать" и "дорабатывать" )))) Без конца края.
Спасибо
Пока!
Автор: andr_andrey 27.11.18, 9:29
Цитата(Gigi @ 27.11.18, 8:19)
Так и быть .... опять буду "создавать" и "дорабатывать" )))) Без конца края.
Извините, я наверное пропустил, а в каком инструменте/языке не надо ничего "создавать/дорабатывать"?
Просто запамятовал, с какой супер-технологии вы снизошли на 1С?
Автор: Gigi 27.11.18, 10:09
andr_andrey @ Сегодня, 10:29
,
Цитата(andr_andrey @ 27.11.18, 10:29)
Просто запамятовал, с какой супер-технологии вы снизошли на 1С?
Не с какой ...
просто длина одного шага вперед должна быть 100 см, а не 95.
И раз шаг был сделан то наверно, трудно было добавить недостающие 5 см.
Поэтому эти 5 см приходится "создавать/дорабатывать" самому раз разработчики поленились.
Хотя может я шас говорю как избалованный парень. Который никогда не писал ну на пример на Си... и не знает какой это ужас ... когда все с нуля. Но все таки.
А так в остальном среда разработки всем хороша.. согласен. Просто кое где не до конца удобна.
Ладно... я думаю в следующих релизах добавят эти не достающие сантиметры.
А пока наверно чем богаты тем и рады.
Пока!
Автор: Vladal 27.11.18, 16:17
Цитата(Gigi @ 27.11.18, 10:09)
Ладно... я думаю в следующих релизах добавят эти не достающие сантиметры.
навряд ли
Автор: Vofka 27.11.18, 16:36
Цитата(Vladal @ 27.11.18, 16:17)
навряд ли
Зачем вы так жестоко с человеком?
Автор: Vladal 27.11.18, 17:29
Цитата(Gigi @ 27.11.18, 8:19)
Ну конечно ... "создайте" ... "доработайте" А в опциях просто сменить значение заполнения константы по умолчанию без "создайте/доработайте" это конечно невозможно.
Если Вы разработчик в 1С - есть ресурсы для обучения или тут же на форуме можно обсудить.
Если Вы - пользователь 1С, хоть и продвинутый, то наверно это создает сложности.
Потом: константа и её значения находятся в области данных информационной базы, поэтому в конфигураторе нельзя задать значение заполнения. Но если бы это была ссылка на объект с предопределенными данными - то да, в значении заполнения можно указать этот предопределенный элемент.
Цитата(Vofka @ 27.11.18, 16:36)
Зачем вы так жестоко с человеком?
Я не хотел.
Цитата(Gigi @ 27.11.18, 10:09)
просто длина одного шага вперед должна быть 100 см, а не 95.
Либо нестандартизированная линейка. Как, например, дешевая китайская рулетка, шкала которой не совпадает с эталоном.
Может, Вы ожидаете неоправданно большего от системы, которая рассчитана под другие задачи.
Так что разработчики 1С сделали километр из 1000 эталонных метров, а Вы ожидаете от этого километра 1024 "китайских" метра.
Увы.
Цитата(Gigi @ 25.11.18, 12:43)
Дело в том, что когда создаешь булевый реквизит объекта, там есть опция "ЗначениеЗаполнения". Обычно по умолчанию всегда стоит Ложь. И поэтому есть возможность сменить на Истину. А вот когда создаешь тот же булевый тип но константу, такая опция как "ЗначениеЗаполнения", и вовсе отсутствует. ПОЧЕМУ? По крайней мере че то ее не нахожу.
А нужно что бы значение созданной булевой константы было не Ложь, а ИСТИНА!
Никто не подскажет пути как это сделать?
Буду опять признателен!
Итак, в форме элемента/группы справочника в обработчике ПриОткрытии можно добавить проверку на то, что это новый объект и заполнять нужный реквизит значением из константы.
Вот пример:
Процедура ПриОткрытии()
Если ЭтоНовый() Тогда
ЗначениеРеквизита = Константы.БулеваяКонстанта.Получить();
НовыйРеквизит = ЗначениеРеквизита;
КонецЕсли;
КонецПроцедуры
Но это надо дописывать ручками. А вот чтобы это прописать в свойства реквизита, мне пока неизвестно.
Цитата(Gigi @ 27.11.18, 10:09)
Просто кое где не до конца удобна.
Зато не надо в notepad.exe или nano писать текст программы и компилировать его из командной строки )))
Автор: Gigi 27.11.18, 20:29
Цитата(Vofka @ 27.11.18, 17:36)
Зачем вы так жестоко с человеком?
Да ничего страшного
..переживу... куда денусь... пусть даже с трудом
Цитата(Vladal @ 27.11.18, 18:29)
Либо нестандартизированная линейка. Как, например, дешевая китайская рулетка, шкала которой не совпадает с эталоном.
Может, Вы ожидаете неоправданно большего от системы, которая рассчитана под другие задачи.
Так что разработчики 1С сделали километр из 1000 эталонных метров, а Вы ожидаете от этого километра 1024 "китайских" метра.
Увы.
Ну не знаю господа... с одной стороны логично, но с другой стороны усматриваю подвох в сказанном. Имеющий цель оправдать то, что разработчики не до конца сделали. И прав или ошибаюсь в этом точно знать не могу. Ибо если честно мало знаком с архитектурой ... Пока все внимание акцентирую только на кодинг. Что иногда просто выматывает. и просто было бы не плохо если почаще обходилось бы без единой строки. Но раз это не вписывается то ладно буду верить тому, что сказано. Хотя бы потому, что у самого опыт не большой.
Так что, по поводу ..
Цитата(Vladal @ 27.11.18, 18:29)
Потом: константа и её значения находятся в области данных информационной базы, поэтому в конфигураторе нельзя задать значение заполнения. Но если бы это была ссылка на объект с предопределенными данными - то да, в значении заполнения можно указать этот предопределенный элемент.
А константа это не элемент конфигурации? Так же как на пример перечисление? Я понимаю так.... Все то, что может создать пользователь в основном это область инфо. базы. А все что не может ... на пример перечисление, константы .. это же область конфигурации? Или не так? Хотя плаваю в этом если честно. Поэтому и тут ... ладно .... доверюсь сказанному выше.
А в остальном по поводу заполнения по умолчанию ... для чего нужно было ...
Вот для чего
Процедура ПередНачаломРаботыСистемы(Отказ)
ОБСЛУЖИВАНИЕ(Отказ);
КонецПроцедуры
Процедура ОБСЛУЖИВАНИЕ(Отказ)
//==============================
знОбслуживание=Обслуживание_ИстинаЛожь();
Если знОбслуживание=Ложь Тогда
Текст="ОБСЛУЖИВАНИЕ РАЗРАБОТКИ ВРЕМЕННО ОТКЛЮЧЕНО!"+Символы.ПС+
"ИДЕТ ПРОЦЕСС ОБНОВЛЕНИЯ КОНФИГУРАЦИИ!";
Предупреждение(Текст);
Отказ=Истина;
КонецЕсли;
//==============================
КонецПроцедуры
Функция Обслуживание_ИстинаЛожь()
ТекущийПользователь=ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
Если ТекущийПользователь="Программер" Тогда
Возврат Истина;
Иначе
Возврат Константы["Обслуживание"].Получить();
КонецЕсли;
КонецФункции
Так написал в модуле управляемого приложения. Думаю теперь ясно почему.
Просто это еще урезанный вариант... у меня там еще другие строки.
Но суть в том, что если константа "Обслуживание" имеет значение Истина тогда база грузиться, а если ложь то нет.
Просто резоннее было бы если константа для этой цели по умолчанию имела бы значение Истина.
В противном случае придется в других процедурах везде менять. Что думаю и придется делать.
Ладно .. это так ..для ясного понимания негодования...
спасибо
Gigi @ Сегодня, 21:02
,
P.S. Да еще ..
Конечно разумнее было бы создать константу с именем не "Обслуживание", а "Отключение" .. это было бы уместнее к значению по умолчанию. Но я уже сделал и когда делал не знал, что у константы нет опции выбора значения по умолчанию. А уже после и не охота было переделывать
Автор: Vladal 27.11.18, 23:51
Цитата(Gigi @ 27.11.18, 20:29)
А константа это не элемент конфигурации?
Элемент. А вот её значение - в области пользовательских данных, а не конфигуратора. Сейчас значение одно, через час другое. А если это значение перечисления, предопределенный элемент справочника, плана счетов или ПВХ, то к нему есть доступ из свойств автозаполнения.
Цитата(Gigi @ 27.11.18, 20:29)
Пока все внимание акцентирую только на кодинг.
Да. Понимание архитектуры 1С 8 облегчит работу.
Цитата(Gigi @ 27.11.18, 20:29)
А константа это не элемент конфигурации? Так же как на пример перечисление?
Константа и перечисления - объекты конфигурации.
Только значение перечисления задано в конфигураторе, а значение константы задано в пользовательском режиме. Это если "на пальцах".
Цитата(Gigi @ 27.11.18, 20:29)
Но суть в том, что если константа "Обслуживание" имеет значение Истина тогда база грузиться, а если ложь то нет.
...
Конечно разумнее было бы создать константу с именем не "Обслуживание", а "Отключение" .. это было бы уместнее к значению по умолчанию.
Да. Это хорошо, что пришли к такому выводу.
Цитата(Gigi @ 27.11.18, 20:29)
В противном случае придется в других процедурах везде менять. Что думаю и придется делать.
Ладно .. это так ..для ясного понимания негодования...
спасибо
Да, такое тоже бывает, когда надо переписывать код на оптимальный.
Суть негодования понятна. Особенно, когда "бросили на амбразуру" и плыви, как хочешь.
Автор: Gigi 29.11.18, 12:10
Vladal @ Вчера, 0:51
,
Тема закрыта .. но это так ... ради прикола...
Полный вариант решения... с учетом значения заполнения по умолчанию.
Пришлось добавить константу "отключение", а не менять константу "Обслуживание", на "отключение" ... что бы обойтись меньшими трудозатратами.
Много лишнего и не связанного с указанной темой, но не охота укорачивать.
Поэтому целиком как написал... И ради прикола// ===== МОДУЛЬ УПРАВЛЯЕМОГО ПРИЛОЖЕНИЯ
Процедура ОБСЛУЖИВАНИЕ(Отказ)
//==============================
знОбслуживание=Обслуживание.Обслуживание();
If знОбслуживание<>True Then
Предупреждение(знОбслуживание);
Отказ=True;
EndIf;
//==============================
КонецПроцедуры
// == МОДУЛЬ: "Обслуживание"
Функция Обслуживание() Экспорт
ТекущийПользователь=ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
ОбслуживаниеЗапись();
If ТекущийПользователь="Программер" Then Возврат True; EndIf;
//================================
знОбслуживание=FxSub_ЗаписьПолучКонст.ПолучитьЗначениеКонстанты("Обслуживание");
If знОбслуживание=True Then Возврат True; EndIf;
//================================
ДКО=FxSub_ЗаписьПолучКонст.ПолучитьЗначениеКонстанты("ДКО");
If ДКО='00010101' Then
Возврат Отключение_ТекстПредупреждения("ОТКЛЮЧИЕ - ПРИНУДИТЕЛЬНОЕ");
Else
Возврат Отключение_ТекстПредупреждения("ОТКЛЮЧИЕ - ПРОИЗВОЛЬНОЕ");
EndIf;
//================================
КонецФункции
Функция Отключение_ТекстПредупреждения(ТипОтключения) Экспорт
//======================================
If ТипОтключения="ОТКЛЮЧИЕ - ПРИНУДИТЕЛЬНОЕ" Then
ВремяОжиданияВключения_ЧасМоментаОтключения=Константы["ОбслуживаниеОтключено_Пояснение"].Получить();
ВремяОжиданияВключения=Константы["ОбслуживаниеОтключено_ПояснениеЧерез"].Получить();
If ВремяОжиданияВключения="" Then ПояснениеБудетВклЧерез="" Else ПояснениеБудетВклЧерез="Работоспособность будет возоблена примерно через: " EndIf;
If ВремяОжиданияВключения_ЧасМоментаОтключения="" Then
Текст="ОБСЛУЖИВАНИЕ РАЗРАБОТКИ ВРЕМЕННО ОТКЛЮЧЕНО!"+Символы.ПС+
"ИДЕТ ПРОЦЕСС ОБНОВЛЕНИЯ КОНФИГУРАЦИИ!";
Else
Текст="ОБСЛУЖИВАНИЕ РАЗРАБОТКИ ВРЕМЕННО ОТКЛЮЧЕНО!"+Символы.ПС+
"ИДЕТ ПРОЦЕСС ОБНОВЛЕНИЯ КОНФИГУРАЦИИ!"+Символы.ПС+
ПояснениеБудетВклЧерез+ВремяОжиданияВключения_ЧасМоментаОтключения;
EndIf;
Else
Текст="Дело в з...це ребята;). Срок службы разрабтки истек... за продление нужно заплатить :) )))):)"; // Это так ... Шутка... эту строку уберу.. равно как и функцию: "ДКО_Check(ДКО)"
EndIf;
//======================================
Возврат Текст;
КонецФункции
Процедура ОбслуживаниеЗапись() Экспорт
знОбслуживание=Константы["Обслуживание"].Получить();
знОтключение=Константы["Отключение"].Получить();
ДКО=Константы["ДКО"].Получить();
ДКО_Check=ДКО_Check(ДКО);
If ДКО_Check=True Then
If знОбслуживание=True Then Константы["Обслуживание"].Установить(False); EndIf;
//Константы["Отключение"].Установить(True);
Else
If знОтключение=True Then
If знОбслуживание=True Then Константы["Обслуживание"].Установить(False) EndIf;
Else
If знОбслуживание=False Then Константы["Обслуживание"].Установить(True) EndIf;
EndIf;
EndIf;
КонецПроцедуры
Функция ДКО_Check(ДКО) Экспорт
//Дата конца обслуживания - проверка
TrueFalse=False;
//======================================
Цифра_ДКО=МесяцГодДата_серв.ГодМесяцДень_Цифра(ДКО);
//--------------------------------------
If Строка(ДКО)='00010101' Then GoTo ~Возврат; EndIf;
//======================================
ТекстЗапроса=FxSub_МетаДанные.ЗапросТекстПоСтруктуре("РегистрСведений.ОтчетныеМесяцы",Новый Структура("Дата"),)+" УПОРЯДОЧИТЬ ПО Дата УБЫВ";
Запрос = Новый Запрос(ТекстЗапроса);
//--------------------------------------
Выгрузка = Запрос.Выполнить().Выбрать();
//--------------------------------------
Пока Выгрузка.Следующий() Цикл
ДатаОтчетов=Выгрузка.Дата;
Цифра_ДатаОтчетов=МесяцГодДата_серв.ГодМесяцДень_Цифра(ДатаОтчетов);
If Цифра_ДатаОтчетов>=Цифра_ДКО Then
TrueFalse=True;
GoTo ~Возврат;
EndIf;
КонецЦикла;
//======================================
~Возврат:;
Возврат TrueFalse;
КонецФункции
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua