Почему 1с плохо. Давайте разбираться

Часто в адрес 1с можно услышать много нелестных отзывов, как со стороны пользователей, так и от it-специалистов разной спецификации. Однако всегда ли такие заявления обоснованы?

На данном этапе важно понять что подразумевается под термином 1с. Тут есть два варианта:

  1. Одна из конфигураций (не обязательно типовая)
  2. Платформа 1с предприятия

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

  • Пользователи с низкой компетенций
  • Компетентные пользователи

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

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

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

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

Начнем с наболевшего — почему же 1с все-таки тормозит? В данном вопросе все довольно не однозначно. Хотя забегая вперед скажу сразу — 1с тормозит из-за своей архитектуры. Проведем небольшой тест: создадим две пустые конфигурации(обычные и управляемые формы), добавим в них обработку по заполнению табличной части в 10 000 строк, с одним строковым реквизитом.

Данные об аппаратном обеспечении тестовой платформы:

Информация о процессоре и ОЗУ
Информация о системе хранения данных

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

&НаСервере
Процедура ЗаполнитьНаСервере()
    Для сч = 0  по 10000 цикл
        НоваяСтрока = Объект.ТабличнаяЧасть1.Добавить();
        НоваяСтрока.Реквизит1 = 
             "Я больше не буду говорить что 1с тормозит";       
    КонецЦикла;
КонецПроцедуры
 
&НаКлиенте
Процедура Заполнить(Команда)   
    ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
    ЗаполнитьНаСервере();  
    ЭтаФорма.ВремяВыполнения = 
        ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала; 
КонецПроцедуры

Код исполняемый в форме обработки для Обычных форм

Процедура КнопкаВыполнитьНажатие(Кнопка)
	
	ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();

	Для сч = 0  по 10000 цикл
		
		НоваяСтрока = ЭтотОбъект.ТабличнаяЧасть1.Добавить();
		НоваяСтрока.Реквизит1 = "Я больше не буду говорить что 1с тормозит";
		
	КонецЦикла;

	ЭтаФорма.ВремяВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала;
	
КонецПроцедуры

Давайте посмотрим что получилось:

Результаты теста, обычные формы
Результаты теста, обычные формы

Для обычных форм время выполнения составило 204 мс. Довольно мало на первый взгляд. Но все познается в сравнении.

Результаты теста, управляемые формы
Результаты теста, управляемые формы

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

Вот полный исходный код программы:

package sample;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.FlowPane;
import javafx.scene.control.TableView;
import javafx.scene.control.TableColumn;
import javafx.collections.ObservableList;
import javafx.collections.FXCollections;
import javafx.scene.control.cell.PropertyValueFactory;

public class Main extends Application{

    public static void main(String[] args) {

        Application.launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {

        long startTime = System.currentTimeMillis();

        // создаем список объектов
        ObservableList<TabLine> vals = FXCollections.observableArrayList();

        for (int i = 0; i<=10000; i++){
            vals.add(new TabLine(i, "Я больше не буду говорить что 1с тормозит"));
        }

        // определяем таблицу и устанавливаем данные
        TableView<TabLine> table = new TableView<TabLine>(vals);
        table.setPrefWidth(450);
        table.setPrefHeight(500);

        // столбец для вывода номера строки
        TableColumn<TabLine, Integer> ageColumn = new TableColumn<TabLine, Integer>("№");
        ageColumn.setCellValueFactory(new PropertyValueFactory<TabLine, Integer>("nLine"));
        table.getColumns().add(ageColumn);

        // столбец для вывода значения строки
        TableColumn<TabLine, String> nameColumn = new TableColumn<TabLine, String>("Value");
        // определяем фабрику для столбца с привязкой к свойству valLine
        nameColumn.setCellValueFactory(new PropertyValueFactory<TabLine, String>("valLine"));
        // добавляем столбец
        table.getColumns().add(nameColumn);

        FlowPane root = new FlowPane(10, 10, table);

        Scene scene = new Scene(root, 450, 500);

        stage.setScene(scene);
        long endTime = System.currentTimeMillis();
        stage.setTitle("Время выполнения в мс " + (endTime - startTime));
        stage.show();
    }
}
package sample;

import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;

public class TabLine {
    private SimpleIntegerProperty nLine;
    private SimpleStringProperty valLine;
    TabLine(int nom, String val){
        this.nLine = new SimpleIntegerProperty(nom);
        this.valLine = new SimpleStringProperty(val);
    }
    public int getnLine() {
        return nLine.get();
    }
    public SimpleIntegerProperty nLineProperty() {
        return nLine;
    }
    public void setnLine(int nLine) {
        this.nLine.set(nLine);
    }
    public String getValLine() {
        return valLine.get();
    }
    public SimpleStringProperty valLineProperty() {
        return valLine;
    }
    public void setValLine(String valLine) {
        this.valLine.set(valLine);
    }
}

Использовалась Java 1.8 и все та-же аппаратная платформа. Вот наши результаты:

Результат теста на JavaFX
Результат теста на JavaFX

Забавный результат? Да очевидно 1с, а точнее реализации на управляемых формах, сильно уступает. Удручает то что обычные формы в 1с считаются устаревшей технологией. Но что такое эти миллисекунды, кто вообще будет на них зацикливаться? Наша тестовая обработка выполняет довольно примитивную операцию. А к примеру, тестовая 1с Зарплата и управление персоналом ред. 3.1 на представленной выше аппаратной платформе, рассчитывает и проводит документ начисления зарплаты на 230 человек за 3-5 мин.

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

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

Запустим заполнение упомянутого выше документа «Начисление зарплаты и взносов»

Итак, при увеличении загрузки ЦП с 2% до 9% и совершенно незначительном изменении загруженности ОЗУ и дисковой системы мы имеем заблокированный на время расчетов интерфейс. Притом совершенно не ясно что же конкретно делает 1с все это время если ресурсов ПК еще целый вагон в запасе. Другое дело многопоточность. Запустить ресурсоемкий процесс и продолжить работу с приложением в наше время считается «Функционалом по умолчанию» везде где только можно.

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

Эргономика графического интерфейса 1с

На рисунке красной рамкой выделено бесполезно использованное пространство и голубой рамкой подсвечены данные, ради которых пользователь собственно и сформировал данный отчет. Напрашивается вопрос — 1с вы что хотите чтобы пользователь страдал? Или вот вам пример довольно большой «портянки» — Расчетная ведомость в ЗУП 2.5

Расчетная ведомость в ЗУП 2.5

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

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

Посмотрев на скриншот отчета повнимательнее, пытливый читатель заметит что он сделан на устройстве с разрешением 1440Х900, и справедливо заметит что данное разрешение не актуально в наше то время 4k мониторов. Но нет! решительно нет! Я по сей день встречаю даже мониторы с разрешением 1280Х1024 и на них ведут учет, и страдают…

Ну и пускай страдают нищеброды! У вас же бизнес! Вам что жалко купить нормальный монитор? Он же не такой дорогой.

Давайте посмотрим что будет с интерфейсом на наиболее распространенном разрешении 1920Х1080:

Интерфейс 1с БГУ 2.0 на разрешении 1920Х1080

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

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

Всплывающее окно с информацией о проверке формулы расчета цены в 1с Розница

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

Когда в мир 1с пришел веб интерфейс, моей радости не было предела! Отказ от сервера терминалов и нормальная кроссплатформенность! Я прямо представил как главный бухгалтер идет на совещание к руководителю с планшетным ПК, показывать красивые графики и отчеты, прямо из 1с. Это ли не будущее? Но нет! Мои мечты с грохотом об этот же интерфейс и разбились.

Первая проблема это все то же рабочее пространство, но теперь к нему еще добавляется панели браузера. А вторая проблема заключалась в том что первая версия платформы 1С:Предприятие с поддержкой веб-клиента вышла в 2009 году и нестабильна по сей день (10 лет в эксплуатации). Я пробовал и на IIS и на Оффициальной сборке Apache, сборке x64 и на Xampp и везде меня ждали падения сеансов пользователей с ошибками или просто втихую, или даже падал веб сервер, притом совершенно не ясно от чего, в логах небыло и намека на ошибку. Отзывчивость веб клиента тоже оставляет желать лучшего. Изначально предполагая что управляемые формы перенесут весь ресурсоемкий код на сервер, думаешь что сейчас сделаешь 1с своей бухгалтерии прямо в их калькуляторы, лишь бы браузер там был, и не предполагаешь обнаружить тормоза при простом поиске в списке как на рисунке

Поиск по списку сотрудников

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

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

Изначально планировалось что статья не будет такой объемной, но в процессе написания я задел самые больные мозоли. И каково бы ни было мое желание сыпать в их сторону проклятия, я считаю 1с уникальной системой. Она по своему хороша, и даже прекрасна. 1с позволяет собирать приложения для учета всего что только возможно буквально на коленке. Эта уникальная система сделала то что другим оказалось не под силу. Возьмем к примеру MS Access, который по своей структуре схож с 1с (РБД + Интегрированная среда разработки). Наверное многие сейчас улыбнутся прочитав про такое сравнение и будут правы. Ведь помимо мощной среды разработки, 1с предлагает готовые и самое главное открытые решения, имеющие не просто базовый функционал, а полноценную реализацию практически любого процесса жизнедеятельности предприятия. И это еще не считая возможности подключения внешних обработок.

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

Поделиться этим материалом