gifts2017

1С VS MS Dynamics Ax. Чем “Мы” хуже?

Опубликовал Олег Филиппов (comol) в раздел Управление - Управление проектом

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

Зачем их сравнивать?

Раздел можно смело пропустить, если этого вопроса не возникает. Почему, на мой взгляд, является важным сравнение 1C с другими (западными) ERP системами/платформами? Очень большая проблема даже для опытных разработчиков – внедренцев заключается в том, что  очень хорошо изучается функционал типовых решений, и часто люди не видят альтернативы. То, что 1С не делает/не предлагает априори невозможно, либо неправильно. У западных систем есть чему поучиться, и не только разработчикам платформы. Многие функциональные особенности доступны и “простому смертному” для использования в своих прикладных решениях. Конечно, подобные “изыскания” полезны только для людей, которые хорошо знают типовые решения 1С. Потому как внедрение какого-то нового подхода требует глубокого понимания его целесообразности и преимуществ над существующим.

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

Конечно нельзя не упомянуть, что на Инфостарте уже есть публикация на данную тематику: http://infostart.ru/public/101933/ . Внимательно перечитал перед тем, как писать. Конечно, ничего общего с ней не получилось:

- Публикация 2008 года, все несколько поменялось. Сейчас уже и 1С 8.2, и Dynamics Nav 2009

- Сравниваем не с Dynamics Nav, а c Dynamics Ax. Кстати, в 2008 году назывались ещё Navision и Axapta, наверное. Axapta всё-таки флагман, ориентированный на средний и крупный бизнес, нужно же равняться на лучших

- Сравниваем не только с позиции разработчика, но и с позиции пользователя и администратора. Потому как 1С это платформа, то прикладное решение возьмём УПП 1.3 (очень бы хотелось ERP 2.0, конечно, но рановато…. как и DAX 2012).

Разработка

Объекты метаданных:

Основа основ, конечно, - дерево объектов метаданных. В Dynamics Ax оно называется репозитарием прикладных объектов

  image

Сам принцип очень похож – метаданные, объекты у которых есть свойства и т.п. Есть даже много совпадений: Reports (отчеты), Jobs (обработки + фоновые задания), Forms (формы), Enums (перечисления), WorkFlow (бизнес-процессы).

Но корень всех различий кроется в Data Dictionary. В Dynamics Ax табличная структура таблиц выделена отдельно. На мой взгляд, это правильно, и обязательно должно учитываться при проектировании прикладных решений. Это отражает классический подход: “сначала подумать о том, какие данные, где, как и для чего мы храним, а уже затем какая логика должна для них присутствовать”. При проектировании нужно отличать объекты вида “регистр, справочник, документ” от объектов “отчет, обработка”.

 

Редактор кода:

 

imageimage

Вопреки ожиданиям до 1С с “прикрученным” к ней снегопатом аксапте далеко. Нет ни продвинутого IntellySence, ни даже простых подсказок. Ctrl+Пробел, конечно, работает, только кого этим удивишь. Но в аксапте с кодом работать проще по другим причинам. Как видно из рисунка, методы объектов присутствуют в самом дереве объектов.  Это очень удобно. Кроме того, есть отдельная сущность  - классы. О них далее. Кто знаком с ООП, уже сейчас могут позавидовать. Наличие классов вообще позволяет не писать кучу кода в методах объекта. Да, ещё для аксапты тоже есть свой “снегопат”: http://www.axassist.com/

Да, и тут нужно, наверное, сказать про ещё одну особенность – в аксапте нет отдельного приложения для разработки. Имея соответствующие права (и лицензии, кстати) вы можете открыть AOT и исправлять, что заблагорассудится

Контроль версий, поставка и поддержка:

В аксапте есть очень хороший и интересный механизм слоёв. О нём стоит упомянуть. В 1С хоть и есть намёки, но полноценной реализации данного механизма не хватает. Суть в том, что код изначального прикладного решения вы никогда не затираете – вы его “перекрываете”, внося модификации на более высоком слое. Притом перекрываете отдельные методы или отдельный объект. Слоёв, конечно, и не 2, и не 3. Есть системный, который правит только Microsoft, есть специальный слой для решений партнёров (да здравствуют отраслевые), есть слой уже для собственных модификаций – пользовательский. Они обновляются и используются независимо. Естественно, есть возможность сравнивать. В 1С этого, конечно, жутко не хватает, но некоторый намёк на то, как нужно организовывать обновления, можно почерпнуть… конфигурация, которая обновлена без ваших модификаций, у вас всегда должна быть, как и конфигурация до обновления с вашими модификациями. т.е. каждое обновление должно содержать минимум 3 конфигурации. А если отраслевое решение, то хорошо бы и все четыре. Одну из них, конечно, перекрывает “конфигурация поставщика”, но, как показывает практика, лучше сохранить обычным способом.

image

Система слоёв очень удобна. Внесённые вами изменения можно так же “лёгким движением руки” откатить. Но при этом на полноценную систему контроля версий явно не тянет. А полноценной системы контроля версий в Dynamics Ax нет.

Есть некоторые средства взаимодействия со сторонними системами контроля версий:

image

 

В частности, естественно, присутствует интеграция с Visual SoureSafe и Team Foundation Server (ожидаемо, конечно). Но никаких визуальных эффектов при этом и ещё чего-либо вы не заметите. Весь контроль версий осуществляется по сути “в ручном режиме” посредством вызова определенных команд. Главный плюс в данном случае - что на систему контроля версий вы можете повлиять непосредственно из кода Axapta, т.е. как в 1С оно не “зашито в платформу”. Да и сами объекты Dynamics Ax представляют из себя текстовые файлы, хранящиеся в определенном каталоге, т.е. организовать для них систему контроля версий можно и в ручном режиме. Если бы хранилище в 1С работало хотя бы вполовину так же быстро и вызывало только в половину больше проблем, чем Visual SourceSafe, то встроенную и полностью интегрированную систему контроля версий можно было бы считать большим преимуществом 1С.

 

Структура данных

В Dynamics Ax решили не уходить далеко от сущностей СУБД, таким образом, данные хранятся только в объекте одного типа – “таблица”. С одной стороны, это плохо. Начинающему разработчику трудно разобраться, какие таблицы для чего создавать. В 1С всё просто. Документ – фиксация факта, справочник – набор записей для выбора в реквизиты документа, Регистр – сущность, в которую документ записывает свои данные при “проведении”. Но, с другой стороны, опытный разработчик уже понимает, что не всё и не всегда так просто. А если вы, к примеру, хотите на 1С сделать систему учета обращений? Инцидент - это документ или справочник? Или запись регистра сведений? А переписка по нему – справочник или регистр? Да даже в типовых есть “странные” документы вроде ”регламентных операций”, “расчета себестоимости”, “корректировки регистра”, в конце концов. Странные “справочники” вроде ключей аналитик или серий номенклатуры. Для более сложных учетных задач такое методическое разбиение сущностей уже не слишком подходит. Разработчик с некоторым опытом за плечами должен задумываться скорее не о том, на что данная операция похожа по виду: на “Документ” или на “Справочник”, а скорее, какая структура данных ему нужна для хранения информации. А в итоге структура хранения – это всегда таблицы (по крайней мере, в большинстве современных систем. Не берём эксклюзив вроде NoSQL или Объектных СУБД). В 1С таблицы делятся уже заранее на определенные классы, имеющие фиксированные индексы, реквизиты, свойства и методы. В Dynamics Ax у разработчика в этом отношении полный простор фантазии. Но удобство разработки от этого совсем не страдает. Вспоминаем, что в Dynamics Ax есть поддержка ООП. Собственно, это во многом “развязывает руки” в части повторного использования кода.

Конечно всё не так гладко, как можно подумать на первый взгляд. Наследовать таблицу от таблицы нельзя (НО в Dynamis Ax 2012 уже можно, по крайней мере, по описанию новшеств. В данном случае пишу “нельзя”, потому как в статье рассматриваем наиболее популярную на момент её написания версию – DAX 2009)

 

Каждое поле таблицы имеет в DAX достаточно много свойств:

imageimage

 

Очень заметно свойство “ExtendedDataType”, в котором определяется ещё часть свойств для данного элемента. Сразу бросаются в глаза свойства “Visible” и “AllowEdit”. В DAX это свойства таблицы, а не экранной формы, хотя, конечно, программно повлиять и заполнить можно всё что угодно. Несмотря на то, что с появлением управляемых форм ситуация в корне изменилась, 1С всё-таки ещё есть куда расти в плане декларативного пользовательского интерфейса.

Конечно же, стоит упомянуть, что в отличие от 1С Microsoft совсем не стесняются давать возможность разработчикам создавать индексы на таблицы БД:

image

 

Получение остатков

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

Открываем в DAX форму “в наличии” для товара и смотрим, какой для неё запрос выполняется:

image

 

Как видно из рисунка, всё предельно просто и лаконично: есть индекс и поле “Closed” в индексе. Поле Closed включается в индексы и означает, что товаров (по данному заказу, на данном складе) нет ни в наличии, ни в резерве, если Closed = “Да”, то записи нет на остатках – т.е. она “исчезла из итоговой таблицы”. Естественно, на уровне MsSQL поле Closed не булево, а очень даже int. С учётом того, что при росте базы, скорее всего, строки, которые есть на остатках (не закрыты), будут составлять малую часть всей таблицы, то индекс будет иметь очень хорошую селективность.

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

 

ООП и БСП

Для тех кто не в теме: ООП – это про аксапту, БСП – это про 1С. Появление БСП очень порадовало разработчиков прикладных решений. Функционал, который характерен для всех прикладных решений 1С, собран, переработан и приведён к формату “библиотеки”. Если вы разрабатывали не только на 1С, то такой подход не новость – вспомним Библиотеку VCL в Borland C++, Библиотеку STL в C++, MFC в Visual C++, в конце концов, сборки C#. Это всё имеет схожее назначение. С одной только разницей - С++ (как и X++ в DAX) язык программирования, поддерживающий ООП. Следовательно, библиотеками вы пользовались просто: создавали свои классы – наследники от базовых классов, определенных в библиотеке, и перекрывали нужные методы, добавляли свои… В 1С, по понятным причинам, такого не получится. Именно поэтому, когда вы хотите “Перекрыть” какой-либо метод БСП, вам нужно раза 3-4 “Нажать F12”, “докопаться до сути” и понять, где внести модификации. Меня, если честно, цепочки вызовов функций вида: МодульКонфигурации.КакаяТоФункция() –> МодульПодсистемыБСП.КакаяТоФункция() –> СтандартныеПодсистемы.КакаяТоФункция() –> СтандартныеПодсистемыПереопределяемый.КакаяТоФункция() жутко раздражают. Со временем, конечно, привыкаешь, но с “изящной простотой” ООП такому подходу не сравнится. Тем не менее, осознание, что такой функционал нужен, у 1С, видимо, уже есть. Наверное, при разработке и использовании БСП уже сформировалось и понимание, что поддержка ООП в языке 1С здесь бы очень не помешала.

А если бы ещё была поддержка “наследования таблиц”, как в DAX 2012, – вообще просто сказка. Представьте: при разработке нового прикладного решения создаёте документ “ОбщийДокумент”, прописываете в нём функционал, который необходим для остальных документов, а остальные просто наследуете от него и добавляете специфичный для вида документа функционал. Несмотря на отсутствие поддержки в 1С ООП, я думаю, стремиться к нему всё-таки нужно. Т.е. документ, в котором существует только базовый функционал, создать всё-таки нужно (назвав его при этом “шаблон”, к примеру), остальные документы копировать с него. С актуализацией, конечно, будет трудновато – но тут могут помочь общие модули (в которые нужно постараться переносить максимум функционала) и “библиотечный подход” при создании общих модулей“. Т.е. создать обычный модуль, стандартный модуль и модуль “переопределяемый”, в которые вставить одну и ту же функцию.

Удобство разработки

1) В DAX нормальная ситуация, когда у вас открыто 2 AOT, и между ними вы “перетаскиваете” объекты.

image

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

2) В DAX все добавленные объекты можно разделить на “Проекты”

image

А ведь то же самое можно делать и в 1С. Просто мы редко об этом задумываемся. В 1С есть объект “Подсистема”, кроме назначения, которое он приобрёл в 8.2, осталось ещё назначение, которое было в 8.1. Для этого достаточно не ставить галку “Включать в командный интерфейс”. При этом все объекты, которые вы добавили или изменили, вы можете включить в эту подсистему, а в дереве метаданных применить “фильтр по подсистемам”. Но многие ли из интеграторов это делают?

3) Ну и, конечно же, в DAX для того, чтобы обновить базу, не нужно монопольного к ней доступа, без проблем обновляется как код, так и структура данных

 

Работа с запросами

А вот тут ничего хорошего не могу сказать про аксапту. Слева объект Query – ближайшее в DAX, что похоже на конструктор запроса 1С. Справа конструктор запроса – уже говорит о многом.

imageimage

 

В DAX при этом вы не увидите текстов запросов SQL подобных. Вы в коде можете увидеть только что-то вида:

image

Есть в таких конструкциях и join, и sort, и group by, а вот с вложенными запросами и временными таблицами уже будет сложновато. Так что любителям простоты и лаконичности SQL остаются только прямые SQL запросы (они здесь разрешены, и названия таблиц в БД нормальные) и вспоминать молодость, т.к. писать их придётся руками.

 

Функционал

Общие интерфейсные механизмы

Прежде всего, открывая MS Dynamics Ax, пользователь видит, что это программный продукт Microsoft:

image

 

А видит он уже “стандарт” интерфейса:

- Боковую панель (как в Outlook)

- Рибон (как везде)

- Навигационную строку и кнопки навигации (как в эксплорере)

- Избранное

- Красивые картинки…

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

Ко всем элементам DAX может быть прикреплен файл:

image

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

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

image

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

 

Также инфраструктура напоминаний поддерживается неким “общим” образом

image

Инструмент очень удобный. В 1С, по крайней мере в БСП, я видел только напоминания по дате, или системные.

 

 

Отчеты

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

imageimage

 

 

А вот так выглядят сами отчеты:

imageimage

Притом то, что вы видите в DAX, -  это “как есть”; эту форму даже в Excel сохранить нельзя. Ну а возможности табличного документа в 1С вы и сами знаете.

Конечно, в DAX не всё так плохо, разработчики не оставили пользователей системы “на произвол судьбы” с такими отчетами. Для того, чтобы получить “полноценный” отчет в DAX, нужно воспользоваться функционалом MS Analysis Services, т.е. сделать собственные OLAP кубы и использовать их в отчетах. В качестве клиента – MS Excel подходит, пожалуй, лучшим образом. Такие отчеты уже можно настраивать, они достаточно быстро работают даже на больших объёмах данных, и вполне удобны. Но данные в них уже попадают не online. чтобы построить отчет нужно заново обновить OLAP куб. Как правило, это делается раз в день. Так что оперативные отчеты таким образом получать очень не удобно.

 

Аудиторский след. Изменение “проведенных”

Изменять “проведенные” (“разнесенные” в терминологии DAX) записи уже нельзя. Информация о “разносках” попадает в “Аудиторский след” (сама таблица, кстати, называется Transaction Log, собственно, и назначение её примерно то же самое). В данной таблице в DAX отсутствуют методы удаления в принципе. Какими бы правами вы ни обладали, средствами DAX данные из этой таблицы удалить невозможно. Исправлять  разнесенные уже записи тоже невозможно под любыми правами.

Зачем это делается? Очень просто – разработчики систем пытаются соблюсти требования “отсутствия ошибок” в транзакционных системах. Одной из этих ошибок является “неповторяемое чтение”, т.е. если вы сегодня в 12 часов дня посмотрели остатки по кассе, то и завтра, посмотрев остатки на 12 часов вчерашнего дня, вы должны увидеть ту же самую сумму.

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

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

 

Настройки форм

Как то уже очень похожи настройки форм в Dynamics Ax и в 1C 8.2:

imageSNAGHTML4989b56b

Невооруженным взглядом видно “наследование опыта”. Жаль, что ещё “сохранение настроек форм” и “загрузку настроек форм” 1С пока не так удобно и просто сделали. Но есть надежда, что вскоре исправятся.

 

Web доступ

В Dynamics Ax Web доступ осуществляется посредством интеграции с SharePoint (что не удивительно). Но для Web доступа к функционалу нужно разрабатывать отдельные формы, которые ориентированы именно на работу через Web интерфейс.

Конечно, здесь “1С ушла далеко вперёд”, но вот только в модулях форм Dynamics Ax нет никаких инструкций &НаКлиенте и &НаСервере. А кода в самих формах очень мало.

 

 Бухгалтерский учет

К сожалению, картинки из реальной жизни бухгалтерского баланса в Dynamics AX не могу показать – ни разу не видел, чтобы его формировали из Dynamics Ax. Также не нашел их в тестовых и даже не тестовых системах. В обновлениях они вроде присутствуют – выпускаются патчи для DAX под обновление Российского законодательства. К сожалению, эти обновления выходят гораздо реже, чем хотелось бы.  Как пишут на своих форумах сами разработчики Dynamics Ax, бухгалтерский учет по РСБУ всё-таки удобнее вести в 1С. По крайней мере, налоговую отчетность сдавать точно.

В DAX принята система учета, когда любая хозяйственная операция должна проходить через счета БУ. В отличие от 1С, где часть аналитик и информации мы можем держать в регистрах накопления или даже регистрах сведений, в DAX вся информация по максимуму должна проходить через счета ГК. Но структура хранения информации по “проводкам” достаточно оптимальна, поэтому такой процедуры, как “отложенное проведение”, в DAX, как правило, не используется. Зато есть понятие “системные счета”, на которые может попадать “всякий хлам”.

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

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

Закрытие периода в DAX – это такой процесс, за который человек в одиночку и в здравом рассудке не возьмётся – по сути всё закрытие счетов – ручное. Это, конечно, обеспечивает некоторую гибкость и отвязывает от национальных стандартов бухгалтерского учета, но для БУ зачем оно нужно? Видел, что есть в локализации вроде даже функционал для формирования регламентированной отчетности, он чем-то напоминает тот, что сделан в 1С:Консолидации – нужно “руками” прописывать все значения в ячейках табличного документа.

А “штатный баланс” выглядит примерно так:

image

 

Из положительного стоит отметить “профили разноски”. DAX позволяет достаточно гибко настраивать подбор счетов и проведение в различных случаях.

Управленческий и международный учет

Сразу стоит отметить, что система не ориентирована на ведение “двойного”, “тройного”, “цветного” учета. План счетов в системе один.

Но у счета в DAX куда больше свойств и настроек, чем в 1С:

imageimage

В DAX, если необходимо разделить бухгалтерский и управленческий учет, или, к примеру, МСФО – вы будете использовать тот же самый план счетов, просто определенные признаки заполнять по-другому и другие коды назначать.

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

А вот то, что количество реквизитов счета можно бы расширить, – это вполне хорошая идея. Сейчас в 1С информация, которая относится непосредственно к счету, разрознена. Можно бы её и дополнить, вплоть до формата вывода в отчеты.

 

Расчет себестоимости. Учет затрат

Тут всё просто – FIFO, LIFO, по средней... Конечно, ожидали увидеть “вездесущий” в 1С РАУЗ, но я лично подобного подхода не встретил, ни решения СЛУ, ни корреспонденции аналитик.

В DAX FIFO отличается от понятия, принятого в 1С:

1) При определении прихода, по которому нужно начислить себестоимость, может не определяться точная партия, а происходит сопоставление прихода с расходом по определенному набору аналитик.

2) Набор аналитик, по которым происходит сопоставление, можно выбрать.

3) Хронологический порядок в данном случае совсем не обязателен.

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

Но очень хорошо, что логика расчета себестоимости динамически настраивается набором аналитик, это особенно приятно.

 

Производство

Здесь, конечно, УПП ещё далеко до Dynamics Ax. К примеру, в аксапте есть информация по всем этапам производства, можно запланировать потребность во времени, материалах, иных ресурсах на каждый этап, даже посчитать предполагаемую себестоимость товара и дату завершения изготовления партии. Вот, к примеру, маршрут изделия в производстве.

image

 

В целом блок производства выглядит в DAX гораздо более “продвинутым”, чем в УПП.

 

Прочие функциональные возможности

 

1) В DAX намного увереннее выглядит блок закупок. Заказы на закупку проходят целую цепочку (обработанные, отправленные, подтверждённые) в общем, всё на рисунке:

image

Стоит, правда, отметить, что в УТ11 (особенно с появлением статусов и оплат) функционал стал приближаться к реализованному в DAX, но в УПП такого функционала пока что нет

2) То же самое можно сказать и про CRM.

3) В DAX есть целый блок по управлению проектами. В УПП Проект хоть и практически сквозная аналитика, но дополнительный функционал по ним отсутствует. В DAX у проектов есть (что, конечно же, логично) интеграция с MS Project Server.

4) В DAX склад уже полноценный – с адресным хранением. Хотя для полноценного адресного склада и WMS этого маловато, тем не менее, организовать учет позволяет, но, конечно, без “хитрых” алгоритмов размещения и выделения ячейки.

 

Администрирование

Как продукт Microsoft, аксапта приятнее в администрировании уже привычностью подходов и интерфейсов.

Интеграция с инфраструктурой

Конечно, организована интеграция с AD, и пользователи, как правило, добавляются в систему импортом из AD. Даже структура компании берётся из AD в идеале.

Собственно, никто не мешает аналогичную функциональность реализовать и в 1С – для этого существует интерфейс WMI, который позволяет получать из AD практически любую информацию. Собственно, об этом уже написано http://infostart.ru/public/165702/

 

Разделение данных

Вся работа пользователя ведётся в рамках одной “компании”, стоит отметить, что данная функциональность больше напоминает разделение данных в 1С, чем RLS.

С этим подходом в DAX полностью согласен – тоже считаю, что “Организация” скорее должна выступать разделителем, чем реквизитом документов, по которому накладывается RLS. Это и работает быстрее, да и правильнее. Мы просто уже привыкли к частой практике, когда для одной компании открывается несколько юр. лиц, с различными целями. В этом случае, мне кажется, нужно либо отделять управленческий учет от бухгалтерского, либо переключаться между этими юридическими лицами как между компаниями, в случае, если они относительно независимы.

Такое разделение также более “надёжно”, чем RLS по организациям, и уже не получится, как в 1С, где бухгалтеры, которые в своё время “насмотрелись” на проблемы с RLS, требуют сделать себе отдельные базы под каждую организацию. Системному администратору (или администратору СУБД) это, соответственно, дополнительная нагрузка.

 

Кластеризация

Сервер DAX кластеризуется, весьма устойчив. Центрального кластера нет. Подсистему балансировки нагрузки и сервер пакетной обработки можно распределять по разным серверам:

image

СУБД поддерживает всего две: MS SQL Server и Oracle Database.

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

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

 

Блокировки.

Режим блокировок в DAX можно настраивать:

image

Собственно, режим говорит о том, блокировать ли данные, которые читаются для последующего изменения, или не блокировать. Для чего это делается, я уже писал в статье http://infostart.ru/public/91880/ . Собственно, со мной там не все согласились – есть популярное мнение, что “блокировать нужно всё и всегда”. Но разработчики DAX, видимо, с этим мнением тоже не согласны. Блокировки должны быть осмысленными и только там, где этого требует бизнес-логика приложения.

Также очень интересно, что при работе с MS SQL Server DAX использует уровень изоляции Read Commited Snapshot, о котором я тоже писал: http://infostart.ru/public/91879/ , его же вроде как и использует уже 1С 8.3.

Права доступа

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

 

Самих прав в DAX существенно меньше. По сути их 3, при этом для всех объектов одинаковые. Ну разве что для некоторых (для отчетов, к примеру) правка и создание недоступны (что логично).

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

 

Хранение конфигурации

В DAX, как в 1С, нет единого файла конфигурации, который хранится в СУБД. Соотвтетственно нет и кэша метаданных, и вечных проблем с ним. Все модули хранятся на специально выделенном файловом ресурсе (для него должно быть организовано резервное копирование, и доступ серверов в Ax к нему должен быть быстрый). Также модули хранятся отдельно – в привязке к объектам, для которых они созданы. Т.е. “разрушение” сразу всей конфигурации, как в 1С, крайне маловероятно. Такая структура хранения мне лично более напоминает триггеры в MS SQL, не знаю всех нюансов, но, на мой взгляд, она более предпочтительна, чем один большой и неповоротливый файл конфигурации, который нужно постоянно читать с сервера и записывать на сервер, кэшировать, записывать частями (динамические обновления), потом считывать по частям и собирать (работа после динамического обновления).

 

Заключение

 

Итак, несмотря на достаточно существенный разрыв в технологиях, в архитектуре, разработке, стабильности, который 1С пока не удаётся сократить, функционал в 1С существенно проигрывает, пожалуй, только в блоке производства. А в некоторых вопросах (БУ, Отчетность) 1С явно “лицом к пользователю” в отличие от DAX. Вопросы аудиторского следа, изменения проведённых и т.п. можно долго обсуждать и спорить.

Чего 1С точно не хватает, так это стабильности  работы и ООП для разработчиков. Если уже без ООП смогли создать почти не уступающее по функционалу решение (УПП), то при наличии такового, я думаю, “догнать по функционалу” Ax было бы вопросом нескольких лет, а за это время можно было бы и над стабильностью поработать. Но пока у 1С другие приоритеты – “мобильная платформа”, “красивые кнопочки” (это я про такси) и т.п. Ну, может, это и правильно. Дальше будет видно.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Вова Вишин (Tahallus) 29.08.13 22:10
Спасибо, интересно было почитать.
Когда-то 2 года работал программистом Navison, система чем-то похожа на Axapta только хуже ))

Если есть возможности интересно было бы почитать сравнение 1С с Oracle.
2. Владимир (hogik) 29.08.13 23:48
(0)
Олег.
Ставлю "плюс" тут:
+
:-)
3. Олег Филиппов (comol) 29.08.13 23:49
(1) Tahallus, c Oracle? Зачем? Oracle EBS стоит как SAP только в SAP платят за "десятки лет истории" а в Oracle за что? По SAP-у напишу наверное... если сама тематика интересная... сейчас сталкиваюсь, есть там о чём написать :). а Oracle я как то воспринимаю как Oracle Database :)
4. Олег Филиппов (comol) 29.08.13 23:50
(2) hogik, Владимир, ну "+" от Вас это я сразу за 10 считаю :)
5. Саня Офигенски (AlexProg) 30.08.13 07:43
Отличный анализ. Молодец.
Однако, я бы все-таки указал еще:
* Анализ стоимости продукта и лицензий
* Анализ стоимости решений, наличие таких решений, адаптированных под конкретный учет
* Анализ стоимости внедрения
* Анализ GUI, адекватность и доступность операций
* Нагрузочные тесты (хотя бы из рекламы), анализ скорости, максимум юзеров.
* Саппорт и документация продукта, среды разработки, решений, обучение, а потом лечение и т.д.
6. Олег Филиппов (comol) 30.08.13 09:07
(5) AlexProg, спасиб, допишу наверное, стоимость продукта- тоже интересное там кое-что есть.
Решений в Ax нет.... это же самое по себе уже решение, а не платфома. Стоимость внедрения... ну вы сами понимаете :). про GUI написал вроде. А вот про документацию что-то упустил... в Ax с ней не очень.
7. Роман Мишкин (smilejka) 30.08.13 09:41
Даже без анализа тех пунктов, которые написал AlexProg превосходная статья, отличное изложение.
Я много нового узнал для себя. Автору спасибо и однозначно +
8. Сергей Куликов (ksvd) 30.08.13 10:06
Очень нравятся такие статьи, полезно для общего развития. Спасибо
9. Евгений Мадонов (madonov) 30.08.13 10:31
Интересно было почитать - плюсанул, но материл больше для общего развития.
В наших реалиях специалистов по обслуживанию 1С найти гораздо проще, а вот поиск спеца по MS Dynamics Ax - ад для HR, и это уже делает невозможным переход сколь либо существенной части предприятий на эту платформу.
10. Alex Stasyuk (GreenFox) 30.08.13 12:39
По поводу:

Было бы интересно сделать подобное решение по хранению остатков в 1С, на регистрах сведений, но пока руки не доходят.

Можете посмотреть конфигурацию Axelot WMS:Оперативное управление производством - там это реализовано - причем из соображений производительности
11. Alex Stasyuk (GreenFox) 30.08.13 12:49
А ведь то же самое можно делать и в 1С. Просто мы редко об этом задумываемся. В 1С есть объект “Подсистема”, кроме назначения, которое он приобрёл в 8.2 осталось ещё назначение, которое было в 8.1. Для этого достаточно не ставить галку “Включать в командный интерфейс”. При этом все объекты которые вы добавили или изменили вы можете включить в эту подсистемы, а в дереве метаданных применить “фильтр по подсистемам”. Но многие ли из интеграторов это делают?

За идею спасибо большое - буду делать, думаю поможет сильно!
12. Alex Stasyuk (GreenFox) 30.08.13 12:58
По поводу производства - посмотрите MES: Оперативное управление производством
Функционал там продвинутее чем УПП и возможно в чем то схож с Ах
13. Alex Stasyuk (GreenFox) 30.08.13 13:01
По поводу производства - посмотрите MES: Оперативное управление производством
Функционал там продвинутее чем УПП и возможно в чем то схож с Ах

А в целом статья понравилась - всегда интересно посмотреть продукты "конкурентов". Спасибо большое автору за статью и за идеи.
14. Сергей Борисов (juntatalor) 30.08.13 14:07
С появлением БСП в 1С данная возможность тоже присутствует для многих объектов, но далеко не для всех. Стоит только вспомнить требование для каждого объекта к которому хотите прикреплять файлы нужно создать отдельный справочник:


В БСП 2.0 функционалом файлов не пользовался, а в 2.1 достаточно добавить табличную часть, если не ошибаюсь.
15. Walter (WalterMort) 30.08.13 14:20
классический подход: “сначала подумать о том какие данные, где, как и для чего мы храним а уже затем какая логика должна для них присутствовать”

или "данные первичны, а операции пользователя вторичны".

Хреновый подход, который породил уродские интерфейсы 90-х 2000-х годов.
bulpi; absolutblohin; +2 1 Ответить 2
16. Олег Филиппов (comol) 30.08.13 14:26
(10) GreenFox, "причем из соображений производительности" - слышал я про производительность... когда 1С в регистр сведений кластерный индекс добавили :)). По-моему там другой принцип немного у них...
17. Олег Филиппов (comol) 30.08.13 14:28
(12) GreenFox, Где посмотреть? 1clive или 1cair они есть? DAX то один... :(
18. Олег Филиппов (comol) 30.08.13 14:29
(14) juntatalor, УТ 11.1 там вроде уже БСП 2.1.. по-прежнему файлы отдельно
19. Олег Филиппов (comol) 30.08.13 14:33
(15) WalterMort, В SAP, Oracle, DAX как раз такой подход :)))) другой подход к примеру.. ну... в новом интерфейсе на инфостарте :)))), но для Web сайта он как раз хорош и то сколько криков вызвал...
20. Hany (Hany) 30.08.13 16:28
Пробежала глазами статью, отличная работа! Всегда хотелось увидеть именно подобное сравнение со скриншотами!
Остался один вопрос. А как насчет таких вещей, как субконто на плане счетов? Можно ли в ГК добавлять множество аналитик и есть ли вообще такое понятие, как субконто? И если есть, то в каком режиме - пользователя или же разработчика?
Например, САП в модуле FI не поддерживает субконто, т.е. там каждый контрагент - новый субсчет.
Спасибо!

21. Владимир (hogik) 30.08.13 18:34
(15)

"Хреновый подход, который породил уродские интерфейсы 90-х 2000-х годов."(с)

Этот "хреновый" подход позволяет "породить" систему с содержанием, а не только с формой. :-) И без лоскутной АвтоМехАнизации с вечными конверторами данных и поиском способов организовать модульную систему, там где её и быть не может - в 1С-продукте.
TaTaPuH-Magic; Арчибальд; comol; +3 Ответить
22. Ivan Kovtun (i.kovtun) 30.08.13 20:38
"С появлением БСП в 1С данная возможность тоже присутствует для многих объектов, но далеко не для всех. Стоит только вспомнить требование для каждого объекта к которому хотите прикреплять файлы нужно создать отдельный справочник:"

Если использовать подсистему "Работа с файлами" то можно хранить файлы в справочнике "Файлы". Подробнее можно посмотреть на ИТС в разделе "Внедрение подсистемы «Работа с файлами» вместе с подсистемой «Присоединенные файлы»". В УНФ, например, нет справочников [Объект]ПрисоединенныеФайлы. Но, все равно, хотелось бы узнать, по каким соображениям разработчики БСП решили добавить возможность хранить файлы в разных справочниках.
23. Андрей (Krasnyj) 30.08.13 23:16
Плагиат фиксина, товарищи.
24. Олег Филиппов (comol) 31.08.13 00:39
(23) Krasnyj, Клевета в статьях общее только пожалуй название... а в системах - только вендор. Прочитайте внимательнее в самом начале статьи писал что к чему.
25. Осипов Сергей (fixin) 31.08.13 01:51
26. Осипов Сергей (fixin) 31.08.13 01:52
отлично, молодца. И никакой это не плагиат.
TaTaPuH-Magic; vlad.frost; Арчибальд; Ish_2; comol; +5 Ответить
27. Tsaregorodtsev (TSSV) 31.08.13 09:17
Понравилось, плюс. Я бы изменил немного название статьи "1С VS MS Dynamics AХ. Чем мы лучше?". А минусы в статье и так раскрыты, но, как говорится - "Наши проблемы - это наши точки роста!"
28. BobaG (bobaG) 31.08.13 09:32
Спасибо. Познавательно.
29. anry mc (AnryMc) 31.08.13 10:54
30. anry mc (AnryMc) 31.08.13 11:00
Чем “Мы” хуже?

Переменнчивостью и неоднозначностью правового поля...

Не успел одно "вылизать" уже надо преределывать...

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

Еще не видел ни одной "буржуйской" системы с более менеее нормальной ЗП и налоговым учетом...
31. Герман (German) 31.08.13 15:12
(4) Олег, что за херню ты написал в разделе Хранение конфигурации?
32. Олег Филиппов (comol) 31.08.13 20:05
(31) German, ээ... а в каком смысле? Я где-то ошибаюсь по поводу того как 1С использует файл конфигурации, ну поправь тогда в чём? Я же его "по кусочкам не расковыривал" могу где-то ошибиться :(. А если ты про сам подход - готов подискутировать. "Единый cf файл" это по-моему вообще беда 1С. По-моему ни одна нормальная система так свои метаданные не хранит. На недельке, думаю, посмотрю как это в SAP сделали, вряд ли так же мне кажется один cf файл это раритет :(
33. Герман (German) 31.08.13 21:30
(32)в рабочем состоянии на сервере нет единого конфигурационного файла, cf файл это результат экспорта метаданных. Посему данный пункт притянут за уши очень грубо.
34. Василий Казьмин (awk) 01.09.13 01:03
(33) German, От разбора конфигурации сервером на составные части, разработчику легче не становится. С набором отдельных файлов связанных тем или иным образом работать куда проще. То, каким образом 1С построила свою архитектуру, делает модульное тестирование практически невыполнимой задачей. То есть затраты на построение тестов сравнимы (если не превышают) затраты на разработку. Все что есть в 1С ценного - это готовые прикладные решения. При написании с нуля затраты на проект и пост проектное сопровождение сопоставимы с затратами проектов на VB, C# или JAVA.
35. Евгений Пономаренко (Evgen.Ponomarenko) 01.09.13 01:22
(32) comol,
(31) German, ээ... а в каком смысле? Я где-то ошибаюсь по поводу того как 1С использует файл конфигурации, ну поправь тогда в чём? Я же его "по кусочкам не расковыривал" могу где-то ошибиться :(. А если ты про сам подход - готов подискутировать. "Единый cf файл" это по-моему вообще беда 1С. По-моему ни одна нормальная система так свои метаданные не хранит. На недельке, думаю, посмотрю как это в SAP сделали, вряд ли так же мне кажется один cf файл это раритет :(


А вот с этого момента пожалуйста, по подробнее... Статья - просто улет! Съекономили целую жизнь! но единый cf - это мега достижение... вы батенька со сборками dll и bpl под oracle дела не имели? а я имел! а компилить этот зоопарк под Delphi пробовали? - вряд ли! Когда на одной машине заводишь 3 виртуальных стола под Delphi 4,5,6.
И при этом модули ЗП собираешь, по любому, на компе подчиненного сотрудника. Неееее единый сf - это СИЛА!
36. ZLENKO.PRO (ZLENKO) 01.09.13 08:49
Отличная статья. Особенно отчеты в Ax впечатлили :-( Я в 2004 году немного "ковырял" Ax 3 - поплевался и "забил" на нее. Очевидно что УУ в 1С "слизан" с Ax как минимум идеи оттуда. Ничего такого чтобы впечатлило в Ax не увидел. Хотелось бы возможностей непосредственной работы с данными в 1С, но думаю этого не случится никогда по понятным причинам. Вобщем не увидел в Ax ничего такого о чем бы я мечтал в 1С. Ну разве что хотелось бы возможности слоев, но без ООП в 1С я не представляю как их реализовать.
37. Gagash Malygin (gagash) 01.09.13 12:31
38. Олег Филиппов (comol) 01.09.13 15:38
(33) German, Герман, "моя твоя не понимать". На всякий случай сделал пустую базу, запустил... при вотором запуске посмотрел в профайлер. Ещё как обращается он к файлу конфигурации. Притом не один раз. Зачем столько запросов к таблице Config не знаю, но то что BinaryData это вроде и есть сам cf файл (или его часть).

Или ты про сервер 1С писал, а я про SQL?...

P.S. как картинку в текст встроил? У меня что-то теперь ни кнопки цитат ни картинок не работают :(.
Прикрепленные файлы:
39. Олег Филиппов (comol) 01.09.13 15:44
(35) Evgen.Ponomarenko, с dll и bpl на delphi прошла вся школьная жизнь :). Тут о другом немного.... дело не в том едином хранении всех программных модулей - это "+" а в формате хранения... не должно быть бинарника, в который всё собрано, который понимает только 1С и никто более... и который надо "разархивировать" ещё чтобы использовать...
40. Евгений Пономаренко (Evgen.Ponomarenko) 01.09.13 19:36
(39) comol,
Сейчас 8.3 позволяет выгружать и загружать структуру конфигурации в формате xml(пока в режиме beta). Ваши пожелания касались этой возможности, или у Вас есть какие-то более глобальные идеи?
41. Василий Казьмин (awk) 01.09.13 21:46
(35) Evgen.Ponomarenko, [quote]cf - это мега достижение...[/quote] Достижение чего? Достижение невозможности поставки частей кроме как в составе целого? Возьмем БСП. Вроде очень интересная и архиважная вещь. Но попробуйте часть ее объединить с текущей конфигурацией и... И как минимум пойдете на ИТС читать, что надо, а что не надо. Вся идея в разделении сложной архитектуры на простые составляющие ушла в ...
comol; hogik; +2 Ответить 1
42. Олег Филиппов (comol) 01.09.13 22:38
(40) Evgen.Ponomarenko, Возможность выгрузки в xml это одно, а внутренняя структура хранения это другое.
Вот если бы в форме XML внутри хранились метаданные в специальном наборе таблиц и уже с типом "xml" с которым MS SQL куда быстрее работал... ну или вообще отдельно на сервере 1С... Ну и соответственно с этими табличками и файлами какой-нить отдельный интерфейс работы... Это бы позволило не хранить отдельный хотя бы клиентский кэш метаданных, если к каждой таблице привязан отдельный файл с метаданными то нет проблем их считать при обращении, соответственно нет проблем, к примеру, конфигурацию обновить без монопольной блокировки, не нужно каждый раз кэш разворачивать, проверять на валидность и т.п. можно организовать слои, можно организовать модульность.... много ещё чего можно...
CratosX; awk; +2 Ответить 1
43. Евгений Пономаренко (Evgen.Ponomarenko) 02.09.13 00:37
(39) comol,
<QUOTE>с dll и bpl на delphi прошла вся школьная жизнь</QUOTE>
повезло вам, моя школьная жизнь прошла на рассвете z-80. Машинные коды, asm. Война с админом из универа
за право контролировать root школьного ДВК-3. Хотелось бы заметить, что Delphi и Delphi+Oracle - разный уровень. Ну да ладно... просто навеяло.
44. Евгений Пономаренко (Evgen.Ponomarenko) 02.09.13 02:05
(41) awk, (42) comol
Давно слежу за Вашим творчеством. Уважаю.
Поверьте - мой опыт, где-то соизмерим с Вашим. Просто он другой...в силу естественных на то причин.

Мне кажется, что сейчас Вы путаете достижение платформы и отсутствие системного подхода в разработках стандартных конфигураций. Как по мне БСП - полный отстой, хотя в некотором смысле это и определенный шаг вперед. От хаоса к системному хаосу. Честно говоря не понимаю зачем делать вызовы типа функция1(Функция2(Функция3(Функция4(Функция5(X,Y))))) когда после декомпозиции функций и нормализации их структуры достаточно вызвать Функция1Нормальная(Функция2Нормальная(X),Функция3Нормальная(Y)).

Поверьте мне наслово: Платформа не виновата, что до сих пор нет математически строгой экономической модели предприятия. Её нет ни в Oracle, ни в SAP-R3, ни в Axapte, ни в Галактике (и др.) Адекватной математической модели нет нигде! Я уже 15 лет слежу за рынком в надежде найти достойную альтернативу. Чего мне не хватало - это информации по Axapte. comol Вам большое спасибо за труд.

В своё время меня угораздило внедрять УТП в одной конторе. Причем к тому времени у меня уже был успешный опыт внедрения УТП и УПП. Это был шок. УТП пришлось выбросить на помойку. И написать все с нуля. Мне неслыханно повезло с постановщиком задач - он оказался математиком и экономистом в одном флаконе. Мы за три месяца разработали модель. За год удалось реализовать проект. Как ни странно любая учетная задача решается всего на 7-ми регистрах накопления, практически без программирования. Четыре года ушло на шлифовку конструкторов проводок, модулей и отчетов.

Два года назад начал искать конфигурации, которые отвечают моему виденью и потребностям. Искал среди типовых конфигураций 1С. Ближе всего подошла "Управляющий 2.0".Разбирая на запчасти "Консолидацию" реально валялся под столом, со смеху. Это ж как pricewaterhousecoopers развела на бабки 1с! Просто красавцы, впрочем они многих уделали.

В результате анализа конфигураций 1С, не претендую на объективность, но лучшими я считаю ИТАН: УПРАВЛЕНЧЕСКИЙ БАЛАНС http://www.finprosoft.ru/ub2.shtml и "Скат профессионал" http://infostart.ru/public/199013/
уж не сочтите за рекламу. Но у Итана, есть кейсы в том числе содержащие наиболее адекватную (но не идеальную) экономическую модель. А у Ската, есть мета-конфигуратор, который реализует концепцию неразрушающего конфигурирования. У Ската лучше бухгалтерский и оперативный учет, а у Итана лучше управленческий финансовый и бюджетирование. Итан внедряется в любую конфигурацию

Лично как по мне СКАТ+ИТАН - это Бомба.

comol большое Вам Человеческое Спасибо. Пока писал вам ответ, понял, что СКАТ и ИТАН просто созданы друг для друга.

sacred; vasyak319; aleXoid83; Artem N; +4 Ответить 1
45. Евгений Пономаренко (Evgen.Ponomarenko) 02.09.13 02:09
<QUOTE>1С VS MS Dynamics Ax. Чем “Мы” хуже?</QUOTE>
Получается, что мы не хуже, а лучше! У 1с потенциал больше. Главное понять в чем!
46. Stepan Shipitsyn (Stepan_1c) 02.09.13 04:28
спасибо автору за труды. а на хабре заминусовали бы наверно :)
47. Виталий Быков (sick_russian) 02.09.13 04:33
Спасибо за статью. Вот появилась бы она 3 месяца назад, когда я курсовую по аксапте писал))
48. Ярослав Программист (ZyZer) 02.09.13 08:46
Проблема не в крутизне, не в технологиях, а в размере откатов "специалистам", которые принимают решение на чем строить систему. 1С, Галактика, Axapta, SAP, "что-то-еще"?
Цирк начинается потом, когда "внедрили"....
sfol; Invodev; bulpi; German; comol; +5 Ответить 1
49. ффф ыыы (zqzq) 02.09.13 08:47
Кстати, то что в Ax все данные в одном месте (бух. проводки) это супер плюс. А то 1С разведёт зоопарк регистров под каждый отчет, и потом в каждом свои данные, да и анализ движений документа становится адом. (Правило информационной системы: "Если одни и те же данные хранятся в 2-х местах, через неделю там будут разные данные" (с))
lx@; TaTaPuH-Magic; bulpi; +3 Ответить
50. Ярослав Программист (ZyZer) 02.09.13 08:54
Забыл сказать - за статью спасибо
51. Олег Филиппов (comol) 02.09.13 09:53
(44) Evgen.Ponomarenko,

"функция1(Функция2(Функция3(Функция4(Функция5(X,Y)))))" - Это попытка сделать ООП без ООП, я же писал :)

"БСП - полный отстой" -1. БСП это шаг вперёд.. без ООП на уровне платфомы это видимо лучшее что получилось сделать.

"Адекватной математической модели нет нигде" :))). А оно вам надо? :)) К примеру сейчас куча математиков пытаются построить математическую модель нейронной сети, и доказать что она работает. А куча разработчиков её просто используют :)

Что касается ИТАН-а... смотрел, анализировал, но для себя в нём ничего не нашел... не дотягивает до Инталева с БИТ-ом... ИМХО конечно... тут каждому своё.
52. Олег Филиппов (comol) 02.09.13 09:54
(48) ZyZer, "Ну вот, пришел поручик Ржевский и всё опошлил" :)))
53. Ярослав Программист (ZyZer) 02.09.13 11:37
(52) Я не со зла, просто видел и такое. Правда сейчас, в период кризиса, владельцы бизнесов гораздо винмательнее следят за этими процессами.
По существу, на мой взгляд 1С сейчас очень не хватает решений регионального и федерального уровня, а существующие решения уж слишком громоздки и неповоротливы, если их выводить на большие объемы. А зарубежные аналоги плохо адаптированы к "российской неопределенности".
54. Герман (German) 02.09.13 11:51
55. Олег Филиппов (comol) 02.09.13 12:02
(54) German, Ага... особенно актуально с учетом того что табличка config пустая в пустой базе :). Видимо в этих запросах "скрытый сокральный смысл" заложен :)))
56. Герман (German) 02.09.13 12:07
(55)Я же тебе подарил Ei :) не просто так, неси знания в массы :)
57. Евгений Пономаренко (Evgen.Ponomarenko) 02.09.13 13:12
(51) comol,
<QUOTE>"Адекватной математической модели нет нигде" :))). А оно вам надо? :)) К примеру сейчас куча математиков пытаются построить математическую модель нейронной сети, и доказать что она работает. А куча разработчиков её просто используют :)</QUOTE>

История №1
Жил-был программист. Реальный человек - работал на машиностроительном заводе, в какой бы системе программирования не работал - всегда заканчивал тем, что разрабатывал свой конструктор приложений. Была проблема: Как сделать так, чтобы гусиницы у танков не слетали с катков на полном ходу. Программист был знатным математиков - разработал мат. модель,запрограммировал её. Промоделировал варианты. И выдал оптимальный результат. С тех пор наши танки "Летают", а зарубежные только ползают.

История №2, Развал Советского Союза. Накрывается медным тазом "НИИ Кондиционер". Спустя 10 лет на металлолом идут 2 уникальных, единственных на союз аэродинамических стенда для испытаний промышленных вентиляторов. Их выкупает за свои деньги одна из лабораторий НИИ.
5 лет пытаются восстановить методику испытаний с помощью бывших сотрудников НИИ - тщетно. В итоге уже директору ООО «Вентиляторный завод Укрвентсистемы» пришлось самому сесть и разобраться в методике испытаний. Нас пригласили написать программу по обработке результатов испытаний. В итоге характеристики
испытаний идеально сделанных вентиляторов не соответствует ГОСТ-ам. Формулы - на трех листах А4.
Поди проверь! В итоге, оказалось, что начиная с 70 годов институт только и занимался, что приписками.
Учитывая сложность расчетов академики вписывали поправочные коэффициенты на влажность воздуха, атмосферное давление, температуру воздуха то в начало формулы, то в конец, то в середину в различных комбинациях,защищая докторские. А аэродинамические характеристики уже рисовали по лекалам от руки, как надо.

PS
Методику восстановили. Стенд работает. Фото здесь http://ukrvent.ua/zaschita_potrebiteley.html
Но с тех пор я следую принципу "Хочешь сделать хорошо - сделай сам!". Это хорошо, что пример касался техники. В экономике доказать несостоятельность мат. модели практически не возможно. Можно только лицезреть результаты внедрений.
До сих пор вспоминаю золотые слова зав. кафа экономического факультета: "Запомни студент! Экономика как дышло - куда подуешь, туда и вышло."




58. Алексей Белоусов (AllexSoft) 02.09.13 13:14
Спасибо за статью! comol как всегда молодец! хотелось бы продолжения
59. Игорь Исхаков (Ish_2) 02.09.13 13:26
(0) Мало что понял. Но люди говорят , что Олег - молодец. Присоединяюсь.
60. Олег Филиппов (comol) 02.09.13 14:14
(59) Игорь, спасибо. Рад что ты тоже "отметился" и никуда не пропадаешь с инфостарта :)
61. Олег Филиппов (comol) 02.09.13 14:21
(57) Evgen.Ponomarenko, математика хороша вмеру. И мера эта находится очень недалеко. Как часто вы считали интеграл по поверхности, решали дифуры, строили реды, использовали другие распределения кроме нормального? А эти знания только 1 курс вуза :)

А какая математическая модель предприятия, если даже себестоимость посчитать решением СЛУ только недавно задумались и половину людей, кстати, это не устраивает :)))

62. Евгений Пономаренко (Evgen.Ponomarenko) 02.09.13 14:33
(51) comol,
<QUOTE>без ООП на уровне платфомы это видимо лучшее что получилось сделать.</QUOTE>
согласен, но наличие ООП не гарантирует системного мышления у программиста, впрочем тот кто мыслит системно, мыслет так и без ООП. Отсутствие ООП делает 1с гибче, в этом есть свой плюс.
63. Serg Nyk (sergnik) 02.09.13 14:36
Удобство разработки
1) В DAX Нормальная ситуация, когда у вас открыто 2 AOT и между ними вы “перетаскиваете” объекты.
В 1С так можно работать только открыв 2 конфигуратора, подключенных к одному хранилищу. Но удобство такой работы в принципе вызывает сомнения.

А я так делал в двух любых конфигурациях, открытых рядышком)
i.kovtun; German; +2 Ответить 2
64. Евгений Пономаренко (Evgen.Ponomarenko) 02.09.13 14:58
<QUOTE>Что касается ИТАН-а... смотрел, анализировал,
но для себя в нём ничего не нашел...
не дотягивает до Инталева с БИТ-ом... ИМХО конечно... тут каждому своё.</QUOTE>

За Инталевым слежу уже 10 лет. Можно сказать вырос на их сайте. Устал ждать от них результата.
У Итана все есть, что нужно. Одно дело раскрутить Бренд, другое дело результативные внедрения.
Честно не было удовольствия увидеть рабочие внедрения. А вот что люди действующие
под маркой "Инталев" не могут внедрить продукт. Для меня это факт.

В любом случае, Вам за Ваш труд - респект. Приятно было познакомиться.
65. Женя Ткаченко (zhenyat) 02.09.13 16:01
Очень нитересно, спасибо
66. Олег Филиппов (comol) 02.09.13 16:22
(64) Evgen.Ponomarenko, " А вот что люди действующие
под маркой "Инталев" не могут внедрить продукт. Для меня это факт." для меня тоже факт :)))

Просто сам продукт при этом хороший. может внутри где-то криво написаный и не самый быстрый, но внешне по функционалу всем остальным пока до него далеко. но это скорее к другой моей публикации обсуждение: http://infostart.ru/public/167651/ писал там и про ИТАН и про Инталев :)
67. Олег Филиппов (comol) 02.09.13 16:24
(62) Evgen.Ponomarenko, "Отсутствие ООП делает 1с гибче, в этом есть свой плюс.". О_о
"щас будет драка" ©. Сначала вот сюда: http://rutracker.org/forum/viewtopic.php?t=3343958 - качать и от корки до корки. А потом ещё раз обсудим ООП :)))
68. Олег Филиппов (comol) 02.09.13 16:25
(63) sergnik, Ну респект, но вот только думается мне что не многие так делали :)
69. Олег Филиппов (comol) 02.09.13 16:29
(65) zhenyat, О, первый коммент от девушки за историю статей на Инфостарте :). "Они существуют" (с)
70. Василий Казьмин (awk) 02.09.13 16:47
(62) Evgen.Ponomarenko, (67) comol, Драку заказывали? ООП - это круто, но бездумное наследование ведет к росту классов в геометрической прогрессии. Что негативно сказывается на архитектуре приложения в целом. Так что если быть фирме 1С последовательной (платформа на которой может писать и дебил начинающий), то не надо там наследования. А какое без него ООП?
71. Олег Филиппов (comol) 02.09.13 16:59
(70) awk, Ну тогда не жалуйтесь на конструкции вида функция1(Функция2(Функция3(Функция4(Функция5(X,Y))))) в БСП и на 3000 строк кода в РСВ. Я уж не знаю что должен покурить "начинающий" чтобы в этом разобраться :). Индусы были бы рады программировать на 1С :). А то им ООП портит жизнь и снижает з/п :)
72. Василий Казьмин (awk) 02.09.13 17:14
(71) comol, А как вам такая конструкция?

Класс_1 <|-- Класс_2 <|-- Класс_3 <|-- Класс_4 <|-- Класс_5 <|-- Класс_6

Класс_1 : Функция_1
Класс_2 : Функция_1
Класс_3 : Функция_1
Класс_6 : Функция_1

Как пойдет вызов функций? Если "<|--" наследование, а ":" определение.
73. Гость 02.09.13 17:20
Спасибо, познавательно.
Думаю, значение ООП для таких высокоуровненвых систем несколько преувеличено. Навскидку, кто приведет пример сколько раз в какой-нибудь типовой (или в своей нетленке) можно использовать, например, наследование справочника или документа (и кстати, эта ведь та же самая таблица) с повторным использованием кода/данных процентов на 50 хотя-бы в трех потомках?
Прикрепленные файлы:
74. visual fox (mrvisualfox) 02.09.13 17:34
(72) awk, Согласен, если у разработчика в голове каша, ему никакое ООП не поможет.
И, сообственно, почему в 1С нет ООП? Есть оно, только нам разрешают наследование в один уровень :)
75. Василий Казьмин (awk) 02.09.13 17:46
(74) mrvisualfox, Там прототипирование в один уровень, а не наследование. Что кстати во многих случаях (а особенно в языках с динамической типизацией) более выгодно нежеле наследование.
76. Олег Филиппов (comol) 02.09.13 17:49
(72) awk, Дело в том что прикладной разработчик в таком примере работает только с классом 6 и все методы может переопределить только в классе6, а может наследовать свой класс и переопределить нужные методы. ТОлько если есть необходимость вмешаться в повидение всей системы - спускается на класс ниже
77. Олег Филиппов (comol) 02.09.13 17:59
(74) mrvisualfox, Да ну... вот начинаем разработку "с 0". Понимаем как должен выглядеть документ, какие кнопки должны быть - доп реквизиты, доп печатные формы, нумерация и т.д. и т.п. - рисуем шаблон документа, подгоняем его под принятые на проекте методики. Далее разрабатываем "по образу и подобию" - копируя код все остальные документы... а потом.... а потом вспоминаем что кое-что забыли... и что вы будете делать? Правильно - прописывать в каждом документе код... Да даже когда не с 0.. сколько раз вы встраивали себе в конфигурации разные "фичи" - переходили на "управляемые блокировки", на "новую методику проведения" и т.п. и каждый раз это переписывание всей конфы... просто мы уже привыкли... сделали кучу шаблонов http://infostart.ru/public/89310/, используем парсеры http://infostart.ru/public/193387/, быстрее пишем код со снегопатом http://infostart.ru/public/102065/ и всё ждём ждём... пока разработчики платформы перестанут страдать фигнёй вроде интерфейса такси http://infostart.ru/public/190174/ или мобильной платформы http://v8.1c.ru/overview/Term_000000818.htm :), и озаботится о технологической части внутренностей платформы...
vasyak319; AlexO; +2 Ответить 4
78. visual fox (mrvisualfox) 02.09.13 18:00
(76) comol, ну предыдущие 5 классов кто-то всё равно должен разработать...
Всё-таки, есть примеры сколько раз в какой-нибудь типовой (или в своей нетленке) можно использовать, например, наследование справочника или документа (и кстати, эта ведь та же самая таблица) с повторным использованием кода/данных процентов на 50 хотя-бы в трех потомках?
79. Василий Казьмин (awk) 02.09.13 18:02
(76) comol, Дело в том, что прикладной разработчик в случае без наследования видит в отладчике весь стек вызова, а в случае с классами он этот стек может и не видеть. Другое дело, что в языках которые поддерживают наследование есть модульное тестирование которое спасает на ранних этапах.

Пример:

public interface IBuilder<T> {
    T create() throws SQLException;

    public void appendWorld(String toString) throws SQLSyntaxErrorException;

    public void appendStar() throws SQLSyntaxErrorException;

    public void end() throws SQLSyntaxErrorException;
    
    public void appendName(String source, String name, String alias) throws SQLSyntaxErrorException;

    public void appendOp(String op) throws SQLSyntaxErrorException;
}
...Показать Скрыть



public class AbstractBuilder<T> implements IBuilder<T> {

@Override
public T create() throws SQLException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void appendWorld(String toString) throws SQLSyntaxErrorException{
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}


@Override
public void end() throws SQLSyntaxErrorException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void appendName(String source, String name, String alias) throws SQLSyntaxErrorException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void appendOp(String op) throws SQLSyntaxErrorException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void appendStar() throws SQLSyntaxErrorException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

}



public class SelectBuilder extends AbstractBuilder<Select> {
private static final String SELECT = "SELECT";
private static final String FROM = "FROM";
private static final String WHERE = "WHERE";
private IBuilder<?> builder = this;
private final FielsBuilder fielsBuilder;
private final TablesBuilder tablesBuilder;
private final WhereBuilder whereBuilder;
private final FileHelper helper;

public SelectBuilder(FileHelper helper) {
this.helper = helper;
tablesBuilder = new TablesBuilder();
fielsBuilder = new FielsBuilder();
whereBuilder = new WhereBuilder();
}

@Override
public void end() {
builder = this;
}

@Override
public void appendWorld(String aString) throws SQLSyntaxErrorException {
if(aString.toUpperCase().startsWith(SELECT)) {
builder = fielsBuilder;
} else if(aString.toUpperCase().startsWith(FROM)) {
builder = tablesBuilder;
} else if(aString.toUpperCase().startsWith(WHERE)) {
builder = whereBuilder;
} else if(builder!=null) {
builder.appendWorld(aString);
} else {
throw new SQLSyntaxErrorException("?"+aString);
}
}

@Override
public Select create() throws SQLException {
Select select = new Select(helper, fielsBuilder.create(), tablesBuilder.create(), whereBuilder.create());
return select;
}

@Override
public void appendStar() throws SQLSyntaxErrorException {
if(builder!=this) {
builder.appendStar();
return;
}
throw new SQLSyntaxErrorException("?*");
}

@Override
public void appendName(String source, String name, String alias) throws SQLSyntaxErrorException {
if(builder!=null) {
builder.appendName(source, name, alias);
} else {
super.appendName(source, name, alias); //To change body of generated methods, choose Tools | Templates.
}
}

@Override
public void appendOp(String op) throws SQLSyntaxErrorException {
if(builder!=null) {
builder.appendOp(op);
} else {
super.appendOp(op); //To change body of generated methods, choose Tools | Templates.
}
}



}




public class FieldsBuilder extends AbstractBuilder<List<Field>> {

private final List<Field> fields = new ArrayList<>();

/**
*
* @param parent
*/
public FieldsBuilder() {
}


@Override
public void appendStar() throws SQLSyntaxErrorException {
fields.add(new Field(null, "*", null));
}



@Override
public List<Field> create() {
return fields;
}

@Override
public void appendName(String source, String name, String alias) throws SQLSyntaxErrorException {
fields.add(new Field(source, name, alias));
}




}


Есть интерфейс IBuilder. Есть заглушка AbstractBuilder. Есть класс SelectBuilder который занимается перенаправлением к FieldsBuilder и пр. Если в IBuilder добавить метод, определить его в AbstractBuilder и в FieldsBuilder, то когда выскачит исключение UnsupportedOperationException в AbstractBuilder в стеке вызовов мы ни слова не увидим о SelectBuilder.
80. Евгений Пономаренко (Evgen.Ponomarenko) 02.09.13 18:04
(67) comol,
<QUOTE>О_о "щас будет драка" © </QUOTE>
Главное успеть пока не прибыли гвардейцы кардинала... Пошел читать...

Большая просьба к awk: "Олега мне оставишь?"
81. Василий Казьмин (awk) 02.09.13 18:06
(77) comol, В приведенном примере не требуется наследование. Можно обойтись старым добрым:

include МодульУниверсальногоДокумента;
82. Василий Казьмин (awk) 02.09.13 18:09
(79) awk, Перепутал Определить в SelectBuilder, а не увидим FieldsBuilder.
83. Евгений Сосна (pumbaE) 02.09.13 18:17
(63) sergnik, Достаточно открыть cf файл в одной и той же конфигурации.
84. Олег Филиппов (comol) 02.09.13 20:39
(81) awk, Ага... помню я чем это в 7.7 заканчивалось :)... Можно ещё написать Что-то типа: ВнешняяОбработка.Создать().ВыполнитьМетод().... и расстрелять потом такого разработчика :))
85. Олег Филиппов (comol) 02.09.13 20:50
(82) awk, Ну в примере вообще шаблоны классов и полиморфизм до них далеко даже DAX... уж что заикаться про 1С... нам бы хотя бы наследование и инкапсуляцию сделали... Но в любом случае... много вы (на C++) отлаживали классы MFC? И зачем? :)
86. Василий Казьмин (awk) 03.09.13 08:28
(84) comol, Тогда можно подумать надо всех проектирующих xml в джаве расстреливать надо.

SAXParserFactory factory = SAXParserFactory.newInstance(); 
SAXParser parser = factory.newSAXParser(); 
SAXPars saxp = new SAXPars(); 
 
parser.parse(new File("..."), saxp); 
...Показать Скрыть


За патерн фабрика.

(85) comol, У DAX все впереди. M$ обещал ее к VS прикрутить.

MFC. Как много в этом звуке, для си плюс плюсника слилось, Как много в нем отозвалось.

Эту библиотеку многие приводят как пример отсутствия ООП. На С++ уже лет семь не пишу и помню плохо. Но C#, Джава - да много раз сидел в отладчике.
87. Олег Филиппов (comol) 03.09.13 10:32
(86) awk, ну MFC я не как "показательное ООП" говорил... все помнят это жуткое BEGIN_MESSAGE_MAP ))) а про то что отладчиком там повесишься ковыряться, да и смысла в этом... проще уже переопределить самому методы.

Ну в примере они же не исполняемый код в XML-ки запихивают :), а только объект помещают, насколько я понял.

не знаю как в java, но в C# там уже готовые сборки, там базовые классы особо не поотлаживаешь.

Можно долго спорить, но и в C++ и в C# и в java полноценный ООП :), поэтому фраза что "оно нафиг не нужно нам" это как то странно звучит :)
88. Василий Казьмин (awk) 03.09.13 10:50
(87) comol, Не, не, не... Нужен. Вопрос нужно ли из процедурного языка делать ОО?

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

Кто сказал, что нельзя запихать код в XML, а потом его выполнить? Более того в джаве есть технология которая таким образом сериализует и востанавливает классы UI.
89. Олег Филиппов (comol) 03.09.13 11:04
(88) awk, "Не, не, не... Нужен".. ну вот "драки не получилось" :).
90. Александр Рытов (Арчибальд) 03.09.13 11:15
Статья замечательная. Во многих отношениях, перечислять не буду.
Но РАУЗ обойти не могу.
В западных системах РАУЗа (в УППшном варианте) в принципе не может быть, ибо складские перемещения на себестоимость товаров не влияют.
91. Maratimus Arslan (maratimus) 03.09.13 11:31
не волнуйтесь, к концу года выходит УП2.0 (ERP2.0)
там и маршруты и более детальный расчет себестоимости, и статусы заказов.
92. Василий Казьмин (awk) 03.09.13 11:40
(90) Арчибальд, У последовательности только один враг - это проведение задним числом. В зарубежных системах его победили, а в 1С нет. Поэтому, смысл в усложненном алгоритме?
93. Евгений Сосна (pumbaE) 03.09.13 13:18
(92) awk, в зарубежных системах, в зарубежных странах. В СНГ - это как подготовка к отопительному сезону или ремонт дорог, отрапортовали что победили , а по факту - "ой документ мы не можем изменить, а этот ящик со следующей поставкой докинем".
94. Олег Филиппов (comol) 03.09.13 13:19
(91) maratimus, И глюки, глюки, глюки :).... когда его ещё можно будет внедрять...
95. Олег Филиппов (comol) 03.09.13 13:22
(90) Арчибальд, я вот тоже думаю что им РАУЗ смысла не имеет по причине которую в (92) описали. Про складские перемещения не понял... :( вроде можно убрать аналитику "склад" или "область хранения" и не будут включаться, да и так по идее на расчет повлиять не должны...
96. Александр Рытов (Арчибальд) 03.09.13 13:51
(95) comol,
можно убрать аналитику "склад"
Т.е. нужно произвести некие действия, чтобы добиться элементарной вещи: себестоимость товара не зависит от его положения в пространстве.
97. Василий Казьмин (awk) 03.09.13 14:24
(93) pumbaE, Не понял.

В документе от NN.NN.NNNN коробок 6.
При получении оказалось коробок 5.

Допустим отправляли своими силами. Тогда. Кладовщик передал водителю 6 коробок (за что тот расписался).

Почему мы должны править документ?

Мы должны зафиксировать факт потери водителем одной коробки. (Получить от покупателя акт приема-передачи).

Создать еще один документ отгрузки (или добавить в существующий).

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

Где и что надо править задним числом?
98. Федор Логинов (Rico17) 04.09.13 05:50
Спасибо за статью.
Управленческой аксапте совсем хреново на российском рынке нормативно-отчетно-химическоцй отчетности ))))
Пожалуй разделение учетных потоков сильно помогло бы 1С продвнуться и технологически на фоне "западных" систем.

Ориентация на много сотне миллионную армию юзеров форева... )))))
99. Алексей Масалыгин (CnupT) 04.09.13 08:21
Тоже скажу спасибо. Периодически терзают сомнения, а ту ли дорогу выбрал, не стоило ли сунуться к МелкоМягким.... Выводы статьи обнадеживают, со временем все будет :-)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа