Языки программирования – 18
1С это ещё один инструмент для работы с данными. Свет клином, естественно не сошёлся на Интернете. Интерес к Интернету это следствие того, что некоторые другие процессы дошли до стадии, когда этот… тоже инструмент и тоже не единственный может понадобиться.
Но интересна синхронность. В 2010 году появляется версия Web Developer в которой более – менее нормально прикручен Silverlight, т.е то, что должно было снять хотя бы часть проблем при работе в Интернете.
А в конце 2009, т.е в том же 2010:
https://1c.ru/news/info.jsp?id=10810
… появляется версия 1С 8.2 с новыми возможностями, включая возможность работы Web – клиента.
До сих пор, всё что описывалось можно было разделить на базу данных (хранилище и инструменты работы с ней) и клиентское приложение (точнее то, на чём писать; то, что читает и показывает данные). Основной инструмент, которым программист работает с базой данных это SQL строка. Программист сам может насоздавать хранимых процедур с множеством таких строк. Он может сделать таблицы с итогами, например, по месяцам чтобы для быстрой выборки за год суммировать не исходные данные в документах а данные из этих внутренних таблиц. Но при работе с обычной базой данных все эти вещи надо писать самостоятельно. Те, кто создают инструменты работы с базами данных типа SQL Server не знают, какие задачи потребуется решать программистам потому они дают им необходимый минимум и занимаются внутренней работой, совершенствуя инструменты выборки, которые должны повысить скорость.
Первое, что есть в 1С – набор надстроек над обычной работой с базами данных, набор встроенных механизмов, которые достаточно настроить чтобы получать некие результаты.
Окно объектов конфигуратора (так тут называется среда разработчика):
Всё, что в рамке это те самые внутренние механизмы. Про планы видов характеристик было тут:
http://akostina76.ucoz.ru/blog/2016-10-15-3515
В 1С есть свое внутренне понятие. Это РЕГИСТР. Регистры это те самые внутренние таблицы, в которые сохраняется итоговая информация, позволяющая быстро считать, суммируя информацию этих таблиц. Попросту говоря, если была отгрузка на 100 рублей, на эту цифру увеличится внутренний итог за 1) день, 2) месяц 3) год. Если надо будет суммировать что-то за несколько дней месяца, то при расчёте будет взята информация по дням (а не отдельные накладные которых много за день). Если нужно за несколько месяцев и несколько дней (за период) то будут просуммированы целые месяцы и несколько дней и т.д. Конкретно так работает «Регистр накопления», которому надо задать какие поля документов он должен суммировать и куда в себе самом записывать результат.
Инструменты для работы с бухгалтерскими задачами тут представлены «Планами счетов» и «Регистрами бухгалтерии». Это тоже некий внутренний механизм, который если он правильно настроен позволяет быстро получить обороты и остатки по бухгалтерским счетам за любой период и на любую дату.
Наиболее простой пример «Регистра сведений» - информация о курсах валют. С одной стороны для повседневной работы нужна информации только на данный момент. С другой в данном случае информация о курсах за прошлые даты тоже обычно необходима. При этом проще держать её в отдельной таблице, откуда можно её считывать. Это проще чем собирать, например, по документам за даты (куда она тоже часто записывается как исходное данное позволяющее понять как получилась сумма).
»Планы видов расчёта» и «Регистры расчёта» это инструмент для расчёта зарплаты. Не буду вдаться в подробности. Расчёт зарплаты с тарифами, надбавками, вычетами и премиями дело сложное. Этот инструмент чтобы это всё считалось автоматически.
»Бизнес-процессы» и «Задачи» это то, что позволяет отслеживать выполнение мелких задач. Например, можно завести заказ и отслеживать как он бредёт от оформления договора до отгрузки.
Посмотреть можно тут:
https://www.youtube.com/watch?v=KEV724wqvYo
… Процессы с задачами не имеют к расчётам никакого отношения. Это просто дополнительная возможность, которую можно использовать. Вдруг кому-то зачем-то пригодится.
То, что 1С теперь может работать через Интернет это тоже дополнительная возможность. Хорошо, когда она есть даже если на первый взгляд это в этой задаче не нужно. С остальными доступными инструментами тоже самое. Спокойнее и приятнее когда они есть и ими можно в любой момент воспользоваться. Это делает систему достаточно гибкой чтобы реагировать с её помощью на обычно плохо предсказуемые изменения условий и задач.
У 1С всё хорошо с обучением и справочной информацией. Просто для порядка:
Чистов, 30 уроков по программированию:
https://www.youtube.com/playlist?list=PLkdnTy1CsgR0y5QgkDfsgYJsETriuKK3f
… Хоть это и по программированию, но ведь результат т.е то, как это можно использовать тоже виден.
То же самое с формой отчётов: Гилев, СКД:
https://www.youtube.com/playlist?list=PLSFlHUITJ6vOoVPZ6aUPtUGIb3HwFIzha
Книга Радченко, Хрусталёва «1С:Предприятие 8.2 Практическое пособие разработчика» содержит подробное описание объектов (включая сложные типа зарплаты) на простых примерах.
Подробно то, как внутри работают те самые полезные местные механизмы я не исследовала, но если сделать хранилищем информации SQL Server, по база выглядит так:
… т.е тут нет ни выборок (View) ни хранимых процедур (Stored Procedures) ни прочих вещей, ускоряющий обработку данных. Тут есть только таблицы:
… в которых хранится информация. Можно узнать что и где хранится открыв и посмотрев таблицу, но я это сделаю другим способом.
Есть так называемые программы Profiler, которые позволяют смотреть, что выполняет SQL Server. Один из них лежит тут:
https://drive.google.com/file/d/0B3i2SFYLER0HYWRYYmRUaE5qdEU/view?usp=sharing
Я могу запустить этот Profiler на режим выполнения-трассировки команд серверу и запустить в оболочке сервера такую выборку:
Тогда я увижу эту команду в окне Profiler:
Точно также можно запустить Profiler во время работы 1С. Меня, например, интересует в какой таблице хранятся субъекты РФ (в конфигурации по странам и субъектам).
Запускаю трассировку перед тем как щёлкнуть сюда:
… Должен же он запросить информацию на сервере. На экране появилось вот такое:
А Profiler зафиксировал вот такие команды:
Не очень важно, что он тут ещё делает. Меня интересует тот SELECT и тот FROM, который больше всего похож на считывание данных. Обращается он к таблице _Reference83. Скорее всего там субъекты и хранятся. Так и есть:
Точно также можно посмотреть, что происходит при выполнении любых других операций.
Надо точно определиться с тем, что 1С не делает и делать, скорее всего не будет. Он не использует внутренние средства SQL Server-а позволяющие ускорить выборку (т.е хранимые процедуры и прочее). У него есть очень приятный конструктор запросов:
В этом конструкторе можно создать сразу несколько SQL строк:
… которые тут называются пакетами.
Но это всё запросы на выборку информации во временные таблицы:
… т.е набор отдельных команд SELECT … INTO tmpTab поштучно передаваемые серверу, а не некая единая хранимая процедура, которая уже скомпилирована и быстро работает.
Я особо на это обращаю внимание потому что 1Совцы несколько необоснованно свирепствуют требуя засовывать всё в такие запросы. Это требование было бы обосновано если бы это были хранимые процедуры а не отдельные команды. Здесь же, что в запросе что в цикле программы, работа одинакова, и разница только к том на каком уровне происходит генерирование SQL строк. Данное требование, которому приказано следовать приводит к тому, что всё, что можно засунуть сюда засовывается, но это приводит не столько к увеличению производительности сколько к уменьшению читаемости.
По сравнению с хранимыми процедурами это куцый инструмент, в котором нет например курсоров, позволяющих пройтись по строкам выборки прямо на сервере:
Когда я с этим столкнулась я не поняла, что это. Они сами не понимают или пытаются так всех убедить, что у них есть хранимые процедуры и надо работать через них?
Так вот: хранимых процедур у них нет, но всё остальное позволяет надеяться на то, что и без них с быстродействием будет всё в порядке.
Ещё обычная конфигурация 1С не позволяет работать сразу с несколькими базами данных столь же легко и просто как это делает обычная база на SQL Server, к которой обращается написанное на чем-то клиентское приложение. Это крайне неприятно, когда работают несколько конфигураций потому, что справочники у них в одной организации точно общие. Это означает, что либо на ком-то повисает обязанность следить за тем, чтобы данные были одинаковыми и там и там, т.е руками вводить изменения во вторую или даже в третью конфигурацию (и так при каждом изменении) либо надо заставить машину это всё делать. Если все базы на SQL Server-е то можно делать это средствами SQL Server-а. В сервере у таблиц есть trigger (ТРИГГЕРы):
Триггер это программа, которую выполняет сервер при изменении в данных таблицы. Видов изменений три – удаление, вставка, изменение. Для всех этих действий могут быть отдельные программы.
Тут, например:
… триггер вставки записывает содержимое всех вставляемых строк (inserted) в таблицу EDIT_dKassa, про которую тут:
http://akostina76.ucoz.ru/blog/2016-10-17-3527
… добавляя туда всё из строки вместе с датой и временем операции (GetDate()), именем пользователя (CURRENT_USER) и «кодом» операции “I”, означающим insert – вставка.
Точно также можно средствами триггеров сервера менять информацию в других конфигурациях 1С. Я проверяла, работает. Т.е проблема такая у 1С есть, но решаемо при желание например таким способом.
Ещё одна неприятная особенность 1С – невозможность корректировать программы когда работает кто-то из пользователей. Т.е теоретически там есть возможность динамического обновления. Практически база после такого может развалиться. Т.е можно но очень осторожно (без серьёзных изменений). Это, конечно, неудобно. Если в Интернете в худшем случае у кого-нибудь какая-нибудь страница не откроется, а остальные просто ничего не заметят, то тут надо как-то придумывать как не беспокоить человек 20 да ещё и раз в полчала например. Скорее всего при работе в режиме Web-приложения такой проблемы нет, но я не пробовала.
Вот такой инструмент, как и все остальные со своими плюсами и минусами.
|