Имя: Пароль:
1C
 
Соответствие и "Неопределено"
Ø (Волшебник 09.11.2020 08:24)
0 RomaH
 
naïve
28.10.20
11:16
СоответсвиеПредставленияРезультата = Новый Соответствие;
    СоответсвиеПредставленияРезультата.Вставить(Перечисления.ОбнаруженоНеОбнаружено.ПустаяСсылка(),"?");
    СоответсвиеПредставленияРезультата.Вставить(Неопределено,"?");
    СоответсвиеПредставленияРезультата.Вставить(Перечисления.ОбнаруженоНеОбнаружено.Обнаружено,"+");
    СоответсвиеПредставленияРезультата.Вставить(Перечисления.ОбнаруженоНеОбнаружено.НеОбнаружено,"-");


однако оказывается Неопределено ключем быть не может ... вот и не расстройся
1 ДенисЧ
 
28.10.20
11:18
Странно, да?
2 ДенисЧ
 
28.10.20
11:18
А ещё NULL ты не можешь туда впихнуть...
3 mistеr
 
28.10.20
11:20
И слава БГ, что не можешь.
4 fisher
 
28.10.20
11:21
Вообще - да. Странно. Неопределено и null - особые типы. Но иметь возможность использовать их в качестве ключей была бы удобной.
5 Волшебник
 
28.10.20
11:21
(0) Продолжайте наблюдения.
6 mistеr
 
28.10.20
11:24
(4) А еще ХранилищеЗначения и ДвоичныеДанные, да?
7 fisher
 
28.10.20
11:24
(6) Нет.
8 Йохохо
 
28.10.20
11:24
(4) они значения, а не типы
9 vi0
 
28.10.20
11:25
(3) БГН!
10 fisher
 
28.10.20
11:26
(8) Про null не помню, а Неопределено является ЕМНИП отдельным типом. Ну, чтобы корректно в полях составного типа отрабатывать.
11 vi0
 
28.10.20
11:27
(10) и тип и значение
12 fisher
 
28.10.20
11:28
(11) Ага. Единственное значение своего типа. Типа :)
13 mistеr
 
28.10.20
11:33
(4) Есть СписокЗначений, там можно.
14 fisher
 
28.10.20
11:38
(13) Я подозреваю, что это просто техническая фича. Структура и соответствие являются хэш-структурами и конкретный тип должен поддерживать генерацию хэша для этих целей. Ну а для Неопределено по каким-то соображениям решили этого не делать. Может, какой-то высокий смысл в этом и есть. Но мне отсюда его не видно. А список значений - обычная коллекция, не на хэшах.
15 fisher
 
28.10.20
11:39
Тьфу ты. Для структуры же ключ - обычная строка. Т.е. вышенаписанное конкретно только для соответствия актуально.
16 Волшебник
 
28.10.20
11:40
(8) Типы тоже. В этих типах по одному значению.
17 Ненавижу 1С
 
гуру
28.10.20
11:40
Null нормально ключ, а неопределено нет
18 Ненавижу 1С
 
гуру
28.10.20
11:40
Это же 1с. Любители пустых значений
19 fisher
 
28.10.20
11:41
(18) Только хотел сказать, что главный ненавистник Неопределено в чате :) Еще один пункт в копилку ненависти :)
20 Ненавижу 1С
 
гуру
28.10.20
11:43
(19) да мне уже пох.. Просто стоит обратить внимание на тот же Шарп, где справляются одними null
21 vi0
 
28.10.20
11:44
(20) почему именно шарп?
22 MishaD
 
28.10.20
11:45
Соответствие (Map)
Получить (Get)
Синтаксис:

Получить(<Ключ>)
Параметры:

<Ключ> (обязательный)

Тип: Произвольный.
Ключ значения.
Возвращаемое значение:

Тип: Произвольный.
Значение элемента соответствия.
Неопределено - если указанный ключ отсутствует.
23 fisher
 
28.10.20
11:45
Мне сразу было пох :) Этот двуликий анус особо жить не мешает. Благо правила игры простые.
24 fisher
 
28.10.20
11:46
(22) Браво! А слона-то никто и не заметил :)
25 Конструктор1С
 
28.10.20
11:49
(0) всё намного проще. Не суй никаких пустых значений в соответствие. А если соответствие ничего не вернуло, считай будто бы вернуло "?"
26 fisher
 
28.10.20
11:50
(20) А что в шарпе возвращают в качестве пустого результата поиска?
27 ДенисЧ
 
28.10.20
11:52
(26) А в 1с что возвращают?
28 Конструктор1С
 
28.10.20
11:54
(20) обходятся, только более дорогой ценой
29 fisher
 
28.10.20
11:55
(27) Для массивов/соответствий - Неопределено. Поэтому отпадает вариант помещать в них это самое Неопределено.
30 vi0
 
28.10.20
11:57
(22) так это значение, а не ключ
31 Волшебник
 
28.10.20
12:02
Вместо Неопределено вставляйте "У холмов есть глаза"
32 mistеr
 
28.10.20
12:04
Тип (и значение) Неопределено есть в 1С потому, что есть составные типы. Для обозначения того, что нечто составного типа не только не содержит значения, то и конкретный тип не определен. Использование Неопределено для обозначения того, что функция/метод ничего не вернул, это уже вторично.
33 fisher
 
28.10.20
12:11
Сам нашел.
Attempting to get a non-existent key
Java's HashMap will return null.
.NET's Dictionary will throw a KeyNotFoundException
Ну а для массивов все индекс возвращают. Отрицательное число - значит не нашел.
34 fisher
 
28.10.20
12:31
(30) А ведь и действительно. Это значением в соответствие проблема Неопределено засунуть. Потому что не сможешь понять - это такое значение вернуло или ничего не нашло. На использование Неопределено в качестве это никак не влияет. В джава именно так и есть. Там можно null и в качестве ключа использовать и null возвращается, если ничего не нашло.
Так что вопрос, почему Неопределено нельзя использовать в качестве ключа соответствия остается открытым.
35 fisher
 
28.10.20
12:33
"На использование Неопределено в качестве ключа это никак не влияет"
36 Ненавижу 1С
 
гуру
28.10.20
12:44
(21) как пример такого же средства для корпоративных приложений
37 MishaD
 
28.10.20
12:54
(35) а как ты поймешь у тебя там ключа нет, или Неопределено ?
38 Ненавижу 1С
 
гуру
28.10.20
13:08
(28) с чего такой вывод?
39 fisher
 
28.10.20
13:17
(37) Если Неопределено - это ключ, то по нему лежит какое-то значение (но не Неопределено - с ним непонятно как быть). Соответственно, если по ключу Неопределено я получаю не Неопределено - то я получил свое значение. Если получил Неопределено - значит нет такого ключа.
40 RomanYS
 
28.10.20
13:31
(39) +1
На самом деле невозможность использовать Неопределено в качестве ключа - это баг. В документации такого запрета нет, исключения при вставке тоже нет <!>, теоретических препятствий тоже нет.
41 Конструктор1С
 
28.10.20
13:39
(38) там приходится гораздо больше задрачиваться на эксепшены и проверки на null
42 Волшебник
 
28.10.20
13:41
(41) Причём Exception бывает разного типа...
43 Конструктор1С
 
28.10.20
13:45
(42) вот именно
44 fisher
 
28.10.20
13:58
(41) Поэтому в го по своему прикольный подход. На обработку эксепшнов часто забивают на старте и потом это выходит боком. А го форсит сразу прописывать обработку ошибок.
45 MishaD
 
28.10.20
14:16
(39) Логично. Торможу.
46 Ненавижу 1С
 
гуру
28.10.20
15:58
(41) да конечно. Уж поменьше чем в 1с
47 1Сергей
 
28.10.20
16:03
(24) там нет слона
48 Конструктор1С
 
28.10.20
16:52
(46) ты шутишь?
49 Ненавижу 1С
 
гуру
28.10.20
17:04
(48) я серьезно вполне
50 Жан Пердежон
 
28.10.20
17:08
Соответствие (Map)
Вставить (Insert)
Синтаксис:
Вставить(<Ключ>, <Значение>)
Параметры:
<Ключ> (обязательный)

скорее всего Неопределено эту проверку не проходит
51 Ненавижу 1С
 
гуру
28.10.20
17:15
(50) а null проходит
52 RomanYS
 
28.10.20
17:18
(50) Тогда исключение должно быть, а его нет
53 fisher
 
28.10.20
17:18
(47) Да. Уже потом понял.
54 Конструктор1С
 
28.10.20
18:43
(49) ну-ну. Берём типичный приём, паттерн фабрика (Factory). Это что-то вроде составного типа в ихнем тру-программировании

пример

public class CarFactory {
    public static Car buildCar(CarType model) {
        Car car = null;
        switch (model) {
        case SMALL:
            car = new SmallCar();
            break;
        case SEDAN:
            car = new SedanCar();
            break;
        case LUXURY:
            car = new LuxuryCar();
            break;
        default:
            throw new IllegalArgumentException("Incorrect car type");
        }
        return car;
    }
}

наверняка ты уже догадался, что где-то выше по стеку фабрику должен караулить try-catch? Скорее всего этот try будет отлавливать несколько эксепшенов. Вот так даётся "составной" тип данных в тру-программировании. Если не выбрасывать эксепшн из фабрики, то где-то дальше по коду легко можно схлопотать труднодиагностируемый NullPointerException. В 1с такие заморочки нафиг не нужны
55 fisher
 
28.10.20
18:54
(54) В 1С в случае некорректного входного параметра я тоже буду выбрасывать эксепшн. А ты что предлагаешь делать?
56 Конструктор1С
 
28.10.20
19:08
(55) зачем тебе эксепшн?

В 1с:
Неопределено как незаполненное значение составного типа
null как неудачно полученное из БД значение
ПустаяСсылка как пустое значение конктеного типа
и всё это прекрасно хаватеся методом ЗначениеЗаполнено()

В этих ихних джавах:
null как незаполненное значение составного типа
null как неудачно полученное из БД значение
null как пустое значение конктеного типа
но различать-то их между собой ой как хочется
57 Ненавижу 1С
 
гуру
28.10.20
19:12
(54) сценариев много, аналог этого в 1с у тебя есть?
Да и паттерн фабрика тут так себе. Оно не так реализуется
58 NorthWind
 
28.10.20
19:19
(0) почему-то я не удивлен. Наверно, потому что одна неопределенность не равна другой неопределенности, а раз нельзя сравнивать - то и нельзя юзать в качестве ключей.
59 NorthWind
 
28.10.20
19:20
(40) см. (58). Нуллы и неопределенности нельзя сравнивать между собой.
60 RomanYS
 
28.10.20
19:24
(59) А зачем их сравнивать?
(Неопределено = Неопределено) = Истина?
61 Ненавижу 1С
 
гуру
28.10.20
19:25
(59) так себе объяснил...
В запросах неопределено сравнивать можно
В соответствиях null вполне себе ключ
62 NorthWind
 
28.10.20
19:33
(60) для того чтобы достать что-то по ключу, нужно сравнить переданный в функцию получения значения ключ с тем который в контейнере. А две неопределенности сравнить между собой абсурдно, хотя бы потому что они могут относиться к значениям разных типов. Значение типа дата может быть неопределено и типа число неопределено, это разные неопределенности.
63 fisher
 
28.10.20
19:35
(56) Ну то есть ты по сути предлагаешь заменить эксепшн возвратом признака и описания ошибки. То есть обрабатывать ошибку передачи некорректного параметра во всех местах вызова метода. Это глупо. Если ты пропустил в метод некорректный параметр, то тебе нужно тупо падать. Ибо это баг программы.
64 Конструктор1С
 
28.10.20
19:38
(57) в 1с фабрика не нужна.

"Оно не так реализуется"
Ну, фабрика может реализоваться через общий интерфейс, но тут чувствительность к null ещё сильнее.

Может приведёшь уже свои примеры? Как в шарпе доблестно и просто отбиваются одним null на все случаи жизни
65 Конструктор1С
 
28.10.20
19:50
(63) "Ну то есть ты по сути предлагаешь заменить эксепшн возвратом признака и описания ошибки"

Ты про что вообще? Зачем возвращать признак и описание ошибки?
66 Конструктор1С
 
28.10.20
19:52
(63) посмотри ещё раз внимательно пример. Это не некорректный параметр, это просто неучтённое значение, которое приведёт к null на выходе
67 NorthWind
 
28.10.20
19:52
(60) (Неопределено = Неопределено) = Истина?

Ну а я вот несогласный. (Неопределено=Неопределено) = Ложь.
Переубедите меня :)

Шутка. На самом деле я полагаю что такое сравнение не имеет смысла.
Скорее всего это ложь, потому что неопределенности могут быть разной природы.
А может, и нет. А может, да.
68 PR
 
28.10.20
20:04
Закинул ТС небольшой странный пятничный тупнячок и пропал
А в ветку продолжали и продолжали писать личности, не имеющие доступа к конфигуратору и реальных задач
69 Стаканов
 
28.10.20
20:08
(68) А тут пришёл Рома, но так как он не лесник, то тихо пукнул в лужу...
70 fisher
 
28.10.20
20:24
(65) Ты привел пример "плохого" кода из шарпов, который выкидывает эксепшн в случае передачи методу неправильного параметра.
А я ответил - что в 1С нужно делать тоже самое и точно так же. А то, что это почти никто не делает - из той же серии почему в 1С почти никто тестов не пишет.
71 PR
 
28.10.20
20:26
(69) Дружок, про всякие соответствия, Неопределено и NULL и на ИТС уже все давно расписано и в интернете вагон инфы
Но постоянно находятся особо одаренные, которые не умеют читать СП и в итоге постоянно какие-то споры о том, Неопределено = Неопределено или нет, NULL = Неопределено или нет и прочая пурга
72 Ненавижу 1С
 
гуру
28.10.20
20:30
(71) все тут прекрасно понимают как ЭТО работает
вопрос тут ближе к теме - зачем породили столько разных сущностей, вот собственно и все
73 Стаканов
 
28.10.20
20:32
(71) Да я не против, в общем, нравится тебе из себя пузырики выпускать - ну что уж тут поделать, старого пса новым трюкам не научишь.
74 RomanYS
 
28.10.20
20:34
(71) Раз хорошо знаком с документацией, опровергни (40) и закроем вопрос :)
75 Стаканов
 
28.10.20
20:37
(74) Рома сможет объяснить только, почему ты дурак, а он дартаньян :)
76 fisher
 
28.10.20
20:38
Потому что он соответствия соответствовал, когда вы еще пешком под стол ходили!
У нас субординация и выслуга лет!
77 Ненавижу 1С
 
гуру
28.10.20
20:38
(54) плохой код, хрупкий...
его придется дописывать при добавлении каждого нового вида
действительно, нужно опираться на интерфейс

а иначе вырастают такие вот монстры как в типовых а-ля методов ОбработатьСтрокуТЧ
78 PR
 
28.10.20
20:44
(72) Каких сущностей-то?
Ты опять сейчас начнешь тянуть зеленую соплю о том, что множество разнообразных незаполненных значений взрывают твой мозг?
А то так-то все просто
Неопределено — это когда переменная есть, а тип значения не установлен, в итоге Неопределено
NULL — это вообще из запросов тянется, ситуация, когда вообще ничего нет, то есть пусто, вакуум то бишь
Про соответствие вообще не понял, что тут лишнего
79 Ненавижу 1С
 
гуру
28.10.20
20:45
(78) "Про соответствие вообще не понял, что тут лишнего"
Ну не понял и не понял, идем дальше
80 PR
 
28.10.20
20:55
(74) А что тут опровергать-то?
Неопределено в качестве ключа использовать нельзя, пусть даже это не написано в явном виде в СП
Так-то вообще до кучи вещей можно доДДСиться, было бы желание
Проверка примитивная


С1 = Новый Соответствие;
С1.Вставить(1, "Зн1");
С1.Вставить(2, "Зн2");

Сообщить("Ответ " + С1.Получить(1));
Сообщить("Ответ " + С1.Получить(3));
Сообщить("Ответ " + С1.Получить(Неопределено));

С2 = Новый Соответствие;
С2.Вставить(Неопределено, "Н");
С2.Вставить(1, "Зн1");
С2.Вставить(2, "Зн2");

Сообщить("Ответ " + С2.Получить(1));
Сообщить("Ответ " + С2.Получить(3));
Сообщить("Ответ " + С2.Получить(Неопределено));


выдает

Ответ Зн1
Ответ
Ответ
Ответ Зн1
Ответ
Ответ
81 Cyberhawk
 
28.10.20
20:58
(15) Структура начиная с 8.2 тоже хешируется, т.е. является полностью аналогом соответствия (ну только ограничения на значение ключа наложено)
82 Ненавижу 1С
 
гуру
28.10.20
21:01
83 RomanYS
 
28.10.20
21:11
(80)
проверку то я делал, и гораздо проще и понятнее:  
С2 = Новый Соответствие;
С2.Вставить(Неопределено, "Н");
Сообщить(С2.Количество());

И мой вывод, что это баг. А ты пришёл с рассказами, что на ИТС и в СП всё расписано.
84 PR
 
28.10.20
22:05
(83) Ну так удали в (40) "не" в тексте "На самом деле невозможность использовать" и будет сразу понятнее
А то сейчас звучит так, что типа невозможно использовать и это баг, должно быть возможно
А по факту у тебя получается, что невозможно, а баг — это то, что строка вставки с ключом Неопределено хоть и не добавляет записи, но не выдает исключения
85 RomanYS
 
28.10.20
22:15
(84) Под "использовать" естественно имелось в виду в том числе и получение по ключу, что по факту невозможно.
И естественно предполагалось, что читающий это сообщение в данной ветке знает о фактическом поведении системы. Предположение понятно в общем случае ложно, но для заинтересованных - верно.
86 PR
 
28.10.20
22:16
(85) Ну так я и говорю, что невозможность получения — это не баг, а нормально, так и должно быть
А ты говоришь, что баг
87 Стаканов
 
28.10.20
22:18
(85) Самый главный вывод - чтобы избежать неопределённого поведения, надо при добавлении ключ соответствия проверять на Неопределено :)
88 RomanYS
 
28.10.20
22:18
(86) Почему нормально? В документации такое поведение не указано, теоретических преград - я не вижу.
89 Стаканов
 
28.10.20
22:20
(88) Да давай уже, признайся, что дурак, а то он ведь от тебя не отстанет.
90 PR
 
28.10.20
22:22
(88) Потому что баг в данном случае — это невыдача исключения при выполнении такой строке
Ну а то, что не описано в доке — я же говорю, недоработка, в СП полно таких недоработок, че ж теперь
91 PR
 
28.10.20
22:23
(89) Ты же понимаешь, что дураком здесь выглядишь только ты?
92 Ненавижу 1С
 
гуру
28.10.20
22:25
(90) недоработка это тоже баг
(91) ты неправ
93 RomanYS
 
28.10.20
22:25
(90) Баг - в целом такое поведение.
Ты ожидаешь исключения, а я ожидаю нормальной работы с ключом Неопределено.
Любой из этих вариантов был бы нормальным.
94 Стаканов
 
28.10.20
22:27
(92) Рома никогда в жизни не признается, что не прав, не по пацански это :))
95 PR
 
28.10.20
22:27
(93) Ну, так-то ты прав, на мой взгляд логичнее было бы запретить Неопределено в качестве ключа
96 PR
 
28.10.20
22:28
(94) Иди говна поешь :))
97 PR
 
28.10.20
22:29
(92) Недоработка это тоже баг — какая глубокая мысль, даже нечего возразить
Еще жук по-английски тоже баг, да
98 Ненавижу 1С
 
гуру
28.10.20
23:06
(96) кого это высказывание характеризует?
99 Стаканов
 
29.10.20
06:59
(96) Рома, я охотно верю, что ты это практикуешь, и что тебе это помогает, но нет, откажусь, пожалуй.
100 dmpl
 
29.10.20
08:36
(63) Бизнес-приложение падать не должно - из-за этого теряются бабки. Оно должно работать, максимум лепетать что-то про некорректность.
101 dmpl
 
29.10.20
08:44
А вообще, надо смотреть, относится ли тип Неопределено к множеству типов "Произвольный". Судя по тому, что его нельзя добавить в качестве типа в ОписаниеТипов - нет.
102 dmpl
 
29.10.20
08:50
(90) Это не баг, это фича. Чтобы приложение не падало, если вдруг в качестве ключа Неопределено пролезет.
103 Стаканов
 
29.10.20
09:02
(102) Но если оно у тебя пролезет, ты об этом никогда не узнаешь. Может ли это быть критичным в определённых ситуациях?
104 dmpl
 
29.10.20
09:09
(103) Если это критично - ставь проверку. Если не критично - пусть работает. Расчет на попоруких копрокодеров. Ну и, если посмотреть с прикладной точки зрения - если вдруг где-то пролезло Неопределено в качестве ключа - скорее всего и значение там будет тоже незаполненным, т.е. Неопределено.
105 Ненавижу 1С
 
гуру
29.10.20
09:44
(104) как объяснение на уровне "сам дурак" подойдёт
106 Стаканов
 
29.10.20
09:56
(104) Ну вот, например, пишешь ты в соответствие связку Заказ-ПТУ, Заказ получаешь какой-нибудь хитрой функцией, которая может вернуть Неопределено, если не проверять Заказ на Неопределено, ты потеряешь минимум одно ПТУ :) Так что склонен всё-же отнести такое поведение, и отсутствие его внятного описания в документации, к ошибкам. Но если об этом помнить, и проверять на Неопределено ключ соответствия, то никаких проблем, да.
107 fisher
 
29.10.20
10:04
(100) Если ты при очевидном баге в программе не падаешь (не прерываешь работу приложения с сообщением об ошибке), то последствия для бизнеса будут гораздо более печальные. Потому что последствия некорректной работы программы непредсказуемы и плавающий баг проявляющийся далеко от места возникновения ты можешь поколениями программистов отлавливать.
108 fisher
 
29.10.20
10:08
(100) Если ты обрабатываешь в коде конкретную ошибочную ситуацию - то все хорошо. Это уже не баг, а предусмотренная программистом ситуация с описанными вариантами ее разрешения. Проверка же входных параметров с эксепшнами - это последний защитный барьер на тот случай, если ты в коде натупил и допустил очевидные баги.
109 fisher
 
29.10.20
10:15
(100) Банальный пример. Ты вызываешь метод с числовым параметром из недопустимого диапазона. Если ты хочешь мягко обработать некорректный ввод пользователя - ты должен сделать это до вызова метода. Если ты уже вызвал метод с некорректным параметром, значит ты этого не сделал и функция не сможет выдать корректный результат. Определять ошибку входных параметров по результату работы метода - это глупо. Во-первых, программист может забыть это сделать во всех местах использования метода (и получит тот самый плавающий баг). Во-вторых, в этот момент неудобно устанавливать конкретную причину. Либо ее надо пробрасывать в результат работы метода, либо программисту придется полностью воспроизводить ситуацию.
110 fisher
 
29.10.20
10:35
В golang прикольнее решили. Ты выбрасываешь эксепшн не "куда-то туда", а прямо в результат работы метода. И принимать решение что с этим делать нужно не "где-то там", а сразу при обработке результата работы метода. Тут есть и минусы и плюсы. Я из лагеря тех, кто плюсов видит больше, чем минусов.
111 fisher
 
29.10.20
10:45
(109) + При этом, даже если ты определяешь ошибку входных параметров по результату работы метода - то наиболее частый сценарий это все равно остановка работы программы с выдачей сообщения об ошибке. То есть ровно тоже самое что произойдет при выбросе либо вообще не обрабатываемого эксепшна, либо с глобальным перехватчиком эксепшнов (для "облагораживания" их отображения пользователю). Такую возможность, кстати, в последних релизах добавили (глобальный перехватчик эксепшнов).
112 dmpl
 
29.10.20
15:11
(106) Как ты его потеряешь? Ты же сравнишь то, что привязалось к заказам, и то, что нет - и выдашь список непривязанного. Выведешь сообщение вида "К заказу Не определено нет ПТУ".
113 dmpl
 
29.10.20
15:13
(107) Ну да, конечно. Лучше бизнесу вообще ничего не делать, потому что программа не работает, чем делать бизнес и ВОЗМОЖНО что-то потерять.
114 Стаканов
 
29.10.20
15:32
(112) Ничего я не сравниваю в общем случае, просто заполняю соответствие, чтобы дальше там что-то с этим соответствием делать. Пример же утрированый, может быть этот заказ получается веб-сервисом из внешней базы, например :) Но в общем не суть, хороший стиль программирования должен включать в себя проверку соответствия входных параметрам типам принимаемых параметров.
115 dmpl
 
29.10.20
15:33
(109) В бизнес-логике редко когда передается один параметр. При этом каждый из параметров по отдельности может иметь допустимое значение, но их сочетание может быть недопустимым. Поэтому вызываемая функция один фиг должна проверять сочетание параметров на корректность. Так что единичный баг будет достаточно быстро выловлен.
116 Стаканов
 
29.10.20
15:49
(115) Этак мы сейчас до модульного тестирования договоримся :)
117 dmpl
 
29.10.20
15:59
(116) Ну, если бизнес пойдет вширь - к этому все равно рано или поздно придется обратиться ;) А пока бизнес мелкий - он может сэкономить на квалификации исполнителей.
118 Стаканов
 
29.10.20
16:03
(117) С какого уровня бизнес перестаёт быть мелким? Завод с 1000 работникам, торговая сеть с 1000 магазинов? Оптовик с 5000 клиентами? Каковы критерии?
119 ДенисЧ
 
29.10.20
16:10
(118) Как только автотестирование становится необходимым - бизнес можно считать крупным...
120 Стаканов
 
29.10.20
16:17
(119) О, точно, офигенный критерий :)))
121 osa1C
 
29.10.20
16:32
(119) Про Сонар куб? ... .да прикольно
122 ДенисЧ
 
29.10.20
16:41
(121) Сонар - не панацея
123 Стаканов
 
29.10.20
16:53
(121) Сонар куб  - это статический анализ, этого для качества программного продукта недостаточно.
124 dmpl
 
29.10.20
21:33
(118) Когда потери от копрокода станут больше сопоставимы или больше затрат на нормальную разработку ;)
125 RomaH
 
naïve
30.10.20
12:22
вот
в развитие темы - а как в табличной части найти строки с незаполненным составным типом?

т.е. есть строка в ТЧ со значением реквизита =  неопределено


ТЧ.Найти(Неопределено,"Результат") = Неопределено;
126 Стаканов
 
30.10.20
13:04
(124) Ну так это не от размера бизнеса зависит, если что.
127 ДенисЧ
 
30.10.20
13:07
(125) ЗАпросом
128 Ненавижу 1С
 
гуру
30.10.20
13:28
(125) разве не работает?
Ну или найтистроки
129 RomanYS
 
30.10.20
13:34
(125)
Отбор = Новый Структура("ТвойРеквизит", Неопределено);//пустые ссылки в отбор не попадут!
СтрокиСНеопределено = ТЧ.НайтиСтроки(Отбор);
130 ДедМорроз
 
31.10.20
17:03
Если в функцию не передан параметр,то значение будет Неопределенно,другими словами,система считает,что параметр не передали
131 RomanYS
 
31.10.20
18:51
(130) Тогда исключение должно быть, параметр же обязательный.
132 Cyberhawk
 
02.11.20
14:10
(131) Почему исключение, в 1С любой параметр можно пропустить, независимо от того, задано для него в сигнатуре значение по умолчанию или не задано
133 dmpl
 
02.11.20
14:20
(126) У мелкого бизнеса потери в абсолютном выражении меньше, а затраты на правильную разработку имееют явно выраженную постоянную часть, а потому у них порог случается гораздо позже ;) Если вообще случается.

(127) С запросом еще веселее: Неопределено при проверке условия "Неопределено В (&Параметр)", дает истину даже если в списке явно нет значения Неопределено.
134 Ненавижу 1С
 
гуру
04.11.20
17:42
(133) " Неопределено В (&Параметр)", дает истину даже если в списке явно нет значения Неопределено "

Сам придумал?
135 Ненавижу 1С
 
гуру
04.11.20
17:44
(132) " в 1С любой параметр можно пропустить "

Да откуда такое? Я про 8-ку
136 RomanYS
 
04.11.20
17:48
(132) А как тогда трактовать термин "обязательный"?
137 mistеr
 
04.11.20
18:30
(132) Вечно ты путаешь 1С с какими-то другими языками.
138 Стаканов
 
04.11.20
20:45
(133) Тогда вернёмся к вопросу - С какого уровня бизнес перестаёт быть мелким? Завод с 1000 работникам, торговая сеть с 1000 магазинов? Оптовик с 5000 клиентами? Каковы критерии?
139 Конструктор1С
 
04.11.20
21:06
(138) законодательно после over 250 сотрудников и/или 2 млрд оборота
140 Стаканов
 
04.11.20
21:11
(139) Тогда всё вышеперечисленное крупный бизнес, но вполне себе работает без тестирования ПО. В чём-то другом причина применения тестирования, точно не в размере бизнеса, значит.
141 Cyberhawk
 
04.11.20
21:20
(135) И я
142 Cyberhawk
 
04.11.20
21:21
(136) Без значения по умолчанию
143 RomanYS
 
04.11.20
21:29
(142) Почему тогда все остальные функции дают исключение. Попробуй СокрЛП()
144 Cyberhawk
 
05.11.20
08:54
(143) А, мы про "системные" методы. Я про прикладные говорил.
Но в системные вместо пропуска обязательно параметра достаточно передавать "Неопределено" в явном виде и тогда исключение уже не возникает.
145 RomanYS
 
05.11.20
09:34
(144) Изначально речь была про
  Соответсвие.Вставить(Неопределено, ЧегоТо)
Мой опыт тоже говорит, что неопределено вполне себе параметр, а в (130) предполагается иное
146 Ненавижу 1С
 
гуру
05.11.20
10:26
(144) прикладные точно также работают, проверяйте вначале
147 Cyberhawk
 
05.11.20
22:48
(146) Ошибаешься
148 Вафель
 
05.11.20
23:05
пропуск параметра и передача неопределено - это разные вещи
149 Ненавижу 1С
 
гуру
06.11.20
10:26
(147) зачем ты откровенно говоришь ложь?

Недостаточно фактических параметров
{ВнешняяОбработка.ПримерПропускаПараметра.Форма.Форма.Форма(4)}:    ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму();
150 Волобуев
 
06.11.20
11:20
(149) Ни одного не указывать точно нельзя, да.
151 Cyberhawk
 
06.11.20
12:45
(149) Приведенный тобою фрагмент не имеет никакого отношения к пропуску параметра / параметров
152 Ненавижу 1С
 
гуру
06.11.20
13:13
(151) давай свой
153 Cyberhawk
 
06.11.20
14:37
(152) ОбщегоНазначенияКлиентСервер.ЗапуститьПрограмму(,);
154 Ненавижу 1С
 
гуру
06.11.20
14:43
(153) интересное поведение, а если бы там был все-таки один параметр?
155 Cyberhawk
 
06.11.20
14:46
(154) Пропустить единственный обязательный параметр не получится, в этом случае эквивалентного эффекта можно добиться через передачу значения Неопределено.
И тоже никаких исключений не будет.
156 Ненавижу 1С
 
гуру
06.11.20
14:48
(155) хех, это описанный эффект в языке7
157 Cyberhawk
 
06.11.20
15:13
(156) Конечно. На ИТС в абзацах где про "опущенные" параметры. В свое время этот термин вызывал у меня улыбку.
158 Ненавижу 1С
 
гуру
06.11.20
15:26
(157) спасибо, как-то пропустил этот момент, действительно:

Если параметру не задано значения по умолчанию, то при вызове процедуры его можно опускать в списке передаваемых фактических параметров, но разделительную запятую надо ставить.

Но довольно сомнительное свойство языка
159 Конструктор1С
 
06.11.20
16:20
(140) тестирование применяют в основном серьёзные конторы. Обычно это холдинги от нескольких десятков тысяч человек, у которых ИТ-департаменты. Конторы численностью до 2-3 тысяч могут применять ларёчные подходы
160 Cyberhawk
 
06.11.20
16:57
(158) Это откуда цитата?
161 Cyberhawk
 
06.11.20
17:00
(160) Нашел в разделе по 8.2.
Там устаревшие и неполные / неточные формулировки. Смотри в 8.3.
162 Ненавижу 1С
 
гуру
06.11.20
17:37
(160) СП
163 Ненавижу 1С
 
гуру
06.11.20
17:39
И на ИТС рекомендация: "7. При вызове функций не следует пропускать обязательные параметры. В противном случае, в параметр будет передано значение Неопределено, на которое функция может быть не рассчитана. Если же значение Неопределено является допустимым, то нужно или его передавать в функцию явно, или сделать этот параметр необязательным со значением по умолчанию Неопределено."