О статье

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

Меня всегда удивляло, что IT-сообщество так мало знает о платформе. Чаще всего это шаблонные тезисы про "кодинг на русском", "мало возможностей" и "постоянные баги". Но часто на поверку оказывается, что человек вообще не имел опыта работы с 1С или опыт был во времена мамонтов.

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

Дисклеймер

  • Я не работаю в компании 1С и не имею к ней никакого отношения. Это не рекламная статья. Эта статья не про компанию, а про продукт. Платформу для разработки приложений.

  • В мире 1С свои термины. Свои подходы к разработке. И часто разработчикам классических ЯП сложно понять их. Поэтому, в статье я буду пытаться наложить термины известные по другим ЯП на парадигму 1С. Это нужно только для облегчения понимания.

  • Я не утверждаю, что 1С идеальна. Уж кто, а программисты 1С лучше всех знают про минусы и недостатки этой платформы. Но критики в сторону этого продукта и так много, поэтому здесь хочу сконцентрироваться на возможностях.

  • Обзорную статью нельзя сделать без обобщений и упрощений. Иначе она превратится в учебник или документацию. Поэтому упрощения будут и здесь. И опытный специалист может увидеть их и возразить: "на самом деле в X не совсем правильно, ведь бывает Y". Сразу прошу прощения за то, что я где-то что-то не упомянул или недостаточно погрузил =)

  • Это моя первая (и тестовая) статья на данном ресурсе. Если вам будет интересна данная тема, то я продолжу демонстрировать платформу. И с хорошей и с плохой стороны.

Что это вообще?

1С:Предприятие — программный продукт компании «1С», предназначенный для автоматизации деятельности на предприятии.

Но это, конечно, и так понятно. А если подробнее?

  • "Платформа" - это продукт компании. Это ещё не конкретная программа для пользователя, но совокупность всех инструментов, которые нужны для её работы. Здесь есть IDE для разработчика, приложения для администрирования, клиентская часть (интерпретатор). Всё это в отдельности имеет свои названия, но чаще всего можно просто обощённо сказать "Платформа" и все 1Сники тебя поймут.

  • "Конфигурация" - это конкретный программный продукт. Это, грубо говоря, проект в Visual Studio. При этом под конфигурацией могут понимать и ещё конкретное написанное приложение от 1С. Т.е. тиражный проект, который поставляется с открытым исходным кодом. Например, Управление Торговлей или Бухгалтерия предприятия. Пользователь получает специальный шаблон установки, который разворачивает из типового проекта ваше приложение.

  • 1С - Это программная оболочка над базой данных. По сути, приложение 1С невозможно без базы данных по той причине, что сам проект (конфигурация) хранится в той же БД, где и лежат данные . Но об этом подробнее поговорим далее.

  • Поддерживаемые СУБД: Microsoft SQL Server, PostgreSQL, IBM DB2, Oracle Database. И файловый формат. При этом сам программист 1С при написании кода в большинстве случаев об этом не думает.

  • Кроссплатформа. Одно и то же решение можно запустить на Windows, Mac, Linux. Можно запустить вообще без установки платформы - в браузере (причем и с телефона). И в большинстве случаев код будет один и тот же (за исключением некоторых нюансов). Так же есть возможность написания специального приложения под Android и iOS. Это может быть и приложение-клиент (когда пользователь работает с той же базой напрямую) или же отдельное приложение, которое синхронизируется с основной базой.

  • Интеграция с внешними базами, веб-сервисами и мессенджерами. Это и подключение к другой БД "напрямую" (когда пользователи работают с ней не покидая 1С), и публикация WebAPI для работы из сторонних приложений, и разработка ботов для телеграм.

  • Гибкий пользовательский интерфейс. Без необходимости дополнительной разработки пользователь может полностью перенастроить интерфейс под свои нужды. При этом всё сделано ненавязчиво. Если пользователю такое не нужно, то он просто не будет открывать соответствующие пункты меню (часто про них мало кто вообще знает). Но если понадобится, то волен сам настроить: отборы, сортировки, группировки, оформление, отображаемые поля и так далее. Естественно, разработчик может что-то запретить к изменению, но чаще всего это не требуется.

  • Быстрая разработка. Это и быстрая разработка новых приложений и доработка существующих. Множество функционала платформа создает сама, а разработчик концентрируется преимущественно на бизнес-логике.

  • Расширяемость. Большинство готовых продуктов на платформе поставляются с открытым исходным кодом. С возможностью в любой момент изменить и доработать под свои нужды. А с использованием внешних обработок и расширений изменение типового проекта может вообще не потребоваться. Вместо этого возможно новый функционал просто положить "поверх" типового "на лету".

  • Большое комьюнити. 1Сников много. И много статей, видео, телеграмм каналов про эту тему. А также готового кода в виде отчетов, обработок, расширений и так далее.

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

Наше первое приложение

Создаем базу

И так, для того, чтобы пощупать разработку на 1С, достаточно скачать дистрибутив для обучения. Это бесплатно. Такая платформа имеет технические ограничения, но для наших целей её вполне хватит. Установка идёт в несколько кликов и вот уже на рабочем столе лежит ярлык платформы.

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

Либо создаем базу, либо указываем существующую.
Либо создаем базу, либо указываем существующую.

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

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

И вот мы видим список своих баз (у меня ещё есть группа).

  • 1С:Предприятие - это вход в базу в пользовательском режиме. В таком режиме платформа выполняет содержащийся в конфигурации логику. Реальные пользователи вашего приложения будут заходить сюда.

  • Конфигуратор - это IDE 1Сника. Конфигуратор служит не для наполнения базы данных и использования её функционала, но для разработки логики приложения.

Заходим в конфигуратор нашей новой программы на 1С. С самого начала нам нужно открыть окно конфигурации (далее оно будет открываться автоматически при входе).

Перед нами открылось окно панели конфигурации. Можно его сравнить с "Проектом" в VisualStudio.

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

Но на самом деле конфигураций в БД как минимум две =)

Для демонстрации продолжим разработку. Для этого кликнем по корню дерева и откроем панель свойств:

И в свойствах изменим имя конфигурации.

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

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

Бочонок (так у нас принято называть кнопку с синим цилиндром) переносит изменения из конфигурации разработчика в исполняемую конфигурацию. То есть в конфигурацию базы данных.

Обе эти конфигурации хранятся в БД. Но одна нужна для разработки и не выполняется в пользовательском режиме, а во второй же наоборот нельзя вести разработку и она исполняется в режиме Предприятия (для пользователя).

Нажмём поочередно на обе кнопки и запустим отладку F5.

Приложение уже обладает готовым интерфейсом с разными возможностями. Но пока этому интерфейсу не к чему применяться. И так, приступим к попыткам понять, что вообще такое - разработка на 1С. Мы уже знаем, что весь проект лежит внутри самой БД. Но из чего состоит этот проект?

Классы в 1С

В 1С нет классов ????‍♂️

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

Базовые классы.
Базовые классы.

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

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

Создаем справочники

И так, создадим новый Справочник. Сразу назовем его Организации. Сейчас у нас открыт редактор Справочника (нашего нового класса). Редактор удобно группирует все свойства по тематикам.

Всё. Мы уже можем обновиться и увидеть новый справочник. Нажимаем F5 и на всё соглашаемся.

Теперь мы видим наш справочник в меню. Перейдём в него:

Сгенерированный платформой интерфейс
Сгенерированный платформой интерфейс

1С автоматически сгенерировала все нужные базовые возможности для этого справочника. Добавила ему поля "Наименование" и "Код". Нарисовала формы: списка (скрин выше), объекта (скрин ниже). Добавила все нужные кнопки. У нас сразу же доступны:

  • Добавление, изменение, копирование и удаление.

  • Отборы, группировки, сортировки, настройка своего оформления.

  • Вывод списка в табличный документ.

  • Изменение состава выводимых колонок.

  • Сохранение своих настроек формы

  • Навигационные ссылки (каждая форма\объект имеет свою строковую ссылку для быстрого перехода)

  • Добавление в избранное

  • История данных. Она вшита на уровне платформы и позволяет в любой момент проанализировать изменения любых данных в базе.

  • И ещё много другого

Добавим же нашу организацию "Рога и Копыта". При записи поле Код сгенерируется автоматически.

Сейчас уже справочник работоспособен. И для простых таких классов больше ничего не нужно делать. Но чего не хватает нашей организации? Добавим для примера реквизит "ИНН".

Реквизиты

Реквизиты - это публичные поля класса. Они автоматически доступны пользователю в интерфейсе. И они хранятся в БД вместе с объектом. Фактически, добавляя новое такое поле в свой класс, разработчик заставляет платформу в таблице SQL добавить новую колонку (или несколько для составных типов).

Перейдём в конфигуратор и добавим новый реквизит ИНН:

На палитре свойств есть много всего, что описывает поведение нашего реквизита. Но нам сейчас интересно главное - тип. Какие бывают типы в 1С ?

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

Вы можете заметить, что в 1С нет отдельных типов под разные виды чисел. int, uint, long и ulong - это всё в 1С объединено одним типом Число. Но в реквизите мы можем это число настраивать. Пусть наш ИНН будет неотрицательным, целым (точность = 0) и максимальной длинной 12. Обновим теперь приложение и посмотрим на результат (F5).

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

Панель настроек списка в 1С - отдельное искусство
Панель настроек списка в 1С - отдельное искусство

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

Теперь в навигации у нас появилась ссылка на справочник Товары.

Выглядит он так же как и Организации. За одним исключением. Нам доступна кнопка Создать группу.

Добавим группу "Техника". Это "папочка". И в каждую такую группу можно поместить какой-то товар или же другую группу. Они нужны для произвольной иерархии товаров. Добавим несколько любых. Они нам потом ещё понадобятся.

Со справочниками мы разобрались. Теперь же перейдём к другому базовому классу - Документу.

Документы

Документ - это факт отражения какой-то операции. Документ имеет порядковый номер и дату. И документ может делать движения по регистрам (о них позже).

Добавим документ "ПриходТовара"

В пользовательском режиме он выглядит похожим на справочник, но теперь вместо "Наименование" и "Код" другие поля - "Номер" и "Дата".

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

Добавим реквизит Организация и сделаем его ссылкой на справочник Организации.

Табличная часть

Добавим Табличную часть. Это таблица, которая подчинена текущему объекту. Мы сначала её настроим, а потом в пользовательском режиме увидим как это выглядит.

Пусть в табличной части будут реквизиты Товар (ссылка на справочник Товары) и Цена, Количество, Сумма (неотрицательные числа длиной 10 и точностью 2).

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

Здесь есть добавленный реквизит Организация. И табличная часть с товарами. На уровне SQL это отдельная таблица в БД, которая связана с таблицей документов. Каждый документ может иметь свои строчки в табличной части. Пользователь автоматически получает это в виде редактируемой таблицы внутри объекта.

Выбор ссылок

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

А можно через ввод по коду или наименованию

Так же работает и выбор товара:

Выберем любой товар и введем его цену и количество:

Как видно на скрине, сумма при этом не заполнилась автоматически. Хотя вполне логично, что она должна сама изменяться при вводе Цены и Количества. И вот пришла пора к новой стадии разработки - написании кода!

Редактор формы

Для начала перейдём в конфигуратор и создадим форму документа:

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

Вот так выглядит редактор формы. На нём автоматически сгенерированы выбранные элементы.

Управляемые формы - это механизм платформы по генерации интерфейса. Разработчик 1С просто "накидывает" элементы на форму, а платформа их компонует и наполняет стандартным функционалом.

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

1С сразу предлагает один из вариантов. Просто выберем первый:

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

Процедуры и функции

Функции в 1С выполняют некий код и возвращают некое значение. Процедуры же ничего не возвращают. При этом объявлять типы нет никакой возможности. Костыльным путём в новой IDE пытаются применить практику "раз ЯП не может, то будем парсить комментарии". Но фактически на исполнение кода эти комментарии никак не влияют и нужны только для удобства разработки.

Здесь простая функция для демонстрации. Принимает на вход два параметра. Первый обязателен и без него вызвать функцию нельзя. Второй же можно пропустить и тогда будет использоваться значение "2". Внутри функции идёт объявление переменной "Результат" с присвоением 0. А далее цикл for от нуля до значения первого параметра. И вызывающий функцию получит значение переменной Результат.
МойРезультат = ИмяФункции(100);

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

Модули

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

  • Модуль объекта - это модуль, который имеет контекст конкретного объекта. Например, конкретный Товар в справочнике Товары. Конкретного экземпляра класса. Модуль объекта имеет события этого объекта. Например, в ПередЗаписью() мы можем как-то доработать поля перед попаданием в БД.

  • Модуль менеджера - это статические методы класса. Они не имеют доступ к контексту конкретного экземпляра класса. Просто в 1С статические методы объектов расположены отдельно - в этом модуле.

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

  • Общие модули. Это, своего рода, способ разнести множество функций и процедур по разным "папочкам". Это очень похоже на статические классы, которые не имеют никаких полей. Просто в общем модуле СтроковыеМетоды лежит функция КоличествоСлов() и чтобы её вызвать необходимо сделать так:

    СтроковыеМетоды.КоличествоСлов(МояПеременная);

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

На самом деле, существуют и другие виды модулей, но мы затронули основные, которые нужны для понимания кода на 1С.

Пишем простой код

И так, вернёмся к нашей форме. Создадим такой же обработчик и для поля Количество. И сделаем процедуру, которая будет заполнять сумму:

Здесь мы из обработчиков вызываем одну общую процедуру, которая находит на форме элемент "Товары", смотрит на его "ТекущиеДанные" (редактируемая пользователем строка) и заполняет сумму.

Теперь сумма заполняется автоматически. И мы написали свой первый простой код. Думаю, синтаксис здесь достаточно простой, чтобы понять без дополнительных объяснений. Теперь у нас есть два справочника и документ. Перейдём к Регистрам.

Регистры

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

Добавим регистр накопления "ОстаткиТоваров". И сразу добавим ему Измерение Товар с типом ссылки на справочник Товары. И ресурс Количество с типом Число (длина 10, точность 2).

В таблицу регистра будут попадать все закупки и продажи товара. И мы сможем в любой момент получить Остатки по ресурсу Количество в разрезе изменения Товар.

Измерения - это ключевые поля хранения остатков. Например, Товар и Склад.
Ресурсы - это числовые поля. Их платформа будет "считать".

Осталось только указать какой документ будет добавлять записи в регистр. Большинство регистров нельзя редактировать вручную. Это таблицы, которые наполняют разные документы. Добавим в качестве "Регистратора" записей наш документ.

Теперь нам нужно прописать как именно будет наполняться таблица регистра. Для этого перейдём в документ и откроем Конструктор движений.

Здесь мы можем выбрать какое поле из документа должно попадать в какое поле регистра:

После нажатия "Ок" мы попадаем в модуль объекта, где уже создана процедура проведения документа по регистру.

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

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

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

Теперь в нашем регистре появилась первая запись:

Это запись "прихода" (с зеленым плюсиком). И уже в остатках товара есть 10 штук. Но давайте для начала сделаем возможность отразить продажу товара. Сделаем просто - скопируем в конфигураторе наш документ в новый и назовём его "РасходТовара"

Общие модули

И вот мы пришли к одному из главных минусов в 1С... Нельзя наследоваться от своих классов.

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

Весь код в таком модуле будет выполняться на клиенте и со стороны сервера его вызвать нельзя. Перенесем в этот модуль нашу процедуру из формы. И немного изменим.

В общем модуле нет доступа к контексту формы. Поэтому, нам нужно передать в процедуру элемент с таблицей.

Теперь изменим код в формах обоих документов:

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

Теперь наша процедура принимает на вход объект класса документ и вид движения (приход или расход). Вот так выглядит вызов этой процедуры:

В метод мы передаем ЭтотОбъект (this) и вид движения. В документе прихода - это приход. В документе расхода - расход.

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

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

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

Теперь мы можем вносить приходы и расходы товаров. Но как вывести пользователю информацию об остатках? Сделаем для этого отчет.

Отчет

Отчет - это класс для вывода пользователям сводной информации.

Создадим отчет "ОстаткиТоваров" (названия классов должны быть уникальны только в рамках своего базового класса). И сразу нажмём "Открыть схему компоновки данных"

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

Язык запросов

Язык запросов 1С повторяет часть возможностей языка запросов SQL. Далее запрос интерпретируется платформой в SQL'ный. С одним принципиальным отличием. 1Сный язык только для выборки данных. Изменять данные в БД запросами нельзя. Изменение происходит только с использованием объектной модели.

Конструктор запросов позволяет интерактивно построить запрос. Слева доступные таблицы в БД. По центру выбранные таблицы. А справа выбранные поля. Ещё много закладок, но об этом когда-нибудь потом.

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

Вот так выглядит текст запроса:

К тексту мы ещё вернёмся, но сначала донастроим отчет. Выведем теперь все поля пользователю:

Работа с отчетом

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

Вот такой простой результат. Он показывает в разрезе товара сколько осталось. Сделаем ещё один отчет "ВсеДвиженияТоваров". И в качестве запроса укажем просто вывод всего из таблицы регистра:

Для наглядности я создал ещё несколько документов.

Но что, если пользователь хочет изменить настройки отчета? Например, вывести организацию из документа? Нажмём "Изменить вариант":

Это пользовательский интерфейс по настройке отчета. В нём можно переопределить полностью выводимые поля, структуру, отборы, сортировку и оформление. Добавить свои поля (используя язык выражений 1С).

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

Сформируем наш вариант отчета. Вот так пользователь быстро подстроил под себя выводимые данные:

Компоновка данных

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

Мы видим, что в запросе выбираются те поля, которые нужны. И не выбираются те, которые отключены. А так же выбираются поля "через точку". Товар.Код, Организация.ИНН и так далее.

Дело в том, что хоть язык запросов 1С и сделан по образу и подобию SQL, но при этом позволяет ещё делать "обращения через точку". Откроем запрос в конструкторе:

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

Оращение "через точку" используется повсеместно. Вот так выглядит возможность пользовательского отбора в отчете. Доступны все поля (включая подчиненные). Множество вариантов сравнения. Группировки отборов и так далее. Всё это платформа делает сама.

Вот такой запрос получается:

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

Итоги

Мы сделали простое приложение на 1С. Попутно рассмотрели подход в разработке и несколько самых популярных типов объектов. Написали пару простых процедур и запросов. Пообзывали 1Сные объекты "по-программистски". И теперь примерно понимаем, что вообще из себя представляет 1С.

Это моя первая статья на данном ресурсе. Буду продолжать раскрывать тему разработки в 1С. Если это будет интересно =)

Комментарии (84)


  1. MarksMan09
    29.03.2022 17:18
    +4

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


    1. VasiliyKudryavtsev
      29.03.2022 17:39
      +9

      Вы, наверное, просто статью не прочитали. Которая вся посвящена тому, что есть в Платформе помимо языка программирования


    1. mixsture
      29.03.2022 23:24
      +1

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


      1. L0z4
        30.03.2022 19:50
        +1

        Он не прижился потому что он не удобен и не нужен. Какой смысл писать на английском когда удобнее оперировать теми же понятиями что и твой заказчик? Зачем вспоминать как там будет *оборотно-сальдовая ведомость* или *воронка продаж* или любое другое понятие введённое в словарь конкретного предприятия?

        Как говорят - язык предметно-ориентирован. Предметом оперирует пользователь, а не только программист и говорить на разных языках = усложнять взаимодействие.


  1. gennayo
    29.03.2022 17:28
    +4

    Лучше про "новинки" рассказать, Исполнитель там, система взаимодействия, вот это вот всё


    1. SeiOkami Автор
      29.03.2022 17:39

      Про это тоже можно.
      + в список новинок платформа для разработки сайтов "1С:Элемент".


  1. T968
    29.03.2022 17:36
    +1

    У 1С документация платная.

    Вы уверены, что не нарушили никакого правила?


    1. SeiOkami Автор
      29.03.2022 17:37
      +3

      Платным является только использование портала ИТС. В данной статье нет ничего "секретного".


    1. LevOrdabesov
      29.03.2022 19:04
      +9

      У 1С документация платная

      Серьёзно?..


    1. pae174
      29.03.2022 19:25
      +6

      Бесплатную документацию с бесплатными книжками, бесплатную учебную версию платформы и бесплатные учебные типовые конфигурации можно найти и бесплатно скачать на сайте 1С в разделе "Бесплатное": https://online.1c.ru/catalog/free/learning.php


      1. static_cast
        31.03.2022 00:10

        Да, кстати, - а кириллический домен у них есть? :)


    1. krak
      31.03.2022 21:54

      Не помню когда именно, вроде с лета прошлого года, но документация разработчика уже бесплатна для всех кто зарегистрируется на developer.1c.ru.


  1. GerrAlt
    29.03.2022 18:02

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


    1. FLU911
      29.03.2022 20:54

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


      1. yverbin
        29.03.2022 23:09
        +4

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


        1. vkomen
          30.03.2022 08:49

          Надо все же сравнивать сравнимое. Помню муки одного крупного дистрибутора при внедрении Axapta. Про SAP вообще ходит присказка, что это месть германского народа за вторую мировую)


          1. GerrAlt
            31.03.2022 10:05

            Вот я примерно об этом и говорю, подход "Не смотрите что я писаюсь, Васичкин вообще какается" считается в этой экосистеме нормой.

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

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


    1. dance000
      30.03.2022 20:17

      А админы сразу свежий патч на виндовс накатывают? А потом думают как откатить назад?

      В любом сложном проекте есть место ошибкам. На то они и сложные проекты


  1. Naf2000
    29.03.2022 18:20

    Чего точно хотелось бы в 1с, это событий изменения свойства.

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

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


  1. Naf2000
    29.03.2022 18:32

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


  1. Scratch
    29.03.2022 22:37

    На чем написана платформа, компилятор? Была ли раскрутка компилятора?


    1. mixsture
      29.03.2022 23:32
      +1

      Если вы о языке внутри платформы для 1с программистов — то это интерпретатор, компиляции там нет (есть, правда, псевдокод — но, насколько я знаю, никакой оптимизации в нем нет — т.е. чисто как вариант представления кода). Если о языке, на котором саму платформу писали — то, судя по сообщениям, когда она аварийно падает — это C++ (ругается на строки в файлах .cpp), а еще в комплекте установочных файлов видел vc_redist (т.е. собрано на visual studio).

      Больше всего, наверно, хакали платформу с целью допиливания удобных фич вот эти ребята — snegopat.ru. Думаю, если не считать саму фирму 1с — то они знают о внутренностях больше всех.


  1. GreaterGlider
    30.03.2022 06:04
    +1

    Рискую быть заминусованым, но ответьте кто-нибудь, пожалуйста, как обычный человек становится 1С программистом? Это не камень в огород, просто почему из всего разнообразия языков\фреймворков\стеков, кто-то принимает осознанное решение работать вот в этом?

    PS а статья отличная, спасибо. Как "классический" программист с интересом почитал


    1. ruomserg
      30.03.2022 06:39
      +1

      Их в институтах готовят на специальностях типа «прикладная информатика в экономике». То есть они в первую очередь бухгалтеры/экономисты/финансисты — а 1С им дается сразу как инструмент. В целом, это разумно — потому что когда они придут на предприятие — там будет 1С с вероятностью 99.999%


      1. DiCroptor
        30.03.2022 14:33
        +2

        Специальность «прикладная информатика в экономике» вовсе не обязательно обозначает, что главной частью будет именно экономическая. Например, когда я обучался по этой специальности, то с экономикой вообще никак не был связан, прослушал несколько стандартных курсов и на этом все. В то же время, параллельно было изучение с++, vba, assembler, немного информации про C# и про ИИ. Про 1С не было получено ровно никакой информации, в т.ч. и о том, что это такое и зачем оно нужно.
        В то же время, на кафедре всегда висело объявление о поиске студентов на работу в 1С. Из моей группы, тем не менее в 1С на время учебы пошло работать 3 человека (из 15) т.к.:
        1) Там платят чуть больше, чем в общепите при меньшей нагрузке.
        2) Основная работа сводится к установке типовых конфигураций (минимум напряга)
        3) Синтаксис очень похож на тот же VBA и прост в понимании (при некотором упорстве это помогает получить чуть больше ЗП).
        4) Гибкий график работы (вполне можно дневную учебу совмещать с работой).
        Однако, после окончания учебы, только один из этих 3 людей еще пару лет работал в 1С, в основном из-за того, что немного продвинулся по карьерной лестнице и из-за того, что программисты на С++ и C# в нашей глухомани найти работу просто не могут, а переезд не для каждого возможен. Дипломных работ, связанных с 1С, в группе не писал никто.


        1. ruomserg
          30.03.2022 14:48

          Ну что тут сказать? Россия — страна контрастов…


    1. AseevAndrew05
      30.03.2022 07:12

      В 1С очень низкий порог входа, учил Java около года, может быть даже Джуном смог бы работать. Но найти работу без опыта по моему не реально, во всяком случае в моем городе, вакансии были не менее мидл. Я когда с сисадминов решил уйти в программисты, основы 1С изучил месяца за три и потом устроился на работу во франч, по большому счету за чашку риса. Но через полгода франча уже работал в организации штатным программистом. Может когда-нибудь и получится уйти в Java.
      Но то что 1С очень низкий порог входа это факт, может от этого и жуткого кода куча. Особых проблем при написании кода на русском не вижу. Единственный плюс английского, на нём код короче получается, так как на английском слова обычно короче русских.


      1. vis_inet
        30.03.2022 07:28
        +1

        Весь код можнно писать и по-английски - это поддерживается платформой.

        И даже смешанно можно :)


      1. Ul3ainee
        30.03.2022 09:05
        +2

        Я вижу и другие плюсы в английском варианте 1С-кода (а вот об озвученном вами совершенно не задумывался):

        • Намного привычнее видеть в листинге именно английский, глаза сами цепляются за знакомые while, for, and, if, function, etc.
        • Существительные в английском не надо склонять, у глаголов побудительное наклонение совпадает с инфинитивом и т.д.
        • Читая русскоязычный текст, я — чисто по привычке — ожидаю хотя бы некоторого соблюдения норм русского языка. Синтаксических, в первую очередь.
        • Следствие из предыдущего пункта: так как я, к счастью, очень редко вижу подобные листинги, машинально воспринимаю их как работу PROMPT'a и машинально же пытаюсь «реверснуть в исходный», а это отнимает силы и время. Да и просто фрустрирует — пытаюсь разглядеть алгоритм, а занимаюсь чёрт знает чем.


        1. froloi
          31.03.2022 09:56
          +1

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


    1. Arimefu
      30.03.2022 08:26

      Ну в копилку историй могу свою написать. Работал сначала инженером-программистом (скорее, инженером), затем начальником ИТ-отдела компании, пусть и немаленькой по числу людей, но совсем не связанной с ИТ, да еще и муниципальной. В принципе, в то время зарплаты были для недавнего выпускника вуза вполне неплохими. Но года 4 назад понял, что нужно что-то менять в жизни. Учитывая, что 1С на прошлом месте водились, причем помимо типовых ЗУП и Бухглатерии были и самописные системы, пошел искать варианты как начальника (вакансий почти не было и с улицы устроиться было почти нереально), так и программиста 1С. В итоге поменял работу с повышением в зарплате, а спустя год-полтора уже получал еще вдвое больше.

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


    1. navar
      30.03.2022 08:27

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


    1. xmcuz
      30.03.2022 08:48
      +1

      как обычный человек становится 1С программистом?

      Раньше спрос и доход у 1С программистов был значительно выше, чем на тех же PHP и JS кодеров.


    1. Tahallus
      30.03.2022 11:38

      А кто-то выбирает SAP, Axapta, Navision, под разные задачи разные инструменты. где-то лучше такие системы как 1С, где-то "классические" языки\фреймворки\стеки


    1. acsent1
      30.03.2022 15:46

      В свое время человеку из регионов стать каким то другим программистом не 1С было практически без шансов. Ибо другие программисты там не особо нужны.
      Я думаю в маленьких городах и сейчас так. Хотя удаленка потихоньку берет свое


    1. sergiologino
      30.03.2022 15:56
      +1

      Я стал потому что жизнь заставила. В один момент очень давно поменяли НДС на 18% с 20% а поправить код было некому. В то время была 1С 7.7 и ставка гуляла в хардкоде, изменение в справочнике не помогало. Пришлось садиться и разбираться, потом втянулся. Сейчас занимаюсь микросервисами на Java, но 1С тоже не бросаю (а точнее клиенты не дают). Никогда не понимал почему есть 2 разных мира: разработка и 1С разработка. Мне кажется это разное в головах. Или не знают 1С и судят или не знают ничего кроме 1С и тоже судят. 1С конечно имеет много недостатков, но при этом и огромное количество преимуществ. Может эта статья немного сблизит два мира.
      Еще бы статью в виде сравнения механизма решения каких-то несложных задач: как решить классически и как в 1С - было бы супер.


    1. bomjyt
      30.03.2022 16:34

      Скажу честно, мне просто понравилось разрабатывать/дорабатывать конфигурации в 1С, изучал изначально совершенно другие ЯП, душа просто лежит


    1. ruddanil
      30.03.2022 19:12

      Поделюсь своим относительно небольшим опытом (3 месяца обучения и 4 месяца работы по сей день) попадания в 1С. Считаю нужным уточнить: я второкурсник очного отделения вышки на IT направлении, с корочкой СПО и армией за плечами. Почему и как 1С.

      1. Низкий порог вхождения. Компания, в которой я сейчас работаю, предложила: бесплатное обучение, ментора, гарантию трудоустройства (с необходимостью отработать на них 2 года), удаленку, возможность совмещения с очной учёбой и стипендию (но она выплачивалась уже после окончания обучения в + к окладу). При этом компания не требовала практически ничего: было только собеседование с HR, который оценил мою адекватность и мотивацию к работе. После обучения при трудоустройстве был более серьезный собес с системным архитектором и непосредственными руководителями, но и он был сравнительно простым.

      2. Относительно неплохая ЗП для студента с кристально чистой трудовой: 23к на должности стажера (2 месяца) и 30к оклада после официального трудоустройства.

      3. Возможность роста: компания предоставляет доступ к платной документации ИТС и курсам подготовки к сдаче экзаменов 1С Профи и Специалист. Сами экзамены так же оплачивает компания, а в случае успешной сдачи – повышает ЗП.

      4. Неплохая востребованность на рынке.

      5. Опыт работы на крупном проекте: я попал в команду сопровождения государственного предприятия, имеющего филиалы по всей России.

        Подытожу. В 1С лично я попал по случайности и в силу возникшей необходимости. Для себя на момент трудоустройства лучших вариантов не видел: либо сфера обслуживания, либо попытки пробиться на стажерскую должность/тренинг центр в IT. У последнего перспектив больше, но они довольно туманные.

        Мысли перебраться во что-то более современное не отбрасываю, параллельно изучаю другие сферы, но что из этого в итоге получится – не знаю :)


    1. a1mir
      30.03.2022 21:18

      Походил по собеседованиям, взяли только в туда :)

      Через год звонков клиентам пропала скованность, смог нормально собеседования проходить


    1. GRADUSnick
      30.03.2022 22:41

      там всё верно сказали, до 2014 года зарплата была у 1сников сравнимой и даже выше чем у phpшников и java программистов, причем к началу 2014 года она условно сравнялась, а в нулевых, во времена всеобщей автоматизации те кто немного умел менять надписи в полях макетов печатных форм мог точно не переживать, что останется голодным.
      1с лично для меня стал проводником в мир программирования, который казался чем-то невероятно сложным и в универе я его познавал исключительно зазубриванием паттернов.

      Сейчас пишу на 1с свободно, параллельно пишу всякие штуки на python и в котлин с простейшим приложением въехал за 3 дня.
      Недавно в мире python открыл для себя jupyter notebook мне просто нравилось перед сном всякие графики со своих 1совских баз строить и скидывать руководству всякие зависимости, но в итоге прошел курс по СКД встроенному в 1с и да, jupyter крут, но данные в СКД вертеть веселее и проще, пусть и не так просто делать это с айпада.


    1. NikolDemi
      31.03.2022 07:27

      Когда я решила переходить в айти, то учила Java. Но по окончанию обучения в мои 42 года меня были рады видеть только в 1С. Чаще встречала подобные случаи. Но бывает и "по любви".


  1. ruomserg
    30.03.2022 06:36
    +1

    Проблема 1С заключается в том, что традиционно для Win/X86 решений — оно пытается быть сразу всем и «вещью в себе». Например:

    — Вы не контролируете схему данных, которую 1С создает себе в БД. Оно само решит как называть таблицы, где будут индексы, сколько будет полей, и т.д. Классические программисты, конечно, привыкли уже к ORM — но не до такой степени чтобы вообще никак не влиять на этот процесс.

    — До недавнего времени, конфигурация (формы, метаданные БД, коды) была большим блобом, который нельзя хранить в системе управления версиями. Сейчас какое-то управление версиями есть (как я понял, внутри 1С прикрутили git), но опять-же это вам не maven, где приложение собирается через pom-файлы с возможной подгрузкой компонентов через репозиторий.

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

    В целом, мой вывод такой — если вы собираетесь иметь дело с автоматизацией российской бухгалтерии или российского же производства/торговли — берите 1С без раздумий. Стандартные конфигурации будут достаточно актуальными для законодательства, а справочники/регистры учета являются на территории РФ стандартом де-факто.

    Но если у вас стоит задача не документы проводить/печатать — возьмите лучше платформу общего назначения — хотя бы ту же Java/Spring/Hibernate. Иначе вы будете бороться с волшембным внутренним миром 1С больше, чем решать прикладную задачу.

    И наконец — 1С это закрытая платформа. Есть ровно одна компания, которая определяет изменения в релизах платформы и типовых конфигурациях. Нравится она вам, не нравится — если вы выбрали 1С, то вы будете с этим мириться. Я предпочитаю работать с продуктами с открытым кодом — где владелец проекта обычно некоммерческая организация, где есть понятные процессы развития платформы, процессы взаимодействия с коммьюнити, и т.д. Где в крайнем случае (если хозяин платформы сошел с ума — а мы уже знаем, что такое бывает даже с уважаемыми в прошлом людьми) — вы можете хотя бы форкануть проект и жить с ним, занимаясь самостоятельно поддержкой…


    1. vis_inet
      30.03.2022 07:30

      Делать интеграции с внешним оборудованием — б-э-э. Не система это реального времени

      Так, ведь, она так и не позиционируется.

      Работа с внешним оборудованием - это чаще всего торговое оборудование: сканеры, кассы, весы и т.п..


      1. ruomserg
        30.03.2022 07:57

        Когда 1С жила в бухгалтерии — это было еще ничего. И действительно, весы, сканер — и этого хватало. Но сейчас оно пытается в рамках ERP поехать прямо на производство. И там тогда надо или разводить целый зоопарк из уровней автоматизации, чтобы 1С оставлась в уютном мире документов — либо пытаться подключать всякую промышленную фигню прямо к системе. Ну то есть, слушать сокеты, отрабатывать проблемы связи и все такое… И в рамках 1С — это тяжко, прямо вот тяжко… Понятно, что теоретически — бери VC и пиши бинарный драйвер для полного счастья, но это опять платформно-зависимо и непереносимо. Я поэтому скептически смотрю на попытки 1С стать полноценной платформой для автоматизации. В мире есть платформы лучше (единственный недостаток — нужно знать английский).


        1. vis_inet
          30.03.2022 08:03
          +1

          Всё так.

          Для управления сложным оборудованием и в режиме реального времени 1С не самая подходящая платформа.


    1. yukon39
      30.03.2022 09:37

      Вы не контролируете схему данных, которую 1С создает себе в БД. Оно само решит как называть таблицы, где будут индексы, сколько будет полей, и т.д.

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

      1С — это высокоуровневый (относительно СУБД) фреймворк. Поэтому нормально, что он самостоятельно занимается структурой СУБД, пряча детали реализации от разработчика.

      До недавнего времени, конфигурация (формы, метаданные БД, коды) была большим блобом, который нельзя хранить в системе управления версиями. Сейчас какое-то управление версиями есть (как я понял, внутри 1С прикрутили git)

      Выгрузка текстов модулей была еще в 7.7. В 8.0 реализовали полную выгрузку/загрузку конфигурации. Начиная с 8.2 стало возможным полностью вести разработку в исходных кодах, используя конфигуратор как «компилятор». Практически же, только с выходом EDT — это стало полноценным вариантом разработки.

      Собрать проект вообще не проблема:
      vrunner compile --src src/cf --out bin/my.cf

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

      Частично верно. Только 1С определяет изменения в платформе. Вендоров «типовых» продуктов сильно больше одного, но да самые известные делает 1С.

      Где в крайнем случае (если хозяин платформы сошел с ума — а мы уже знаем, что такое бывает даже с уважаемыми в прошлом людьми) — вы можете хотя бы форкануть проект и жить с ним, занимаясь самостоятельно поддержкой…

      Примеры бизнес приложений «где можно сделать форк» не предоставите? Что-нибудь уровня SAP/Axapta.


      1. ruomserg
        30.03.2022 09:47

        Я всегда говорю, что 1С — это разновидность религии. Либо ты веришь, либо нет. :-)

        Для многих разработчиков дико работать в системе, где платформа изолирует тебя от БД. Да, я понимаю, что у 1С исторически есть файловая БД, и все такое — но уже давно можно было поставить всем SQL и не брать за это денег… Маркетинг!

        Опять же, в других средах автоматизации — есть выбор: хочешь, дай системе право за тебя таблицы делать, хочешь — прописывай маппинг к существующей таблице. В 1С — за вас разработчики лучше знают, чего вы на самом деле хотите.

        Что касается SAP или Axapta — то это еще менее удачные и более монструозные системы чем 1С. Про SAP шутят, что его внедрение заканчивается только с банкротством заказчика. Axapta я лично видел как внедряли — а потом с середины месяца откатывались на 1С, чтобы хоть как-то работать.

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


        1. yukon39
          30.03.2022 10:07

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

          А насколько дико работать в системе которая изолирует тебя от памяти? от прорисовки пикселей UI на дисплее? от работы с дисками? от работы с оборудованием через IRQ?

          Нет, конечное есть разработчики которые до сих все это делают напрямую, но вот чтоб прям «многие» это вряд ли. Те же Java и C# успешно изолируют разработчиков от работы с этими сущностями.

          Опять же, в других средах автоматизации — есть выбор: хочешь, дай системе право за тебя таблицы делать, хочешь — прописывай маппинг к существующей таблице. В 1С — за вас разработчики лучше знают, чего вы на самом деле хотите.

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


          1. ruomserg
            30.03.2022 10:16
            -1

            Ну тут остается сказать только что другие платформы — которые выросли не из бухгалтерии, а как платформы общего назначения — позволяют получить доступ ко всем этим низкоуровневым функциям. Берете binding к своей любимой системной библиотеке, и пользуетесь ей из-под Java. Потому что в Java на самом деле есть и небезопасные операции с памятью, и динамическая генерация байт-кода, и много чего еще. И главное — есть сообщество, которое эти функции поддерживает и развивает. А в 1С это будет как-бы сложнее, потому что это фирма 1С должна решить — надо оно вам или нет, и если надо, то в каком виде.

            А поскольку у 1С есть еще и коммерческий интерес — то оно делает то же, что и Microsoft в свое время: вместо того, чтобы дать доступ к существующим имплементациям — оно делает свое, немного кривое и несовместимое. Вы этим начинаете пользоваться — и вот уже цель достигнута: с платформы 1С вы никуда не денетесь. Ибо совместимость…


      1. Naf2000
        30.03.2022 11:22

        аналогично с индексами

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


        1. yukon39
          30.03.2022 12:01

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

          На практике — все кейсы с произвольными составными индексами мы решали или изменением архитектуры или изменением запросов. В итоге составные индексы остаются в дюжине мест, где «так сложилось исторически» и менять архитектуру в этом месте уже сложно. Для нового функционала уже года 3 точно критичной нужды в составных индексах нет, хотя конечно, это облегчило бы архитектуру в некоторых местах.


  1. capitannemo
    30.03.2022 09:44

    У 1С программистов есть одна нехорошая черта - они тестируют на пользователях)

    И так сойдет

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

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


    1. ruomserg
      30.03.2022 09:52

      Это не в программистах дело! 1С (точнее, конфигурация) по дизайну не является testable system. Пока в системе есть ересь типа «модуль формы» и прочее, куда запихивается часть бизнес-логики — тестировать это можно только собирая конфигурацию и тыкая в кнопки на экране. Переделывать архитектуру под автотесты и полностью разделять логику и представления — огромный труд, на который 1С не пойдет примерно никогда!

      А программисту долго тыкать в кнопки на экране некогда. Да и данные актуальные не всегда есть. Он поэтому написал — и отдал. Фатальных ошибок все-равно не будет: формула распровести-провести известна любому специалисту и бухгалтеру. Поэтому тестят все сами пользователи на боевой базе. :-)


      1. capitannemo
        30.03.2022 10:27

        Фатальных ошибок все-равно не будет

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


      1. Mes
        30.03.2022 10:53

        А как же тестовая база?


        1. capitannemo
          30.03.2022 12:39

          А программисту долго тыкать в кнопки на экране некогда. Да и данные актуальные не всегда есть. Он поэтому написал — и отдал. 

          А как же тестовая база?

          Вы сами себе противоречите


    1. yukon39
      30.03.2022 10:12

      У 1С программистов есть одна нехорошая черта — они тестируют на пользователях)

      У нас один из проектов имеет покрытие тестами 85%. Есть решения с почти полным (90+%) покрытием.


      1. capitannemo
        30.03.2022 10:32

        Вы мне еще про Стандарты программирования расскажите
        А я вам выложу принтскрины как 1С:Управление холдингом выглядит изнутри

        По фен-шую на 1 программиста должно быть примерно 5 тестеров, у вас именно так?


        1. yukon39
          30.03.2022 11:01
          +1

          А я вам выложу принтскрины как 1С: Управление холдингом выглядит изнутри

          Если код который вы собрались скринить писали не вы, то что именно вы собираетесь демонстрировать? Что код вендора не всегда соответствует его же вендора стандартам — ну да есть такое, это общеизвестная информация. И 1С тут совсем не уникальный вендор.

          Как это мешает вам писать поддерживаемый и тестопригодный код?

          Все же типовые довольно хорошо написаны, а например разрабы БСП вообще молодцы — там прогресс качества огромный.

          По фен-шую на 1 программиста должно быть примерно 5 тестеров, у вас именно так?

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


          1. capitannemo
            30.03.2022 12:29
            -1

            У нас тесты гоняются в Дженкинсе, и пишут их сами разрабы

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


            1. ruomserg
              30.03.2022 12:41

              Юнит-тесты должны писать сами разрабы. Для мира Java — это вообще практически необсуждаемая норма. Если система проходит автотесты — релиз передается ручным тестировщикам, которые проверяют сценарии слишком трудозатратные для автоматизации. Пока система не проходит тесты самих же разработчиков — ее нет смысла отдавать людям. Пирамида тестирования же ж!


            1. yukon39
              30.03.2022 12:43

              Может в этом и есть некоторая проблема?

              Мы пишем тесты для решения конкретной задачи — снижение риска возникновения факапа на проде — как в новом функционале, так и в поломке того, что уже работало. И мы успешно решаем эту проблему.

              Какую проблему вы решаете 5 тестировщиками на 1 разраба я не знаю. Возможно, в вашем случае это оправданное решение.

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

              Возможно это связано с недостаточной степенью автоматизации тестирования.


  1. CrushBy
    30.03.2022 10:19
    +1

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

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


    1. SeiOkami Автор
      30.03.2022 12:06

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

      А если коротко, то это главная предъява из статьи: "Но в 1С решили сделать не как все"


      1. CrushBy
        30.03.2022 12:23

        Тут дело в том, что в большинстве современных инструментах разработки что-то делается определенным образом не просто так. Это опыт и эволюция, накопленная годами разработки. И делать свой "Особый путь" только для того, чтобы сделать "не как все" - так себе идея.

        Например, вы вообще работали когда-нибудь с IntelliJ IDEA на каком-нибудь языке программирования ? Хорошо представляете разницу с Конфигуратором 1С в плане рефакторинга или review кода ? Или удобство merge изменений в Хранилище 1С и Git ?


        1. yukon39
          30.03.2022 12:33

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

          На замену активно пишется с нуля автономный сервер, с yml-конфигами, работой только через http, и прочими современными фичами.


        1. SeiOkami Автор
          30.03.2022 12:44

          EDT в связке с Sonar и Git позволяет хорошо со всем этим справляться.

          Как я уже отмечал в статье, 1С не идеальна. И к ней много претензий. Но не всё, что "иначе" автоматически "плохо".

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


          1. CrushBy
            30.03.2022 14:31

            EDT в связке с Sonar и Git позволяет хорошо со всем этим справляться.

            Вот тут поподробнее, пожалуйста. У Вас в статье "визуальное программирование", где там все делается формочками, деревьями и т.д. Когда пойдет merge из-за конфликта, например, как это будет выглядеть ? Тоже визуально, или просто придется сливать XML-файлы ? Если XML, то получается, что нужно будет разбираться и в визуальном программировании и в "суровом" XML-представлении ?


            1. yukon39
              30.03.2022 15:00

              EDT умеет мерджить формы без перехода на уровень XML-представления. Внешне все работает как СиО в Конфигураторе.


      1. capitannemo
        30.03.2022 12:37

        Но в 1С решили сделать не как все

        Я бы вот это в заголовок и вынес )
        Сделали, а сейчас посмотрели и пытаются вернуться к тому как делают все.
        Это прежде всего попытка вернуться к нормальной IDE + нормальным средствам коллективной разработки + нормальным тестам

        А знаете почему это не получается?

        См. выше

        У 1С есть одна нехорошая черта — они тестируют на пользователях

        1C:EDT выкатили с такими косяками, что в ней работать было невозможно
        и сейчас желающих на нее переходить стало на порядок меньше а тестируют ее на своих же разработчиках

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


        1. SeiOkami Автор
          30.03.2022 12:49

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


        1. CrushBy
          30.03.2022 14:33

          А знаете почему это не получается?

          Так и не получится, пока 1С не уйдет от "визуального программирования". Визуальное программирование очень плохо "дружит" с нормальной IDE + нормальным средствам коллективной разработки + нормальным тестам


          1. yukon39
            30.03.2022 15:10

            Странный тезис про «визуальное программирвоание» — в формах вообще не рекомендуется размещать бизнес-логику продукта, только логику интерактивного взаимодействия с пользователем. Как это может мешать писать тесты для бизнес-логики непонятно.

            Для тестирования интерактивной работы есть клиент/менеджер тестирования и, как минимум, два фреймворка-обертки над ними от сообщества разработчиков.

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


            1. CrushBy
              30.03.2022 15:24

              Странный тезис про «визуальное программирвоание» — в формах вообще не рекомендуется размещать бизнес-логику продукта, только логику интерактивного взаимодействия с пользователем

              Причем здесь вообще формы ? Вот конкретно в этой же статье есть пункт "Создаем справочники". Или, например, добавление реквизита ИНН. Это все делается "визуально" мышкой, а не "плоским" кодом, как везде (в той же Java). Разве создание новой сущности и добавления к нему поля - это не бизнес-логика ?

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

              Давайте возьмем какой-нибудь GUI-framework, из наиболее популярных сейчас в мире. Например, React (там прямо на главной странице примеры). Даже там пишется все кодом, а не рисуется мышкой. И там нет никакой сложности поддержки разработки форм. И там понятно, как работает система контроля версий и как идет merge различных изменений. В визуальном же редакторе merge в любом случае будет очень "своеобразным" в случае каких-нибудь сложных изменений.


  1. melvin
    30.03.2022 10:52

    "Оповещенки" это конечно круто, даже сильнее режет глаза, чем "Выбрать ... Из ... Где ..."


  1. Sergei_Erjemin
    30.03.2022 16:57

    По картинке решил, что сейчас нам расскажут про то как сделать покемона в 1С (ну или пакмана)... Но нет... :))) Если на языке программирования нельзя сделать своего пакмана -- то какой же это языка программирования? :))


    1. SeiOkami Автор
      30.03.2022 20:50
      +1

      Даёшь Тамагочи на 1С!


  1. Sander80
    30.03.2022 17:24
    +1

    Мы используем 1с в МГУ для разработки и поддержки внутренних решений по учету разного (кадры, аспиранты и так далее). При этом для нас 1с это язык программирования/платформа - стандартные конфигурации (программы) не используем.

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

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


  1. Vitaly_Z
    30.03.2022 19:54
    -1

    В статье - начальный курс ученика 1С (и почему то с отсылками к VBA). Со множеством неточностей и неразобранностей (невыясненноястей для автора). Может не стоит судить его строго, а посоветовать излагать материал по теме после его усвоения ?


    1. SeiOkami Автор
      30.03.2022 20:21

      А можно конкретнее за неточности?


  1. ZooMik
    31.03.2022 09:55

    Много комментариев прочитал, но нигде не увидел про CI/CD концепцию для 1С. Такое возможно? ????

    Также было интересно ответить на вопрос: возможно ли PaaS, SaaS или же контейнеризация в случае с 1С? :) Было бы интересно почитать на эту тему


    1. yukon39
      31.03.2022 12:30

      Много комментариев прочитал, но нигде не увидел про CI/CD концепцию для 1С. Такое возможно?

      Что именно интересует? У нас и билд и тест и деплой через Дженкинс делается.

      Также было интересно ответить на вопрос: возможно ли PaaS, SaaS или же контейнеризация в случае с 1С?

      habr.com/ru/company/1c/blog/326654
      habr.com/ru/company/cloud_mts/blog/580748

      Серверная часть в докере отлично работает.


    1. Dr_Wut
      31.03.2022 16:01

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


  1. Ateela
    31.03.2022 23:52

    Это всё понятно, один вопрос, а чего оно все тупит страшно на топовом железе?