Pull to refresh

Comments 322

ЕслиКонецЕсли.... гореть а аду создателям

А ведь для англоязычных программистов весь код так выглядит...

Кстати, всегда мучил вопрос, почему что-то (почти все) написанное на английском нормально воспринимается, а на русском это обычно кринж? Тексты песен, названия магазинов, модели машин и вооружений.

Помню, еще подростком в каком-то фильме видел, как у персонажа на постельном белье были комиксные принты с молниями и написано "Thunder". Я тогда подумал, почему на английском это не выглядит глупо, ну ок, это глупо - но скорее даже по-детски, а вот одеяло с надписью ГРОЗА на русском выглядело бы не по-детски, а просто странно.

По-моему, это уже какие-то комплексы.

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

И разные Искандеры, Торнадо и Мста воспринимаются не хуже Абрамсов.

Москвич и Ока, может, воспринимается хуже Мерседеса и Тойоты, но тут уже виновато не название.

А с тех пор, как я немного выучил английский, я не могу серьёзно воспринимать тупые названия типа "Head&Shoulders". Они хуже любой нашей Ромашки.

Даже если хорошо, а не немного, знаешь английский, названия (компаний, брендов) все равно воспринимаются в первую очередь по благозвучности, а смысл остается где-то на заднем плане. А так-то, в книгах 1930-50-х годов названия иностранных компаний нередко переводили и выглядело довольно кринжово, типа "Всеобщая Электрическая" (General Electric, на всякий случай) или ''Международные бизнес-машины" (или, апофеоз, "Международные деловые машины").

HP Production - Лошадиная Сила Изделия.

Программа совместима с компьютерами, выпущенными Солнцем, Лошадиной силой и в декабре ©

Что-то не могу разгадать последнее... Sun, HP и..?

Эх, молодёжь :)))

Digital Equipment Corporation, сокращённо DEC. Скорее всего, в документе идёт речь о линейке серверов Alpha.

Вероятно DEC, создатели линейки PDP и VAX

Вряд ли речь о PDP или VAX. Если программа совместима со всем этим богатством, то скорее всего, речь про Unix/RISC, т. е. применительно к Digital — Tru64/Alpha.

Без сомнения вы правы, просто оригинальный вопрос был только про название, а не про продукцию DEC.

Для яблок версию не завезли? 🤔

В те времена «яблоко» было просто фруктом :)

Зато можно было пригласить домой девушку - показать свой PC...

Хрен Пойми чего Производство

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

"Международные бизнес-машины вполне нормально звучит". Мне ещё нравится "Баварский моторный завод - БМЗ".

Межделмаш - это что-то белорусское

Баварские моторные заводы не выглядят чем-то ужасным. Не ужаснее дважды-автомобильного завода (АвтоВАЗ).

Но есть и смешные названия, типа Bugatti и Porsche. Было бы забавно ездить на машине с названием марки Иванов или Сидоров.
Хотя... Есть же сырки с названием Б.Ю.Александров и был банк Тинкофф

Когда-то, в старину, была автомобильная марка "Яковлев-Фрезе"

А летать на самолёте Туполев или Антонов?

Оплачивая картой банка Тиньков

Тогда уж и "Народный автомобиль".

А вот вам пример на русском языке, когда о смысле слова никто не задумывается, а ассоциирует его с определенным образом, подумайте как слово "отпрыск" вдруг стало литературным? Хотя по смыслу это самое что ни на есть оскорбление )

Когда речь о кринжовых названиях, впереди всех с отрывом бежит злой волшебник Вьолет Визард, но его догоняет давая под зад банк "Сосёте Женераль" которые за 20+ лет в России так и не изволили перевестись.

Вообще они уже давно (больше 10 лет точно) росбанк.

Вроде Росбанк всегда был одним из активов Societe Generale, а финансовая группа так и называлась до своего ухода.

Году в 2008 (+-) брал кредит именно в банке сосьетЕ женераль восток. А потом он стал с тем же логотипом росбанком.

Это отдельный банк был, у сосете женераль было несколько банков, потом начали объединять

(или, апофеоз, "Международные деловые машины").

А вот "Межделмаш" уже вполне органично смотрится, типа "Ростсельмаш" :)

PS: Главное, слова не рассматривать слишком пристально - иначе может что-то в мозгу рассоединиться, и слово резко теряет лексический смысл и превращается в набор букв. Интересный эффект, у меня как-то со словом "трамблер" случился :) Пришлось его обратно запоминать как слово.

>А с тех пор, как я немного выучил английский, я не могу серьёзно воспринимать тупые названия типа "Head&Shoulders".

Название бренда несет 2 смысла: буквальный (борьба с перхотью) и скрытый за идиомой "head and shoulders above (the rest)", то есть намного лучше конкурентов.

Именно в этом случае отсылка к выражению Head and shoulders above .. - быть на голову выше.

А с тех пор, как я немного выучил английский, я не могу серьёзно воспринимать тупые названия типа "Head&Shoulders".

Head&Shoulders -- это игра слов.

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

Мне кажется - потому, что в английском несколько иное словообразование. Условно, для нас фамилия Мельник или Кузнец будет немного резать слух, потому что в русском мы привыкли к фамилиям Мельников и Кузнецов. А в английском профессия smith и фамилия Smith это буквально одно и то же слово. Возможно, с названиями работает похожая штука.

это комплексы.

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

Мне кажется, переменные -- это вообще другое и тут причина намного проще. Все эти языки используют латиницу, и чтобы вставить в код слово на них не нужно извращаться с транслитом или переключать раскладку.

Турки точно нет, как и часть европейских языков используют специфические буквы, вот турецкий: Yağmura mı bakıyorsun
Ну тут хотя бы не иероглифы.

Турецкий без диакритики не перестаёт быть читаемым, в общем-то. Понятно, что текст написанный так, что çam и cam не отличить читать малореально, но я думаю для имён переменных это не так принципиально. Я в общем знаю, как он выглядит, где-то B1 у меня таки есть.

Да и это всё равно латиница, хоть и расширенная. То есть, чтобы набрать приведённую вами фразу в англоязычном коде турку вообще не надо переключать раскладку, у него одна клавиатура to rule them all.

Кстати для 1с есть специальная раскладка, создатель - ныне покойный Павел Чистов: https://1c.chistov.pro/2012/11/1.html

Скрытый текст

А то отсутствие всяких больше-меньше, решетки и собаки с амперсандом напрягает (и не только в при написании кода в 1с).

что-то (почти все) написанное на английском нормально воспринимается, а на русском это обычно кринж?

это зависит от воспринимающего...

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

if просто короче. Но, в отличие аббревиатур НЦ, КЦ, ПЦ это ещё и слово, передающее смысл.

насчет короче - согласен. (а скобки - еще короче. Поэтому своей многословностью 1с напоминает паскаль). Но полностью все буквы мало кто тыкает - автокомплит работает. Зато не теряется контекст, нет переключений

Бейсик оно напоминает, а не Паскаль. В Паскале тоже есть составной оператор, он же операторные скобки, просто они пишутся тоже словами.

Русифицированный Паскаль выглядел бы как-то так:

Если условие Тогда
Начало

Конец Иначе Начало

Конец

Это скрещенный VBA и JS. А инфраструктуру свою они строили по образу и подобию решений от Microsoft. В самом начале они вроде даже как-то сотрудничали. Вот только 1С не шмогла. Если Microsoft развивал свои продукты, практически отказался от VBA, дал ход веб технологиям и без своих загонов, как в IE, пошел активно в open source, подарили миру лучшую бесплатную IDEшку и даже внедрил WSL, то есть по сути своего убийцу, коим называли Linux на заре его восхождения. То есть сделали много шагов навстречу пользователям. В это время их подражатели не то, что пошли навстречу пользователям, а сделали всю, чтобы пользователи, и разрабы тоже, сидели в их ужасной устаревшей по всем фронтам песочнице и никуда не дергались.

Тут как всегда есть и плюсы, и минусы. 1с - все-таки не язык общего назначения. А поставленные задачи в рамках своей области - решает проще и быстрее. Хотя к инструментарию претензий много. И вообще к вендору.

Устаревшей в Вашем понимании относительно других ЯП, чистых ЯП, замечу. Это сравнивание разных сущностей, 1С это не чистый ЯП, это фреймворк достаточно не широкой области учета с прикладным языком фреймворка. И за областями этого учета в 1С очень неутюно и да, Вы переходите на другие решения, в других областях учета. Несколько ближе по смыслу к VBA, как сами 1С-ники его когда то называли "Предметро-Ориентированный". У Вас же нет притензий к Jinja? Вот так и тут, это прикладной язык работы с предметами учата. То, что предметы учета написаны в концепции ООП не делает его ООПшным ЯП.

Неужто в 1С и правда есть ключевое слово "накладная" и оператор её проведения? Да вроде нету. Так какой-же он предметно-ориентированный-то?

1С может быть сколь угодно замечательным фреймворком, но это никак не отменяет того факта, что язык 1С - худшая часть этого фреймворка. Язык 1С - это типичный встроенный в продукт язык, с типичными для встроенного в продукт языка недостатками, общая причина которых - принцип "а куда вы денетесь-то?". Программистам дали базовые управляющие конструкции, а дальше пусть выкручиваются сами.

есть ключевое слово Документ, и его метод - проведение.

А почему его ни в одном примере не видно?

Так то "предметно-ориентированный" это официальный термин для языков программирования и методологи от 1С его активно продвигали еще с 90х, просто наберите в google или яндексе где удобней.

Язык 1С далеко не "худшая" его часть, опять же в каком применении на какой системе отчета мы меряем? Худшая для чего, замечательный для чего, каких задач? Интерпретаторы хуже компиляторов? Строгая типизация лучше бестиповых языков? Процедурное программирование хуже ооп? Python хуже Java? Для предметной области дерева объектов 1С их язык очень не плох. Я бы хотел строгую типизацию, но я ее везде хочу, мне на Python ее отсутствие так же жмет. Но я понимаю, что конструкции кода теоретически могут стать еще более монструозными. Я к этому готов, а создатели Python-а готовы этим пожертвовать.

Как пример взять тот же XML - считанное количество доков от W3C и от самого 1С наверное только идет с вменяемыми неймспейсами и файлами описаний схем, подавляющее просто количество реализаций, 99.9999(9) с которыми я работал от очень крутых программистов очень правильных языков программирования идет тупо план-текст, без вообще намеков на структуризацию по возможностям этого языка. Чуть измененная концепция директив импорта в XML ставит большинство правильных программистов в непреодолимый тупик. Даже попытка заговорить с ними при интеграциях о схемах данных - я ни разу не смог получить ответа на своей очень долгой практике. Составление схемы собственных данных вот буквально не осилил никто, но при этом наливать на 1С за выбор отсутствия строгой типизации считают долгом?

Он ужасен для тех задач, для который применяется.

Вот рассмотрим простую вещь: запрос к БД для получения выборки. Я, правда, с 1С не работал - но почему-то я уверен что такие запросы там делаются постоянно. Почему текст запроса, вместо того, чтобы быть синтаксически включённым в программу на языке 1С, пишется внутри строкового литерала? Почему для выполнения запроса нет отдельного оператора, а вместо этого создаётся объект Запрос, у него устанавливается текст запроса, и третьим оператором запрос выполняется?

Это всё - способ работы с запросами в языках общего назначения, но никак не в "предметно-ориентированном" языке.

Давайте начнем с того, что "схема данных БД 1С" это не сиквел, хотя на нем на 92м и построена и похожа до степени сличения. По концепции это вариант API по пакетному доступу к данным в виде "языка в языке", запускаемого на исполнение объектом глобального контекста "Запрос".

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

В свою очередь на основе этого API языка 1С скл создаются над-API для доступа данных высших абстракций, где текст запроса - это переменная, как и параметры запроса, контекст доступа к данным (Объект глобального контекста МенеджерВременыхТаблиц и язык описания ограничений доступа к данным из конфигурации RLS) и более того (что на мой взгляд хуже всего) - это не конечная переменная и не конечное задание для получения выборки - это **ка макет, который платформа творчески доработает для целей оптимизации, в объектах типа компоновки данных и построителях запросов/отчетов. Вот это вот боль. Но и компоновщики экономят массу времени при сложных взаимодействиях с пользователями, тут не отнять.

Причём тут SQL и какие-то там компоновщики? Я говорю исключительно про синтаксис запросов. Которого нет, потому что языка в языке не получилось. Язык программирования 1С и язык запросов 1С - это два разных языка, а должен был быть один.

А эта задача в приципе решаемая? Я ее не смог решить в других средах и решений приемлемых по скорости/ресурсоемкости не видел. Или пакетное быстрое чтение в виде АПИ по пакетному доступу к данным (что то типа DRL Data Reading Lang) или долго муторно ресурсоемко в виде построчного чтения если мы "танцуем от абстраций объектов". На квантовых компах вероятно разойдемся на всю зарплату, но пока задачи хранения данных и задача по "изменению кода изменению даннчх" у бизнеса в приоритете, они накидывают объемы данных быстрее, чем мы абстрагируем механизмы доступа к ним.

А эта задача в приципе решаемая?

Да, она решена в plpgsql, T-SQL и пр.

В языках программирования общего назначения такой задачи перед языком не стоит, однако все современные библиотеки предлагают исполнение запроса, по крайней мере, одной инструкцией.

Вот пример из Rust:

sqlx::query!(r#"
    select Foo from Bar where Id = ?
"#, id).execute(pool).await?;

А вот - это C#:

ctx.Database.ExecuteSql($"""
    select Foo from Bar where Id = {id}
""");

ctx.Database это указатель на сиквел-сервер? Вот это Foo, Bar Id это элементы сиквел-таблиц?

пс. в 1С контексте нет никакого скл-сервера, есть некая среда хранения данных, в общем случае распределенная с разными способами хранения. Схема данных описана в дереве метаданных. Объект запрос передается в виде входящих параметров в другие обекты обработки данных - к примеру схему компоновки данных - где он будет вызываться платформой много раз с разными параметрами и более того - каждый раз может и преобразовываться.

ctx.Database это указатель на сиквел-сервер? Вот это Foo, Bar Id это элементы сиквел-таблиц?

Вроде того.

пс. в 1С контексте нет никакого скл-сервера, есть некая среда хранения данных, в общем случае распределенная с разными способами хранения [...]

Всё, что вы написали, никак не мешает синтаксису языка и принципиально ничего не меняет.

Да, потому что C# - язык общего назначения, а не предметно-ориентированный.

Это из примеров к DB2. Язык C, препроцессор.

main (int argc, char *argv[])
{
    /* Grab the first command argument.  This is the SID. */
    if (argc > 1) {
        sid = atoi(argv[1]);
        printf("SID requested is %d.\n", sid);
    /* If there is no arguement, bail. */
    } else {
        printf("Which SID?\n");
        exit(0);
    }

        EXEC SQL CONNECT TO GO3421;
        CHECK_SQL(0, "Connect failed", EXIT);

        /* Find the name and age of sailor SID. */
        EXEC SQL SELECT SNAME, AGE into :sname, :sage
            FROM TECHSTU.SAILOR
            WHERE sid = :sid;

        CHECK_SQL(0, "The SELECT query failed.", EXIT);

        /* Report the age. */
        printf("Sailor %s's age is %d.\n", sname, sage);

        printf("Executed Successfuly\n") ;
        printf("Bye\n") ;

errorexit:
        EXEC SQL CONNECT RESET;
}

Раз уж пошлел предметный разговор, давайте подумаем в сторону что 1С это все таки интерпретатор - построчная компиляция в процессе выполнения, а раст и си это компиляторы, там можно себе позволить не вешать на пользователя время компиляции. Гипотетически Ваши конструкции могут быть тяжелее для компиляции на лету.

В 77 вроде было что то такое по крайней мере с доступностью переменных из контекста выполнения, но там то как раз и был настоящий кринж, т.к. не отвязанные переменные контекста выполнения кода от контекста выполнения запросов (емнип построителей табличных документов) это прям злое зло и седые волоса. Переход на чистый ООПшный концепт и сиквел-подобный синтаксис в 8ке воспринимался как "ну наконец то" и "доставайте шампанское". Собственно на 1cpp эту тропинку протоптали тогда коллективным разумом.

Гипотетически Ваши конструкции могут быть тяжелее для компиляции на лету.

С чего бы?

Не забывайте, тело запроса в любом случае разбирается в рантайме, и от переноса части работы с драйвера хранилища на интерпретатор суммарное время не изменится.

В 77 вроде было что то такое по крайней мере с доступностью переменных из контекста выполнения, но там то как раз и был настоящий кринж, т.к. не отвязанные переменные контекста выполнения кода от контекста выполнения запросов (емнип построителей табличных документов) это прям злое зло и седые волоса.

А почему?

работа объект компоновщика всех этих макетов запросов/построителей не доступна для отладки как минимум - ее надо отлаживать прям в коде, а отделные объекты типа Запрос и т.д. - отлаживаются в консолях прямо на тесте/проде где нужно. Второй момент она не разбита на промежуточные подсущности исполнения и это приводит к повторению кодовых конструкций на этом уровне. Тут хз это плюс или минус, но кому то это важно, всякие БСП-шники в принципе на этом уровне и работают.

Плюс объект запроса емнип сериализуем, можно вообще передать прям из точки остановки на отладку вендору подсистемы со всеми параметрами, но без временных таблиц

работа объект компоновщика всех этих макетов запросов/построителей не доступна для отладки как минимум - ее надо отлаживать прям в коде, а отделные объекты типа Запрос и т.д. - отлаживаются в консолях прямо на тесте/проде где нужно

В чём принципиальная возможность отладки объектов типа "Запрос"? Исключительно в возможности увидеть текст запроса? Но его можно увидеть и другими способами, надо лишь отказаться от мысли что задача отладчика - исключительно просмотр локальных переменных.

Нет, вы запускаете объект запроса, построителя запроса или скд в проде и доводите в консоли отладки прямо на проде скорость его выполнения до требуемой, после чего переносите в код. Это удобно т.к. это все отдельные законченные сериализуемые объекты. Кроме временных таблиц.

И что мешает делать то же самое, но с другим синтаксисом? Почему подобный вопрос вообще всплыл в обсуждении синтаксиса языка?

Ок, переходим на следующий уровень занудства. Если мы имеем объект "запрос" включающий в себя текст команды, параметры, "конеткст сиквеля" (в кавычках потому что контекст некой обобщенной БД в виде менеджера временных таблиц некой обобщенной БД), набор технических параметров выполнения запроса и набор методов получения данных именно отдельным объектом - это нам дает другую парадигму написания кода.

Мы разносим процесс получения данных с формированием условий получения данных. Само формирование условий у нас становится предметом обработки. Не меняя по сути ничего в используемой объектной модели, мы даем программисту возможность работать с этой сущностью в ООП парадигме. Передавать, изменять, подменять менеджер временной таблицы в зависимости от параметров запроса и т.д.

В вашем подходе эта сущность не локализована, ее нужно будет описывать вручную кодом. Это конечно возможно, но зачем, когда вот она, держи в виде объекта "Запрос" - "задача на выборку данных из модели данных по таким то условиям". Нужно изменить - изменяй. Нужно отложить - отложи. Имхо удобно.

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

Ладно, козырем бы было наличие ещё одного типа объекта с тем же интерфейсом, но не запрос. Полного тезки я не вспомню, поэтому Ваша позиция тоже имеет основания. Но в любом случае обсуждаемо. А вот использование запроса как объекта чем побъете? Все эти декораторы?

А вот использование запроса как объекта чем побъете? Все эти декораторы?

А что такого хитрого вы можете сделать с запросом как с объектом?

В своей практике я собирал движения документов по фифо сиквелем, для меня отдельный котёл. Общий запрос собирал из подзапросов в зависимости от входных параметров. Напрлнение временных таблиц так же параметрозависимое. Ядро системы разнесения и декораторы под разные бизнесс сценарии. При смене логики логистики меняется ядро. Сиквел потому что только на нем был запас по оперативке эти расчёты тащить за приемлемое время.

Ну, для таких экзотических случаев (если вам в 1С пришлось опуститься с внутреннего языка запросов до SQL - случай точно экзотический!) можно и существующий вариант оставить.

А эта задача в приципе решаемая?

Embedded SQL.

Язык программирования 1С и язык запросов 1С - это два разных языка, а должен был быть один.

кто кому должен? и почему?

DDL и DML тоже считаются разными языками, кстати.. Ну и без языка запросов в 1с можно обойтись... и даже без явных запросов тоже... Изврат, но можно.

кто кому должен? и почему?

Язык должен, нам. Потому что заявляется как "предметно-ориентированный".

Причём тут SQL и какие-то там компоновщики? Я говорю исключительно про синтаксис запросов. Которого нет, потому что языка в языке не получилось. Язык программирования 1С и язык запросов 1С - это два разных языка, а должен был быть один.

Просто процедурный bsl императивный, а язык запросов - как и положено скуль подмножеству - декларативный. И одним языком они быть не могут. Кому делать нечего - могут собирать запрос не через строку, а через схему, но с учетом того, что sql инъекции это стандартный тип уязвимостей (не в 1С кстати) то кажется очень многие держат декларативные куски строками.

Просто процедурный bsl императивный, а язык запросов - как и положено скуль подмножеству - декларативный. И одним языком они быть не могут.

Почему же? PL/pgSQL и C# как-то справляются же со смешиванием декларативных и императивных частей...

но с учетом того, что sql инъекции это стандартный тип уязвимостей

И вот именно поэтому мне не нравятся запросы в строках. Когда запрос часть синтаксиса языка - он никак не может быть пользовательским вводом, что даёт автоматическую защиту от инъекций (увы, не полную, потому что динамически сформированные запросы иногда необходимы).

Мешай не мешай, языка все равно 2. Разница только в кавычках. А мозгам все равно в разных парадигмах думать.
Проблема проникновения пользовательского ввода в код запроса в 1С не встречается, так что один из ваших аргументов "почему плохо" - легко парирован практиками и стандартами, без синтаксиса.

Почему текст запроса, вместо того, чтобы быть синтаксически включённым в программу на языке 1С, пишется внутри строкового литерала?

Подозрееваю, что отдельный объект для запроса - это наследие от предшественников - СУБД, и с учетом того, что запрос может обрабатываться разными серверами БД. Но выборку можно получить и без объекта Запрос, методом Выбрать() для соответсвующего объекта (этакий неявный простой запрос). А можно не писать запрос в виде "текста внутри строкового литерала", а использовать ПостроительЗапроса...

А как вы представляете себе "синтаксическое включенние в программу"? можно пример?

Почему для выполнения запроса нет отдельного оператора, а вместо этого создаётся объект Запрос, у него устанавливается текст запроса, и третьим оператором запрос выполняется?

вы ж сами пишете - "третьим оператором запрос выполняется". Разве это не "отдельный оператор"? Или вы хотите собрать в один оператор декларативное описание того, что нужно выбрать, с установкой неободимых параметров, выполнением, обработкой ошибок и получением результата в нужной форме?

Там все сложнее ибо еще интегрированные в дерево метаданных внешние источники данных.

Ну, взяли и все испортили... это был следующий вопрос...

вы ж сами пишете - "третьим оператором запрос выполняется". Разве это не "отдельный оператор"? [...]

Это оператор как часть программы, а я говорил про оператор как часть синтаксиса языка. И да, этот оператор должен именно что объединять декларативное описание, установку параметров и выполнение.

Обработку ошибок и представление результата можно оставить уже имеющимся языковым инструментам.

А как вы представляете себе "синтаксическое включенние в программу"? можно пример?

Очень просто:

Результат = Выбрать ТелоЗапроса

Тело запроса пишется как есть, без обрамляющих кавычек, и может ссылаться на локальные переменные (которые в таком случае становятся параметрами запроса).

а как же передача запроса и его частей в виде параметров функций? Мне оно допустим надо.

Тут сложнее, и совсем на коленке это не сделать. Однако, в C# как-то же справились.

может ссылаться на локальные переменные (которые в таком случае становятся параметрами запроса).

это уже было, в 7.7

Как показала практика - не лучший вариант.

Тело запроса пишется как есть, без обрамляющих кавычек

т.е. всё дело в кавычках?

. И да, этот оператор должен именно что объединять декларативное описание, установку параметров и выполнение.

Обработку ошибок и представление результата можно оставить уже имеющимся языковым инструментам.

тогда результатом у вас будет не [только] выборка, а некий объект-результат, объединяющий и выборку, и описание ошибок и т.д. Т.е. вы предлагаете поменять шило на мыло

Как показала практика - не лучший вариант.

А почему?

т.е. всё дело в кавычках?

Если утрировать - да. Дело в некоторых концепциях, которые синтаксически обычно проявляются в виде кавычек.

тогда результатом у вас будет не [только] выборка, а некий объект-результат, объединяющий и выборку, и описание ошибок и т.д.

Зачем объединять-то? Насколько я знаю, в языке 1С есть исключения.

Смотрите все атрибуты/методы объекта Запрос:
Выполнить, ВыполнитьПакет, ВыполнитьПакетСПромежуточнымиДанными, НайтиПараметры, ТребуемаяАктуальностьДанных, ТребуемоеВремяАктуальностиДанных.
В предлагаемом Вами подходе все это через запятую параметры оператора
ПрочитатьДанные, назовем его так. Как по мне, так кринж, но тут вкусовщина.

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

Почему бы не быть в языке оператору, скажем, Пакет ... КонецПакета?

Отдельный котёл тем, кто вводит в глобальный контекст всю предметную область)! Но опять же вкусовщина

Тело запроса пишется как есть, без обрамляющих кавычек, и может ссылаться на локальные переменные (которые в таком случае становятся параметрами запроса).

Вы наполовину изобрели запрос в 1С 7.7.

Это уже какой-то COBOL получится.

           EXEC SQL SELECT firstnme INTO :Firstnme
           FROM employee
           WHERE empno = '000010' END-EXEC.

      *Displays the firstname we pulled from the Sample database.
           Display "Firstname"
           Display "========="
           Display Firstnme

Это embedded sql, который реализовывался для разных языков, в том числе и для Си.

Он ужасен для тех задач, для который применяется.

Я, правда, с 1С не работал

ЭЭээ... "Я Пастернака не читал, но осуждаю" (с)

Почему для выполнения запроса нет отдельного оператора, а вместо этого создаётся объект Запрос, у него устанавливается текст запроса, и третьим оператором запрос выполняется?

там можно делать выборки из БД без запросов

Вообще это архитектурное наследие старых версий 1С, где такой подход еще более сильно использовался и логически модуль работы с запросами был несколько обособлен от основного "фреймворка"...если сравнивать современную 1С со старой 7.7 то это просто вершина логики и адекватности плюс преемственность от старых платформ

ЭЭээ... "Я Пастернака не читал, но осуждаю" (с)

Но я его, в смысле 1С, читал.

ну, ПЦ тоже хорошо смысл передает

ПЦ это предшественник 1С, а именно SAP ABAP, где отрицательные числа выглядят как 123-, причем всё текстом и еще куча артефактов исторических, наследие 80х годов. Вот там таких картинок из статьи можно в каждом втором отчете надергать.

Даже если прилично знаешь английский и прекрасно знаешь, что означает "IF", "WHILE" или "Thunder", все равно воспринимаешь это (в случае операторов в языке программирования) как некие заклинания или кодовые слова, а не буквально. Ну и названия брендов и т.п. воспринимаются в первую очередь по благозвучию, а не буквальному значению.

Кстати, всегда мучил вопрос, почему что-то (почти все) написанное на английском нормально воспринимается, а на русском это обычно кринж?

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

Только хотел об этом сказать) Любопытно ещё вот что. Жаргон или позывные, а может и какие-то новые выдуманные слова - помогают отделить понятия, которыми мы думаем.
Слово "аптечка" имеет много смыслов и не всегда вызывает ассоциацию с игровым предметом, а слово "хилка" - таких проблем не имеет, так как нигде больше не используется. Уже спектр - меньше кринжа, проще понять)

а что такое "хилка" и "кринж"? :-)

От слова "health", вероятно.

Совсем не кринж. Я писал на 1С три года, код на русском воспринимается как код -- то есть структурированный набор команд. Кринжуют обычно для смеха, обоснований никаких нет, кроме эмоций.

Буквально лет пять-семь назад была мода на принты на русском на одежде, причём и на Западе тоже. Тут реально вопрос восприятия и привычки. И их можно изменить. Взять слово Магнит, никто же не задумывается почему продуктовый магазин именно этим словом называется. Уже скорее с магазином ассоциация стала.

У них первый годы слоган был "Цены манят как магнит"

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

В английском языке есть странная для русского языка вещь, как (не знаю официального названия) утрата смысловой нагрузки словом, если оно используется как имя собственное.

Самый яркий пример такой ситуации это фамилии. Никому не придет в голову хихикать над фамилией Brown, потому что это не воспринимается носителями как коричневый. И какой-нибудь Dodge RAM не воспринимается как "уворачивайся баран".

В русском смысл слова неотделим и поэтому Thunder - прикольно, а Гроза - нет.

а Гроза - нет.

На примере оружия, есть же ОЦ-14 Гроза. Но несмотря на сохранение ассоциации, над ней не смеются)

В русском то же самое, Молотов не воспринимается как сын молотка, а Горбачев - как сын горбатого.

На поставленный вами вопрос отвечают Иван Павлович Сундук, Михаил Гаврилович Красный и Анастасия Егоровна Корова.

Ну и такие фамилии воспринимаются странно. Оттуда все эти байки про то, как женщина по фамилии Скрипка вышла за мужчину по имени Смычок и иже с ними. Эти фамилии всё таки характерны для близкородственных, но других языков.

Для какого языка характерны фамилии Коров (мужского рода) и Корова (женского рода)?

Это в полной мере есть и в русском языке, просто из-за долгих лет советской власти бренды-фамилии почти не распространены (хотя до революции их полно было), а потом пришла мода на западные названия, и поэтому английские слова для нас привычнее в роли брендов. Хотя есть же "Шкода", которую вполне воспринимают как марку автомобиля, а не как такое же русское слово, или, как я уже приводил пример выше, "Лента" и "Магнит", которые воспринимаются как названия, а не дословно. Thunder прикольно только из-за моды, как я уже писал - несколько лет назад была мода на русские принты и надпись Гроза вполне обычно смотрелась.

Так "Шкода" латинскими буквами написана. А болгароязычные бренды типа "Орфей" и "Булгартабак" так и воспринимаются как пила "Дружба".

А как воспринимается пила «Дружба»? Вы её ассоциируете с дружбой?

с дружбой ассоциируется пила "Дружба-2"

был набор швейных игл "дружба"...

Не совсем. В русскоязычном коде гораздо чаще режет глаза несогласованность слов. Например:

// Вполне похоже на человеческий язык
for each Order from RequestResult...

// А тут что-то среднее между русским и болгарским
для каждого Заказ из РезультатЗапроса...

При этом на мой взгляд вполне нормально звучат КонецЦикла и КонецПопытки. Но компилятору-то проще анализировать фиксированные ключевые слова, чем вдаваться в нюансы всяких склонений и спряжений.

// А тут что-то среднее между русским и болгарским
для каждого Заказ из РезультатЗапроса...

болгарский будет скорее таким


за всяка Поръчка от РезултатНаЗаявка

Да, почти. Я про отсутствие падежей. Но скорее всего в гипотетическом болгарском 1С использовался бы также мужской род у ключевого слова, не "всяка", а "всеки".

"для каждого Строка из База" - пример чуть получше был бы

И думаю, что венгры бы плевались на код на родном языке гораздо больше нас) У них ведь, на сколько я знаю, словообразование ещё сложнее

А разве в болгарском падежи отсутствуют? В церковнославянском-то языке, который болгарскому близкий родственник, падежей больше чем в русском...

В болгарском падежи вымерли, но там зато есть членуване (использование определённого постфикса), что по русским понятиям выглядит, как два разных именительных падежа. Так что “для каждого Строка из Базата”, хотя “База”.

Только по своей синтаксической функции это же вроде артикль, а не падеж, нет? Гордый обладатель титула "единственный славянский язык с артиклями".

По синтаксической функции – артикль. Но для нас в данном случае важно, что он лексически является частью слова.

Сейчас отсутствуют. Вымерли относительно недавно. Те самые Кирилл, Мефодий и Климент Охридский такого поворота не предполагали, похоже)

Из церковно-славянского рудименты местами попадаются: иногда говорят "слава Богу", хотя на современном это "слава на Бог".

// А тут что-то среднее между русским и болгарским
для каждого Заказ из РезультатЗапроса...

болгарский будет скорее таким


за всяка Поръчка от РезултатНаЗаявка

РезултатътНаЗаявката? :)

это если конкретные и уже упоминались, в английском это были бы the query и the result

В качестве .self или this., или как там у вас говорят - вполне катит, кстати

Ну не знаю???

Запускать цикл двумя командами "Для каждого", а потом в конце писать "цикл". Такого даже в basic'е ZX-specrtum не было.

Для каждого это аналог foreach, есть и просто Для Сч = 1 по 10 Цикл. Ну и EndDo и EndIf много где есть.

Англоязычные программисты... Белая кость! Голубая кровь!

В FoxPro, например, также <IF ... ELSE ... ENDIF>

Да уж, забавная вещь. Теоретически можно модифицировать под культурный язык и получить RuJS на основе этого проекта. Но никому это не нужно...

Как чел работающий на мультиязе скажу, что наибольший кринж вызывает переключение языкового контекста.

Нейминг переменных тесно связан с предметной областью. Предметная область учета в данном случае очень специфична для государства и как следствие государственного языка.
Тех задание по сути повторяет государственные кодексы, где предметная область определена в терминах государственного языка и взамодействие с заказчиком/пользователем происходит на его родном языке, это и определяет естественный нейминг.

А конструкции вида:
if ДатаВступленияВСилуПостановления283() > ПериодДействияДополнительныхНачисленийРаботникомПельменнойОтрасли() then
воспринимаются много хуже, поскольку требуют еще и переключения языкового контента. Собственно конструкции мультияза вызывают наибольший кринж.

А подогнать лексику языка программирования с его менее чем пол сотни зарезервированных слов это реально меньшая из бед чем переводить туда обратно всю сильно специфичную предметную область.

Лет десять назад искал варианты стажировки, и пробовался в какую-то контору с 1С. Там выдали тестовое, разные материалы для подготовки, и среди прочего книгу-самоучитель.

Я это полистал, с большим скептицизмом посмотрел примеры кода со всякими "ИначеЕсли КонецЦикла", сел читать введение к книге.

Введение начиналось фразой: "Что же я делаю? - возникает вопрос у многих начинающих программистов 1С ..."
А действительно, что же я делаю? - задумался я, и решил никогда больше не трогать 1С.

ЧтоЖеЯДелаю - так мог бы называться блок Try...Catch

Делаю

...

Упс

...

Прокатило

...

Рискнем

...

НеПрокатило

...

ПофигПляшем

Try.. catch.. finally

Вооот, поэтому и goto не стали импортозамещать

Перейти

Перейти (Goto)

Синтаксис:
Перейти ~<Метка>;

Описание:
Безусловная передача управления на другой оператор программы. Передает управление от одного оператора к другому. Область действия оператора ограничивается программным модулем, процедурой или функцией; он не может передать управление за пределы программного модуля, процедуры или функции.

Метка – это идентификатор, "помечающий" определенный оператор, на который надо передать управление в ходе выполнения программы. Метка отделяется от этого оператора двоеточием и предваряется символом "~". 

Пример:

Пока Истина Цикл
 Для Каждого Элемент Из МассивЭлементов Цикл
  Если ВыполнениеУсловия(Элемент) Тогда
   Перейти ~ВыходИзДвойногоЦикла;
  КонецЕсли;
  ...
 КонецЦикла;
КонецЦикла;
~ВыходИзДвойногоЦикла:
// продолжение вычислений

Использование в версии:

Доступен, начиная с версии 8.0.

С одной стороны можно сказать, что западные коллеги для которых родной английский, точно также по идее воспринимают код на наших любимых ЯП. Но с другой стороны из-за особенностей русского языка, код воспринимается гораздо хуже.

Ну наконец то, Иван написал пост, год ждали, если не больше ))) Только сегодня сыну рассказывала, что такое 1с-ник и в чем подвох ))) Истории иллюстрировала вашими статьями....

А всем же хоть раз в жизни попадались программисты, которые и в нормальных языках (с поддержкой Юникода) - пишут названия классов, методов и переменных русским буквами в стиле 1с?

Видел код на JS с переменными r, θ, φ (конверсия геокоординат (вообще-то читать было неожиданно просто, а вот менять этот код не оч)). Знаю квантового физика, который в коде на Julia использует греческие, готические и какие там еще у них в квантах буквы (джулия как-то удобно это поддерживает).

  и какие там еще у них в квантах буквы

Все.

О, я для геометрического произведения пробовал юникодовские символы использовать.

В общем читать действительно удобно, а писать - нет. В итоге откатился к тому, что мне проще написать a geometric b, чем вызывать автокомплит и там искать нужный метод.

Я пишу в Delphi и вам советую.

Пишу на работе примерно как в статье на ABAP, для себя на Delphi, Python, для электроники и устройств типа Arduino Си.
Delphi не стал бы советовать, мне Delphi нравится, но изучать его, или учиться на нем наверное нет смысла.

Это я отвечал ТС ,пишет ли кто имена переменных русскими словами. Вот, я пишу на Delphi. Все равно там сервисное и закрытое, что никогда не покинет стен разработки.

Не было бы смысла, если бы он не отвечал современным вызовам, однако это не так

Все равно популярность его низкая, что ему в минус. Навыки работы с Delphi будут менее востребованы на рынке. То же самое же можно делать на C#.

Между востребованностью языка и изучением его, существует тесная взаимосвязь. Больше изучают -> Больше востребованность -> Больше изучают.

На Delphi в отличие от C# можно больше решений воплотить и на порядок быстрее. Например, Delphi имеет полноценный кроссплатформенный GUI фреймворк и не требует зависимостей на целевой платформе и всё так же с дизайнером. Ты можешь один и тот же проект собрать сразу под все платформы (Win/Linux/Mac/Android/iOS). И всё это с одной кодовой базой и минимумом адаптаций под платформы. Единственное, что в C# под такое подходит - Avalonia, которая в сравнении с фреймворком на Delphi - в зачатке, не имеет дизайнера и достаточно сильно ограничена в StdLib (RTL, который .Net Core).

У Avalonia есть дизайнер (upd: ну, ладно, строго говоря, превьювер) в двух IDE.

Avalonia [...] достаточно сильно ограничена в StdLib

Что вы имеете в виду?

.NET Core имеет не всё для всех платформ. А Avalonia использует именно его. Приходится много самому писать

" Ты можешь один и тот же проект собрать сразу под все платформы (Win/Linux/Mac/Android/iOS) "

Об этом знает чуть менее, чем никто и ловит офигенное удивление, когда узнает об этом.

Был у меня один такой препод, английский не знал совершенно, метод clear() читал как "кляр". К счастью я вовремя сообразил, что в программировании он понимал так же, как и в английском, поэтому стал заниматься с другой группой.

Если бы. Чаще берут термин(например СНИЛС) и пишут его как попало - то snils, то cneelc, то x, то inipa.

Мне кажется, ваш пример не очень удачен, потому что вот как раз в данном случае snils - это наиболее оптимальный вариант.

Страховой номер индивидуального лицевого счёта, значит snils не оптимально, надо перевести фразу и собрать обратно аббревиатуру. С полученным ENPA дальше и работать.

Какую абревиатуру будем использовать?

IIAN?

SSN?

IPAIN?

INIPA?

IDIN?

Обратите внимание на первый скриншот. Вики - это только для примера, множество других английских источников используют именно SNILS.

я честно говоря не представляю как в языках с необходимостью перевода сложной предметной области передавать разработку другому человеку - вместе со словарем? И вот он сидит читает ПБУ, на каждый термин лезет в словать что бы понять что там за имя переменной и снова в ПБУ. Там и на нейтив языке законодательную базу осиливают считанные единицы, а с переводом - единицы от единиц. На что только время программеров не тратиться.

iPain - это какой-то новый девайс от эппл? Говорят, не плох. Пойду куплю эту попоболь

говнокодить можно на любом языке.

Оператор GOTO приумножает эти возможности, жаль что убрали его везде почти ))

Разработчики языка 1С пока не стали вводить русскоязычный аналог ключевого слова GOTO в синтаксис версии 8.5. По сообщениям новостного агентства Панорама, между сторонниками разных вариантов разразилась мощная дискуссия, что чуть не привело к расколу совета директоров предприятия на два враждующих лагеря.

Члены совета часто ссылаются на якобы безответственных матерей друг-друга. Но в кулуарах совещаний многие отмечают, что даже машинный перевод ключевого слова GOTO позволяет лучше передать желания и стремления программиста. Логика при этом должна отходить на второй план, как единогласно считает совет директоров.
\s

Оно хоть и \s но другого способа выйти из https://habr.com/ru/articles/768432/comments/#comment_27758800 без ещё бОльшего уговнокоживания нет (разве что выбросом исключения, но оно а) тормозит б) предназначено для другого, так что это тоже говнокод)

Оператор GOTO приумножает эти возможности, жаль что убрали его везде почти ))

linux kernel: hold my beer

$ wget https://github.com/torvalds/linux/archive/refs/tags/v6.12.tar.gz
$ tar zxf v6.12.tar.gz
$ grep --include=\*.{c,h} -rnw './linux-6.12/' -e 'goto' | wc -l
  202298

Подозреваю, такой поиск нашел много строк типа: "static void tcf_action_goto_chain_exec(const struct tc_action *a, ". Лучше уж искать 'goto ' (с пробелом).

Подозреваю, такой поиск нашел много строк типа: "static void

да вроде нет

$ grep --include=\*.{c,h} -rnw './linux-6.12/' -e 'goto' | head
./linux-6.12//init/do_mounts_rd.c:97:		goto done;
./linux-6.12//init/do_mounts_rd.c:107:		goto done;
./linux-6.12//init/do_mounts_rd.c:115:		goto done;
./linux-6.12//init/do_mounts_rd.c:125:		goto done;
./linux-6.12//init/do_mounts_rd.c:139:		goto done;
./linux-6.12//init/do_mounts_rd.c:155:		goto done;
./linux-6.12//init/do_mounts_rd.c:165:		goto done;
./linux-6.12//init/do_mounts_rd.c:200:		goto out;
./linux-6.12//init/do_mounts_rd.c:204:		goto noclose_input;
./linux-6.12//init/do_mounts_rd.c:209:		goto done;

$ grep --include=\*.{c,h} -rnw './linux-6.12/' -e 'goto' | tail
./linux-6.12//block/bfq-iosched.c:5209:		goto start_rq;
./linux-6.12//block/bfq-iosched.c:5216:		goto exit;
./linux-6.12//block/bfq-iosched.c:5231:		goto exit;
./linux-6.12//block/bfq-iosched.c:5235:		goto exit;
./linux-6.12//block/bfq-iosched.c:5852:			goto out;
./linux-6.12//block/bfq-iosched.c:5867:		goto out;
./linux-6.12//block/bfq-iosched.c:7036:		goto schedule_dispatch;
./linux-6.12//block/bfq-iosched.c:7373:		goto out_free;
./linux-6.12//block/bfq-iosched.c:7661:		goto err_pol_unreg;
./linux-6.12//block/bfq-iosched.c:7681:		goto slab_kill;

$ find ./linux-6.12/ -type f -name "*.c" -exec grep -E ".*goto\s.*" {} \; | wc -l
  201596

И всё‑таки мне кажется, что проще один раз запомнить Next(), чем изо дня в день писать Следующий()...

Бизнес логику еще надо будет всю перевести и запомнить. Типа
- МедицинскиеОсмотры
- МедицинскиеРегистрыФРМР
- МашиночитаемыеДоверенностиФНС
- ОбменСБанкамиВыплатыСамозанятым

И прочее. И чтобы самозанятый в переводе не стал похож на индивидуального предпринимателя. И чтобы ФРМО стал у всех FRMO, а ФРМР - FRMW (или кстати FRME?)

Но ОбъектJSON оставили без перевода.

JSON - ругательство международное.

Да никто целиком не пишет Следующий(). Сначала пишут Сл, потом Ctrl+пробел. И так с любыми методами.

Обычно "Следующий" - это метод объекта, и идёт после точки. Там даже Ctrl+Пробел не надо нажимать.
Вообще, восприятие - дело привычки. Хорошо читающий программист видит не код, а реализуемый кодом алгоритм, и на такие мелочи быстро перестаёт обращать внимание. Я когда снегопатом активно занимался, писал и читал одновременно на 1С, С++, javascript, TypeScript, AngelScript, asm, ещё и на ruby шабашил. Нормально совершенно всё воспринималось. Больше напрягало, что в Конфигураторе надо Ctrl+Пробел нажимать, а в других IDE само выскакивало :)

Гигант! Уважуха! у меня от трех языков в день уже начинает сильно болеть голова...

За телепат® тоже спасибо!

если немного знаешь англицкий - совершенно никакой разницы, писать день ото дня Next или Следующий (тем более, подсказка нормально вываливается). А вот про имена процедур и переменных - ниже совершенно правильно откомментировали

Да, в нём от регистров совершенно ничего не зависит! И стека тоже! /s

Ещё как зависит от регистров. Накопления, бухгалтерии, сведений и расчета.

Для платформы СБИС можно писать свой код на ECMAScript с русскими названиями классов и методов, и это для меня жутко неудобно.

Классические ошибки и незнание методов стандартной библиотеки неинтересно разбирать, проще по-тихому дать коллеге ссылку на методическую документацию, чтобы оба сохранили лицо.

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

В обогащаемом во времени условии, если его инвертировать, а потом добавить новое значение в перечисление, логика сломается. Наверное, автор подразумевает переделать на поиск по массиву, но это эстетически опционально.

По оформлению - только использовать полумеры типа phoenixbsl или уже переходить на edt. В конфигураторе вендор линтеров не дал, это подстава, конечно, с его стороны.

Остальное норм, весело) Про гуманитариев прям в точку, бывает такое, когда засиживаешься над задачей и теряешь контакт с внешним миром.

начиная с 8.0 (а это начало 2000-х) всегда можно было.

можно было и в 7.7 (более ранешные версии почти не щупал, поэтому не скажу).

Сейчас 8.3 и есть. И можно было кажется всегда, в 7 точно. Но это не удобно в типовых (они на русском) и отраслевых самписках - тебе аналитики будут давать русские названия объектов, зачем их криво переводить или транслитирировать? А если можешь легко переводить спецтермины, то может переводчиком больше заработаешь чем 1Сником?

Если пишешь "на мир" - можно взять английскую стандартную библиотеку и писать по английски всю конфигурацию.

Есть и типовые, написанные на английском.

Не хотел в дрязги ввязываться, но что-то ... .

Странные у Вас критерии качества кода - соответствие стандартам.

По-моему, о качестве кода должно говорить - быстродействие, количество используемой памяти, нагрузка на систему, размер БД, удобство пользователей и т.д., но коим образом не соответствие стандартам.

И давно линтеры и сонаркуб за пределами 1С отменили? И MISRA до кучи.
Качество кода, который будешь активно модифицировать не ты - это читаемость. А то, что вы перечислили - качество программы. Которая не код, код - это ее описание.

Согласен с вашим критерием качества кода.

Если ты будешь модифицировать - то тоже читаемость прежде всего. Потому что спустя год и более код будет уже восприниматься как чужой.

А интерфейс 8.5 уже успели заценить?

Лучше бы интерфейс конфигуратора изменили или edt допилили)

Есть такое, кровь из глаз почти перестала литься...

В SAP интерфейс из 80х и ничего, работают все, много кода написано, в некоторых проектах по 100 человеко-лет, переписывать ни кто не будит.

Через ИИ через год можно быстро переписать, хоть портировать, хоть с нуля.

для тех кому шашечки, а не ехать SAP сделал fiori - приложения в обычном браузере. функционал тот же, причем это не замена, а дополнение, т.е можно работать и через обычный gui-клиент, который кстати тоже обновился существенно с 80х, и одновременно в браузере чтобы отчетики красивые юзать, с графиками и диаграмими...

На пару секунд залип в код по подсчету английских букв. Потом с облегчением вспомнил про коды символов. Все таки долгие праздники сказываются на соображалке)

Там вообще, судя по кусочку кода, исходную строку посимвольно циклом обходят, использование кодов символов не исключит посимвольный обход. Тут напрашивается что-то вроде СтрРазделить(ИсходнаяСтрока, "abcd...").Количество() - 1

Кстати, видел по-моему в БСП забавный код по удалению из строк, содержащих номера телефонов, все символы кроме цифр, код там был примерно такой:

ДопустимыеСимволы = "0123456789";

ЛишниеСимволы = СтрСоединить(СтрРазделить(ИсходнаяСтрока, ДопустимыеСимволы));

ИтоговаяСтрока = СтрСоединить(СтрРазделить(ИсходнаяСтрока, ЛишниеСимволы));

В свежих версиях платформы можно и так, но только на сервере и в толстом клиенте:

СтрНайтиВсеПоРегулярномуВыражению(НРег(ИсходнаяСтрока), "[a-z]", Истина).Количество()

Я уж думал, что Иван позврослел, но нет - тот же рыцарь в белом пальто.

Последний пример - результат обхода проверок Сонара.

Язык в 1С нормальный, не надо гнать. Можно на английском писать, можно по русски.

В 1С меня больше документация убивает.

Функция Сохранить Переменную().

Описание: Функция сохраняет переменную.

Функция ЗаписатьРегистр().

Описание: Функция осуществляет запись регистра.

И так вся документация.

p.s. Может, что исправилось. В конце 90-х так было. Тогда писал много на 1С.

К документации есть куча претензий, но такой дури, которую вы привели - не замечал.

С конца 90-х четверть века прошла, какая разница, что было тогда?

В Битриксе у них аналогично некоторые моменты не документированы толком, приходилось в код ядра лезть смотреть.

Не скажу про платформу, но документация стандартных библиотек, который используются во множестве конфигураций, например, про маркировку и Честный Знак, написана на отвали. Потом на форуме инфостарт появляется куча однотипных стандартных и логично вытекающих вопросов, на которые был положен болт в документации.

Документация конфигурации 1С УНФ (управление нашей фирмой) - просто тоненькая книженция, в которой описывается 20% функций программы.

Больше всего понравился статус документа "Огружен", который присутствует в метаданных и никто его так и не поправил, так и копируют по коду

И это всё еще стандарт. Причем в выборке в 99% случаев одна валюта учета.

Ну будет вместо "КонецЦикла" фигурная скобка. Python относительно недавно придумали, чтобы отступ разделял области видимости.

Я думаю, речь не об оформлении, а о том, чтобы не писать код с таким количеством уровней вложенности

Тут речь скорее о невозможности именно сделать выборку из запроса по нескольким полям одним уровнем.

Запишем: 36 лет назад → относительно недавно. :-)

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

SQL для выборки хорош. А 7 циклов это ужасно.

Я в таком случае (когда из множества итогов используется только один-два + детальные записи) использую плоский цикл и определение через ТипЗаписи() и Группировка()

Интересно, а бывает китайский 1С?

Точно есть вьетнамский. В партнерском форуме двадцать лет назад были с матерными фамилиями/именами.

Джуны меньше. Остальные сопоставимо с другими языками.

Это последние пару лет зп выросли, а до этого было всегда меньше. Вилки были сдвинуты на 1 грейд вниз по сравнению с любым другим популярным ЯП. Условно Senior 1C = Middle Java.

Ладно бы зароботок (вроде сносно). Проблема 1С в том что вне работы для себя на нём just for fun не покодить (знаю, есть c недавних пор 1script, но то такое). Программирование всё таки околотворческая область деятельности и многие туда пришли потому что нравилось.

А многие одинэсники в основном застряли там и потеряли способность освоить что-то другое. Опасная штука. Те кто пишет не на 1С, туда лезть не хотят, хотя при желании не проблема освоить ещё один язык (там, правда, ещё и бухгалтерию и прочие сопутствующие предметы надо осваивать).

Я, 1Сник, вкатился в нее из Delphi, продолжаю писать на Дельфи достаточно сложные штуки под прикладные вещи, которых в 1С нет или нужно быстродействие. Недавно погрузился в Java Enterprise, нашел много общего, много велосипедов и много интересного, некоторые приемы Java (рефлексия) утащил в Delphi, остался верен 1С. Так что, не говорите за всех.

А где у меня говорится за всех?

Проблема 1С в том что вне работы для себя на нём just for fun не покодить

А кто тебя остановит? домашняя бухгалтерия, тудушники.
Да, графики в нем нету, а мобильная разработка во многом на отвали, но в остальном для себя - пиши сколько влезет.
В мировой топ опенсорса проект наверное не выйдет, но это на любом языке так.

Инструмент слишком узкоспециализированный по сравнению с Java/Go/PHP/Python и т.п. Если захочется например какой-то веб сервис разработать, то придётся осваивать более подходящий стэк.

Я телеграмбота для викторины на эвент писал. Вполне работало. Если бы еще ИБ разрешили веб хук выставить наружу, вообще бы без тормозов работало. По пул модели конечно хуже.
Вот что-то высокоскоростное/бинарное не про 1С конечно. Но банальный рест/соап вполне работают.

Автору рекомендую посмотреть функцию

Функция ПолучитьДанныеКлассификатора() Экспортмодуля менеджера справочника УпаковкиЕдиницыИзмерения

в какой-нибудь типовой.

Эээ по многим примерам возникает вопрос "где смеяться" или "что не так"? Возьмём первый же скриншот, который должен быть самым наглядным, самым ярким. Да, тут есть вопросы по эффективности. Главный вопрос, а что, в 1с нет булевых переменных, что ложь и истина складываются в строку. Но код элементарно читается. Как я понимаю, основная претензия автора - к стилю написания. Так что не так со стилем, есть отступы, имена переменных вполне говорящие, всё сразу понятно, что происходит. Ну, ТЗ написано в разной капитализации, ладно, маленькая неидеальность. Переменная ТЗ создается до цикла, не было смысла ее создавать в той области видимости, где используется, внутри цикла. Код в целом не оформлен как функция с чистыми входными параметрами и результатом. Но по оформлению - код легко читается, имена переменных вопросов не вызывают. Кому режет глаз русский язык - это вопрос не по адресу, если в 1с так принято. Видимо, смеяться надо при виде сложения ложь,ложь,истина в строку. Но это не очень культурно, глумиться над другими людьми, которые что-то не знают или не умеют. В конце концов, кому этот участок кода не нравится - переписать элементарно. Здесь понятно, где начало, где конец, и что код делает.

Если вы стебетесь, так хоть /s в конец дописывайте, а если нет...

...вам серьезно надо объяснять, что такое семафоры, как работать с булевыми переменными, как искать в массиве и прочие подобные вещи?

Нет, это был НЕ стёб. Просто у меня в голове сильно заниженные требования, когда слышу 1с. Я видел всякие макросы в экселе, которые не лучше, и к 1с отношусь примерно так же. Что-то кривое понаписано, и сойдёт. Сам факт использования русского языка говорит о том, кто целевая аудитория "программистов" и какая от них ожидается квалификация. Самая никакая. Зачем сделали иусский язык? Чтобы скриптовой язык был доступен всем, даже самым тугим. Вот результат, и его можно считать нормой.

Просто у меня в голове сильно заниженные требования, когда слышу 1с.

наверное, это проблема не 1с, а вашей головы?

Сам факт использования русского языка говорит о том, кто целевая аудитория "программистов" и какая от них ожидается квалификация. Самая никакая. Зачем сделали иусский язык? Чтобы скриптовой язык был доступен всем, даже самым тугим. Вот результат, и его можно считать нормой.

т.е. стоит запомнить "некие заклинания или кодовые слова" на иностранном языке, и сразу квалификация взмывает в небеса?

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

Что, простите? Это каким-то "программистским национализмом" попахивает, что, если логика написана не англоязычным синтаксисом, а имена переменных на кириллице, оно перестает быть кодом на языке программирования?

Чтобы скриптовой язык был доступен всем, даже самым тугим.

Нет, в первую очередь чтобы не было переключения языкового контекста при описании сущностей бизнес-области, как отметили в одном комменте выше. Потому что Если ДатаПримененияРаспоряжения2543 >= ТекущаяДата() Тогда ... воспринимается в разы понятнее при переносе логики бизнес-процесса в код, нежели If StartDateForFiscalDirectiveNo2543 >= CurrentDate() Then... и гораздо понятнее, чем смесь языков в коде. Да, когда-то давно была идея дать рядовому "продвинутому пользователю" право самому редактировать код... только с развитием и многократным усложнением предметной области это все очень быстро отправилось на свалку эпох.

Про сам код продолжать препирательства не вижу смысла, все высказались, добавить нечего. Но про глобально и про национализм отвечу. Программисту удобнее то, что стандартно. Поэтому они любят linux/unix - подобные команды почти в любом окружении. И стандартом является if и for. Для этого не надо знать английский, это просто идентификаторы. И большая часть популярных языков регистрозависимые. Поэтому зачем делать язык на русском и регистронезависимый - для снижения порога входа, чтобы было понятно всем. Такое объяснение мне первым приходит в голову. Если бы язык делали для профессиональных программистов - разве не выбрали бы, чтобы тз и Тз были разными переменными? Хотя ваше объяснение про русский язык тоже имеет смысл - перевести "распоряжение" нужна ещё и квалификация переводчика, а для if и for - чтобы не менять раскладку. Короче, я предпочел бы if и for не потому, что всё английское лучше, а потому, что так работает всё вокруг, это стандарт. И да, локализованный эксель меня тоже раздражает, когда вместо vlookup пишется впр. А ещё разберись, когда там разделитель точка, запятая, или точка с запятой. Да и вообще эксель меня раздражает, и на английском тоже. Даже формулы с регулярным выражением нет). А не съедать нули научился только в последние несколько лет, спустя десятилетия существования.

Про сам код продолжать препирательства не вижу смысла, все высказались, добавить нечего. Но про глобально и про национализм отвечу. Программисту удобнее то, что стандартно. Поэтому они любят linux/unix - подобные команды почти в любом окружении. И стандартом является if и for. Для этого не надо знать английский, это просто идентификаторы. И большая часть популярных языков регистрозависимые. Поэтому зачем делать язык на русском и регистронезависимый - для снижения порога входа, чтобы было понятно всем. Такое объяснение мне первым приходит в голову. Если бы язык делали для профессиональных программистов - разве не выбрали бы, чтобы тз и Тз были разными переменными? Хотя ваше объяснение про русский язык тоже имеет смысл - перевести "распоряжение" нужна ещё и квалификация переводчика, а для if и for - чтобы не менять раскладку. Короче, я предпочел бы if и for не потому, что всё английское лучше, а потому, что так работает всё вокруг, это стандарт. И да, локализованный эксель меня тоже раздражает, когда вместо vlookup пишется впр. А ещё разберись, когда там разделитель точка, запятая, или точка с запятой. Да и вообще эксель меня раздражает, и на английском тоже. Даже формулы с регулярным выражением нет). А не съедать нули научился только в последние несколько лет, спустя десятилетия существования.

Программисты

Ооооооооооокеееееййййй…..

Прокомментировать не желаете? Или если в высокоуровневом языке не англоязычный синтаксис, на что обращает внимание половина комментов здесь, то пишущие на нем уже не программисты?

Не существует программистов на 1С, только колхозники, методом тыка и копипаста пытающиеся что-то из себя выдавить.

это примерно так, как в стековерфлоу по любопу ЯП?

нееее.. в стековерфлоу - фермеры!

Я надеюсь, это сарказм? Приглашаю "колхозников" к нам на испытательный срок, писать под высоконагруженный кластер 1С, я посмотрю, как они "методом тыка и копипаста" будут переписывать, например, логику расчета маржи (только основной модуль на 54300 строк), из которых немалая часть - сложнейшие запросы, от которых поседеют некоторые SQL-щики.

Это не сарказм. Проблема не в том, что я видел много тупых 1Сников, проблема в том, что я не видел умных. Каждая интеграция - просто клоунада.

Создать индекс под запрос? Это невозможно, там же непонятные имена таблиц.

WSDL? XDTO? Не надо, оно ломается, мы лучше руками XML напишем.

Зависает UI? Ну он считает же, как иначе.

А зачем вы два раза кнопку нажали? Не делайте так больше, иначе снова сломается.

Ой, у вас там куки? Не, давайте лучше авторизацию по паролю.

У вас в новой версии нужная фича, а мы обновляться не хотим, у нас конфигурация изменённая. Давайте в старую её скопируем?

Долго считает? А вы переведите в файловый режим, так быстрее будет.

Тесты? Что такое тесты? Гит? Что такое гит? Какое ещё профайлер?

И по итогу каждого идиота прикрывают тем, что он классный специалист, потому что знает, как работет бизнес/склад/продажи. Почему-то никого не смущает, что код пишет фактически кладовщик.

Не везет вам по жизни...
Индекс под запрос делается без имен таблиц в 80% случаев. Но контора прогнулась, скоро можно будет в 100%.
XDTO вне 1С мне даже в приватном режиме гугл не показывает. Хотя кто-то в наше время еще живет на XML? REST json ы то на бинарный протокол меняют по возможности кажется.
Куки в полустандартной библиотеке живут уже давно, в стандартной - года два кажется.
Фича в новой версии с бекпортом? у вас там ребята на УПП? Так как последнее время настолько ломающие новые фичи выходят, что проще перепиленную в хлам обновить или просто рядом типовую поставить.
Файловый быстрее? Тут 2 вопроса.

  1. Если работает в файловом, зачем вы людей на сервер развели.

  2. Что вы такое с сервером сделали, что на клиенте быстрее? до сих пор на старом Ксеоне?

Тесты да, есть очень редко. Специфика типовых без теста и контроля за развитием. Слишком много всего меняется без обновления, а пакета тестов от вендора на типовую часть нету. А разработка в большинстве случаев по локоть в кишках. Законных точек расширения не хватает, без перепиливания приватных функций никуда.

Гит уже много где, даже без ЕДТ. А профайлер был повседневным инструментом еще в 2000 году, без него увы и ах - никуда.

Почему-то никого не смущает, что код пишет фактически кладовщик.

Работали мы с ребятами из KPMG. Их рядовой боец, знающий складскую подсистему (не 1С, просто типовой шаблон процесса) переписывал то что он знает в документацию очередного проекта очередного заказчика по ставке часа раза в три превышающей ставку руководителя проекта со стороны 1С команды.
(я тогда офигел с этих консалтеров, там где любой программист просто возьмет из личной библиотеки наработки они реально с нуля писали очередной визио документ, так как прошлый продан прошлому заказчику и его использовать нельзя, какие такие стандартные библиотеки?)

XDTO не все схемы тянет, там редуцирование XML формата происходит при переходе к объектной модели и это ограничение самой концепции объектного подхода. Поэтому если Вы будете опираться прям в понастоящему сложных проектах на XDTO зависимые технологии, то можете со временем споткнутся об эту принципиальную непреодолимость и это будет прям больно переводить весь проект на другую базу пересогласовывать все схемы данных.

И по большинству вопросов - тут же краеугольный камень оплата. Покрыть тестами - не вопрос - но это стоит денег, человекоориентированный UI - стоит денег, индексы на больших базах дорого стоят, обновление сильно переписанной конфы тоже прям дорого, ревью кода почему медленно считает может стоить дороже чем апгрейд сервера.

Гит да, печаль.

Не PNG по 3 мегабайта как часто бывает - уже хорошо.

Как раз в данном случае PNG был бы по весу если не меньше - то сопоставим.

А глазам бы больно не было.

Провел эксперимент
scr.png 22кб
scr.png 22кб
scr-90.jpg (90% качество) 37кб
scr-90.jpg (90% качество) 37кб
scr-65.jpg (65% качество) 22к
scr-65.jpg (65% качество) 22к

Хабр немного исказил фото, из-за чего пиксели плывут. если смотреть полный размер, например в новой вкладке - то всё четко.

Судя по всему скриншоты в статье зашакалены еще ниже 65% качества (ну или используемая программа плоха. Я использовал GIMP -> экспортировать как, в обычной жизни использую то, что делает greenshot, там по дефолту png с одинаковым с GIMP размером).

Спасибо автору, за то, что перезалил )

Мы помолясь завсегда на православном Ять++ либо Змий либо Ржа пишем: народное уложеніе ВЪ_Складъ(​ФЪ​:Складъ) ->Складъ { Складъ_цифири = Складъ::новый() ; Для (Ять, А_Ять) Ф.пройти().перечислить() { Коль Ять ​Поболе​ 3 либо А_Ять Поболе 5.0 {Складъ_цифири.клади(А_Ять);} }Складъ_цифири }

Я как-то раз попробовал библейское сотворение мира на 1С описать под впечатлением после прослушивания world.execute(me)... однако, получилось неплохо. Сюда только выкладывать как-то опасаюсь, а то еще за оскорбление чувств верующих привлекут)

Ҍ++ - да, лучший язык. Умозрительные соответствия, параллельные уложения, подсветка ключевых слов не только на кириллице, но на глаголице в IDE (ой, простите, в единой среде разработчика, я хотел сказать)... много интересного, короче.

И главное при отладке - как ёмко и понятно выглядит сообщение об ошибке времени исполнения! Просто ҌҌ - "дабл-ять" у нас это называется.

Давайте про будущее, когда 1С это одна строка запроса к нейросети. " - Алиса, ты поработай пока, а я побежала, в магазине на углу сапоги выбросили. - Госпожа, двумя кварталами дальше сапоги дешевле на 10 процентов"

Ну кроме шуток интересная область. Типа для ускорения обучения нейросети берем обученную нейросеть на других примерах, потому что она уже "поняла" как выделять признаки и быстрее обучится на других объектах, чем нейросеть нулевая. Вместо математики и логики абстрактные пояснения по нюансам работы. Обратное распространение ошибки математика конечно, но она остается на нижнем уровне, а главное обучение, тут уже интуитивно всё как-то.

Кому-то нравится справа налево писать. Отраслевая конфигурация

Я на полном серьезе видел где-то на инфостарте что ли прямую рекомендацию делать именно так, и объяснение было рукалицо - чтобы СЛУЧАЙНО не перепутать сравнение и присваивание значения переменной... Видно для тех, кто не может воспринять на уровне подкорки, что сравнение в 1С - это "=", а не "==".

Первые доработки начинающих программистов почти неотличимы от сделанных на скорую руку

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

А тут видна история - условие дополнялось не сразу, и в результате через ИЛИ перечислено почти всё

Как выше уже отметили, это очень китайский код, но его нельзя инвертировать логически, так как если при изменении бизнес-процесса набор статусов в перечислении расширится - это сразу же приведет к ошибке. Да, оно выглядит страшно, но оно таким должно быть, так код выглядит почти всегда, особенно когда пишешь подобие конечного автомата, проверяющего статусы.

По легенде, этот код заменяет в заказах одну номенклатуру на другую

У меня один вопрос - а как оно вообще работает, оно же должно в ошибку сразу же вывалиться по несоответствию типов? Если работает, а не лежит в ветке кода, которая никогда не будет достигнута (по кнопке, которая скрыта и не видна никому)...

Видна история, судьбы? Я прям вижу - программисты сидят, ночь, оно не считается, НАДО ХОТЬ ЧТО-ТО СДЕЛАТЬ

Жиза. (с)

Эффектно завёрнутый в универсальную функцию поиск по коду

Эффектно, да, только это отличный способ выстрелить себе в ногу. А еще источник лютых проклятий от тех, кто будет когда-то удалять какой-то справочник из конфигурации в процессе рефакторинга и искать все вхождения упоминаний метаданных в конфе... КОТОРЫХ НЕТ.

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

Контекста и правда не хватает. Мне вот все понятно в этом юморе, попытаюсь дать контекст

Кому-то нравится справа налево писать. Отраслевая конфигурация

Здесь понятно - обратное написание (думаю, в любом языке) вызывает короткий ступор при чтении, потом понимаешь, что же делает код, чертыхаешься про себя "чо, нельзя было нормально написать???" и злой читаешь дальше.

Первые доработки начинающих программистов почти неотличимы от сделанных на скорую руку

Здесь нарушена структура, обычно так получается, когда пишешь второпях и некогда структурировать, а новички часто пишут так потому, что еще не парятся насчет структуры.

А тут видна история - условие дополнялось не сразу, и в результате через ИЛИ перечислено почти всё

Думаю, здесь корявость в том, что проще было сравнить с оставшимися вариантами, коих явно меньше. Но очень похоже, что изначально в условии было одно сравнение, потом бизнес-процесс подкорректировали - появилось второе через ИЛИ, потом еще раз и еще раз - и вот мы видим (на примере цветов радуги) вместо условия А <> "красный" нагромождение (А = "желтый" ИЛИ А = "оранжевый" и т.д. до фиолетового), потому как цвета добавлялись постепенно в ходе развития проекта.

По легенде, этот код заменяет в заказах одну номенклатуру на другую

Здесь тоже все просто - идет обход таблицы значений, и каждая строка сравнивается со ссылочным типом. Конечно же, всегда сравнение возвращает Ложь. Поэтому присваивание никогда не происходит, а так была бы ошибка изменения немутабельного значения

Блин, очень глупо себя ощущаю, объясняя юмор. Но раз уже накатал такую портянку - не пропадать же

Думаю, здесь корявость в том, что проще было сравнить с оставшимися вариантами, коих явно меньше.

Ну да, это первая реакция, "какого фига надо сравнивать со всем подряд через ИЛИ", но потом вдумываешься в контекст кода и понимаешь, откуда оно взялось, и почему это условие нельзя бездумно логически инвертировать. Тем более что в плане читабельности условия через ИЛИ часто воспринимаются куда очевиднее, как явно описанный список случаев, когда условие должно триггериться, нежели их логическая инверсия в виде отрицаний равенства через И - в данном случае пришлось бы сразу открывать перечисление и смотреть, а какие же там остальные статусы, входящие в это "<>".

Конечно же, всегда сравнение возвращает Ложь.

Ну да, тупанул, первое что увидел - что строке пытается присвоиться значение, а про то, что условие всегда выдаст Ложь просто на несовпадении типов, не задумался... кстати, а где тут КонецЕсли? Оно же вообще не должно дать даже сохранить такое...

кстати, а где тут КонецЕсли? Оно же вообще не должно дать даже сохранить такое...

Сохранить даст, хоть и выдаст предупреждение. Но выполнить, конечно, не сможет, при входе в модуль выдаст синтаксическую ошибку.

Я на полном серьезе видел где-то на инфостарте что ли прямую рекомендацию делать именно так, и объяснение было рукалицо - чтобы СЛУЧАЙНО не перепутать сравнение и присваивание значения переменной... Видно для тех, кто не может воспринять на уровне подкорки, что сравнение в 1С - это "=", а не "==".

Вам никогда не приходилось опечататься, а потом долго искать где ошибка ЛОГИКИ?

if ($var = 0) {/*...*/}

Приведёт к долгой отладке, в то время, как

if (0 = $var) {/*...*/}

Выдаст немедленную ошибку, которую даже редактор может подсветить, если он это умеет.

А ещё, так реально намного удобнее считать код, особенно если сравнивается Очень->Длинная->Переменная->Которую->ты->уже->встречал

Вам никогда не приходилось опечататься, а потом долго искать где ошибка ЛОГИКИ?

Любая вменяемая IDE здесь как минимум покажет ворнинг. В идеале должен использоваться -Werror (или аналогичный ключик вашего компилятора).

PHPStorm не варнит из коробки. Ключей компилятора нет, это PHP и JS. Разве что анализатор дополнительно поискать

Я просто видно слишком долго пишу на 1С, чтобы запомнить, что одиночное равенство внутри Если ... Тогда всегда интерпретируется платформой как сравнение в условии, а не как присваивание значения, такая ситуация, требующая подобной "осторожности", чтобы не спутать операторы "=" и "==" (которого в 1С просто нет) конкретно в этом месте просто невозможна.

Занятный факт - Джаверы, когда я показал им трюк с трассировкой кода через ЗамерПроизводительности в 1С, смотрели на это как на чудо...

А потом посмотри на flame diagram из разных веб и не только девтулзов...

Эффектно завёрнутый в универсальную функцию поиск по коду

Эффектно, да, только это отличный способ выстрелить себе в ногу. А еще источник лютых проклятий от тех, кто будет когда-то удалять какой-то справочник из конфигурации в процессе рефакторинга и искать все вхождения упоминаний метаданных в конфе... КОТОРЫХ НЕТ.

В платформе очень не хватает трассировки строк в файл, точек остановки при изменении значений переменных и т.п. (просят постоянно на форумах), но платформу для программиста развивать не собираются, отсылают в 1С:EDT.

Сейчас в типовых очень много универсальных механизмов, по наименованию метаданного уже практически бесполезно искать алгоритмы.

точек остановки при изменении значений переменных

Платформа 8.3.24

Обновляйтесь и да пребудет с вами Сила. Вообще в последних версиях платформы стали очень много таких QoL внезапно добавлять.

Вот одинэсники, они такие.

Не "При выполнении условия", т.е. когда переменная стала равно определенному значению. А нужно, что переменная вообще изменила значение.

Чтобы делать такую проверку, нужно, чтобы отладчик сохранял где-то в каждый момент времени все значения всех переменных в текущем контексте (ну ладно, пусть даже значение одной определенной переменной или выражения, которые мы сами напишем), и сравнивал каждый раз текущее значение с предыдущим, и я как-то слабо представляю, как это вообще должно быть реализовано архитектурно и самое главное, где это в принципе применимо (единственный напрашивающийся кейс - отслеживание одного редко срабатывающего семафора в огромном цикле на тысячи итераций, но семафор - он и так булево, а больше мне за годы работы ничего подобного не попадалось). Но вообще-то сейчас ничего не мешает сделать

вот так

где МояПроверочнаяФункция - функция, определенная где угодно (вообще где угодно, хоть экспортная во внешней обработке, лишь бы она была доступна в текущем контексте), которая будет внутри себя творить какую-то нужную нам магию, например, сравнивать текущее значение переменной с предыдущим и сохранять текущее для дальнейшего сравнения, например, в глобальное хранилище настроек конфигурации, в регистр, в константу, в черта лысого, и возвращать Истина или Ложь. И оно будет работать, потому что все, что делает отладчик при встрече точки останова - вычисляет значение выражения, которое заявлено как условие, а что там в выражении, логическое сравнение, вызов функции, или что-то еще - неважно, лишь бы результатом вычисления было булево или что-то, приводимое к булеву. Да, сохранение значения для сравнения - медленно, и выглядит как жуткий костыль, ну а что вы хотели? Опишите кейс, где именно такое может реально понадобиться, потому что я вот вообще не могу себе представить его. Пусть даже у нас в цикле перебирается что-то и нам надо отслеживать одну переменную - что мешает на очередном срабатывании точки останова просто заменять условие в ней на НужнаяПеременная <> ТекущееЗначение и отправлять выполнение кода дальше? Я не представляю, чтобы это нужно было сделать такое количество раз подряд, чтобы для автоматизации этого понадобилась новая опция отладчика.

Господа, давайте определимся что мы имеет в виду под "Переменная". Классически это именнованная область памяти. Т.е. время жизни этой сущности - контекст модуля/функции/глобальный пока живет пара "имя-указатель". Передавая ее значение по ссылке мы считаем что "Переменная" продолжает жить или это уже другая переменная?

Думаю, тут нужна пояснительная бригада... Точка останова у нас в 1С - это маркер строки в коде, на котором должно остановиться выполнение кода, безусловно или при выполнении условия в тот момент, когда выполнение кода дошло до этого маркера. Соответственно, условие для точки может содержать только ссылки на те локальные и глобальные переменные, и свойства объектов/элементы коллекций, которые видны и существуют в контексте текущей функции/процедуры, где эта точка стоит. Что и куда мы там передавали, и в каком виде, раньше - значения не имеет (потому что мы понятия не имеем, что там происходит на других уровнях стека в другом контексте и другом пространстве имен), значение имеет то, что мы видим сейчас внутри той функции/процедуры, где мы остановились вот в этот момент. Я так понимаю, автор выше хочет, чтобы когда у него, например, в цикле меняется некая переменная А, видимая в пределах данной процедуры, точка останова срабатывала не просто по условию "сейчас А = некое_значение", а по условию "сейчас А не такая, какой она была при прошлом прохождении интерпретатором этой точки". Или когда эта же А, являющаяся входным параметром функции/процедуры приняла другое значение, нежели при прошлом ее вызове откуда бы то ни было. Для этого, как уже сказал, надо все время жизни отладчика постоянно хранить предыдущее значение переменной в контексте данной процедуры, даже после того, как произошел выход из нее и обновление контекста, и я действительно очень слабо представляю, как такое реализовать и зачем оно нужно...

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

А это есть в других ЯП, не в 1С?

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

Ну наверное, не случайно этого нигде нет, да?

возможно, но я абсолютно вручную много много раз проделываю одни и те же действия - отслеживание ссылок (разных имен в разных контекстах) на некую область памяти до первого/n-ного ее изменения, т.е. сравнивая предыдущее содержимое "переменной" - области памяти с его текущим содержимым в результате исполнение строки кода.
Руками, глазами и таблом отладки я делаю не абы какую рокет-сайнс работу - хранение в уме ссылок на переменную и отслеживание значения любой из них.

Хехехе, вот в нашей православной Delphi есть такое:

Вот тут он тормознулся по значению Value=10, хотя никакой точки остановки не было явно указано (по номеру строки кода):

Вот тут он тормознулся на значение поля Gender Объекта:

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

Качество кода - неотличимо от написанного вендоров?

Я попал в отрасль в 05 году, ещё клюшки были на пике, и уже тогда код вендора нихрена не был примером для подражания, ЗиК как и нынешний ЗУП были примером того как сломать мозг программисту, и в восьмёрке с самого начала были упоротые модули а-ля ваш пример подсчёта латинских букв

Они вообще очень выборочно соблюдали своиже правила всегда

Они вообще очень выборочно соблюдали своиже правила всегда

Хороший драгдилер никогда не употребляет свой товар.©

Если уж придираться к служебным словам в языке,
то я считаю, что уже давно пора переходить на новые мета символы,
обозначающие служебные для языка программирования конструкции. У нас дохрена в юникоде эмодзи для всех цветов радужных, для всех конфессий, партий, экоэкстремистов и наоборот, но при этом почему-то нет практики применения выделенных символов вместо этих IF WHILE function и т.п.
Кнопок на клавиатуре жаль добавить программируемых на манер POS-клавиатур, чтоб можно было в одно нажатие вставлять спец символы инструкций
и получалось бы что-то типа (символы, естесственно, взяты от балды пока):

ƒ ПроверитьПраваПользователя(id):boolean

∅ requestData ✎ Обернуть(ОсновнаяБД.ВыполнитьSQL(Select * From ...).ПерваяСтрока);

⫙ requestData.РазрешенЭкспорт ➳ 1→ƒ ∾ 0→ƒ ⨞


одна ерунда со сравнением с двумя, тремя знаками "=" и присваиванием через "=" чего стоит. Нравится pascal тем, что там присваивание конкретнее сделано.

Ну там сложная история со знаком присваивания

В википедии := это оператор определения, например высказывание x:=y означает что «переменная x по определению равна переменной y». А в «книге Р.Хаггарти - дискретная математика для программистов» дается определение что это оператор присваивания ...

Вы изобрели язык APL.

Р-схемы имени Вельбицкого? :-).

Много лет назад, в бытность 1С программистом, мы с напарником, писали 1С код на английском (да да это возможно), не в доработках стандартных, а в авторских конфигурациях с целью защиты от копирования и оно работало )))

И да когда пишешь на 1С проблем с русским нет, но сейчас по прошествии 20 лет, текут глаза когда пытаюсь осмыслить примеры кода )

Считаю своим долгом упомянуть, что google script (это как VBA для Excel, только для Google Sheets) тоже может в кириллицу. Вот кусок моего говнокода, например:

Э не, брат. 1С вроде позволяет полностью локализовать решение включая наименования, методы и атрибуты их объектной модели и весь UI фреймворка. Не знаю правда условный ДиалогОткрытияФайла.Открыть() - можно ли перевести на китайский или нет, пока таких задач не стояло. Косяк что они не дублируют содержание ИТС сайта на нескольких языках, вроде сейчас какие то подвижки начались, но какой то уж совсем минимум.

Бл.. код на русском.. нахера придумывать такую чушь..

Как поработавший какое-то время с 1С, могу написать, что язык 1С, не смотря на свою простоту по замыслу, очень трудно читать и воспринимать и тут дело не только в говнокоде, который пишут многие разработчики, а и в самом языке и в самих официальных конфигурациях. А все из-за отвратительного наименования переменных и процедур. Даже если сам код простой, ты часто просто устаешь от вотТакихДлинныхИНепонятныхНазваний.НаписанныхОченьДлиннымиЦепочкамиКакихТоСвойствИПараметров, а потом вдруг начинается что-то такое тн + др + кв + дв + чв и там такая портянка, что даже если ты в самом начале понял, что такое тн, к середине портянки ты уже это забываешь. А запросы на 3000 строк без применения на худой конец виртуальных таблиц - одно загляденье )))

часто просто устаешь от вотТакихДлинныхИНепонятныхНазваний.НаписанныхОченьДлиннымиЦепочкамиКакихТоСвойствИПараметров

Винни Пуха изнуряли длинные и трудно произносимые слова. :)

Отвратительный нейминг следствие природы технических заданий - законодательной базы учета - налоговых, трудовых, гражданских кодексов, положений ПБУ, писем минфина и т.д. В других странах плюс минус та же петрушка.

Если Вы в РФ или имеете доступ к РФ, зайдите на сайт гаранта или консультанта, откройте какую нибудь тему, имеющую долгую историю изменений и попробуйте почитать юридический язык. После этого нейминг от 1С станет для Вас вполне приемлемым, а если Вы попробуете перевести это на не родной язык то кровь из глаз потечет весенней рекой.

Пример:
16.5. При представлении в налоговый орган по месту учета организацией- правопреемником декларации за последний налоговый период и уточненных деклараций за реорганизованную организацию (в форме присоединения к другому юридическому лицу, слияния нескольких юридических лиц, разделения юридического лица, преобразования одного юридического лица в другое) в титульном листе по реквизиту "по месту нахождения (учета)" указывается код "215" или "216", а в верхней его части указываются ИНН и КПП организации-правопреемника. В реквизите "налогоплательщик" указывается наименование реорганизованной организации.

И дальше Вы будучи новичком пытаетесь это перевести на "человеческий язык" проводя декомпозицию на вложенные функции и сущностии даже, допустим, Вам это удается (!!!) и вы разбиваете контекст этих подфункций так, что бы переменные в одном модуле имели короткие легко-читаемые имена (Условно ЮрЛицо вместо ЮрЛицоПолученногоВРезультатеСлиянияРазделенияИПреобразования) и "тут бац и вторая смена(с)" выходит уточнение за номером.. рушащую всю Вашу ажурную конструкцию, а денег и времени переписывать весь контур у Вас нет.

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

Даже если сам код простой, ты часто просто устаешь от вотТакихДлинныхИНепонятныхНазваний.НаписанныхОченьДлиннымиЦепочкамиКакихТоСвойствИПараметров, а потом вдруг начинается что-то такое тн + др + кв + дв + чв и там такая портянка, что даже если ты в самом начале понял, что такое тн, к середине портянки ты уже это забываешь.

Ага, ага, в том, что программисты не умеют в нейминг, виноват язык, конечно же... В том же Java тоже могут быть VeryLongMethodNameJustBecauseIAmTooLazyToThinkOfAShortName, Java тоже в этом виноват? А в JS вообще все постоянно скукоживается до однобуквенных имен переменных, убирания всех возможных пробелов, табуляций и всего прочего, лишь бы облегчить итоговый *.js файл, так, что применяются "раскукоживатели", разворачивающие этот файл до читабельного вида... бида-бида...

А запросы на 3000 строк без применения на худой конец виртуальных таблиц - одно загляденье )))

Может, временных все-таки? Виртуальная таблица это малость другое. И мне такие запросы не встречались никогда. Если вас пугает сам размер запроса... что-то мне говорит, что это тоже не проблема языка...

И мне такие запросы не встречались никогда

Можео посмотреть их в ЗУПе.

Если человек пришёл в один-ASS, то у него уже априори беды с головой, поэтому не удивлялся бы ничему.

Что я могу сказать про 1С - в нём я новичок (я больше по классическому программированию, "на английском").
Тут многие хаят, дескать "фу-фу по-русски писать программы". Но в принципе это имеет право на жизнь - программировать можно, даже писать нужные программы, не бухгалтерские.

Есть только нюансы.

Например система работает не всегда как ожидается - написано вроде всё верно, ан-нет! Кое-где надо написать по-другому, потому что эта вывернутая конструкция, которая заработает в классическом языке, - в 1С не пойдёт.

Русский письменный-разговорный язык важен в окончаниях. Русский язык в 1С хромает. А = Новый Массив; - это отлично, но А = Новый Структура; - это что?
Так же с названиями процедур - думай в какой форме глагола написать.

И самое главное! Русский язык очень "разговорчивый", я реально устаю писать длиннющие конструкции! То что в python процедура обозначается def и отступами, в 1С надо писать Процедура .. КонецПроцедуры, и прочие конструкции. Думал VBA многословный, - я ошибался.

А по теме статьи - я конечно красиво в 1С не пишу (мыслю программу то я всё-таки англоязычно), но большинство кода в 1С я воспринимаю так же фейспалмово, как и код для Arduino - без слёз я смотреть не могу! (эта фраза не относится к тем немногим людям, которые настоящие профессионалы в своём деле). Думаю, причина в том, что в данные системы программирования более низкий порог вхождения, могут начать программировать люди, которые не умеют программировать совсем (что на самом деле неплохо, по разным причинам).

(я больше по классическому программированию, "на английском")

"вон оно чо, петрович"© Т.е. "классическое" - это на английском...

но А = Новый Структура; - это что?

Это создание нового объекта. Объекта, имеющего тип "структура"

Так же с названиями процедур - думай в какой форме глагола написать

Есть "соглашения по наименованию процедур и функций"

", я реально устаю писать длиннющие конструкции! То что в python процедура обозначается def и отступами, в 1С надо писать Процедура .. КонецПроцедуры, и прочие конструкции.

Откройте для себя сочетание "Ctrl+Space", а также шаблоны... Ну или Турбоконф, например

мыслю программу то я всё-таки англоязычно

"мыслить программу" надо "алгоритмично". а уж на каком языке потом выразить полученый алгоритм - дело третье.

но большинство кода в 1С я воспринимаю так же фейспалмово, как и код для Arduino - без слёз я смотреть не могу!

что-то мне подсказывает, что причина не в коде...

Тоже как-то раз попросили в детстве помочь с 1с функцией.

мой первый и последний раз с 1с
мой первый и последний раз с 1с

Я на плюсах писал в то время. Сейчас на питоне. Сейчас то понятно, что там встроенную функцию можно было использовать ха-ха

На счёт "любителя писать справа налево"

Если Истина = Объект...

Человек, писавший его, явно много кодил ранее на С, С++ или ином ЯП, где в условии можно как сравнивать, так и присваивать. В Си строка if (variable = constant) присвоит переменой константу и сравнит ее с нулём. А вот если записать if (variable == constant), то произойдёт сравнение переменной с константой. Так вот чтобы избежать ошибок, в подобных языках принято писать константу слева, а переменную справа. И если опечатался и шлепул только один знак "=", то при компиляции выскочит ошибка.

Articles