Версия для печати темы (https://pro1c.org.ua/index.php?s=0a6679a788584f4edd9563217b86dd3f&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 * ,
Ну конечно ... "создайте" ... "доработайте" А в опциях просто сменить значение заполнения константы по умолчанию без "создайте/доработайте" это конечно невозможно.

У меня уже глаза квадратные из-за этих "создайте/доработайте" smile.gifsmile.gif

Ладно! Так и быть .... опять буду "создавать" и "дорабатывать" )))) Без конца края.
Спасибо
Пока!

Автор: 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) *
Зачем вы так жестоко с человеком?

Да ничего страшного smile.gif ..переживу... куда денусь... пусть даже с трудом smile.gif
Цитата(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