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

Управление - Управление проектом

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

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

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

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

Конечно нельзя не упомянуть, что на Инфостарте уже есть публикация на данную тематику: //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  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 практически любую информацию. Собственно, об этом уже написано //infostart.ru/public/165702/

 

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

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

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

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

 

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

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

image

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

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

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

 

Блокировки.

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

image

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

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

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

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

image 

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

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

 

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

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

 

Заключение

 

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

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

См. также

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

Если есть возможности интересно было бы почитать сравнение 1С с Oracle.
3. Олег Филиппов (comol) 3233 29.08.13 23:49 Сейчас в теме
(1) Tahallus, c Oracle? Зачем? Oracle EBS стоит как SAP только в SAP платят за "десятки лет истории" а в Oracle за что? По SAP-у напишу наверное... если сама тематика интересная... сейчас сталкиваюсь, есть там о чём написать :). а Oracle я как то воспринимаю как Oracle Database :)
2. Владимир (hogik) 421 29.08.13 23:48 Сейчас в теме
(0)
Олег.
Ставлю "плюс" тут:
+
:-)
4. Олег Филиппов (comol) 3233 29.08.13 23:50 Сейчас в теме
(2) hogik, Владимир, ну "+" от Вас это я сразу за 10 считаю :)
31. Герман (German) 933 31.08.13 15:12 Сейчас в теме
(4) Олег, что за херню ты написал в разделе Хранение конфигурации?
32. Олег Филиппов (comol) 3233 31.08.13 20:05 Сейчас в теме
(31) German, ээ... а в каком смысле? Я где-то ошибаюсь по поводу того как 1С использует файл конфигурации, ну поправь тогда в чём? Я же его "по кусочкам не расковыривал" могу где-то ошибиться :(. А если ты про сам подход - готов подискутировать. "Единый cf файл" это по-моему вообще беда 1С. По-моему ни одна нормальная система так свои метаданные не хранит. На недельке, думаю, посмотрю как это в SAP сделали, вряд ли так же мне кажется один cf файл это раритет :(
33. Герман (German) 933 31.08.13 21:30 Сейчас в теме
(32)в рабочем состоянии на сервере нет единого конфигурационного файла, cf файл это результат экспорта метаданных. Посему данный пункт притянут за уши очень грубо.
34. Василий Казьмин (awk) 681 01.09.13 01:03 Сейчас в теме
(33) German, От разбора конфигурации сервером на составные части, разработчику легче не становится. С набором отдельных файлов связанных тем или иным образом работать куда проще. То, каким образом 1С построила свою архитектуру, делает модульное тестирование практически невыполнимой задачей. То есть затраты на построение тестов сравнимы (если не превышают) затраты на разработку. Все что есть в 1С ценного - это готовые прикладные решения. При написании с нуля затраты на проект и пост проектное сопровождение сопоставимы с затратами проектов на VB, C# или JAVA.
kote; comol; +2 2 Ответить
102. bulpi bulpi (bulpi) 117 04.09.13 23:12 Сейчас в теме
(34) awk,

Десятки проектов, реализованных мною с нуля и поддерживаемых по несколько лет за суммы от несколько сот до 2 тыс. у.е....
На на VB, C# или JAVA ????
Ты фантаст.
105. Василий Казьмин (awk) 681 05.09.13 10:21 Сейчас в теме
(102) bulpi, Попробую тебя понять. Ты разработал, внедрил и поддерживаешь несколько (может много, может мало - не суть) решений для бизнеса на 1С. Бюджет этих решений не превышал 200-2000 убитых енотов?

Ничего, что автоматизация среднего бизнеса на 1С это минимум 50 000$(не берем кустарей и типовые поставил как есть)? Причем, этот бюджет можно освоить даже не открыв конфигуратор 1С.
116. bulpi bulpi (bulpi) 117 05.09.13 13:41 Сейчас в теме
(105)
"Ты разработал, внедрил и поддерживаешь несколько (может много, может мало - не суть) решений для бизнеса на 1С. Бюджет этих решений не превышал 200-2000 убитых енотов?"

Ну да (стесняясь и краснея) :)

"Ничего, что автоматизация среднего бизнеса на 1С это минимум 50 000$"
Ну , в такой классификации, я думаю, это был мелкий бизнес. Магазин - группа магазинов - фабрика - оптовый склад... - бухгалтерия... А с типовыми я не работал много лет, только в последние годы, когда стал работать на франча.
117. Василий Казьмин (awk) 681 05.09.13 14:15 Сейчас в теме
(116) bulpi, Боюсь бизнес был крупный, а разработка с нуля одним человеком.

Есть два продукта GantProject и MS Project. У этих продуктов схожий функционал, а бюджеты разные.


(115) Evgen.Ponomarenko, А в УТ 11 Как я написал. И подход у них более универсальный....
118. Евгений Пономаренко (Evgen.Ponomarenko) 512 05.09.13 15:42 Сейчас в теме
(117) awk,
А в УТ 11 Как я написал. И подход у них более универсальный....


Я не спорю... я просто забыл комментарий дописать.

Может я не всегда следую технике ООП, но предпочитаю следовать духу ООП.

В данном случае простота примера, должна была указать, что более безопастно
дать команду объекту пересчитать самого себя:

Об.ПересчитатьСуммуВПопугаях();

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

Стиль УТ11 мне известен. У него один минус... трудности в отладке.

Лично мне больше по душе простые, надежные решения.

Вечером я приведу другой, более универсальный код.
119. Евгений Пономаренко (Evgen.Ponomarenko) 512 06.09.13 09:46 Сейчас в теме
(117) awk,
<QUOTE>
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ</QUOTE>
ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ

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

Нашел похожий код в УТ11... ну так это ж другое дело!!!

Красивый код, и читается хорошо и отлаживается нормально. Мне кажется,
что в конкретно этом случае - лучшее враг хорошего, ООП туда лепить не стоит.

Но если очень хочется... то можно! :)))
"
Мне когда совсем становится тоскливо, я вспоминаю про команду Выполнить(<Строка>)
Там, что хочешь можно получить и полиморфизм и наследование...

Делов-то... Создаешь один справочник "МойМетод", одно поле неограниченной длины, пару реквизитов, что было чего наследовать.
Кидаешь на формуЭлемента ПолеТекстовогоДокумента Расширение=ВстроенныйЯзык и кодишь.

А потом по известной формуле:
СтруктураДействий.Вставить("ПересчитатьСумму", Новый Структура("Объект, Обработчик", ЭтотОбъект,
Справочники.МойМетод.НайтиПоНаименование("Документы.Реализация.ПересчитатьСуммуВПопугаях",истина)));

А если хочется наследования, делаем справочник "МойМетод" иерархическим, создаем функцию "ПолучитьОбработчик"
и вуаля:

СтруктураДействий.Вставить("ПересчитатьСумму", Новый Структура("Объект, ТекстОбработчика", ЭтотОбъект,
ПолучитьОбработчик("Документы.Реализация.ПересчитатьСуммуВПопугаях")));
120. Василий Казьмин (awk) 681 06.09.13 10:34 Сейчас в теме
(119) Evgen.Ponomarenko,

Признаю, что пример натянут, но...

Допустим есть N документов где есть табличная часть товары. То есть у всех есть:

- Товары
  - Количество
  - Цена
  - Сумма


Заказ:

- Товары
  - Количество
  - Цена
  - Сумма
  - Скидка


Реализация:

- Товары
  - Количество
  - Цена
  - Сумма
  - НДС


Для пересчета строки мы можем использовать код:

ТабличныеЧасти.ПересчитатьСтроку(Строка, Действия) :
  ПересчитатьСумму(Строка, Действия);
  ПересчитатьСкидку(Строка, Действия);
  ПересчитатьНДС(Строка, Действия);



ТабличныеЧасти.ПересчитатьСкидку(Строка, Действия) :
  Если Действия.Свойство("ПересчитатьСкидку") Тогда
     Строка.Сумма = Строка.Сумма - Строка.Скидка;
  КонецЕсли;



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


Вариант №1
После всех вызовов ТабличныеЧасти.ПересчитатьСтроку вставляем расчет скидки

Вариант №2
Изменить модуль таким образом, что бы скидка рассчитывалась в зависимости от условий.


Недостаток первого варианта мест может быть много.

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

Вариант №3 (полный, в 1С можно варьировать и сделать нечто подобное, но так красиво не выйдет)

ТабличныеЧасти.ПересчитатьСкидку(Строка, Действия) :
  Если Действия.Свойство("ПересчитатьСкидку") Тогда
     Если ТипЗнч(Действия.ПересчитатьСкидку) = Тип("Процедура") Тогда
        Действия.ПересчитатьСкидку(Строка, Действия);
     Иначе
        Строка.Сумма = Строка.Сумма - Строка.Скидка;
     КонецЕсли;
  КонецЕсли;
Evgen.Ponomarenko; +1 Ответить
121. Евгений Пономаренко (Evgen.Ponomarenko) 512 06.09.13 11:14 Сейчас в теме
(120) awk,
Поддерживаю!

Красота - признак внутренней гармонии... И не правда, что на вкус и цвет товарищей нет.

Если код красив.... то вспоминаются строки:

Дао программирования
п.п. 1.1 Hечто таинственное возникло, родившись из безмолвной пустоты. Одиноко и недвижимо ожидая, оно покоится и все же пребывает в постоянном движении. Это источник всех программ. Я не знаю его имени, поэтому я буду называть его Дао Программирования.
Если Дао хорошее, то операционная система прекрасная. Если операционная система прекрасная, то и компилятор великолепный. Если компилятор великолепный, тогда приложение совершенное. Пользователь доволен и во всем мире проистекает гармония.
122. Василий Казьмин (awk) 681 06.09.13 12:17 Сейчас в теме
(121) Evgen.Ponomarenko, Попытался третий вариант реализовать на 1С, вот что получилось:

Процедура Пример(Строка, Действия)
	Если Действия.Свойство("Пример") Тогда
		Если ЭтоФункция(Действия.Пример) Тогда
			Параметры = Новый Массив;
			Параметры.Добавить(Строка);
			Строка.Сумма = ВызовФункции(Действия.Пример, Параметры);
		ИначеЕсли ЭтоПроцедура(Действия.Пример) Тогда
			Параметры = Новый Массив;
			Параметры.Добавить(Строка);
			ВызовПроцедуры(Действия.Пример, Параметры);
		Иначе // Реализация по умолчанию
			Строка.Сумма = 2+2;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Функция ЭтоПроцедура(Значение)
	Возврат 
		Тип("Структура") = ТипЗнч(Значение)
		И Значение.Свойство("Объект")
		И Значение.Свойство("Имя")
		И Значение.Свойство("КоличествоПараметров");
КонецФункции

Функция ЭтоФункция(Значение)
	Возврат 
		ЭтоПроцедура(Значение) // Функция это процедура возвращающая значение
		И Значение.Свойство("Результат")
КонецФункции

Функция ПолучитьОписаниеФункции(Функ)
	ТекстВызова = "";
	Если Функ.Объект <> Неопределено Тогда
		ТекстВызова = "Функ.Объект.";
	КонецЕсли;
	ТекстВызова = ТекстВызова + Функ.Имя + "(" +
	
	Для ит = 0 По Функ.КоличествоПараметров Цикл
		ТекстВызова = ТекстВызова + "Параметры["+ит+"], ";
	КонецЦикла;
	ТекстВызова = СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(ТекстВызова, 2) + ")";
	Возврат ТекстВызова;
КонецФункции


Функция ВызовФункции(Функ, Параметры)
	ТекстВызова = ПолучитьОписаниеФункции(Функ);
	Возврат Вычислить(ТекстВызова);
КонецФункции


Функция ВызовПроцедуры(Функ, Параметры)
	ТекстВызова = ПолучитьОписаниеФункции(Функ);
	Выполнить(ТекстВызова + ";");
КонецФункции

Показать
Evgen.Ponomarenko; +1 Ответить
123. Олег Филиппов (comol) 3233 06.09.13 12:43 Сейчас в теме
(122) awk, Надо рядом приложить код, который это делает на c++ и отправить скриншот на партнёрский форум, чтобы Сергей Георгиевичу было стыдно :).
125. Евгений Пономаренко (Evgen.Ponomarenko) 512 06.09.13 13:32 Сейчас в теме
(123) comol,
еще рано ;)))) но мысль конечно интересная!
135. Василий Казьмин (awk) 681 06.09.13 18:53 Сейчас в теме
(123) comol, Как-то так... Если на си...

typedef int (*sumProcessFunc)(**void, **void);

void sumProcess(void** str, void** param, sumProcessFunc[] funcs) {
   for(int i=0;i<DEFAULT_SIZE;i++) {
      if(sumProcessFunc[i]) {
        sumProcessFunc[i](str, param);
      } else {
        default[i](str, param);
      }
   }
}
Показать
124. Евгений Пономаренко (Evgen.Ponomarenko) 512 06.09.13 13:29 Сейчас в теме
(122) awk,
Зачетно!

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

Процедура Пример(Строка, Действия)
   Если Действия.Свойство("Пример") Тогда
	  Если ЭтоФункция(Действия.Пример) Тогда
         Параметры = Новый Структура(); // Другой вариант
         Параметры.Вставить("Количество",Строка.Количество);
		 Параметры.Вставить("Сумма",Строка.Сумма);
         Строка.Сумма = ВызовФункции(Действия.Пример, Параметры);
      ИначеЕсли ЭтоПроцедура(Действия.Пример) Тогда
         ВызовПроцедуры(Действия.Пример, Строка); // Третий вариант
      Иначе // Реализация по умолчанию
         Строка.Сумма = 2+2;
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры
Показать
126. Василий Казьмин (awk) 681 06.09.13 13:48 Сейчас в теме
(124) Evgen.Ponomarenko, Именованные параметры это хорошо, но 1С их не поддерживает. Только позиционные. В вызове функции важен порядок параметров. А структура при переборе не гарантирует, что выведет параметры в порядке вставки. Если же руками реализовывать, то к метаданным функции/процедуры надо добавлять массив с именами и порядком вызова, что не есть хорошо и так метаданные надо самому создавать.

Хотя, Можно определить общий модуль с интерфейсамми типа:

Функция ИнтерфейсКоличественноСуммовой() Экспорт
  Мета = Новый Массив();
  // Свойства
  Мета.Добавить(Новый Структура("Объект, Имя", Неопределено, "Количество"));
  Мета.Добавить(Новый Структура("Объект, Имя", Неопределено, "Цена"));
  Мета.Добавить(Новый Структура("Объект, Имя", Неопределено, "Сумма"));
  // Процедуры
  Мета.Добавить(Новый Структура("Объект, Имя, КоличествоПараметров", Неопределено, "ПересчетПоКоличеству", 0));
  Возврат Мета;
КонецФункции
Показать


а в модуле объекта определить функцию

Функция Интерфейсы()
  Интерфейсы = Новый Структура();

  Интерфейсы.Вставить("ИнтерфейсКоличественноСуммовой",ИнтерфейсыМодулей.ИнтерфейсКоличественноСуммовой());
  ИнтерфейсыМодулей.УстановитьОбъект(ЭтотОбъект, Интерфейсы.ИнтерфейсКоличественноСуммовой);
  Возврат Интерфейсы;
КонецФункции
127. Евгений Пономаренко (Evgen.Ponomarenko) 512 06.09.13 14:11 Сейчас в теме
(126) awk,
нееее... все будет номано!!! у меня в голове уже код сложился... щас занят... вечером отпишусь
это здорово что Вы пошли рыть глубже... может выйти очень технологично.
128. Евгений Пономаренко (Evgen.Ponomarenko) 512 06.09.13 15:38 Сейчас в теме
(126) awk,
Кстати... почему не поддерживает???

Пример реализации процедуры:

Процедура Тестовый пример(лПараметры)
	Сообщить(лПараметры.Количество);
	Сообщить(лПараметры.Сумма);
КонецПроцедуры



Пример вызова:

Параметры = Новый Структура();
Параметры.Вставить("Количество",Строка.Количество);
Параметры.Вставить("Сумма",Строка.Сумма);
ТестовыйПример(Параметры);
129. Василий Казьмин (awk) 681 06.09.13 15:42 Сейчас в теме
(128) Evgen.Ponomarenko, Ты готов ограничить callback функции единственным параметром? Или прикажешь в функциях обратного вызова проверять если структура, тогда иначе поп позициям?
130. Евгений Пономаренко (Evgen.Ponomarenko) 512 06.09.13 16:01 Сейчас в теме
(129) awk,
я ж не спорю с вами... просто пытаюсь развивать ваши же идеи.
В данном случае, что бы не делать проверок, я готов callback функции ограничить единственным параметром.
В принципе 1С это не с++, который должен решать задачи на низком аппаратном уровне, на прикладном уровне можно, а иногда и нужно ограничиться структурами.

Учтите, что область применения того, о чем мы сейчас пишем с Вами, может существенно различаться у нас Вами.
131. Евгений Пономаренко (Evgen.Ponomarenko) 512 06.09.13 16:06 Сейчас в теме
(129) awk,
а если уж честно говорить, я уж насмотрелся как в стандартных конфах "спецы" использует функции обратного вызова, как обезьяны гранату... так, что наша песня не про них.
132. Евгений Пономаренко (Evgen.Ponomarenko) 512 06.09.13 16:46 Сейчас в теме
(122) awk,
в Функция ПолучитьОписаниеФункции(Функ)
строка
ТекстВызова = ТекстВызова + Функ.Имя + "(" +
с ошибкой

как должно быть?
136. Евгений Пономаренко (Evgen.Ponomarenko) 512 08.09.13 23:59 Сейчас в теме
(122) awk,
Благодарность: awk за поддержку темы ООП в актуальном состоянии.
Благодарность: comol за гостеприимство на этой ветке.

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

Если мы соглашаемся использовать команду "Выполнить", то решение задачи (122) приобретает совершенно новые формы.

Вариант предложенный awk можно считать оптимальным при наличии двух ограничений:
Пункт №1: при вызове процедуры или функции количество параметров может быть более одного.
Пункт №2: техника решения задач должна поддерживать в равной степени вызовы процедур и функций

Честно говоря, в решении предложенном awk, меня насторожило использование выражения "Параметры = Новый Массив;". Меня всегда настораживает использование массивов при решении задач. Лично я стараюсь использовать их в своей практике, чем реже тем лучше. Я ни в коем случае не хочу сказать, что само использование массивов - это плохо, просто в 1С есть много очень удобных объектов для аналогичных целей.

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

По пункту №2. Разделение на функции и процедуры объектов - весьма условно, по большому счету
функция является подмножеством процедуры с возможностью возврата значения.
Преимущество функции перед процедурой заключается в возможности использования в математических, строковых и логических выражениях.
Учитывая, что awk и comol являются приверженцами с++, вполне резонным с их точки зрения будет возвражение,
что мол это "процедуры есть подмножество функций, то есть процедура это функция в возвратом void".
Давайте размышлять беспристрастно, в приведенном примере awk избыточна проверка входящего объекта на принадлежность к функции или процедуре, и по большому счету, не важно оставить ли использование только процедур либо только функций.
Если бы не одно БОЛЬШОЕ НО.

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

Итак отказ от ограничений №1 и №2 позволяет получить код:

Процедура CreateProcExample()
	Об=Справочники.МоиПроцедуры.СоздатьЭлемент();
	Об.Наименование="ОбработчикСобытия.Пример";
	Об.ТекстПроцедуры="лПараметры.Сумма=лПараметры.Количество*лПараметры.Цена";
	Об.Записать();
КонецПроцедуры


Функция ПолучитьТекстВызова(Проц)
   ТекстВызова = "";
   Найти=Справочники.МоиПроцедуры.НайтиПоНаименованию(Проц.Имя,Истина);
   Если не Найти.Пустая() Тогда
       ТекстВызова=Найти.ТекстПроцедуры;
   КонецЕсли;
   Возврат ТекстВызова;
КонецФункции

Функция ВызовПроцедуры(Проц, лПараметры)
   ТекстВызова = ПолучитьТекстВызова(Проц);
   Выполнить(ТекстВызова);
КонецФункции
Показать


Далее примеры:

Процедура Пример2(Строка, Действия)
	Если Действия.Свойство("Пример") Тогда
		Параметры = Новый Структура;
		Параметры.Вставить("Количество",Строка.Колво);
		Параметры.Вставить("Цена",Строка.Цена);
		ВызовПроцедуры(Действия.Пример, Параметры);
	Иначе // Реализация по умолчанию
		Строка.Сумма = 2+2;
	КонецЕсли;
КонецПроцедуры
Показать


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

Процедура Пример3(Строка, Действия)
	Если Действия.Свойство("Пример") Тогда
		ВызовПроцедуры(Действия.Пример, Строка);
	Иначе // Реализация по умолчанию
		Строка.Сумма = 2+2;
	КонецЕсли;
КонецПроцедуры


В итоге получился пример по красоте не уступающий (135).
Таким образом не смотря на неполноценность ООП в 1С, закрыв глаза на условности и обработав напильником косяки от 1С можно получить вполне приличный код.
137. Василий Казьмин (awk) 681 09.09.13 12:41 Сейчас в теме
(136) Evgen.Ponomarenko,

1. Проблема не в 1С и ООП. Callback и reflection существуют ему параллельно.

Проблема в том, что когда мы доходим до Метаданные.Справочники.Хрень_какая_то.МодульОбъекта мы получаем неопределено, вместо списка содержимого модуля.

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

Java не поддерживает передачу функций как параметров, но там есть интерфейсы, си не поддерживает интерфейсы, но там можно передавать функции. С# и то и то, ну да бог с ним с переношенным. То есть ошибка 1С в отметании всего, что наработано за долгие годы.

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

2. А свойство - это функция без параметров или процедура с одним параметром.
138. Евгений Пономаренко (Evgen.Ponomarenko) 512 09.09.13 13:15 Сейчас в теме
(137) awk,
Согласен. Можно считать, что тема исчерпана.

Как вы смотрите, на то чтобы пройтись катком по РАУЗ?
139. Василий Казьмин (awk) 681 09.09.13 13:59 Сейчас в теме
(138) Evgen.Ponomarenko,

А что по нему проходить? Есть два подхода первый сохранять нужную информацию при записи, второй получать нужную информацию при чтении. Первый вариант - сторонников последовательности, второй РАУЗ. Ошибки программирования исключаем как имеющие место быть в любом из вариантов реализации учета. Первый вариант чувствителен к порядку записи второй к ресурсам при чтении. Отсюда вывод:

Последовательность хороша в системах учета, а РАУЗ в системах планирования (функционал "А что если?").

Преимущество рауз трактуемое "Можно задним числом править... Не влияет на последовательность проведения..." Можно считать маркетинговым ходом. Так-как система учета, на то и система учета что бы выдавать на один и тот же момент времени одни и те же данные.
140. Евгений Пономаренко (Evgen.Ponomarenko) 512 09.09.13 14:23 Сейчас в теме
(139) Василий,
Собственно, это я и хотел сказать... не смотря, на то что у меня не было практического опыта применения РАУЗ,
но по косвенным признакам у меня сложилось впечатление, что РАУЗ действительно в большей степени маркетинговый ход, точнее ни чего более. У меня в связи с этим фактом состояние дежавю :"Мне говорят на белое, черное и на оборот". Мне ещё интересно, что думает о РАУЗ Олег...
143. Олег Филиппов (comol) 3233 09.09.13 14:35 Сейчас в теме
(140) Evgen.Ponomarenko,Про РАУЗ по-моему всё уже сказали... ИМХО если не рассчитывать на работу задним числом то оно так сложно нафиг не надо. А с awk +100500 согласен (139) что
система учета, на то и система учета что бы выдавать на один и тот же момент времени одни и те же данные
этому ещё в школеинституте учат :)
147. Евгений Пономаренко (Evgen.Ponomarenko) 512 09.09.13 15:43 Сейчас в теме
(143) comol,
система учета, на то и система учета что бы выдавать на один и тот же момент времени одни и те же данные


Так, Кто ж спорит? с этой формулировкой я согласен на все 100% Вопрос в другом, разные методики учета(к примеру LIFO или FIFO), примененные к одним и тем же данным, одной и той же учетной системы, даже по законам математики, дают разный результат.
К тому же я не спорил с Василием на эту тему, а Вы молодой человек, как то совершенно неудачно вклинились
в диалог, пытаетесь провоцировать "драку" в стиле "куча мала" - ай-я-я-яй!
148. Василий Казьмин (awk) 681 09.09.13 16:11 Сейчас в теме
(147) Evgen.Ponomarenko,

1. Олег и не писал, про спор.
2.
Кто ж спорит?
У кто задним числом правит и закладывает это в учетные системы? По мне так ответ на вопрос: "А сможем ли мы изменить документ задним числом?" - должен звучать как: "Изменить не сможете - сможете скорректировать."
150. Евгений Пономаренко (Evgen.Ponomarenko) 512 09.09.13 16:20 Сейчас в теме
183. Алекс Ю (AlexO) 119 21.10.13 11:06 Сейчас в теме
(139) awk,
Последовательность хороша в системах учета, а РАУЗ в системах планирования

РАУЗ единствено введен 1С и реализован в наихудшем варианте - чтобы "быстро и что-нибудь" насчитать по себестоимости, иключив 1С-ом же поощряемые проводки задним числом (и многочасовые восстановления всего и вся в последовательностях при партионном учете).
И все.
Вот вам быстро и "без затей" насчитали по себестоимости там что-то среднее и между чем-то проходящее, будьте добры проглотить и не возмущаться (
141. Олег Филиппов (comol) 3233 09.09.13 14:31 Сейчас в теме
(137) awk, Эх... есть ещё видимо люди, не забывшие C++ и С#. Я вот как после С c решеточкой пересаживаюсь обратно в конфигуратор... тоже думаю "этого нету" и "это нельзя".... и печально становится :(. Пока снегопат не стал юзать ещё и со средой разработки тяжко было...
144. Василий Казьмин (awk) 681 09.09.13 14:47 Сейчас в теме
(141) comol, Весело, я так же думаю про Visual Studio Ultimate Edition пересаживаясь туда из eclipse. И того нету и этого. :)) А конфигураторе от 1С плакать хочется.
145. Евгений Пономаренко (Evgen.Ponomarenko) 512 09.09.13 15:40 Сейчас в теме
(141) comol,
Не знаю, аналог снегопата я себе сам написал еще под досом (94-98 годы).
а к нему два динамических словаря, один под borland pascal другой под foxpro.

Щас смотрю на снегопат - даже не интересно. Я уже как 4 года назад написал свой мета-конфигуратор.
И в обычный конфигуратор захожу только в крайней необходимости, разве, что доработать свой мета-конфигуратор,
да поля в базу добавить.
185. Алекс Ю (AlexO) 119 21.10.13 11:12 Сейчас в теме
(145) Evgen.Ponomarenko,
Я уже как 4 года назад написал свой мета-конфигуратор.

Чего вы, простите, написали?
(145) Evgen.Ponomarenko,
Не знаю, аналог снегопата я себе сам написал еще под досом (94-98 годы).

Для 1С, под ДОС, аналог снегопата, при отсутствии многозадачности?
(146) Evgen.Ponomarenko,
Лично, если бы мне задали вопрос внедрять УПП или использовать "Выполнить"

Ну, т.е. это одно и тоже - внедрять УПП, применять Выполнить в коде?
207. Евгений Пономаренко (Evgen.Ponomarenko) 512 21.10.13 22:21 Сейчас в теме
(185) AlexO,
А кто сказал, что под 1С? Под Foxpro и Borland pascal, в принципе под любой текстовый редактор. Перехватываешь клавиатурное прерывание и дело в шляпе.

Только мне кажется, AlexO, что сегодня вам никакие аргументы не помогут, колитесь - что курите?
142. Олег Филиппов (comol) 3233 09.09.13 14:32 Сейчас в теме
(136) Evgen.Ponomarenko,
Если мы соглашаемся использовать команду "Выполнить"
низачот :))). "Выполнить" это для перегрузок, временного кода и т.п. Но не для промышленного использлвания
146. Евгений Пономаренко (Evgen.Ponomarenko) 512 09.09.13 15:42 Сейчас в теме
(142) comol,
низачот :))). "Выполнить" это для перегрузок, временного кода и т.п. Но не для промышленного использлвания


А кто сказал, что "Выполнить" выполняет код написанный человеком?
У меня "Выполнить" используется для выполнения директив конструктора мета-конфигуратора.
Очень даже надежный код получается.

В констукторе проводок я его не использую, пока... еще не определился, мне пока достаточно средств 1С

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

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

Лично, если бы мне задали вопрос внедрять УПП или использовать "Выполнить", я бы даже глазом не моргнул. В виду, того что если выбирать из двух зол меньшее, то "Выполнить" гоооораздо безобиднее.
149. Василий Казьмин (awk) 681 09.09.13 16:12 Сейчас в теме
(146) Evgen.Ponomarenko,
внедрять УПП или использовать "Выполнить", я бы
А я бы тупо не понял и спросил что имеется ввиду, что и делаю...
151. Евгений Пономаренко (Evgen.Ponomarenko) 512 09.09.13 16:22 Сейчас в теме
(149) awk,
это я так к слову... конечно сравнение не уместное... я просто хотел сказать, что применение "Выполнить" в промышленных масштабах ни чуть не хуже чем внедрение УПП в промышленых масштабах - возможность накосячить одинаковая
184. Алекс Ю (AlexO) 119 21.10.13 11:10 Сейчас в теме
(142) comol,
"Выполнить" это для перегрузок, временного кода и т.п. Но не для промышленного использлвания

Это почему еще? )
Что-то изменится, если написать код "как надо", или его же - через ВЫПОЛНИТЬ??
187. Олег Филиппов (comol) 3233 21.10.13 11:58 Сейчас в теме
(184) AlexO,
да, не, ничего не изменится... сущие мелочи:

1) Перекомпиляция перед выполнением
2) Недоступность для поиска/рефакторинга
3) Не доступность через хранилище
4) Возможны не контролируемые изменения из пользовательского режима

А так вцелом ничего :)
38. Олег Филиппов (comol) 3233 01.09.13 15:38 Сейчас в теме
(33) German, Герман, "моя твоя не понимать". На всякий случай сделал пустую базу, запустил... при вотором запуске посмотрел в профайлер. Ещё как обращается он к файлу конфигурации. Притом не один раз. Зачем столько запросов к таблице Config не знаю, но то что BinaryData это вроде и есть сам cf файл (или его часть).

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

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

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

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

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

Что касается ИТАН-а... смотрел, анализировал, но для себя в нём ничего не нашел... не дотягивает до Инталева с БИТ-ом... ИМХО конечно... тут каждому своё.
57. Евгений Пономаренко (Evgen.Ponomarenko) 512 02.09.13 13:12 Сейчас в теме
(51) comol,
<QUOTE>"Адекватной математической модели нет нигде" :))). А оно вам надо? :)) К примеру сейчас куча математиков пытаются построить математическую модель нейронной сети, и доказать что она работает. А куча разработчиков её просто используют :)</QUOTE>

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

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

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




61. Олег Филиппов (comol) 3233 02.09.13 14:21 Сейчас в теме
(57) Evgen.Ponomarenko, математика хороша вмеру. И мера эта находится очень недалеко. Как часто вы считали интеграл по поверхности, решали дифуры, строили реды, использовали другие распределения кроме нормального? А эти знания только 1 курс вуза :)

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

62. Евгений Пономаренко (Evgen.Ponomarenko) 512 02.09.13 14:33 Сейчас в теме
(51) comol,
<QUOTE>без ООП на уровне платфомы это видимо лучшее что получилось сделать.</QUOTE>
согласен, но наличие ООП не гарантирует системного мышления у программиста, впрочем тот кто мыслит системно, мыслет так и без ООП. Отсутствие ООП делает 1с гибче, в этом есть свой плюс.
67. Олег Филиппов (comol) 3233 02.09.13 16:24 Сейчас в теме
(62) Evgen.Ponomarenko, "Отсутствие ООП делает 1с гибче, в этом есть свой плюс.". О_о
"щас будет драка" ©. Сначала вот сюда: http://rutracker.org/forum/viewtopic.php?t=3343958 - качать и от корки до корки. А потом ещё раз обсудим ООП :)))
80. Евгений Пономаренко (Evgen.Ponomarenko) 512 02.09.13 18:04 Сейчас в теме
(67) comol,
<QUOTE>О_о "щас будет драка" © </QUOTE>
Главное успеть пока не прибыли гвардейцы кардинала... Пошел читать...

Большая просьба к awk: "Олега мне оставишь?"
103. Евгений Пономаренко (Evgen.Ponomarenko) 512 05.09.13 09:46 Сейчас в теме
(67) comol,
<QUOTE>(62) Evgen.Ponomarenko, "Отсутствие ООП делает 1с гибче, в этом есть свой плюс.". О_о
"щас будет драка" ©. Сначала вот сюда: http://rutracker.org/forum/viewtopic.php?t=3343958 - качать и от корки до корки. А потом ещё раз обсудим ООП :)))</QUOTE>

Хорошая сборка, буду знать куда посылать неокрепших умом "сертифицированных специалистов" от 1С, набираться ума разума. Только, Олег, давай-те на будущее договоримся не посылать друг друга читать очевидные вещи.

А то вдруг мне захочется послать Вас почитать фирменную документацию к C++, С#, Delphi, Java (какой вам больше по душе) к стандартам IDEF1x, IDEF3 и предложить ERwin в помощь. По крайней мере там коротко и по существу, без лишней воды и пафоса.

В свое время я перешел от Delphi+Oracle на сторону 1С, как только 1С-ка стала поддерживать SQL-92 (1с8.0 beta). Честно говоря мне уже давно стало тесно в жестких рамках контроля ООП с одной стороны и сервера баз данных с другой.
Был повод... Нам поставщик пол года не мог написать себестоимость на жутком гибриде делфей, oracle и экселя. За 8 дней своего личного отпуска я написал под 1С библиотеку связи 1с и Oracle, импортировал в 1с структуру таблиц и правила расчетов. И получил готовое решение. В результате мой начальник приказал снять мою систему с эксплуатации. Но было уже поздно, бухи были в восторге.
В итоге, после тщетных попыток доказать руководству, что 1с рулит. Я уволился. Только спустя 4 года, мой бывший начальник переписал себестоимость по oracle. B во время ))) файловая версия достигла размера 6-гиг и славненько накрылась медным тазом. ИМХО таблица проводок достигла свои 4 гига по паспорту :)

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

К стати, нельзя сказать, что бы 1с совсем не поддерживает ООП.

Во времена oracle 8.1.7, корпорация ORACLE только анонсировала объектно-ориентированный подход, а у 1С 8.0 в языке запросов он уже был реализован.

=== Пример №1 Выбрать данные за весь период из расходных накладных. ===

1С: "ВЫБРАТЬ Номер,Количество ИЗ Документ.Расходная.Накладная"

Oracle: "SELECT DOC.NUMBER,DET.CNT FROM DOC_RASHOD DOC,DETAILS_RASHOD WHERE DOC.ID=DET.DOC_ID+"

=== Пример №2 Добавить в выборку наименование номенклатуры ===
1С: "ВЫБРАТЬ Номер,
Номенклатура.Наименование,
Количество
ИЗ Документ.Расходная.Накладная"

Oracle "SELECT
DOC.NUMBER,
SPR.NAME_NOM,
DET.CNT
FROM DOC_RASHOD DOC,DETAILS_RASHOD,SPR_NOM SPR
WHERE DOC.ID=DET.DOC_ID+ AND SPR.ID=DET.NOM_ID

=== Пример №3 Добавить в выборку наименование контрагента ===
1С "ВЫБРАТЬ Номер,
Номенклатура.Наименование,
Контрагент.Наименование,
Количество
ИЗ Документ.Расходная.Накладная"

Oracle "SELECT
DOC.NUMBER,
SPR.NAME_NOM,
CUS.NAME_CUSTOMER,
DET.CNT
FROM DOC_RASHOD DOC,DETAILS_RASHOD,SPR_NOM SPR,SPR_CUSTOMER CUS
WHERE DOC.ID=DET.DOC_ID+ AND SPR.ID=DET.NOM_ID AND DOC.CUS_ID=DOC.CUS_ID

ну и так далее... В принципе такая сложность решалась с помощью
CREATE VIEW MY_VIEW AS SELECT
DOC.NUMBER,
SPR.NAME_NOM,
CUS.NAME_CUSTOMER,
DET.CNT
FROM DOC_RASHOD DOC,DETAILS_RASHOD,SPR_NOM SPR,SPR_CUSTOMER CUS
WHERE DOC.ID=DET.DOC_ID+ AND SPR.ID=DET.NOM_ID AND DOC.CUS_ID=DOC.CUS_ID

и тогда выборка делалась следующим образом:
SELECT NUMBER,NAME_NOM,NAME_CUSTOMER,CNT FROM MY_VIEW

но стоило наложить сюда RLS... И ложился самый крутой сервак.

Так, что беда не в том, что в 1С нет поддержки ООП, А то, что перед сдачей "Специалиста", не требуют сдачи экзамена по ООП. Foxpro 2.6 тоже не имел механизмов ООП, но НИКОГДА не глючил.
А вот infostart.ru, не знаю на чем он писан, но плющит его не по детски. (у меня комменты не редактируются до сих пор)

Вторая беда 1С программистов - слабые знания языка запросов.

Так, что по большому счету, я бы перед сдачей экзаменов по 1С, требовал пройти вступительные экзамены по ООП,SQL,IDEF1x,IDEF3,ERwin(BPwin). Тогда бы количество, имело возможность перейти в качество.
104. Олег Филиппов (comol) 3233 05.09.13 10:21 Сейчас в теме
(103) Evgen.Ponomarenko, Нуу фраза "Отсутствие ООП делает 1с гибче" вызвала желание сказать "учите матчасть" :), что я и постарался сделать наиболее политкорректным образом. Совсем промолчать не смог :).
Описание стандартов IDEF я естественно читал. BPWin-ом правда только в универе пользовался :). В сознательном возрасте как то Business Studio, сейчас и им не пользуюсь. Ближе как-то ARIS eEPC наверное потому что событийная модель понятнее :). Ну и документацию по C++/C# все наверное ещё с ВУЗ-а штудировали :). Это я не хвастаюсь, эт я просто говорю что я "полноценный в принципе ИТ-шник" и "учить матчасть" в этой области меня отсылать не нужно :).

А вот когда читаю что-то типа: "Отсутствие ограничений ООП, позволило"
"а у 1С 8.0 в языке запросов он (ООП) уже был реализован"
"Foxpro 2.6 тоже не имел механизмов ООП, но НИКОГДА не глючил"

хочется такую же картинку прицепить, как мне Герман в (31) прислал "печальбеда"... :(
AlexO; awk; +2 Ответить
106. Евгений Пономаренко (Evgen.Ponomarenko) 512 05.09.13 10:42 Сейчас в теме
(104) comol,
Да согласен, вся беда в том, что тяжело оценить уровень, собеседника с двух фраз.

"а у 1С 8.0 в языке запросов он (ООП) уже был реализован"
"Foxpro 2.6 тоже не имел механизмов ООП, но НИКОГДА не глючил"


Та ладно те Вам!
Я не утверждал... я намекал, конечно же. Может уже в ночи не точно сформулировал мысль... Просто реальная драка у меня была с заказчиком. Скорее блиц-криг, но на подготовку ушло много времени и сил.

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

Лично мне от 1С нужно одно - подписка на события формы. А то хлопотно это все.
107. Василий Казьмин (awk) 681 05.09.13 11:00 Сейчас в теме
(106) Evgen.Ponomarenko, А передача функций как параметров? А список процедур и функций модуля программно?
108. Евгений Пономаренко (Evgen.Ponomarenko) 512 05.09.13 11:17 Сейчас в теме
(107) awk,
Тема меня задела ..., точнее много тем... я потихоньку сюда буду выкладывать свои тезисы... если Олег не против, а может забацаем отдельную ветку форума. Вечерком отпишусь.
111. Евгений Пономаренко (Evgen.Ponomarenko) 512 05.09.13 11:33 Сейчас в теме
(107) awk,
у меня "модуль" не текст программы, у меня "модуль" - это объект содержащий:
1) текст основного запроса,
2) детализирующих запросов,
3) список колонок, с том числе ссылку на описание колонки, который в принципе позволяет генерить документацию по модулю на лету.
4) список параметров
5) обработчики событий
..
всего 18 закладок в составе около 300 полей различного назначения

Модуль иуеет сам себя отображать и взаимодействовать с пользователем.

Перемещается между конфигурациями с помощью xml файла. К стати, если любопытно - могу выслать пример файла.
114. Василий Казьмин (awk) 681 05.09.13 12:03 Сейчас в теме
(111) Evgen.Ponomarenko, А я про старый добрый callback и reflection. Первый было бы удобно применять:

СтруктураДействий= Новый Структура;

СтруктураДействий.Вставить("ПересчитатьСумму", Новый Структура("Объект, Обработчик", ЭтотОбъект, Документы.Реализация.ПересчитатьСуммуВПопугаях));

ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(СтрокаТовары ,СтруктураДействий, КэшированныеЗначения);

А второй вместо:

Попытка
Результат = МенеджерОбъекта.СоздатьОбъект();
Исключение КонецПопытки;

использовать человеческий:

Если МенеджерОбъекта.Метаданные().Процедуры.Найти("Функция", "СоздатьОбъект", 0) Тогда
Результат = МенеджерОбъекта.СоздатьОбъект();
КонецЕсли;
115. Евгений Пономаренко (Evgen.Ponomarenko) 512 05.09.13 12:19 Сейчас в теме
(114) awk,
Первый

Я обычно так делаю:
Запрос=Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документы.Реализация ГДЕ Проведен=истина");
Результат=Запрос.Выбрать().Выгрузить();
Для каждого эл из Результат Цикл
   Об=эл.Ссылка.ПолучитьОбъект();
   Об.ПересчитатьСуммуВПопугаях();
   Об.Записать();
КонецЦикла;

Обработку ошибок мы пропускаем...
182. Алекс Ю (AlexO) 119 21.10.13 10:57 Сейчас в теме
(114) awk,
МенеджерОбъекта.Метаданные().Процедуры.Найти("Функция", "СоздатьОбъект", 0)

Вы хотите, чтобы 1С все переписала, и, наконец, сделала ООП у себя? Забудьте ))
153. Саша Безымяный (help1Ckr) 08.10.13 11:42 Сейчас в теме
(111)Evgen.Ponomarenko, а мне можете прислать на help1ckr@gmail.com?
172. Евгений Пономаренко (Evgen.Ponomarenko) 512 16.10.13 21:32 Сейчас в теме
(153) help1Ckr,
Надеюсь выложить её в свободном доступе, но чуть позже. Боюсь без хорошей сопроводительной документации она не будет представлять интереса. Уж слишком не привычна концепция. Честно говоря, я на ИС пришел только с одной целью - сменить технологию разработки приложений 1С на корню.
109. Олег Филиппов (comol) 3233 05.09.13 11:24 Сейчас в теме
(106) Evgen.Ponomarenko, "Лично мне от 1С нужно одно - подписка на события формы. А то хлопотно это все."
И вообще мы 1С-ники "не сторонники чистого искусства" (с) :))))))
110. Олег Филиппов (comol) 3233 05.09.13 11:24 Сейчас в теме
(106) Evgen.Ponomarenko, P.S. лучше расскажи как цитаты вставлять умудряешься :)))
112. Евгений Пономаренко (Evgen.Ponomarenko) 512 05.09.13 11:37 Сейчас в теме
(110) comol,
:))))) боевые рефлексы HTML верстки: <_Q_U_O_T_E> цитата </_Q_U_O_T_E>

только чур меня сегодня не дубасить!!!
113. Евгений Пономаренко (Evgen.Ponomarenko) 512 05.09.13 11:38 Сейчас в теме
(110) comol,
да... и вставку цитат только, что починили :)))))))))
181. Алекс Ю (AlexO) 119 21.10.13 10:52 Сейчас в теме
(103) Evgen.Ponomarenko,
но стоило наложить сюда RLS... И ложился самый крутой сервак.
Так, что беда не в том, что в 1С нет поддержки ООП, А то, что перед сдачей "Специалиста", не требуют сдачи экзамена по ООП

Что-то у вас совсем нереальные представления об RLS, ООП и 1С в частности.
Одно то, что в 1С нет ООП, и никогда не было - вызывает сомнение во всех ваших остальных выкладках.
(106) Evgen.Ponomarenko,
Лично свое ООП расширение 1С я реализовал уже давно.

Ну, понятно теперь все ))
213. Алекс Ю (AlexO) 119 23.10.13 09:36 Сейчас в теме
(103) Evgen.Ponomarenko,
Нам поставщик пол года не мог написать себестоимость на жутком гибриде делфей, oracle и экселя

Не может такого быть. Либо поставщик-"одноэсник" пытался что-то писать на Дельфи.
(103) Evgen.Ponomarenko,
Отсутствие ограничений ООП

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

НЕ непомерная ли плата - деградация в обмен на "вход на рынок"??
(103) Evgen.Ponomarenko,
К стати, нельзя сказать, что бы 1с совсем не поддерживает ООП.

Можно. Не поддерживает, не поддерживала, и не будет поддерживать совсем.
Во времена oracle 8.1.7, корпорация ORACLE только анонсировала объектно-ориентированный подход, а у 1С 8.0 в языке запросов он уже был реализован.

Причем тут СУБД и 1С?? Вы требуете от СУБД сразу еще и "универсального" ЯП?? Вот если бы 1С написала хоть что-то отдаленно напоминающее Оракл - тогда бы и можно было сравнивать.
225. Евгений Пономаренко (Evgen.Ponomarenko) 512 23.10.13 23:02 Сейчас в теме
(213) AlexO,
Причем тут СУБД и 1С?? Вы требуете от СУБД сразу еще и "универсального" ЯП?? Вот если бы 1С написала хоть что-то отдаленно напоминающее Оракл - тогда бы и можно было сравнивать.

Как можно сравнивать теплое с мягким? DBMS Oracle это промежуточный слой для 1С. Средство хранения и обработки данных.
А вот Oracle Application мы в 2006 году уделали на Харьковской "Мивине" бюджетом в 3 раза меньшим. После того как крутые спецы из Голландии сказали, что они умывают лапки.
229. Алекс Ю (AlexO) 119 24.10.13 09:25 Сейчас в теме
(225) Evgen.Ponomarenko,
А вот Oracle Application мы в 2006 году уделали на Харьковской "Мивине" бюджетом в 3 раза меньшим. После того как крутые спецы из Голландии сказали, что они умывают лапки.

Ну так и 1С "уделывает" всех своим заднесписочным проведением :)
Только потом порождает такую кучу проблем, что Оракл и не снилось. Но 1С об этом "забывает" предупредить, и продолжает поощрять проведение "задним числом".
231. Евгений Пономаренко (Evgen.Ponomarenko) 512 24.10.13 14:17 Сейчас в теме
(229) AlexO,
Ну так и 1С "уделывает" всех своим заднесписочным проведением :)
Только потом порождает такую кучу проблем, что Оракл и не снилось.
Но 1С об этом "забывает" предупредить, и продолжает поощрять проведение "задним числом".

Оракл ломает предприятие под себя, УПП после сборки обрабатывается напильником ))
Но в остальном вы правы, по этому у меня партионный учет от начала до конца свой.
70. Василий Казьмин (awk) 681 02.09.13 16:47 Сейчас в теме
(62) Evgen.Ponomarenko, (67) comol, Драку заказывали? ООП - это круто, но бездумное наследование ведет к росту классов в геометрической прогрессии. Что негативно сказывается на архитектуре приложения в целом. Так что если быть фирме 1С последовательной (платформа на которой может писать и дебил начинающий), то не надо там наследования. А какое без него ООП?
71. Олег Филиппов (comol) 3233 02.09.13 16:59 Сейчас в теме
(70) awk, Ну тогда не жалуйтесь на конструкции вида функция1(Функция2(Функция3(Функция4(Функция5(X,Y))))) в БСП и на 3000 строк кода в РСВ. Я уж не знаю что должен покурить "начинающий" чтобы в этом разобраться :). Индусы были бы рады программировать на 1С :). А то им ООП портит жизнь и снижает з/п :)
72. Василий Казьмин (awk) 681 02.09.13 17:14 Сейчас в теме
(71) comol, А как вам такая конструкция?

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

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

Как пойдет вызов функций? Если "<|--" наследование, а ":" определение.
74. visual fox (mrvisualfox) 02.09.13 17:34 Сейчас в теме
(72) awk, Согласен, если у разработчика в голове каша, ему никакое ООП не поможет.
И, сообственно, почему в 1С нет ООП? Есть оно, только нам разрешают наследование в один уровень :)
75. Василий Казьмин (awk) 681 02.09.13 17:46 Сейчас в теме
(74) mrvisualfox, Там прототипирование в один уровень, а не наследование. Что кстати во многих случаях (а особенно в языках с динамической типизацией) более выгодно нежеле наследование.
77. Олег Филиппов (comol) 3233 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 Ответить
81. Василий Казьмин (awk) 681 02.09.13 18:06 Сейчас в теме
(77) comol, В приведенном примере не требуется наследование. Можно обойтись старым добрым:

include МодульУниверсальногоДокумента;
84. Олег Филиппов (comol) 3233 02.09.13 20:39 Сейчас в теме
(81) awk, Ага... помню я чем это в 7.7 заканчивалось :)... Можно ещё написать Что-то типа: ВнешняяОбработка.Создать().ВыполнитьМетод().... и расстрелять потом такого разработчика :))
86. Василий Казьмин (awk) 681 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) 3233 03.09.13 10:32 Сейчас в теме
(86) awk, ну MFC я не как "показательное ООП" говорил... все помнят это жуткое BEGIN_MESSAGE_MAP ))) а про то что отладчиком там повесишься ковыряться, да и смысла в этом... проще уже переопределить самому методы.

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

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

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

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

Кто сказал, что нельзя запихать код в XML, а потом его выполнить? Более того в джаве есть технология которая таким образом сериализует и востанавливает классы UI.
89. Олег Филиппов (comol) 3233 03.09.13 11:04 Сейчас в теме
(88) awk, "Не, не, не... Нужен".. ну вот "драки не получилось" :).
176. Алекс Ю (AlexO) 119 21.10.13 10:43 Сейчас в теме
(88) awk,
MFC было давно, так что не помню.

MFC это были обычные наборы базовых классов, объединенных в библиотеки. Можно сказать, фабрики классов.
В общем, к чему пришли - давно уже ясно.
Оставьте свое сообщение