Имя: Пароль:
1C
 
Откуда идет такой стиль разработки: НЕ ДокументСсылка.Проведен = Ложь?
0 wowik
 
23.01.19
10:12
1. Другое 46% (11)
2. Программисты со стажем 38% (9)
3. Начинающие программисты так пишут 13% (3)
4. Гуманитарии, пришедшие в 1С 4% (1)
Всего мнений: 24

Лично мне не нравится, когда пишут: НЕ ДокументСсылка.Проведен = Ложь.
Разве нельзя писать  "ДокументСсылка.Проведен = Истина"? - так разве не нагляднее?
1 Mankubus
 
23.01.19
10:13
а мне не нравится слово "токой"

Другое
2 butterbean
 
23.01.19
10:14
разве нельзя написать просто
ДокументСсылка.Проведен ??

Другое
3 Hans
 
23.01.19
10:15
можно так сделать
НЕ НЕ НЕ ДокументСсылка.Проведен = Ложь
4 MaxS
 
23.01.19
10:15
(2) Так может ошибка получиться, если документ битая ссылка
5 palsergeich
 
23.01.19
10:16
Издержки работы в языке с динамической типизации.
Конкретно в этом случае Избыточно, но в общем случае бывает необходимо, потому что внезапно может быть неопределенно и ошибка в рантайме.
Особенно часто такое происходит например в запросах где с течением времени тип становится составным. И уже будет не пустая ссылка, а Неопределенно.
6 wowik
 
23.01.19
10:18
(1) не правильно написал)?  нужно писать "такоЕ"?  - я отстою от развития русского языка на 25 лет, школьного курса)
7 MaxS
 
23.01.19
10:18
Обычно пишут
Если НЕ ОднаПеременная=ДругаяПеременная Тогда
Вместо
Если ОднаПеременная<>ДругаяПеременная Тогда
Видимо кто-то со стажем заработался.

Программисты со стажем
8 wowik
 
23.01.19
10:18
(6) *неправильно
9 palsergeich
 
23.01.19
10:18
Если Вы с этим не сталкивались и Вам кажется это дикостью, то я в свое время нажрался подобного говна и ожидаемое значение указываю явно.

Программисты со стажем
10 Akela has missed
 
23.01.19
10:31
(9) тут не ожидаемое значение, а отрицание обратного ожидаемого значения
11 Eiffil123
 
23.01.19
10:49
ДокументСсылка.Проведен

Начинающие программисты так пишут
12 Eiffil123
 
23.01.19
10:50
(7) зачем так обычно пишут?
13 wowik
 
23.01.19
10:54
1

Начинающие программисты так пишут
14 seevkik
 
23.01.19
10:56
Так значение инвертирует погромист с недостаточным стажем
Начинающий до такого не додумается

Программисты со стажем
15 VladZ
 
23.01.19
10:57
(0) Тоже задавался таким вопросом. Один из вариантов ответов была таким: "Лень раскладку переключать".

Сам пишу так: ДокументСсылка.Проведен
16 Casey1984
 
23.01.19
10:58
Это пятничный код ;-)

Другое
17 MaxS
 
23.01.19
11:06
(12) Вроде как НЕ = быстрее, чем <>
18 unregistered
 
23.01.19
11:06
(0) >> Разве нельзя писать  "ДокументСсылка.Проведен = Истина"?

Можно.

>> так разве не нагляднее?

Нет. Не нагляднее. Нагляднее просто ДокументСсылка.Проведен.
Раньше в запросах так нельзя было писать, а надо было непременно использовать оператор сравнения. Теперь разрешили (с какой точно версии не помню).
19 Franchiser
 
гуру
23.01.19
11:09
А если ДокументСсылка Неопределенно или Пустая ?
20 NikeArz
 
23.01.19
11:10
(0) Добрый день. Обратите внимание на кусок кода из типой 1С УТ 11.4

Функция ПолучитьМаксимальнуюДатуВКоллекцииДокументов(МенеджерВременныхТаблиц) Экспорт
    
    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    |    ЕСТЬNULL(МАКСИМУМ(КоллекцияДокументов.Ссылка.Дата), НЕОПРЕДЕЛЕНО) КАК Период
    |ИЗ
    |    ТаблицаДанныхДокументов КАК КоллекцияДокументов
    |");
    
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    
    Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
        МаксимальнаяДата = Результат.Выгрузить()[0].Период;
        
        Если МаксимальнаяДата = Неопределено Тогда
            МаксимальнаяДата = ТекущаяДатаСеанса();
        КонецЕсли;
    Иначе
        МаксимальнаяДата = ТекущаяДатаСеанса();
    КонецЕсли;
    
    Возврат МаксимальнаяДата;
КонецФункции


Здесь также применяется НЕ. А ведь это типовая конфигурация, которую писать сертифицированные 1С программисты. Значит это кому-то надо.
21 ДенисЧ
 
23.01.19
11:12
(18) Разрешили совсем недавно, где-то начиная с версии 8.1
22 Aleksandr N
 
23.01.19
11:15
Похоже на преобразование дизъюнкции в конъюнкцию.

Программисты со стажем
23 Tonik992
 
23.01.19
11:19
>> "ДокументСсылка.Проведен = Истина"
Даже так делать не надо.

Нужно "ДокументСсылка.Проведен" или "НЕ ДокументСсылка.Проведен".

А если есть угроза битой ссылки, тогда надо отдельно проверить, битая ссылка или нет. Так или иначе, если данных нет в кеше, 1С при разыменовании будет лезть в базу и получать больше данных, чем нужно.
24 youalex
 
23.01.19
11:19
(0) Оба хуже
ДокументСсылка.Проведен - это ДокументСсылка.ПолучитьОбъект().Проведен
если объект еще не в кэше.
25 Diman000
 
23.01.19
11:19
Все проверки булевых значений лучше писать явно
Если Проведен = ИСТИНА, а не просто Если Проведен
Не ... = Ложь тоже иногда бывает оправданно

Я когда сталкиваюсь с ошибкой типа, при неявной проверке Если Проведен, то всем говорю - типичная ошибка начинающего программиста)))

Программисты со стажем
26 Tonik992
 
23.01.19
11:22
(25) >> Все проверки булевых значений лучше писать явно

Не советуйте такого. Это плохой стиль программирования.

Если кто-то копрокодил так, что переменная Проведен имеет разные градации серого, то от безвыходности используйте. Но самому писать такое ни в коем случае.
27 Diman000
 
23.01.19
11:29
(26) А все же посоветую.
Это стиль правильного программирования на 1С.
Но вы можете считать по-другому, я совершенно не против.
28 ДенисЧ
 
23.01.19
11:31
(27) Тогда почему в более других языках пишут?
bool a;
/// заполнение
if (!a) {
}


Тоже криворукие индусы?
29 Вафель
 
23.01.19
11:32
некоторые просто не знают как писать на равно в 1с. может из других языков пришли.
а там все по другому
30 Вафель
 
23.01.19
11:33
(27) у 1С свои стандраты и рекомендации, и она не согласна с тобой
31 Гипервизор
 
23.01.19
11:35
(26) Ну это потому что - вот ))
https://svalko.org/data/2017_10_11_00_24_412930_1.jpeg
32 Diman000
 
23.01.19
11:42
(28) Странный вопрос.
Какое мне дело до того как пишут на других языках?

(29)
Да нет проблем, пусть у них будут такие стандарты.
А у меня свои стандарты на все жизненные вопросы.
Я не собираюсь ничьи стандарты перенимать вслепую.
33 Rovan
 
гуру
23.01.19
11:46
(0) "Если НЕ ОднаПеременная=ДругаяПеременная Тогда"

потому что требуется написать "Не равно" и значит визуально это тоже "НЕ ...=..."
А <> визуально не вызывает никаких ассоциаций !
34 OldCondom
 
23.01.19
11:48
У меня внутри кто-то строит недовольную гримасу, когда пишу <>. Не знаю, почему. Хоть на других языках считай и не писал.
35 Diman000
 
23.01.19
11:51
(34) Переключатель раскладки клавиатуры ее строит)))
36 OldCondom
 
23.01.19
11:52
(35) а вот это аргумент кстати
37 Fish
 
23.01.19
11:55
(35) О да. Особенно, когда приходится писать WebЦвета и подобные :))
38 unregistered
 
23.01.19
11:56
(21) > Разрешили совсем недавно.

Суть не в том давно или недавно. Суть в том, что была такая разница. А значит те, кто вынужден был сопровождать конфигурации, работавшие под старые версии платформы должны были учитывать эту особенность и писать код так, чтобы он работал корректно и под 8.1 и под 8.3. Не говоря уже о том, что сплошь и рядом встречается код, который без изменения тянется со стародавних времён.
39 palsergeich
 
23.01.19
11:58
(10) это не важно, все равно будет ошибка рантайме при приведении типа.
40 Гипервизор
 
23.01.19
11:59
(35)(37) У вас просто неправильные раскладки.
41 breezee
 
23.01.19
12:13
(0) Криворукость, сэр

Гуманитарии, пришедшие в 1С
42 Гипервизор
 
23.01.19
12:16
(38) Кстати да, в 8.3.6 можно стало писать в запросах вот так: ВЫБРАТЬ 1 <> 2
А раньше приходилось писать через ВЫБОР.
Но это же не значит, что надо переписывать старый код.
43 Tonik992
 
23.01.19
12:16
(27) И все же неверно.
В переменной булевского типа ожидать другой тип.. Это значит надо еще понять, почему такой тип у неё оказалось. Вдруг автор кода на "Неопределено" что-то завязал? Это уже не булево, а трулево. Три возможных значения.

Если Документ.Проведен = Ложь ИначеЕсли Документ.Проведен = Истина ИначеЕсли Документ.Проведен = Неопределено так чтоле?

Не надо для переменной булевского типа подразумевать что-то иное. Нужно пресекать такую возможно до условного оператора.
44 assasu
 
23.01.19
12:18
(0) как думается так и пишется.. внутренний голос постоянно говорит "нет"
45 1Снеговик
 
гуру
23.01.19
12:23
(20) дурацкий пример, в самом НЕ никакого криминала нет, и никто не говорит что его использовать нельзя
46 Diman000
 
23.01.19
12:23
(43) По моему мнению надо пресекать совершенно лишние ошибки в коде, а не выдумывать себе кем-то навязанные ограничения.
Что мешает тебе совместить внимательно отслеживание типа и указание Проведен = Истина на случай если вдруг ты не все отследил?
Да и вообще, код в 1С постоянно правят разные люди.
И ты сам когда что-то правишь, условно, через год, то уже приравниваешься к этим разным людям.
Как ты собираешься им всем объяснить как нужно аккуратно следить за типом?
Как ты собираешься объяснять ошибку заказчику или руководителю? Вот тут выскочила ошибка, потому что я не ожидаю в булевской переменной другой типа и считаю, что так правильно?
А тебе ответят, что вот у Димы ошибка не выскочила, потому что он размышляет несколько иначе...
47 Tonik992
 
23.01.19
12:37
(46) Так увеличивается энтропия кода.
Небольшая ирония на эту тему:
Если у вас есть числовое значение, то хороший тон делать так:
Если ТипЗнч(Число1) = Тип("Число") И Число1 = 15 Тогда
КонецЕсли ? Ведь вдруг в переменной Число1 записана строка, ну вот проскользнуло где-то там, в середине алгоритма..

>> на случай если вдруг ты не все отследил
Именно благодаря таким ошибка и рождается профессионал. Лучше ошибиться в таком месте, чем поощрять такой код.
48 DexterMorgan
 
23.01.19
12:39
(0) Лично мне не нравится, когда пишут: "ДокументСсылка.Проведен = Истина".
Разве нельзя писать  "ДокументСсылка.Проведен"? - так разве не нагляднее?
49 Tonik992
 
23.01.19
12:43
(46) >> Как ты собираешься объяснять ошибку заказчику или руководителю
Вот где кроется скелет.
Так ведь можно просто везде сделать так:
Попытка
Исключение
КонецПопытки
Вообще не придется ничего не кому объяснять. Никаких ошибок -)
50 Diman000
 
23.01.19
12:44
(47) Не надо все доводить до маразма.
А то один умник на моей памяти в функцию БСП ПолучитьЗначениеРеквизита (не дословно) вставил Попытку.
После чего при ошибке прав доступа она перестала ругаться, а начала возвращать пустые значения от которых вызывающие алгоритмы развалились.

>> Именно благодаря таким ошибка и рождается профессионал. Лучше ошибиться в таком месте, чем поощрять такой код.

Не соглашусь. Там где можно не ошибаться, лучше не ошибаться вообще.
51 DexterMorgan
 
23.01.19
12:45
(50) Так ты и доводишь до маразма пытаясь отследить тип у "Проведен"
52 Diman000
 
23.01.19
12:45
(49) Хе-хе, см. выше.
Будь умен и гибок, не слушай никого на веру, все обдумывай сам, у тебя голова светлая.
И ты станешь профессионалом.
53 Diman000
 
23.01.19
12:46
Ладно, спор ни о чем уже.
Не проверяйте булево через Проведен = Истина, проверяйте как Проведен.
Тем лучше для меня, я же из практики все говорю, а не как теоретик...
54 mikecool
 
23.01.19
12:48
(45) да, только это лишняя операция, можно просто содержимое поменять местами и убрать НЕ
55 NikeArz
 
23.01.19
12:57
(45) Пример не дурацкий. Он также говорит о том что НЕ можно применять. Читайте внимательнее.
56 Tonik992
 
23.01.19
12:57
(53) слишком много копрокода на вашем пути встречается, мне кажется.

Допустим, выражение (ДокументСсылка.Проведен = Ложь) - будет ИСТИНА.
Это выражение не скажет мне, что ссылка битая. А внутри условия мне нужно использовать ДокументСсылка. Я смогу это сделать? Нет.

Приведите пожалуйста примеры алгоритмов, где ДокументСсылка.Проведен = Ложь оправдан. Как практик, опишите такой алгоритм
57 Tonik992
 
23.01.19
12:58
(56) Не так, (ДокументСсылка.Проведен = Ложь) вернет ЛОЖЬ.
58 DexterMorgan
 
23.01.19
13:03
(56) Он хотел просто показаться умным (не вышло)
59 Diman000
 
23.01.19
13:06
(56) Я завел разговор об общем случае проверки значений булевых переменных.
И ты, кстати, именно с этим не согласился.
Так что не надо сейчас все сводить к вырожденному случаю, да еще и с дополнительным условиями.

В моей практике несколько раз в год возникают "красные" ошибки, которых легко можно было бы избежать написав = Истина. И все бы работало верно.
60 Tonik992
 
23.01.19
13:18
(59) Мне действительно стало интересно. Может есть такие случаи, когда оправдано, просто я не встречал такого..
Ну и потом... описывая, как вы говорите, "в общем случае", вы затем приводите частный случай с Проведен = Истина. в (25). Поэтому всё честно, и ветка же сама про ДокументСсылка.Проведен = Истина.
Вы ушли от частной темы к общему...

И я был не согласен с советом:
>> "Все проверки булевых значений лучше писать явно".
Зачем же так.. от пары красных ошибок такой сразу мощный совет в противовес сложившейся практики.
61 Diman000
 
23.01.19
13:22
(60) Посмотри сколько мне лет и умнож на несколько раз в год.
Эта "не пара красных ошибок", это много регулярных красных ошибок.
Практика программирования в 1С вообще сложилась так, что я допускаю намного меньше ошибок, чем многие другие. В том числе и из-за Проведен = Истина.
Что же мне теперь равняться на них из-за их сложившейся практики? Нет, на это я пойтить не могу...
62 wowik
 
23.01.19
13:29
(61) +1
63 bolobol
 
23.01.19
13:33
(61) Одного не пойму, всё же какую именно "красную" ошибку вы решаете кодом "Проведен = Истина"? Сравнение возвращает булево, ожидает приводимые к друг-другу типы слева и справа от сравнения, т.е. булево и число. Число и булево без операции сравнения вполне себе адекватно сами определяют ответ на Если. Тогда что вы за "красные" ошибки предвосхищаете?
64 bolobol
 
23.01.19
13:34
Коли опыта на 50+ фиксов - поделитесь уж, иначе... ну, вы поняли.
65 bolobol
 
23.01.19
13:48
Проведён больше Истины в 50 раз? И это проблема выполнению кода, где требуется строго "Проведен = Истина"? Кажется, я догадался. Это называется - нецелевое использование данных.
66 bolobol
 
23.01.19
13:49
Но тогда, получается, что вы не избегаете ошибок, а порождаете их...
67 bolobol
 
23.01.19
13:50
Следующий программист ваше "Проведен = Истина" упростит до "Проведен" и словит кучу исключительных ситуаций в дальнейшем, будет крайне удивлён ошибке "Индекс за пределами" в коду "ТЗ[ДокументСсылка.Проведен]"
68 Diman000
 
23.01.19
14:29
Ну не в Проведен дело, а в булевых проверках.
Типичный случай это когда булевое значение получается из запроса.
Оно иногда бывает неопределено, например.
69 DexterMorgan
 
23.01.19
14:45
(68) Так если бы ты весь свой код херачил бы в попытке, то у тебя было бы ошибок еще меньше,тебе уже советовали.
70 DexterMorgan
 
23.01.19
14:47
(68) Приведи пример с неопределено из твоей практике для ожидаемого булева, что то имхается, что ты гонишь
71 DexterMorgan
 
23.01.19
14:47
(68) Практики*
72 Numerus Mikhail
 
23.01.19
14:48
(70) из-за левого соединения или битой ссылки получается NULL
73 Ненавижу 1С
 
гуру
23.01.19
14:49
почему в операторе Попытка...Исключение нет раздела finally?
74 shuhard_серый
 
23.01.19
14:49
(0) ни о чем

Другое
75 DexterMorgan
 
23.01.19
14:51
(72) речь про неопределено
76 Ненавижу 1С
 
гуру
23.01.19
14:52
давайте про NULL и Неопределено поговорим
77 Numerus Mikhail
 
23.01.19
14:54
(75) NULL в запросе превращается в Неопределено в результирующей выборке
78 DexterMorgan
 
23.01.19
14:56
(77) Причем тут это?мы говорим про типы в запросе
79 Ненавижу 1С
 
гуру
23.01.19
14:56
(77) это что сейчас ты такое сказал?
80 Numerus Mikhail
 
23.01.19
14:58
(79) это я сейчас очень сильно тупанул, не обращай внимания
81 Tonik992
 
23.01.19
14:59
(77) ;d wtf? Что за превращение такое?
(68) составной тип? А ДокументСсылка.Проведен составного типа не имеет.
82 DexterMorgan
 
23.01.19
15:01
(81) Составной тип из булева и чего то еще, это круто.
83 Diman000
 
23.01.19
15:05
(82) Бывают случаи когда булево + дата хорошо заходит.
Например, для план-фактов контрольных событий.
Одной даты бы хватило, но некоторые события для некоторых позиций могут быть выключены.
84 PR
 
23.01.19
15:09
Поражает, как некоторые борются за говнокод как за родного ребенка, убить готовы
85 singlych
 
23.01.19
15:12
(70) был какой-то прикол, что на каком-то постгри минимум(ЛОЖЬ, ИСТИНА, NULL) давал NULL.
86 bolobol
 
23.01.19
15:25
(85) Прикол был бы, если бы не NULL давал.

Самое интересное, что "НЕ NULL = Ложь" - отрабатывает как истина, занятно, однако.
87 Сияющий в темноте
 
23.01.19
15:26
Вообще то,наличие Null в операторе сравнения для некоторых языков означает,что на выходе тоже будет Null независимо от остальных данных,так что для посгре ответ вполне ожидвемый,это 1с думает по другому.
88 singlych
 
23.01.19
15:26
(0) Если Док.Проведен вообще не булево, то
Док.Проведен = Истина даст ложь, а НЕ Док.Проведен = Ложь даст истину.
89 singlych
 
23.01.19
15:28
(86) (87)
Я имею в виду, что такой запрос на 1с возвращал null на постгри, а на скуле ложь.
90 bolobol
 
23.01.19
15:29
(89) Неожиданно. Null - это вообще ничего, а ложь - это уже что-то. Равно как и на ноль делить - сколько у каждого? Казалось бы - ноль, но нет, нельзя делить на ноль.
91 bolobol
 
23.01.19
15:31
(88) Любое сравнение с NULL в языке 1С даёт ложь. Что с Истиной, что с ложью. Странно, однако.
92 bolobol
 
23.01.19
15:32
В запросах - любое с NULL = NULL, а в языке = Ложь...
93 Мимохожий Однако
 
23.01.19
15:36
Если работает, то можно не удивляться.

Другое
94 DexterMorgan
 
23.01.19
15:38
(83) Тот, кто это спроектировал просто мудак
95 DexterMorgan
 
23.01.19
15:39
(85) Речь про неопределено
96 DexterMorgan
 
23.01.19
15:42
(83) Забавно говнокодер учитывает решение говноархитектора. Слаженная команда
97 Diman000
 
23.01.19
15:43
(94) Ты хоть бы одно обоснование привел в защиту своих резких оценок.
Ты бы как структуру данных для такой задачи спроектировал?
98 DexterMorgan
 
23.01.19
15:44
(97) Отдельно дата, отдельно использование
99 Diman000
 
23.01.19
15:45
(98) И потом тебе предстоит регулярная возня с визуализацией.
В чем ты видишь минус воткнуть все в одно поле?
100 wowik
 
23.01.19
15:46
100!
101 wowik
 
23.01.19
15:46
(100) 9 лет хотел написать это сообщение))
102 DexterMorgan
 
23.01.19
15:47
(99) Ты че серьезно? какая возня? галочки поставить для нужных событий? Так везде реализовано, епт
103 Вафель
 
23.01.19
15:47
составной тип из булева + дата - это формально 2 колонки в бд
104 DexterMorgan
 
23.01.19
15:48
(99) Такие как ты в проведен тоже дату в проведен захерачить могут
105 Diman000
 
23.01.19
15:50
(102) Вполне серьезно.
Допустим, заказчик хочет видеть все даты в формате ДД.ММ.ГГ или "Не треб." если эта точка выключена.
Если все в одном поле, то это отображается автоматически.
Хоть на форме, хоть куда.
А ты каждый раз будешь свои галочки анализировать.

В чем минус чем запихнуть дата+булево в одно поле ты так и не ответил.
106 DexterMorgan
 
23.01.19
15:52
(105) В самом объекте конфигурации хранить нужно это в двух реквизитах. Потому что в БД это все равно две колонки. На форме выводи все как хочет клиент
107 Ненавижу 1С
 
гуру
23.01.19
15:52
(103) на самом деле три
108 Вафель
 
23.01.19
15:52
(105) а так каждый раз будешь тип выбирать
109 singlych
 
23.01.19
15:53
(95) Ну добавь естьnull(, неопределено).
Я больше про то, что в (0) не эквивалентный код.
110 DexterMorgan
 
23.01.19
15:54
(107) =)
111 Ник080808
 
23.01.19
15:54
(105) так для этого есть формат у поля. Не?
112 DexterMorgan
 
23.01.19
15:55
(105) Голосовалку может запилишь? Посмотрим минусы заодно, мне лень
113 Diman000
 
23.01.19
15:58
(108) Ты про ввод данных?

(106) Кому "нужно"? У тебя свое собственное мнение вообще есть, ты можешь его высказать? Почему на твой взгляд плохо запихнуть дата+булево в одну колонку?
Предложение голосовалки это вообще прикол. Ты тоже так кодишь, за что больше проголосуют?

(111) Да. С форматом и одним полем визуализация будет автоматическая. С раздельными полями каждый раз придется что-то писать для отображения.
114 DexterMorgan
 
23.01.19
16:00
(113) "Предложение голосовалки это вообще прикол. Ты тоже так кодишь, за что больше проголосуют? "

Неа, просто на мои аргументы, от тебя последует "ну это твое мнение". А так тебя прилюдно окунут в действительность, что аргументы придется тебе приводить всем.
115 Ник080808
 
23.01.19
16:01
(113) зачем? если отключено - пустая дата. для пустой даты отображаешь нетреб. вообще нужно понимать задачу, что такое точка и что это за даты
116 Tonik992
 
23.01.19
16:12
Решая одну проблему (упростить вывод на форме), вы заполучили другую проблему (связана с СУБД). Но это может от не знания, или вы знали о минусах такого составного типа, то тогда странно.

А как вы запросы строите в таком решении:
ВЫБОР КОГДА ТИПЗНЧ(ПОЛЕ) = ТИП(ДАТА) ТОГДА ВЫБОР.... КОНЕЦ ИНАЧЕ ТОГДА...
в таком виде? Такое решение ведь за собой тянет последствия.. Но это правда от темы ДокументСсылка.Проведен отходит, но около неё
117 Diman000
 
23.01.19
16:14
(114) Естественно, это будет твое мнение.
А чье же еще, непогрешимого господа бога что ли, с которым я должен безропотно согласиться?
Короче, нет у тебя аргументов.
Мне поддержка толпы для моего мнения не нужна, поэтому от голосовалки я воздержусь.

(115) Пустая дата это значит, что она не задана. "Не треб." это другое.
Понятно, что для каких-то задач лучше сделать отдельными полями. Но и общее поле вполне имеет право на жизнь, я пока не услышал аргументов почему так не стоит делать никогда.
118 Diman000
 
23.01.19
16:17
(116) Нет, в таком виде обычно не строится запрос.
С запросами вообще особой сложности нет.
Кое-где Не ДатаБулево = ЛОЖЬ встречается.
Даже ДатаБулево > ДАТАВРЕМЯ(1,1,1) нормально отрабатывает, булевые значения пропускаются.
На MS SQL по крайней мере.
119 Ник080808
 
23.01.19
16:17
(117) да элементарно запрос - как выбрать все данные за период. если там булево в поле?
120 Ник080808
 
23.01.19
16:19
(118) группировка по периоду?
121 max1c2011
 
23.01.19
16:19
(2)>> ДокументСсылка.Проведен

Это ПЛОХОЙ и НЕНАГЛЯДНЫЙ стиль программирования.

нас в старой школе учили так не делать.
Пришел к выводу - правы
122 max1c2011
 
23.01.19
16:20
НАДО

ДокументСсылка.Проведен = Истина
123 Tonik992
 
23.01.19
16:23
(121) Давайте делать так:
ОписаниеТипаБулево = Новый ОписаниеТипов("Булево");
ДокументПроведен = ОписаниеТипаБулево.ПривестиЗначение(ДокументСсылка.Проведен);

Тогда, если будет Неопределено, то в ДокументПроведен будет ложь. О как.
124 Tonik992
 
23.01.19
16:25
А еще лучше, чтоб код чище был, сделаем отдельную
Функция ДокументПроведен(ДокументПроведен)
125 Diman000
 
23.01.19
16:25
(119) Через МЕЖДУ да и все. Работает, булевые значения отсекаются.
126 Ник080808
 
23.01.19
16:27
(125) ладно, группировка по периоду? Функции по работе с датами - НачалоПериода и т.д.?
127 Diman000
 
23.01.19
16:37
(126) НачалоПериода по-моему где-то используется, нормально.
Про группировку по периоду уже точно не вспомню.
Это все проверять надо.
Помню что никаких особых проблем такой составной тип не вызывал, ни в запросах, ни в СКД, ни в производительности.
128 Tonik992
 
23.01.19
16:45
(126) Видать в определенных местах кода заранее известен контекст, и "вот в этом месте точно дата" поэтому в запросе НАЧАЛОПЕРИОДА(БулевоДата) отрабатывает нормально.
Ну Димон, нормально же могли общаться, зачем такая архитектура -(
129 Diman000
 
23.01.19
16:48
(128) Так я нормально и общаюсь.
Мне просто не нравится когда аргументы не приводятся, либо приводятся в духе "так не принято".
Хотя к тебе и к Нику это не относится.
Аргумент, что может усложниться написание запросов принимается. Может.
130 Tonik992
 
23.01.19
17:01
(129) На самом деле интересно вот что.
Мы все больше за реализацию не через составной тип. А вы реализовали через составной тип.
И у вас должно было быть весомое обоснование на этот счет. То есть вы взвесили плюсы/минусы и выбрали именно составной тип.
Так вот, вы отходите от "так принято", и было интересно почему.. Ваше обоснование - удобство для формы. Это единственный довод был в пользу составного типа?
131 DexterMorgan
 
23.01.19
17:02
(117) У меня нет цели тебя переубеждать, про такую херню на собеседованиях говорят "Мы с вами свяжемся". А упертые бараны могут и РС как РН использовать и доказывать что это удобно.
132 DexterMorgan
 
23.01.19
17:04
(127) "по-моему", бла-бла-бла, на всех типах БД и т.д. А главное зачем этот гемор? Потому что ты форму один раз нарисовать не можешь?
Кстати про выбор типа (дата или булево) при вводе данных что там было? Удобно? Вместо того, чтобы галочку поставить и появилось дата для заполнения? Смешно.
133 Diman000
 
23.01.19
17:40
(130) Да, главный аргумент был удобство визуализации. И отсутствие других значимых проблем. Я предварительно затестил и производительность и основные запросы. Ввода данных вручную мало. Выключение точек это отдельная операция. Там где вручную вводятся даты, для ввода поле не составное, конечно.
134 DexterMorgan
 
23.01.19
17:55
(133) Что за херня "удобство визуализации"? В чем проблема визуализировать два поля? конкретно, в чем удобнее чем одно составное?
135 DexterMorgan
 
23.01.19
17:56
(133) "Ввода данных вручную мало" и "Да, главный аргумент был удобство визуализации."

Огонь
136 Diman000
 
23.01.19
18:01
Вода и медные трубы))) У тебя проблемы с самооценкой что ли? Цели меня переубедить у тебя нет. А смеяться надо мной и подниматься в своих глазах, вижу что тебе нравится))))
137 Diman000
 
23.01.19
18:05
Ты понимаешь, что форм для вывода данных может быть больше одной? Ты понимаешь, что вывод значения ресурса в СКД, это тоже визуализация?
138 DexterMorgan
 
23.01.19
18:43
(137) Так в чем проблема вывести дату? Какие тут могут быть сложности?
139 DexterMorgan
 
23.01.19
18:45
(137) Я вижу тут неудобство визуализации, если ты выводишь в СКД свое поле, то оно у тебя выглядит как дата с булево вперемешку, если накладываешь отбор, то какая разница два у тебя поля или одно? Мля в чем тут сложности?
140 Diman000
 
23.01.19
18:56
(138) (139)
Проблемы никакой, конечно, это просто дело техники. Но зачем что-то делать там, где можно ничего не делать? Вывод в одной колонке это базовое требование заказчика. Или дата или "Не треб." если точка выключена или пусто если дата не задана.
141 Diman000
 
23.01.19
18:59
И раз уж ты мне продолжаешь задавать вопросы, то я и свой повторю.
Почему такое составное поле это плохо, можешь сказать?
142 DexterMorgan
 
23.01.19
19:13
(141) Потому что ты можешь заиметь кучу граблей, которые как ты сам пишешь надо проверять. Тебе всегда нужно помнить, что это поле составного типа. Отсюда и идут в запросах =Истина, от херовой архитектуры. И я задам вопрос, раз сложности нет нахера это? проверять как работают отборы, группировки и проч функции когда параметром ты будешь передавать составного типа поля, выбирать тип в полях, зачем это все?

"Вывод в одной колонке это базовое требование заказчика"

Рисуй ему форму какую хочешь, хранится должно в разных полях. Это удобнее самому программисту, это прозрачно и понятно работает
143 Diman000
 
23.01.19
19:20
(142)
Я тебя разочарую, но за 5 лет никаких серьезных проблем не появилось.
Тип в полях формы не выбирается, читай внимательно что я пишу.
Так что пока одни плюсы, отчётов и форм уже не перечесть. И они клепаются на раз, сразу в нужном виде
144 Botanik8888
 
23.01.19
23:24
(143) я бы на месте Вашего приемника утопил вас в ближайшей проруби.....
145 palsergeich
 
23.01.19
23:52
(99) То что это (83) говно.
Используй группу колонок в конце концов.
Для задачи план факт просто идеален оборотный регистр, он просто создан для нее.
146 palsergeich
 
23.01.19
23:53
(85) А разве минимум не всегда дает Null, если он есть?
Я эту шнягу еще в SQL на 8.2 использовал.
147 palsergeich
 
23.01.19
23:58
(105) Ой лолллл
Открой для себя функцию формат.
https://yadi.sk/i/kiL_nj8QE4RkuQ , если формат не подходит группа колонок тоже решает эту задачу "склеивает" 2 реквизита в 1.
Я всегда догадывался что во франчах у людей кто долго сидит в мозгу что то происходит....
148 palsergeich
 
24.01.19
00:00
Это неподдерживаемая, а еще я уверен недокументированная особенность.
Вот уедешь ты в отпуск, я даже не представляю как пердан гореть будет у того, кто на это наткнется
149 Бертыш
 
24.01.19
00:06
недопереучившиеся семёрошники

Программисты со стажем
150 ssh2006
 
24.01.19
00:11
(0)

"огические выражения и логические значения (например, результат функции, возвращающей логическое значение, переменные типа Булево и пр.) не следует проверять путем сравнения с литералами Истина и Ложь.
Правильно:

Если ЭтоНовый() Тогда

Неправильно:

Если ЭтоНовый() = Истина Тогда"
https://its.1c.ru/db/v8std#content:2149184090:hdoc
151 palsergeich
 
24.01.19
00:25
https://yadi.sk/i/ZG2rswhfZ6Hrww
https://yadi.sk/i/soJ9McjlZfE5Xg
Вот так вот за 10 минут 2 реквизита документа в 1м поле.
В СКД есть выражение представления
152 palsergeich
 
24.01.19
00:29
https://yadi.sk/i/DlpIHfsp7H40XA
Вообще без кода форма списка.

Форма элемента - в 5 строчек, можно сделать понтовой гиперссылкой и заказчик будет счастлив.
СКД вывод те же 10  минут займет описать выражение представления.
Только мое решение на класс выше составного недокументированного и логически неясного объединения типов там, где без него можно обойтись без потери функционала....
153 palsergeich
 
24.01.19
00:36
Сортировка тоже работает.
Вот только поиск - с окном выбора типа, но это аналогично составному типу.
https://yadi.sk/i/xpyerwav3S06-g
https://yadi.sk/i/FCCt3u9fHCe40w
154 Diman000
 
24.01.19
01:32
Как же смешно вас читать, ребята)
Не всех, некоторые серьезно подходят к обсуждению.
Им большое мое человеческое спасибо, говорят о фактических минусах моего решения, которые конечно же есть.
А не просто о порванных шаблонах.

(144) Опять ярлык, разумных доводов нет.
Как разумные доводы появятся, излагай, я готов о них поговорить.

(147) Во всех наших мозгах что-то происходит.
Франч, не франч, это не важно.
Вы работаете там где вам нравится работать, а я там где нравится мне.
Рынок труда расставляет нас по местам.
Я очень востребован и высокооплачиваем, надеюсь, что и вы также.
Склеивание в группе колонок это замечательно.
Но зачем это все, когда и так все отображается в нужном виде?

(148) Давно уже работают с десяток человек в разные времена над моей архитектурой.
Короткое объяснение дает полное понимание как с ней работать и не вызывает ни у кого никаких проблем.
155 Diman000
 
24.01.19
01:41
И да, кстати.
Аргумент, что новому спецу будет сложно в этом разобраться без объяснений предшественника, принят.
Да, без объяснений будет сложно, согласен.
156 CHerypga
 
24.01.19
08:52
вот прямо сейчас открыт код нетрадиционной ориентации, и там написано примерно следующее

Процедура ТабличнаяЧастьПередНачаломДобавления(Элемент, Отказ, Копирование)
    
    Если (ТипЗнч(Копирование) = Тип("Булево") И Копирование) Тогда        
        Возврат;
    КонецЕсли;    

//собственно код
    
КонецПроцедуры

а сделано так потому что кое кому было лень использовать традиционные методы программирования и он решил сам вызвать эту процедуру и кое что ей дополнительно передать
157 ADirks
 
24.01.19
09:17
(156) Скажи спасибо, что не в попытку завернули. Хоть какой-то шанс оставлен.
158 ADirks
 
24.01.19
09:33
По теме.

Аргументация за "Проведен = Истина" вполне понятно - защитное программирование.
Но есть и другая сторона, и тоже про защитное программирование. Если мы напишем "Если Проведен Тогда", и некая редиска подбросит в проведён не булево значение, то у нас всё поломается, все это увидят, и позор со скандалом. Но. Зато не произойдёт неведомо что, вообще никак не запланированное никем. А иной раз такое происходит, и замечают это довольно поздно, когда ошибки накопились уже в данных.

Какую защиту выбирать - зависит от ситуации конечно. Лично я выбираю второй вариант. Пусть мой код сломается, зато я быстро его исправлю, причём исправлю причину, а не следствие.
159 Diman000
 
24.01.19
11:12
Ну что же, аргументация против Проведен = Истина тоже понятна.
Согласен, есть ситуации когда код должен отвалиться с ошибкой, а не проскочить дальше из-за того что он обернут в Попытку или в = Истина.
Но на моей практике с булевыми проверками такого не встречалось.
У меня чаще встречается, что запрос перестает возвращать реальные значения и неявные проверки падают...

Я уже это несколько раз тут говорил.
Если у вас другой опыт, то я совершенно не против, пусть будет так.
Ни в проруби топить, ни мудаком называть я вас не стану)))
160 DrZombi
 
гуру
24.01.19
11:18
(156) Фу, как узко, надо было так писать.


Процедура ТабличнаяЧастьПередНачаломДобавления(Элемент, Отказ, Копирование, ПроЯзвольНыйПараметр=Неопределено)
    
    Если Копирование <> Неопределено И Копирование Тогда        
        Возврат;
    КонецЕсли;    

    Если ПроЯзвольНыйПараметр <> Неопределно Тогда        
              //Магия волшебство и феи :)
        Возврат;
    КонецЕсли;    


//собственно код

    
КонецПроцедуры
161 DrZombi
 
гуру
24.01.19
11:19
(0) Побоку, вы атрофировались, попробуйте взглянуть на мир с другой стороны.

Другое
162 dezss
 
24.01.19
11:26
В данном случае - это говнокод.
Вообще подобное может и имеет смысл, но я его увидеть не могу.
Я скорей напишу первым условием проверку на тип значения.

Другое
163 ADirks
 
24.01.19
11:29
(159)
> У меня чаще встречается, что запрос перестает возвращать реальные значения и неявные проверки падают...

Ну так я же про то же. Если вдруг что-то происходит в запросе, то и разбираться надо с запросом? Бывает, поменяется структура данных, и внезапно некоторые запросы перестают работать корректно. По мне, уж лучше пусть оно сразу с ошибкой упадёт.
164 Diman000
 
24.01.19
11:37
(163) Проверка условия может на русском звучать так: "Если там что-то есть и оно = Истина, то шагаем по коду дальше".
Пока оно есть все работает.
А затем, внезапно, его больше нет. Чистая база создана или права у кого-то урезанные.
Вот для таких случаев лучше написать = Истина напрямую. Ну или проверять на тип или на неопределено.
165 Oftan_Idy
 
24.01.19
12:03
(0) Не имеет значения как написано. Главное чтобы код был понятным

Другое
166 AlxOlm
 
24.01.19
12:33
Глубокое понимание духовных основ 1с программирования,
приходящее к небольшому числу избранных, после десятилетий самоотречения и медитаций в единении с природой, позволяет строить подобные конструкции.

Программисты со стажем
167 AlxOlm
 
24.01.19
12:35
Как замечательно, что глубокопочитаемый "wowik" вынес столь важный вопрос на обсуждение.
168 Вафель
 
24.01.19
12:35
Только вот зачем писать "НЕ =", когда можно писать "<>"
169 singlych
 
24.01.19
12:36
(146) обычно было Ложь, но как оказалось, зависит от СУБД.
170 singlych
 
24.01.19
12:38
(168) <> в xml не выгружается :))
171 Вафель
 
24.01.19
12:41
(170) выгружаются конечно же
172 ADirks
 
24.01.19
13:49
(168) чтобы написать <> некоторым нужно раскладку переключать
173 wowik
 
24.01.19
15:01
(172) же программы, которые позволяют переключать раскладку, сам пользуюсь)
может эти люди не в курсе про такие программы, может им надо сказать об этом?)
174 wowik
 
24.01.19
15:04
(165) в том то и дело, что получается "загромождение чертежа", вместо одной операции, сразу 2 нужно обрабатывать.
175 bolobol
 
24.01.19
15:05
(173) Мне расскажите об этом! Страдаю - жесть просто...
176 wowik
 
24.01.19
15:06
177 ДенисЧ
 
24.01.19
15:07
(175) Я пользую 1С:AutoDesigner.
например <> вводится как Alt-бю и ещё полтора десятка символов.
178 bolobol
 
24.01.19
15:07
(176) "Официальный" ответ от Яндекса: "Да, мы не можем обеспечить совместимость протоколов для передачи нажатия горячей клавиши на удалённый компьютер"
179 bolobol
 
24.01.19
15:10
(177) Где взять?
180 DexterMorgan
 
24.01.19
15:10
(177) на основном месте работы здорово. Не здорово, когда тебе приходится подключаться по рдп/работать в другом месте. Особенно когда привыкнешь
181 wowik
 
24.01.19
15:13
182 Nyoko
 
24.01.19
15:13
ДокументСсылка.Проведен достаточно

просто программист который это пишет находится в стрессе или ему не нравится то чем он занимается.
+Ни кто ни разу не ржал над его кодом, подсказать нужно человеку чтобы относился к жизни проще..

Показать хаки типа

Не писать
Если Проведен = Истина Тогда
ТолькоПросмотр = Истина;
иначе
ТолькоПросмотр = Ложь;
КонецЕсли;

Можно просто же написать ТолькоПросмотр = Не Проведен;

Другое
183 bolobol
 
24.01.19
15:15
(180) В смысле? Это тоже через РДП не работает?
184 bolobol
 
24.01.19
15:16
(180) И, кстати, какая разница, куда по РДП подключаться, на рабочий сервер или на "другое место"? Как от этого зависит работоспособность программы? Или о чём речь?
185 bolobol
 
24.01.19
15:21
(177) Не работает. Только на локальном компьютере отрабатывает, но это никому не нужно.
186 Nyoko
 
24.01.19
15:21
Встречался программист который на Delphi писал всю жизнь около 20 лет, его код в 1с меня просто вскрывал, от названия переменных до работы с логикой, форматирование .. просто жопа.. но его поделки работали ..
187 Tonik992
 
24.01.19
15:36
(186) парочку примеров пожалуйста, будьте добры )) уж оч. хочется на бест практикс взглянуть
188 Вафель
 
24.01.19
15:39
многие проги вообще не форматируют код
189 Вафель
 
24.01.19
15:39
(187) небось половину ключевых слов на инглише писал
190 wowik
 
24.01.19
15:40
(189) в одну строку))
а какая максимальная длина строки в 1с для кода?
191 ДенисЧ
 
24.01.19
15:50
(179) В гугле ищется на раз
(180) а оно у меня на гугле лежит, установки не требует. Скачал, запустил
192 ДенисЧ
 
24.01.19
15:50
(181) Он самый
193 ДенисЧ
 
24.01.19
15:51
(185) Работает. Достаточно его на терминал закинуть и запустить
194 DexterMorgan
 
24.01.19
15:52
(193) Не всегда есть права на установку чего то там на терминале
195 ДенисЧ
 
24.01.19
15:52
(189) Я помнится, одну обработку импорта из акспаты целиком на аглицком писал, ибо там скуль и адо, переключаться задалбывался...
Зато меня потом 5 раз (уже после увольнения) приглашали на дописать её, ибо местные не понимали, что там написано ))
196 ДенисЧ
 
24.01.19
15:52
(194) Она не устанавливается. Она просто запускается
197 DexterMorgan
 
24.01.19
15:53
(193) И доступ к интернетам
198 wowik
 
24.01.19
16:05
(190) сколько символов программного кода влезет в одну строку? Есть ограничения?
199 Nyoko
 
24.01.19
16:18
(187) копий не осталось базы этой давно было.. .
200 ADirks
 
24.01.19
17:00
Для того, чтобы раскладку не переключать, есть например AutoHotKey
Как использовать, например тут: http://catalog.mista.ru/public/339035/

кусочек файла для AHK
;==================================
;символ '<' по Ctrl-,
$^SC033::Send <


;===================================
;символ '>' по Ctrl-.
$^SC034::Send >

;===================================
;символ '|' по Ctrl-\
$^\::Send |


;===================================
;символ '[' по Ctrl-[
$^SC01A::Send [
;символ ']' по Ctrl-]
$^SC01B::Send ]
201 Вафель
 
24.01.19
17:05
можно еще Альт+60, Альт+62 набирать
202 cons24
 
24.01.19
17:11
у меня коллега бывший семерочник всегда так писал. Ну и я иногда, когда не точно уверен что слева будет именно булево, а не булево/неопределено.

Программисты со стажем
203 GANR
 
24.01.19
17:54
Это самая безобидная разновидность говнокода

Другое
204 Про100Филя
 
24.01.19
18:06
Ууу... тут много вариантов, самый очевидный было так:

ДокументСсылка.Проведен = Ложь

Потом добавили НЕ ибо быстрее исправить.

Или программист был пьян или не в себе, а то видел и подобные конструкции:

НЕ ДокументСсылка.Проведен = (Неопределено = Истина)
НЕ ДокументСсылка.Проведен = 3.14

Другое
205 Конструктор1С
 
24.01.19
19:35
Плохой стиль программирования, он как плохой стиль вождения, - возникает в самом начале и остаётся на всю жизнь

Программисты со стажем
206 bolder
 
25.01.19
07:59
(20) Абсолютно правильный код.Логично обрабатывать главную ветку первой .
Вот стандарт  от 1с:
«1. Проверку того, что результат выполнения запроса не содержит строк следует выполнять с помощью метода Пустой. Поскольку на получение выборки из результата запроса (выгрузка его в таблицу значений) будет затрачиваться дополнительное время.

Неправильно:

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
  Возврат Истина;
Иначе
  Возврат Ложь;
КонецЕсли;

Правильно:

Возврат НЕ Запрос.Выполнить().Пустой()
«.
207 JeHer
 
25.01.19
08:10
Вы еще забыли про:
Если ДокументСсылка.Проведен = Истина и НЕ ДокументСсылка.ПометкаУдаления = Истина Тогда

Начинающие программисты так пишут
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой