V8: Обзорная экскурсия по городу-саду

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

Автор: Зайцев Никита Викторович aka WildHare

Статья была написана для журнала Мир ПК и опубликована в номере за январь 2004 года
На ITLand публикуется полный авторский вариант

Предыстория

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

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

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

Терминология

Определимся с терминами. Я буду называть "1С: Предприятие 8.0" его технологическим именем V8 - так оно короче, понятнее и правильнее. "1С: Предприятие 7.7", соответственно, превращается в V7. Если же в тексте встретится аббревиатура "1С" (именно так, в кавычках) - она будет обозначать не продукт и не приложение, а собственно фирму "1С".

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

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

Немного лирики

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

Примером первой категории отлично служит MS Office: сравните между собой версии 9, 10 и 11 (только-только вышла) - косметических отличий порядком, но и только. К той же категории относится и "1С:Предприятие 7.7", если сравнивать c версией 7.5 - интерфейс стал симпатичнее, появилось несколько новых объектов языка, упрощающих жизнь программистам, и несколько "фич", упрощающих жизнь пользователям, но в остальном - старая добрая V7.

А вот если мы сравним MS Windows 98 Second Edition и MS Windows XP Home Edition - картина совсем другая. Внешне система-потомок похожа на систему-предка (настольная ОС для домашнего использования, ориентация на мультимедийные функции, упрощение интерфейса, даже в ущерб стабильности, и т.д.). Но внутри это совсем другая система - стабильное многозадачное ядро, журналируемая файловая система, разграничение полномочий, абсолютно другая реализация практически всех механизмов. То же самое можно сказать и про MS Visual Studio версий 6 и 7 - концептуальные отличия вполне оправдывают увеличение старшего номера версии.

Первый и главный вопрос, возникающий при анализе V8 - к какому сорту новых версий относится этот пакет? Действительно ли очередная инкарнация платформы заслуживает номера "8.0", или же это рекламный трюк, и на самом деле за глаза хватило бы "7.8"? Ответ однозначный: никаких рекламных трюков, всё честно. V8 - действительно новая, с иголочки, платформа, на несколько порядков превосходящая - по всем статьям - свого предка.

Немного истории

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

"1С" удивила всех, отложив релиз до состояния полной готовности, when it's done ™ - кто бы мог подумать? Затем удивила второй раз, последовательно выпустив две бета-версии. И только потом появился релиз - первый, но далеко не последний. V8 построена по компонентной модели, некоторые компоненты вошли в первый релиз на правах бета-версии (о чём было официально заявлено), некоторые не вошли вовсе и ожидаются к Новому Году.

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

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

О чём пойдёт речь

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

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

Архитектура системы

В плане идеологии V8 является прямым потомком V7 - разработчики "1С" рассудили, что от добра добра не ищут (и правильно сделали). Все родовые признаки налицо:

  • Среда разработки ("конфигуратор") и среда исполнения ("предприятие") в одном приложении;
  • Компонентная модель - функционал платформы разнесён по нескольким компонентам, которые можно комбинировать по своему вкусу (и сообразно с толщиной бумажника);
  • Предметно-ориентированная модель данных (программист имеет дело с объектами метаданных, абстрагируясь от их физической структуры);
  • Один клиент для обоих режимов работы СУБД (файл-сервер и клиент-сервер);
  • Открытая архитектура, полная модифицируемость всего и вся, мощный встроенный язык программирования с поддержкой русской нотации (язык интерпретируемый - компиляция происходит непосредственно в момент исполнения);
  • Расширение функционала платформы посредством внешних библиотек (на основе фирменного SDK, поставляется отдельно);
  • Дружественный к пользователю (разработчику приложений в том числе) оконный интерфейс;
  • Защита от копирования на основе аппаратных ключей.
  • Что же изменилось в архитектуре системы? Рассмотрим по пунктам.

    Две ноги хорошо - три лучше

    Клиент-серверный режим в V8 построен на основе честной трёхзвенной архитектуры. Клиент-сервер V7 отличался от файл-сервера единственно форматом хранения данных (таблицы MSSQL вместо файлов DBF), а вот клиент-сервер V8 построен по всем канонам: клиент, сервер приложений, сервер баз данных. Графически это можно изобразить вот так:

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

    Жёлтая зона - сервер приложений ("сервер 1С:Предприятия"). Его задачи: получать от клиента запросы на поиск и обработку данных, преобразовывать их к виду, понятному серверу баз данных (не забывая про оптимизацию), получать и обрабатывать данные, приводить результаты к виду, понятному клиенту V8.

    Зелёная зона - сервер баз данных (MS SQL Server). Его задачей является хранение физической структуры данных приложения V8 и отработка запросов к ним. При желании MSSQL можно использовать и шире: программисту - для получения прямого доступа к данным V8, администратору - для архивирования данных и других сервисных операций.

    Чем обусловлена жёсткая привязка V8 к MSSQL, ведь при желании можно было обеспечить поддержку и других популярных СУБД? Я не думаю, что здесь сыграли роль некие загадочные "бонусы" (как решили некоторые обозреватели). Это раньше интересы "1С" и MS лежали в параллельных пространствах, а с выводом на рынок брэнда "MS Business Solutions" бывшие партнёры превратились в прямых конкурентов.

    Причина, мне думается, в другом: обеспечить поддержку одной СУБД значительно проще (и времени это займёт меньше), нежели нескольких - а по дешевизне, простоте развёртывания и использования, да и распространённости MSSQL значительно превосходит, скажем, Oracle. Вторая (а возможно, и главная) причина состоит в том, что пользователи V7 работают с MSSQL и только с ним, а их интересы нельзя было не учитывать при проектировании V8.

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

    Умная машина транзакций

    Одним из самых серьёзных препятствий в использовании V7 на больших (по-настоящему больших) задачах является несовершенство "машины транзакций". Обрабатывая транзакцию по некоей таблице, "движок" V7 блокирует всю таблицу целиком - как следствие, другие запросы на проведение транзакций по той же таблице стоят в сторонке и нервно курят, дожидаясь своей очереди. А не дождавшись (что случается сплошь и рядом), бросают работу с криком "Ошибка блокировки таблицы! Всё пропало!".

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

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

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

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

    Большие, но по пять

    Клиент-серверный режим явно избыточен для тех предприятий, которые не владеют большими объёмами данных и не нуждаются в одновременной работе десятков пользователей. В этом случае затраты на мощные сервера, лицензии MSSQL и профессиональных администраторов можно сразу записывать в графу "убытки". Но эти затраты и не нужны - для таких пользователей в пакете "1С: Предприятие" предусмотрен файл-серверный режим работы СУБД.

    Модель данных V8 и в этом случае существенно отличается от модели данных V7. V7 оперирует массивом обычных файлов формата DBF - каждый со своим собственным индексом, плюс энным количеством служебных файлов ("файл конфигурации", "словарь данных", "файл реестра пользователей", etc).

    Такое решение имеет ряд недостатков:

  • Администратору сложнее уследить за всей этой кучей;
  • Поломка даже самого незначительного DBF-файла приводит к полной неработоспособности всей системы;
  • В случае сетевой работы файл-сервер должен поддерживать огромное количество одновременно открытых файлов (в случае Win9x это полный ступор, в случае NetWare и Samba - требует тонкой и зачастую неочевидной настройки), увеличение количества DBF в базе запросто может привести всю систему в нерабочий вид;
  • Данные полностью открыты любому желающему - о защите DBF-файла от просмотра и копирования говорить не приходится, ну а извлечь из него информацию (да и записать тоже) можно хоть Excel'ом;
  • Парольная защита доступа к информационной базе V7 выглядит сущим недоразумением и "лечится" удалением одного-единственного файла.
  • Некоторые недостатки легко обращаются в достоинства - скажем, "сломанный" DBF можно восстановить при помощи тех или иных сторонных инструментов, а прямой доступ к полям и записям DBF может помочь в случае необходимости извлечения данных без участия клиента V7.

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

    Модель данных V8 в случае файл-сервера очень похожа на модель данных MS Access и построена по принципу "одна база данных = один файл". Всё содержимое БД - таблицы, индексы, структура, служебные данные, аккаунты пользователей - упаковано в один файл закрытого фирменного формата. Конечно, дотошные специалисты рано или поздно расшифруют этот формат - "что один человек построил, другой завсегда сломать сможет", но для абсолютного большинства пользователей 1Cv8.1CD так и останется классическим чёрным ящиком.

    Хорошо это или плохо? По-моему, это правильная концепция: легче контролировать, легче перемещать, труднее испортить или взломать. Конечно, ручному восстановлению испорченный файл базы данных (в отличие от набора DBF) уже не поддаётся, но это не такая уж и проблема. Во-первых, существует техническая поддержка "1С", а во-вторых (и главное) людям, живущим по принципу "без бэкапа по жизни", вряд ли так уж ценны накопленные ими данные. В самом пиковом случае, при необратимой порче файла данных и восстановлении вчерашнего бэкапа будет потерян ввод данных за один день - а объём ежедневного ввода при использовании файл-сервера по определению невелик. Неприятно, но отнюдь не смертельно.

    Ключи от квартиры, где деньги лежат.

    Аппаратная защита от копирования, к сожалению, никуда не делась. Но и здесь V8 технологически опережает V7: интерфейс ключей защиты наконец-то поменялся с абсолютно неприспособленного для этих целей LTP на гораздо более удобный USB. Этим достигается:

  • Мобильность ключа - конечно, никто не запрещает менять LTP-ключи в горячем режиме, но все на свете инструкции дружно такую практику запрещают, а USB-ключ можно втыкать в работающую систему без риска спалить порт;
  • Отсутствие труднолокализуемых аппаратных конфликтов ключей с принтерами, сканерами и прочей периферией, а также друг с другом (Видели когда-нибудь "колбасу" из пяти воткнутых друг в друга LTP-ключей? На редкость мрачное зрелище).
  • В общем и целом, если LTP-ключ V7 был и остаётся однозначной помехой и пятым колесом в телеге, USB-ключ хотя бы не мешает пользователю жить и работать. На фоне западных инноваций в области защиты от копирования - всех этих самостирающихся DVD, нечитабельных CD, привязок к серийным номерам железа и многоходовых активаций - USB-ключ V8 выглядит сущим симпатягой.

    Ключи от квартиры, где деньги лежат.

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

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

    Как обстоят дела с расширением функционала V8? Здесь не всё так радужно. Фирменный SDK никуда не делся, но он остался тем же самым. "1С" заявила полную совместимость V8 с "Технологией создания внешних компонент 2.0" - это значит, что многие (явно не все - слишком уж много архитектурных отличий между V7 и V8) библиотеки, написанные для V7, будут работать и на V8; но также это означает и отсутствие в SDK новых, по сравнению с V7, возможностей.

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

    Лично я не вижу в этом особой проблемы - 90% функционала внешних компонент V7 уже реализовано в V8 на системном уровне. В платформу встроены и коммуникативные функции (E-mail, HTTP, FTP), и математические, функции для работы с XML, двоичными данными, COM-объектами; встроена оболочка HTML-документа (на основе MSIE, понятное дело); ну а количество доступных визуальных "бантиков" настолько велико, что не нуждается ни в каком расширении.

    Оставшиеся же 10% - это либо коннекторы к другим средам и СУБД, либо библиотеки для работы со всевозможным железом (кассовые аппараты, электронные весы, сканеры штрих-кодов, POS-терминалы и т.п.) - легко реализуются средствами фирменного SDK, и, более того, многие из уже существующих расширений V7 будут без проблем работать и в V8 (либо же потребуют незначительной модернизации).

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

    Сухой остаток.

    Подведём итоги "архитектурной" части обзора. Ключевые отличия V8 состоят в следующем:

  • Полноценная трёхзвенная архитектура позволяет добиться большей производительности при тех же затратах на аппаратную часть;
  • Решение проблемы блокировок при транзакциях снимает технологические ограничения на масштабируемость системы и открывает дорогу для реализации крупных проектов;
  • Новая модель данных файл-серверного режима работы решает проблемы стабильности и защищённости для мелких и средних предприятий, которые не имеют ресурсов для внедрения клиент-серверной модели;
  • Новая технология аппаратной защиты от копирования устраняет традиционные для V7 проблемы с этой самой защитой;
  • Расширяемость платформы существенно ограничена по сравнению с V7, но базовый функционал V8 компенсирует это ограничение.
  • Инструментарий разработчика.

    Эта часть пакета меня (как человека, более пяти лет занимавшегося разработкой ПО на основе V7) интересовала чрезвычайно. V7 хоть и была настоящей (и весьма мощной) RAD-средой, но её функционал всё же не дотягивал до планки, установленной "взрослыми", промышленными средствами разработки. V8 в этом отношении шагнула далеко вперёд.

    Идеология системы опять-таки никуда не делась: предметно-ориентированная RAD, среда разработки по-прежнему поставляется в одном флаконе со средой исполнения, язык по-прежнему интерпретируемый, поддерживает русскую нотацию и не дружит с ООП, но во всём остальном инструментарий V8 существенно отличается от V7, причём в лучшую сторону.

    Что конкретно изменилось? Рассмотрим ключевые отличия по отдельности.

    Коллективизация

    В V8 появились средства поддержки групповой разработки. Тем, кто работал с MS SourceSafe, не нужно объяснять, как эти средства устроены и как работают - по функционалу "хранилище конфигурации" V8, конечно, уступает старшему брату, но идея практически та же самая.

    Для чего вообще нужны какие-то специальные инструменты групповой работы? В процессе разработки сложного приложения (естественно, когда команда разработчиков состоит более чем из одного человека) очень много времени тратится на согласование действий всех участников команды: нельзя допускать единовременную модификацию одного объекта более, чем одним человеком; нужно вовремя снабжать одних программистов актуальными версиями модулей, создаваемых другими программистами, ну и так далее. Ошибки при согласовании чреваты серьёзными потерями рабочего времени - хуже нет ситуации, когда ведущий разработчик сидит на горе разнотипных версий и с тоской вопрошает в пространство: "Кто-нибудь может мне объяснить, что здесь что?". Потеря контроля за разработкой означает срыв сроков, появление в продукте малопонятных и труднолокализуемых ошибок, а в конечном итоге - убытки.

    В случае групповой разработки на V7 все эти функции выполнялись человеком. Но гораздо правильнее перепоручить согласование и контроль машине - среда разработки, в отличие от главного программиста, не забывает сверять номера версий, даты и авторство обновления тех или иных объектов. В составе V8 появилась именно такая машина.

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

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

  • Получить из хранилища последнюю актуальную версию объекта (аналог операции Get Latest Version);
  • Захватить объект хранилища в личное пользование (аналог операции Check In, и пока объект захвачен, другие разработчики не могут его модифицировать);
  • Отменить захват объекта;
  • Поместить обновлённый объект в хранилище (аналог операции Check Out);
  • Получить отчёт об истории изменений объекта (кто, когда и что делал с данным конкретным объектом, кто последний вносил изменения, когда это происходило и т.п.);
  • Получить отчёт-сверку объекта в хранилище с объектом в локальной копии конфигурации.
  • Эти манипуляции можно производить как с конфигурацией в целом, так и любым отдельным объектом, и даже с фрагментом объекта (формой или макетом).

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

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

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

    Чего не хватает в механизме хранилища? Не хватает двух вещей: хранения истории версий на уровне самих данных (т.е. возможность хранить не только информацию об изменениях объекта, но и несколько откомментированных версий этого объекта с возможностью отката на любую из них), и не хватает гибкой системы полномочий (пользователь Иванов работает только с отчётами, пользователь Петров только с документами вида X, Y и Z, а пользователь Сидоров работает с чем угодно и как угодно). Но и без этих функций хранилище конфигураций V8 представляет собой удобный и мощный инструмент, приближающий V8 к промышленным средам разработки.

    Визуализация

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

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

    С чем именно предстоит работать? Ассортимент визуальных контролов V8 довольно велик: всё то же самое, что и в V7, плюс панель (разделяют форму на логические области), разделитель, прогресс-бары (трёх разных видов), ползунки-регуляторы, диаграмма, календарь, гиперссылка ("нажимаемый" текст), тулбар (инструментальная панель, может быть помещена в любое место формы). Помимо этого, на форму можно положить произвольный ActiveX-объект. Да, у каждого элемента появились события события и обработчики этих событий (чего в V7 не было, как класса) - при выборе, при изменении, при начале того, при окончании этого. Управление всем этим хозяйством в среде разработки сделано очень грамотно - нужный обработчик создаётся буквально двумя кликами. События, разумеется, имеются не только у отдельных контролов, но и у всей формы в целом.

    Отдельного упоминания заслуживает контрол по имени "Поле HTML-документа" - который представляет собой кусочек MSIE, встраиваемый в любое место вашей формы. Положив на форму этот элемент, мы получаем полноценную (CSS и JS поддерживаются) отрисовку HTML - исходник можно получить из файла, из Интернета (без дополнительных ухищрений, HTTP- и FTP-коннект встроены в платформу), а можно сгенерировать прямо из кода. При желании (а также хорошем знании HTML и методов представляющего браузер COM-объекта) можно вмонтировать внутрь конфигурации небольшой сайт, содержащий, к примеру, справочную документацию, да хоть целую библиотеку.

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

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

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

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

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

    Языковедение

    Встроенный язык (собственного имени у него, увы, не появилось - так что придётся называть языки именами платформ) V8, на первый взгляд, ничем особенным не отличается от языка V7. Но это на первый взгляд - попытавшись написать что-то конкретное, с удивлением понимаешь, что без документации обойтись не получится. Кстати говоря, "1С" выпустила вполне достойный учебник (не документация, а именно учебник) за авторством С.А. Митичкина ("Разработка в системе 1С:Предприятие 8.0") - рекомендуется всем, кто берётся за освоение новой платформы.

    С одной стороны, язык стал проще. Мелкие, но существенные новведения вроде операторов New и For Each упрощают код и делают его прозрачнее. Упрощению способствует и существенно расширенная по сравнению с V7 библиотека стандартных функций работы со строками, датами и числами. Многие вещи (особенно это касается взаимодействия элементов визуальных форм и данных информационной базы), которые раньше приходилось писать руками, оказались встроены в платформу - объём служебного, сервисного кода в приложениях V8 будет существенно меньше, нежели в приложениях V7.

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

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

    Фирменная фича "1С:Предприятия", язык запросов - "язык в языке" -- очень сильно преобразился и стал похож на SQL до полной неотличимости. "SELECT xxx AS abc FROM yyy WHERE zzz" - вот типичный пример запроса V8. Механизм запросов в V8 является стандартным для извлечения практически любых данных, вне зависимости от того, к каким именно прикладным объектам они относятся. По сравнению с V7 и её разнородными механизмами (и разнородным языком!) "оперативных" и "бухгалтерских" запросов - прогресс очень серьёзный. Язык запросов V8, кстати говоря, тоже поддерживает русскую нотацию, и можно написать "SELECT … FROM … WHERE …", а можно и "ВЫБРАТЬ … ИЗ … ГДЕ …".

    Ещё одна интересная вещь, никак не связанная с языком программирования, но связанная с языками - встроенный механизм локализации написанных на V8 приложений. У V7 есть "английский интерфейс" (в виде аддона к платформе), и только, механика же локализации V8 - более чем серьёзный бизнес. Во-первых, предусмотрен перевод интерфейса платформы на неограниченное количество языков (путём установки пакетов ресурсных файлов, правда, пока что в поставке пакет только один - RU).

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

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

    Упаковочный цех

    Любой, кто занимался профессиональным внедрением готовых продуктов, созданных на основе V7, знает: в систему изначально зашито противоречие, превращающее труд специалиста по сопровождению в бесконечное чтение монолога "Быть или не быть?".

    Противоречие вот какое:

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

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

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

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

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

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

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

    Бижутерия

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

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

    Редактор кода наконец-то обзавёлся автозавершением, правда, оно работает не в любой ситуации и даёт подсказки только по определённому списку объектов и методов. Но всё равно - лучше уж так, чем вообще никак. Конечно, до вылизанной эргономики MS Visual Studio "восьмёрке" далеко, но как говорят в USA - "очень даже неплохо для своей цены".

    Изменился формат внутренней справочной информации - и изменился в лучшую сторону, с Text/plain на HTML. Больше нет нужны изобретать свои собственные системы показа внутри среды исполнения структурированной и иллюстрированной документации.

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

    Сухой остаток

    Подведём итог "инструментальной" части обзора. Ключевые отличия V8 состоят в следующем:

  • Полноценная поддержка групповой разработки приложений;
  • Мощные средства визуального дизайна, все необходимые возможности для построения эргономичных и радующих глаз пользовательских интерфейсов;
  • Тщательно переработанный (в сторону повышения эффективности и осмысленности кода) язык программирования; SQL-подобный встроенный язык запросов к данным;
  • Поддержка мультиязычности на уровне платформы, локализация на любой европейский (с китайским или арабским лёгких путей не будет) язык с минимальными трудозатратами;
  • Новая концепция поддержки и обновления тиражных конфигураций;
  • Энное количество интерфейсных новшеств, помогающих программисту делать свою работу эффективнее.
  • Заключение

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

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

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

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

    Комментарии

    1
    • Хранитель_врат
      "новой версии "народной" платформы "1С: Предприятия 8.0"
      **
      "Но ценообразование, совокупная стоимость владения, окупаемость вложений, рыночная конкуренция - это тема отдельного большого разговора. Я же вёл здесь речь о технологиях"
      **
      начал-то ты как раз не о "технологии"...

    Инвестиции компаний в цифровые технологии выросли на 80%

    Объем финансирования передовых отечественных программ превысил 180 млрд рублей.

    УСН

    По УСН будет ряд улучшений в Налоговый кодекс

    23 июля Госдума окончательно приняла закон с изменениями в НК в рамках основных направлений налоговой политики на 2023-2025 годы. В том числе он содержит ряд новшеств по УСН.

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

    В Госдуме прошел круглый стол «Применение лучших практик офлайн-ретейла в сфере интернет-торговли».

    Курсы повышения
    квалификации

    18
    Официальное удостоверение с занесением в госреестр Рособрнадзора
    Зарплата

    Закон о налоговой политике 2023-2025 затронул и зарплаты

    23 июля Госдума в третьем окончательном чтении приняла закон с изменениями в НК, которые реализуют отдельные положения основных направлений налоговой политики 2023-2025. Среди прочего они затрагивают заработную плату и НДФЛ с нее.

    Росстат: не осталось семей, которым не хватает средств на еду

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

    Интервью

    Евгений Коваленко: У меня очень большие амбиции

    Продолжаем беседу с предпринимателями в рамках проекта «ТоТ еще разговор». На этот раз мы пообщались с Евгением Коваленко, предпринимателем, инвестором и создателем компании VEROL, которая успешно торгует на маркетплейсах.

    8
    Опытом делятся эксперты-практики, без воды

    Вежливость при общении с ФНС

    ФНС, камеральные проверки

    Онлайн-кассы

    Чем отличается касса от эквайринга

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

    Чем отличается касса от эквайринга

    Приложение «Авито» вернулось в AppStore

    Пользователи Авито на iOS смогут без проблем скачивать сервис на свои устройства. Приложение вернули в AppStore.

    Как «Клерк» помогает развивать и продвигать бизнес

    Более 20 лет «Клерк» делает работу бухгалтеров и предпринимателей легче и интереснее: мы рассказываем о нюансах ведения бухучета, налогах, изменениях в законах и помогаем искать ответы на сложные вопросы. А еще «Клерк» с удовольствием займется продвижением вашего бизнеса: наш трафик — более 7 миллионов посетителей в месяц, и эта аудитория станет не только нашей, но и вашей.

    Как «Клерк» помогает развивать и продвигать бизнес

    Налогообложение прибыли в НК уточнили: новый закон

    23 июля Госдума в третьем окончательном чтении приняла закон с изменениями в НК, которые реализуют отдельные положения основных направлений налоговой политики 2023-2025. В том числе они затрагивают учет и отчетность по налогу на прибыль организаций.

    Модулькасса и Модульбанк дарят три месяца торгового эквайринга с комиссией 0%

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

    От НДС в 2025 году освободят вновь зарегистрированные компании и ИП

    Впереди масштабные изменения по налоговой реформе 2025 года, которые касаются всех организаций. И особенно тех, кто на УСН.

    Банки

    Сегодня пользователи жалуются на ВТБ, Росбанк и Альфа-Банк

    Цифровые сервисы российских банков сбоят второй день.

    Акции Яндекса начали торговаться на Мосбирже

    Объем торгов ценными бумагами МКПАО «Яндекс» уже превысили 6 млрд рублей. Стоимость акций растет на 11,6%.

    Роструд: если вовремя не выдали трудовую книжку, можно требовать компенсацию. Но не всегда

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

    Банки

    В работе приложений Газпромбанка и ВТБ произошел сбой

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

    Изменились правила ведения электронной торговли

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

    Штрафы до 300 000 рублей за сбор данных через гугл-формы и другие нюансы ФЗ №152

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

    Штрафы до 300 000 рублей за сбор данных через гугл-формы и другие нюансы ФЗ №152

    Интересные материалы

    НДС

    ФНС обновила безопасную долю вычетов НДС за II квартал 2024

    Федеральная налоговая служба 18 июля опубликовала обновленные отчеты по форме 1-НДС по состоянию на 01.05.2024. Это сводный в целом по России и в разрезе регионов отчеты.