Как стать автором
Обновить

Комментарии 17

А многие почему-то говорят, что продукты 1С просто идеальные и закрывают 100% бизнеса. А оказывается, что даже для стандартного розничного магазина одежды есть только 70% функционала, а остальные 30% приходится все-таки самому допиливать. А дальше привет всем косякам платформы 1С.

Кстати, по этому поводу вопрос. А вот эти 30% доработок вы делали, как расширения ? Или просто правили напрямую код УНФ ? Если правили, то как я понимаю, дальше УНФ будет жить своей жизнью, а ваши решения своей ?

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

Поэтому изменения пилим в конфе, но с сохранением поддержки.

А можно уточнить, что значит с сохранением поддержки ?

Там просто у вас в видео говорится, что вот как классно, что УНФ развивается и даже как-то сохраняется возможность обновлений. Можете на практике объяснить, как это выглядит ?

То есть вот появляется новая версия УНФ. Как вы дальше merge делаете ? При переработке 30% функционала там же повесится можно, сливая по сути спагетти код (а я видел код типовых конфигураций, который на времянках построен для оптимизации). Даже в IntelliJ IDEA это не так легко, а в 1С - это же вообще вилы будут. То есть, например, у вас разные люди что-то правили с какими-то целями. Кто потом будет определять, а нужно применить изменения из типовой, или брать ваши изменения ? А если они противоречат ?

Вот дураки, надо было lsfusion покупать. Там же ноль противоречий.

С каких пор надо покупать open source ? Но вообще да, стоило брать lsfusion. Особенно веселит, что надо платить за лицензии 1С для подключений терминалов. То есть мало того, что сам все пишешь, так ещё и платишь 1с ни за что.

Вот дураки, за лицензии 1С платят, когда опенсурс есть. Полстраны дураков.

Никаких проблем с обновлением типового релиза нету.

А можно поподробнее ? Как вы сливаете исправленный код, если не используете расширений ? Что вы делали с "лишним" кодом, который есть в типовой, но вам не нужен, или который надо исправить под свои нужды ?

Как же вам, должно быть, сложно ловить собеседника на выдуманных ограничениях, искусственно раздувать проблему и потом героически переводить разговор в обсуждение того, что умеет и как бы тут пригодился lsfusion.

Давайте я отвечу по существу вместо автора статьи. Проект переносится в git и EDT, за первоначальный коммит берется конфигурация поставщика, от ствола ответвляется ветвь с чистой конфигурацией поставщика и периодически обновляется поставкой и вливается в основной ствол репозитория. Git уже на этом этапе разрешает всевозможные конфликты слияния кодовой базы. Если не решает - слияние выносится в локальный репозиторий, проводится на локальных ветвях, и EDT, с учетом специфики метаданных и платформы, с помощью платформенного сравнения добивает оставшиеся конфликты. После чего локальное разрешение конфликтов отправляется в удаленный репозиторий.

Это чисто на уровне гита. А на уровне разработки выбор просто широчайший – методы-заглушки, перенаправления на свои методы в начале типовых методов, отдельные подсистемы, общие реквизиты, регистры с любыми объектами в измерениях и многое другое.

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

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

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

Поэтому меня и интересует, как это делается не в фантазиях, а на практике. Вот, например, у Ламоды и УНФ.

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

Хотелось бы услышать агрументированную и заслуженную критику без прилагательных в превосходной степени сравнения.

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

Так Вы сами уходите от аргументированного разговора. Просто утверждаете, что все хорошо.

Вы отрицаете тот факт, что 1С хранит метаданные в xml-формате ? Мне местами приходится сливать такие файлы (jrxml в JasperReports) - удовольствие еще то. Xml-формат вообще не очень хорошо подходит под разные слияния, так как там различия в строках видны очень плохо, и много лишних символов/слов. И опять же, получается, что для разработки на 1С мне нужно знать их формат хранения данных параллельно с визуальным интерфейсом ?

Вы отрицаете, что в типовых конфигурациях 1С типичный спагетти-код ? Ну вот вам пример :

Hidden text

Процедура ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения) Экспорт Если КэшированныеЗначения = Неопределено Тогда КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(); КонецЕсли; ПроверитьАссортиментСтроки( ТекущаяСтрока, СтруктураДействий); ЗаполнитьНоменклатуруПоНоменклатуреПоставщикаВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьНоменклатуруПоставщикаПоНоменклатуреВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПроверитьСопоставленнуюНоменклатуруПоставщикаВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПроверитьКорректностьЗаполнитьХарактеристикиИУпаковки( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПроверитьКорректностьЗаполнитьХарактеристикиКиЗ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоНеОтгружатьСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ЗаполнитьGTINВСтроке( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокПоФактуВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокСуффиксИзОтклоненияВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоЕдиницВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоЕдиницСуффиксВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокСуффиксВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоОтклонение( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокПоВесу( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьКоличествоУпаковокПоОбъему( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьВесОбъемВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуЗаУпаковкуВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуЗаказаЗаУпаковкуВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьВидЦеныВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ЗаполнитьЦенуПродажиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьЦенуПродажиПоАссортиментуВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьЦенуЗакупкиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьУсловияПродажВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьУсловияЗакупокВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ЗаполнитьПартиюТМЦВЭксплуатации( ТекущаяСтрока, СтруктураДействий); ЗаполнитьСтавкуНДСВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьСтавкуНДСПоНоменклатуреВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ПересчитатьЦенуСНДС( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьСтавкуНДСВозвратнойТарыВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуРучнойСкидкиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуАвтоматическойСкидкиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьПроцентРучнойСкидкиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуВСтрокеТЧРасхождения( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуСкидкуПоСуммеВПродажахВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуСкидкуПоСуммеВЗакупкахВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуПоСуммеВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПересчитатьСуммуПродажиПоСуммеСНДС( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьЦенуПродажиПоСуммеПродажиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСУчетомАвтоматическойСкидкиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСУчетомРучнойСкидкиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСУчетомСкидкиБонуснымиБалламиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПересчитатьСуммуСУчетомПогрешностиОкругленияВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПересчитатьСуммуНДСВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСНДСВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуБезНДСВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуРеглВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьНДСРеглВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуПродажиВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуПродажиНДСВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьРеквизитыПоНоменклатуреВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПроверитьСтатьюАналитикуРасходов( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ОчиститьСуммуВознагражденияВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.УстановитьАктивностьСтроки( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПроверитьЗаполнитьСкладВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПроверитьЗаполнитьОбеспечениеВСтрокеТЧДокументаПродажи( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПроверитьЗаполнитьОбеспечениеВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ПроверитьПолучитьВариантКомплектации( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьФлагиРасхождениеИИзлишекПорча( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ОчиститьСуммуВзаиморасчетовВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ОчиститьАвтоматическуюСкидкуВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий); ЗаполнитьСодержаниеУслуги( ТекущаяСтрока, СтруктураДействий); ЗаполнитьСтатьюАналитикуРасходовПоУмолчанию( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПартнера( ТекущаяСтрока, СтруктураДействий); ЗаполнитьПомещение( ТекущаяСтрока, СтруктураДействий); ЗаполнитьПродавца( ТекущаяСтрока, СтруктураДействий); ЗаполнитьУчетноеКоличествоНоменклатуры( ТекущаяСтрока, СтруктураДействий); ЗаполнитьПризнакНаличияНоменклатурыПродаваемойСовместно( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакБезВозвратнойТары( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакОтмененоБезВозвратнойТары( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакАктивностьБезВозвратнойТары( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьДубликатыЗависимыхРеквизитов( ТекущаяСтрока, СтруктураДействий); ПроверитьСериюРассчитатьСтатус( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммуСверхЗаказаВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); УстановитьПризнакДляЗаполненияТекстовогоОписания( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьВариантОтраженияКорректировкиРеализации( ТекущаяСтрока, СтруктураДействий); ЗаполнитьВариантОбеспеченияПоДатеОтгрузки( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.НоменклатураПриИзмененииПереопределяемый( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ХарактеристикаПриИзмененииПереопределяемый( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьПризнакПринимаетсяКНУ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьПризнакАналитикаРасходовОбязательна( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьПризнакРаспределениеНДС( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьПризнакАналитикаДоходовОбязательна( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьПризнакАналитикаАктивовПассивовНеИспользуется( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьПризнакАналитикаРасходовЗаказРеализация( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьТипСтатьи( ТекущаяСтрока, СтруктураДействий); ЗаполнитьПризнакАдресногоХранения( ТекущаяСтрока, СтруктураДействий); ЗаполнитьПризнакИспользованияПомещений( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакиКатегорииЭксплуатации( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьРасхожденияПослеОтгрузки( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьРасхожденияПослеПриемки( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьРасхождения( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакНаличияКомментарияПриемка( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакНаличияКомментарияОтгрузка( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакНаличияКомментария( ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьПризнакТоварногоМестаТребуетсяОбработка( ТекущаяСтрока, СтруктураДействий); ЗаполнитьПризнакДвиженияПоСкладскимРегистрам(ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения(ТекущаяСтрока, СтруктураДействий); ОбработкаТабличнойЧастиКлиентСервер.ПроверитьЗаполнитьНазначениеВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбработкаТабличнойЧастиКлиентСервер.ПриИзмененииНазначенияВСтрокеТЧ( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ЗаполнитьНоменклатуруЕГАИС( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); АкцизныеМаркиКлиентСервер.ЗаполнитьИндексАкцизнойМаркиДляСтрокиТабличнойЧасти( ТекущаяСтрока, СтруктураДействий); ЗаполнитьСтрануПроисхожденияДляНомераГТД( ТекущаяСтрока, СтруктураДействий); ЗаполнитьСпособОпределенияСебестоимости( ТекущаяСтрока, СтруктураДействий); ЗаполнитьСпособОпределенияСебестоимостиСтрокой( ТекущаяСтрока, СтруктураДействий); ПоместитьОбработанныеСтрокиВКэшированныеЗначения( ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); КонецПроцедуры

Как это можно править и потом нормально "сливать" ?

Или давайте посмотрим код проведения, например, поступления, который построен на времянка. Если это не говнокод, то что ? А это в первую очередь придется и править и сливать.

То есть про делегацию сложности вы проигнорировали. Остался только страх...

По большому секрету скажу, что у 1С есть собственное окно сравнения, которое учитывает всю специфику своих же xml. И я не зря упомянул про возможность локального разрешения конфликтов. То, что вы лезете в формат исходников - исключительно ваша осознанная воля, а может, даже и провокация.

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

То, что вы лезете в формат исходников - исключительно ваша осознанная воля, а может, даже и провокация.

Что за ерунда ? Смотрите, в базовой версии что-то поменяли в конфигурации (не в коде, а то, что приводит к изменениям в конфигурационных xml-файлах). Вы у себя тоже что-то поменяли. Далее при слиянии в git'е вы получаете конфликт. Как вы его смержите не лезя в формат хранения ?

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

В целом, можно работать и на типовом, если готов пожертвовать какими-то хотелками.В рамках корпорации...

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

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

По этой причине аргументы, что вот важен функционал коробок, а платформа не важна - очень странные.

Плюсы/минусы по отношению к продукту УТ?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий