Статья от 19 февраля 2008 года

На прошлой неделе Microsoft опубликовала спецификации форматов бинарных файлов для Office. Эти форматы выглядят безумно. Формат файла Excel 97-2003 представляет собой 349-страничный файл PDF. И это ещё не всё! В документе содержится такой комментарий:
Каждый лист [workbook] в Excel хранится в составном файле.

Видите ли, файлы Excel 97-2003 – это составные документы OLE, которые в свою очередь представляют собой некое подобие файловой системы в одном файле. Чтобы в этом разобраться, нужно прочитать 9 страниц документации. А сами спецификации больше похоже на структуры данных в С, чем на то, что мы привыкли называть спецификациями. Это иерархическая система файлов.

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

  • сделан запутанным специально
  • придуман каким-то страдающим от старческого маразма представителем кибернетической расы боргов
  • создан безумно плохими программистами
  • не может быть правильно создан или прочитан


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

Первое, что нужно понять – цели у разработчиков форматов бинарников кардинально отличались от целей разработчиков, допустим, HTML.

Они должны были очень быстро работать на очень старых компьютерах. Во времена первых версий Excel для Windows 1 мегабайт памяти был не редкостью, а работать достаточно комфортно программа должна была на процессорах 80386 с частотой 20 МГц. Множество оптимизаций сделано для ускорения открытия и сохранения файлов:

  • Это форматы бинарных файлов, поэтому загрузка записи обычно означает копирование последовательности байтов с диска в память, в которой появляется структура данных С. Не происходит никакого разбора или лексического анализа данных, так как это в разы медленнее простого копирования.
  • Формат файлов запутан в нужных местах для ускорения типичных операций. К примеру, у Excel 95 и 97 была функция «простого сохранения», которая использовалась в качестве ускоренного варианта документа OLE, полная версия которого была не слишком быстрой для повсеместного использования. У Word было нечто подобное под названием "быстрое сохранение". Для быстрого сохранения длинных документов 14 раз из 15 все изменения просто добавлялись в конец файла, а весь файл не перезаписывался с нуля. Для жёстких дисков того времени это означало, что можно было успеть сохранить документ, допустим, за 1 секунду вместо 30. Также это означало, что удалённые части документа всё ещё хранились в файле – а людям, как оказалось, это не было нужно.

Они были разработаны с прицелом на библиотеки. Если вам нужно было написать функцию импорта бинарника с нуля, вам нужно было поддерживать вещи вроде Windows Metafile Format (для рисования) и OLE Compound Storage. При работе под Windows для них есть библиотеки, поэтому поддержка таких функций была тривиальным делом. Но если писать всё с нуля, всё пришлось бы делать самому.

У Office была поддержка составных документов, к примеру, можно было включить электронную таблицу в файл Word. Идеальный парсер Word должен был суметь сделать что-то умное с включённой таблицей.

Они не разрабатывались для использования в других приложениях. Довольно разумное на тот момент предположение заключалось в том, что формат Word будет писать и читать только программа Word. Поэтому когда программист из команды разработчиков Word принимал решение о смене формата файла, его волновали лишь а) скорость работы и б) минимальное количество строк в коде Word. Идеи вещей типа SGML и HTML, заменяемых, открытых и стандартизированных форматов, не были популярными, пока интернет не сделал такие вещи практичными. Этот момент пришёл через 10 лет после разработки форматов файлов Office. Всегда предполагалось использование программ для экспорта и импорта. У Word есть поддержка формата для простого обмена документами по имени RTF, существовавшего почти с самого начала.

Им нужно было отразить всю сложность приложений. Каждую галочку, каждую возможность форматирования и каждую функцию Microsoft Office необходимо было хранить в файлах. Поэтому для создания идеального клона Word, читающего его файлы, нужно было реализовать все его функции. Если вы создаёте программу для работы с текстом – конкурента Word, которая должна уметь загружать его файлы, у вас может занять немного времени сама загрузка указанных в файле опций. Но реальное отображение их всех на странице – это задача более сложная. А если её не решить, то ваши клиенты откроют вордовский файл в вашем клоне, и всё форматирование может поломаться.

Им нужно было отражать историю развития программ. Множество сложных вещей в форматах – это старые, сложные, ненужные и редко используемые функции. Они присутствуют там лишь для обратной совместимости и потому, что для разработчиков ничего не стоит оставить код в покое. Но чтобы тщательно выполнить работу разборки или записи этих файлов, вам придётся повторить всю эту работу, что была проделана в Microsoft за 15 лет. В текущие версии Word и Excel вложены тысячи человеко-часов работы, и для клонирования этих программ вам придётся вложить свои тысячи человеко-часов. Формат файла – это просто краткое обобщение всех поддерживаемых приложением функций.

Просто для примера разберём одну возможность подробнее. Лист Excel – это набор разных записей BIFF. Рассмотрим самую первую запись в спецификации – это запись под именем 1904.

В спецификации об этой записи написано весьма туманно. Просто написано, что «запись 1904 показывает, используется ли система дат 1904». Классический пример бесполезной спецификации. Если бы вы были разработчиком, и наткнулись бы на такое «объяснение», вы бы весьма оправданно пришли к заключению, что Microsoft что-то скрывает. Такое описание недостаточно само по себе, вам нужно искать дополнительную информацию. Я поясню: существует два типа листов Excel. В одних даты начинаются с 1/1/1900 (в них же ошибка високосного года специально создана для совместимости с форматом 1-2-3), в других – с 1/1/1904. Excel поддерживает оба варианта – поскольку первая его версия, для Mac, использовала второй вариант, который был системным, а Excel для Windows должен был иметь возможность импортировать файлы 1-2-3, использовавшие даты с 1/1/1900. Уже на этом месте можно расплакаться.

Оба типа файлов, 1900 и 1904, встречаются в изобилии в дикой природе, в зависимости от того, пришли они с Mac или Windows. Автоматическая конвертация дат может привести к ошибкам, поэтому Excel сам тип файла не меняет. Для разборки файлов Excel приходится работать с обоими. А это значит, что вам не просто нужно загрузить этот бит из файла, но ещё и переписать весь код разбора и показа дат, чтобы обрабатывать оба варианта. Это работа на несколько дней.

Работая над клоном Excel вы встретите множество таких скрытых деталей по работе с датами. Когда Excel преобразовывает числа в даты? Как работает форматирование? Почему 1/31 интерпретируется как 31 января текущего года, а 1/50 – как первое января 1950? Все эти детали нельзя описать без того, чтобы получившееся описание не сравнялось по объёму с исходниками Excel.

И это только одна из сотен BIFF-записей, и одна из простейших. Большинство из них настолько сложные, что могут заставить взрослого программиста рыдать.

Единственное возможное решение будет следующим. Конечно, Microsoft оказала большую услугу, опубликовав форматы файлов, но импортировать их или сохранять в них от этого легче не будет. Это безумно сложные приложения, и вы не можете просто реализовать 20% самых популярных функций и рассчитывать, что 80% остальных людей будут счастливы. Спецификации бинарников в лучшем случае сохранят вам пару минут при реверс-инжиниринге сложной системы.

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

Пусть Office работает сам. У Word и Excel есть весьма полные модели объектов, доступные через COM Automation, благодаря чему в программе можно сделать всё. Во многих случаях лучше повторно использовать код из Office вместо попыток написать его заново. Примеры:

  1. У вас есть веб-приложение, которому нужно вывести файлы Word в формате PDF. Я бы сделал это так: несколько строк на Word VBA загружают файл и сохраняют его в PDF через встроенный в Word 2007 механизм. Этот код можно вызывать напрямую, даже из ASP или ASP.NET, работающего под IIS. Первый запуск Word займёт несколько секунд. В последствии Word будет находиться в памяти под управлением COM-системы. Для обычных веб-приложений такая система работает довольно быстро.
  2. Та же задача под Linux. Купите один сервер Windows 2003, установите на него лицензионный Word, и настройте простой веб-сервис. Работы на полдня, с применением C# и ASP.NET
  3. Та же задача но с возможностью масштабирования. Настройте балансировку нагрузки перед любым необходимым количеством коробок из второго шага. Никакого программирования не потребуется.

Такой подход сработает со всеми распространёнными задачами, связанными с Office. К примеру:

  • Открытие листа Excel, сохранение некоторых данных в ячейках, подсчёт и выдача результата.
  • Использования Excel для создания графиков в формате GIF
  • Вытаскивание любой информации из файла Excel без разбора форматов файлов
  • Преобразование файла Excel в CSV (другой подход – использовать драйверы Excel ODBC и забирать данные через SQL-запросы)
  • Редактирование документов Word
  • Заполнение форм в Word
  • Преобразование файлов между разными форматами, которые поддерживает Office (существуют возможности импортирования десятков форматов текстовых процессоров и электронных таблиц).

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

Используйте форматы попроще. Если вам просто нужно программно создать документы для Office, почти всегда есть формат получше, который затем можно свободно открыть в Word или Excel.

  • Для создания табличных данных и использования их в Excel используйте CSV.
  • CSV не поддерживает вычисления, так что для их использования возьмите формат WK1, доставшийся от Lotus 1-2-3. Он гораздо проще, чем у Excel, и открывается им на раз.
  • Если вам ну очень надо создавать нативные файлы Excel, возьмите очень старую его версию. 3.0 – хороший выбор, там не было составных документов. Сохраните в Excel 3.0 минимальный файл только с теми функциями, которые вам необходимы, и используйте его как пример минимальной BIFF-записи.
  • Для документов Word используйте HTML
  • Если вам очень надо создать файл для Word с модным форматированием, проще всего создать RTF. Всё, что умеет Word, можно написать в RTF, но этот формат текстовый, так что в нём что-то можно поменять руками и он будет работать. Вы можете создать красиво отформатированный файл в Word, сохранить в RTF и использовать простую замену текста.

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

Комментарии (98)


  1. MaximChistov
    12.09.2016 20:30

    В текущей версии файлы office это обычные зип архивы же. Статья старая?


    1. APLe
      12.09.2016 20:33
      +2

      Первая строка статьи:

      Статья от 19 февраля 2008 года


      1. MaximChistov
        12.09.2016 20:52
        +4

        Хех, вступления курсивные уже просто не вижу(тк там почти всегда не связанные с содержанием цитаты)


    1. DikSoft
      12.09.2016 21:45
      +6

      … внутри которых адская объектная модель + ресурсы. ))) Смысл статьи «не изобретайте велосипед» остаётся актуальным и для «новых форматов».


    1. RogueShy
      13.09.2016 09:38
      +2

      Забавно, что в этой статье первый комментарий точно такой же. Правда, она вышла в 2010 году.


  1. Fen1kz
    12.09.2016 20:49
    +12

    > Купите один сервер Windows 2003, установите на него лицензионный Word, и настройте простой веб-сервис. Работы на полдня, с применением C# и ASP.NET

    Отвечу переводу также в повелительном наклонении: автор выпей яду


    1. Fullmoon
      12.09.2016 21:05
      +7

      >На этом пути есть несколько подводных камней, и он официально не поддерживается Microsoft
      Перевод: купи реактивы для приготовления яда в магазине, смешай их в лаборатории и выпей.


      1. sidristij
        14.09.2016 10:43

        Какие все нежные. Я что-то не вижу чтобы у вас была хоть одна публикация =) Иногда мне кажется что зря на Хабре открыли readonly аккаунты с возможностью писать комментарии


        1. Fullmoon
          14.09.2016 11:12

          Знаете, я вполне понимаю и принимаю недовольство старожилов наплывом R&C-аккаунтов. Но с чего вам не понравился мой комментарий? Что, отсутствие официальной поддержки для часто встречающегося случая — хорошо и правильно? Или хорош совет использовать неподдерживаемый способ?

          Я серьёзно спрашиваю и обещаю учитывать ваши замечания.


          1. MaximChistov
            14.09.2016 16:47
            +1

            он читает невнимательно и решил что вы предлагаете выпить яду Fen1kz


        1. deseven
          14.09.2016 13:19
          +1

          И с каких это пор нормальным считается переходить на личности и намекать на «сперва добейся», если тебе не понравился комментарий?


          1. faiwer
            14.09.2016 20:16

            Пожалуй, с момента появления комментариев как таковых.


  1. Mayflower
    12.09.2016 21:42
    +7

    Эти форматы выглядят безумно. Формат файла Excel 97-2003 представляет собой 349-страничный файл PDF.

    Как насчет формата Office Open XML File где-то на 5000 страниц?

    Для создания табличных данных и использования их в Excel используйте CSV

    Не надо так. Если это выгрузки, которые будут использоваться людьми в том же Excel — используйте xlsx, благо сейчас это не так уж сложно, есть готовые библиотеки.

    Для поддержки вычислений, которые не умеет делать CSV

    Исходя из этой фразы можно сделать вывод, что CSV умеет делать какие-то вычисления, на самом деле нет. Возможно, просто неудачное построение фразы.


    1. ssneg
      12.09.2016 23:31
      +3

      Это просто неудачный перевод, лучше писать «Для поддержки вычислений, чего не умеет делать CSV».


  1. aram_pakhchanian
    12.09.2016 21:47
    +1

    Почти все советы автора неживые. Старые форматы, типа WK1, поддерживали только кодировку ANSI. Даже в 2008 году даже в США было уже опасно на это полагаться — слишком жесткое ограничение. Чтение RTF в Office всегда было глюкавым: на вполне честном, но большом RTF, написанном не самим Word, возникали непредсказуемые проблемы: от полного развала форматирования до падения. В целом писать бинарные форматы Office — не адская проблема. Читать сложнее, но идея использования OLE Automation в веб-приложении кощунственна. Этот подход по меньшей мере не масштабируемый. В общем, статья ни о чем.


    1. funca
      12.09.2016 22:12
      +1

      У вас есть веб-приложение, которому нужно вывести файлы Word в формате PDF… Та же задача под Linux.

      Какие есть варианты?


      1. aram_pakhchanian
        12.09.2016 22:36
        +1

        Лицензировать коммерческие библиотеки. Идеально работающих нет, но даже у Microsoft в новых версиях Office поддержка старых бинарных форматов неидеальна.


      1. avost
        14.09.2016 10:06

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


  1. darkfrei
    12.09.2016 22:33
    +21

    Спасибо за перевод статьи 2008 года! Можно что-нибудь из 1998-2003?


    1. stalinets
      13.09.2016 00:25
      +9

      Пожалуйста!)) На правах шутки.
      http://www.nestor.minsk.by/kg/1999/13/kg91307.htm
      Рассуждения, на что следует переходить с Win95: на 98 или на NT.


      1. EviGL
        13.09.2016 18:00
        +2

        Нет, перевод нужен обязательно 2016 года, мы же тут за свежесть информации.


  1. pda0
    12.09.2016 22:44
    +1

    > не может быть правильно создан или прочитан

    Так и есть. Порой Office +1 не читал правильно что записала предыдущая версия.

    > У Word и Excel есть весьма полные модели объектов, доступные через COM Automation

    Работа через OLE это вечная борьба за скорость вызовов. Впрочем, есть варианты. Для программистов на Java есть https://poi.apache.org/ считающаяся самой полной библиотекой, читающей форматы MS Office.


    1. webkumo
      13.09.2016 12:45

      POI для бинарных форматов — это Адъ, Содом, Гоморра. С новыми форматами работает получше. На чтение работает хуже, чем на запись. По крайней мере у меня сложилось именно такое впечатление пару лет назад, возможно ситуация стала лучше… а возможно — всё осталось как прежде.


  1. sleeply4cat
    12.09.2016 22:45
    +3

    Повторный перевод считается за репост? Или теперь можно перевести старую статью на английский и выложить на хабр обратный «перевод»?


  1. lola_term
    12.09.2016 23:10
    +2

    Зачем нам эти форматы есть же odt и rtf, давно ods, dbf, csv…


    1. DrPass
      12.09.2016 23:30
      +3

      Поймёте, если вам когда-нибудь придется обмениваться информацией с другими контрагентами.


      1. psyriccio
        12.09.2016 23:58

        Всё перечисленные форматы отлично открываются на любой платформе. В чём проблема? А вот xls, действительно даже MS Excel более свежей версии не всегда открывает.


        1. DrPass
          13.09.2016 00:49
          +1

          Не «отлично», а с «определёнными ограничениями». Если у вашего контрагента не LibreOffice, он первым делом столкнётся с полетевшим форматированием, если вы в вашем odt колонтитулы красиво настроили. Или векторную графику всунули. Да и вообще, чем сложнее структура документа, тем больше у вас будет сюрпризов при открытии не в том редакторе, в котором вы его создали.

          > А вот xls, действительно даже MS Excel более свежей версии не всегда открывает.
          Всякое бывает, но вот это как раз очень редкое исключение, в отличии от попыток открытия файлов MS Office на Libre Office и наоборот.


          1. psyriccio
            13.09.2016 00:55
            +1

            Я работаю в довольно крупной организации, у нас много контрагентов и «тяжелый» обмен информацией. Многие форматы (в том числе xls,doc) запрещены корпоративными инструкциями. И я вот что-то не понимаю о каких проблемах вы говорите. А вот до наведения в этой сфере порядка был зоопарк, бардак и ворох проблем вида «не открылось, не отобразилось, поехало, не напечаталось...»


            1. TimsTims
              13.09.2016 10:27

              Старые .xls и .doc могли содержать вирусы в виде макросов(vba-скрипта). Новые форматы теперь разделелись на:
              docx xlsx — файлы без макросов
              docm xlsm — файлы с макросами.

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


            1. h31
              13.09.2016 23:55
              +1

              Интересно, если doc/xls запрещены, то какие форматы у вас являются рекомендуемыми?


            1. AndrBell
              13.09.2016 23:56

              Был бы благодарен, если бы вы описали поподробнее какие форматы используются в приоритете, какие — «табу».
              Какие проблемы с контрагентами были/есть. Как решили?


              1. DrPass
                14.09.2016 10:06

                > Был бы благодарен, если бы вы описали поподробнее какие форматы используются в приоритете, какие — «табу».
                Мне кажется, перенимать подобный опыт — это плохая практика. Запрет на обмен какими-либо форматами документов, он появляется не как результат системного анализа и здравого подхода, а наоборот, как результат нежелания ИТ-подразделений тратить время/ресурсы на этот самый анализ и затем на построение безопасной инфраструктуры. Тем более что проблемы с контрагентами в таком случае не решаются никак. Вернее, решаются перекладыванием на пользователей ответственности, дескать сами с контрагентами договаривайтесь, почему вы не можете получить их договор в таком виде и т.д.


                1. AndrBell
                  14.09.2016 11:53

                  На ваш взгляд, а как должно быть оптимально? в чем заключается «построение безопасной инфраструктуры». Как обезопасится от нерадивых/неумных/… пользователей?


          1. SirEdvin
            14.09.2016 11:43

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


      1. Nikobraz
        13.09.2016 12:15

        .RTF самый универсальный, весит многовато, зато открывается везде.


        1. tyomitch
          13.09.2016 14:01
          +3

          И везде выглядит по-разному :-P

          Лучше уж PDF тогда.


          1. vlivyur
            13.09.2016 16:04

            На него тоже нельзя надеяться. Забавные вещи творятся, особенно когда не Adobe Acrobat.


            1. plasticmirror
              14.09.2016 11:43

              Мы в продакшне на несколько десятков тысяч пользователей выгружали все в PDF, при этом умудрялись огребать, пришлось еще сделать костыль «не открывается? нажми сюда» — при клике на который рендерили все в картинки в высоком разрешении и складывали опять таки в PDF.

              Объем, разумеется, возрастает, но открывалось везде.


          1. saege5b
            14.09.2016 09:25
            +3

            Самый универсальный jpg/(png — чуть хуже). :)
            Универсальней некуда.


        1. slav1k
          14.09.2016 21:51

          По поводу «весит многовато». Как-то обнаружил, что файл RTF открытый и сохраненный Wordpad-ом резко, иногда на порядок, теряет в размере. При этом заметных отличий при просмотре нет.

          С тех пор так и делаю, если вдруг файл надо письмом отправлять, а его размер выглядит неприлично.)


      1. b1Ack
        14.09.2016 11:45
        +1

        Если контрагенту не надо редактировать информацию — из вариантов только PDF (информация, которую может быть надо печатать и желательно напечатать более-менее корректного размера), или HTML/MHT для информации, которую будут смотреть с экрана.

        То что будут редактироать — желательно согласовать формат. А то всякое бывает. Мне как-то фотографию прислали… вставленную в документ Abiword. Который на тот момент проще всего было поставить, извлечь из документа что надо, и удалить. И на этом моменте я понял, что Microsoft вовсе не корпорация зла — у них хотя-бы бесплатные viewer-ы были и они были относительно небольшого объема, в отличие от того что прислали.


  1. DMGarikk
    12.09.2016 23:41
    +3

    Во многих случаях лучше повторно использовать код из Office вместо попыток написать его заново.


    Ога чё мучаетесь, купите за килограмм денег Windows и ещё за килограмм Office, чтобы в линуксе использовать возможности Word
    Хороший совет чо… или я чёто не так понимаю в жизни?


    1. lostpassword
      13.09.2016 14:19
      +2

      Ну, тогда не используйте. Будьте богаты и счастливы в линухах. :-)


    1. Deosis
      14.09.2016 11:45

      В мире адского энтерпрайза дешевле купить дорогое рабочее решение, чем допиливать своё/стороннее


  1. psyriccio
    12.09.2016 23:44

    Руки надо отрывать за «выгрузки»-«вгрузки» в doc,xls,xlsx,docx и прочее подобное. Отрывать и бить ими по морде, чтобы всякую охоту программировать отбить, а потом в программисты 1С, принудительно.


    1. anderston
      13.09.2016 12:13

      В 1С, кстати, все удобно в плане интеграции с офисом на уровне платформы. Можно использовать и LibreOffice и его форматы, если есть такое желание.


      1. DMGarikk
        13.09.2016 12:52
        +1

        только всёравно блин большинство пишут костыли через COM к обычному офису (и рвут себе шаблон когда в линуксе «почемуто» не работает)


        1. Am0ralist
          13.09.2016 14:56

          А подскажите вменяемый и хорошо прописанный путь работы с уже существующим файлом ODS (запись данных, формул и прочего в ячейки уже созданного файла) не через «Server := CreateOleObject('com.sun.star.ServiceManager')»?


          1. DMGarikk
            13.09.2016 15:06

            Я сейчас даже не про это, а про то что не в Винде COM отсутствует. И использование этого механизма намертво прибивает гвоздями продукт к одной платформе.
            можно конечно с пасофным видом, как некоторые, написать «Сервер _очкрутойштуки_ требования Windows XP sp2, на Windows 7 не работает, на Server не тестировали» (реальная софтина для фонового захвата видео предназначенная для установке на сервер в стойку)

            только очень печалит понимание того что существуют такие разработчики погромисты на свете…


            1. Am0ralist
              13.09.2016 15:57

              А я про OOo, в котором опенсурс программисты тоже умудрились прибить работу с своими опенсурс форматами гвоздями к платформе Windows.
              Даже книжечка есть, как вот эту вот дребедень «com.sun.star....» писать для работы с ООо.

              Очень печалит понимание того, что существуют такие разработчики на свете…


              1. DMGarikk
                13.09.2016 16:08

                Так у них вроде много разных API http://api.libreoffice.org/examples/examples.html
                Или они не полноценные?


      1. psyriccio
        14.09.2016 00:45

        Вы наверное шутите сейчас, да? По иронии судьбы, я сейчас занимаюсь интеграцией некоторой информационной системы (довольно таки сложной) с 1С. Глаза бы мои не видели это. Если бы не интеграция своей системы по требованию организации, которая её уже вовсю использует — я бы к этому «удобно» не прикасался бы ни за какие коврижки. Что же там удобно то? COM который windows-only? Может быть web-сервисы, которые работают только с apache 2.2, который уже по соображениям безопасности нельзя ставить на сервер, не говоря уже о том, что не так то просто его найти. Или может быть Native API с кривым выделением памяти, «дружелюбным» местом повернутую. (я вообщем-то хорошо владею C/C++, но даже при этом условии, писать что-то мало-мальски серьезное, да ещё и кроссплатформенное — удовольствие то ещё). Интеграция с офисом на самом деле не нужна, выгрузку какую-нибудь можно и нужно делать на xml/json/csv (последнее, если нужно «человеко читаемое в екселе»).
        Я уже больше месяца голову ломаю и пробую разные варианты интеграции, пока лучшее, что работает (более-менее приемлемо) — это низкоуровневый сетевой сервер на native api, принимающий коннекты с json-стримом, сама система написана на java/scala и в качестве одного и компонентов системы присутствует 1С-кодогенератор, который генерирует практически весь код, требуемый от 1С «на лету», упаковывает его в cf/erf/epf и использует «на той стороне». Я бы не сказал, что мне это решение нравится «архитектурно».


        1. anderston
          14.09.2016 10:04

          Вы наверное шутите сейчас, да?

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

          Я уже больше месяца голову ломаю и пробую разные варианты интеграции, пока лучшее, что работает (более-менее приемлемо) — это низкоуровневый сетевой сервер на native api, принимающий коннекты с json-стримом, сама система написана на java/scala и в качестве одного и компонентов системы присутствует 1С-кодогенератор, который генерирует практически весь код, требуемый от 1С «на лету», упаковывает его в cf/erf/epf и использует «на той стороне». Я бы не сказал, что мне это решение нравится «архитектурно».


          Насколько я могу судить, вы пытаетесь сделать то, что вам нужно, исключительно на стороне своего приложения. Это не всегда удачное решение, учитывая возможности платформы. Если вам нужно получить данные из 1С для своей программы, то вы можете сделать это либо через механизм СКД, либо через план обмена. Посмотрите еще вот эту статью, возможно там есть подходящее решение.

          apache 2.2

          Можете воспользоваться IIS, но апач проще и удобнее.

          Интеграция с офисом на самом деле не нужна, выгрузку какую-нибудь можно и нужно делать на xml/json/csv (последнее, если нужно «человеко читаемое в екселе»).


          Она нужна для людей, которые пользуются этой системой. Для них excel и word — быстрый и удобный способ выгрузить и отредактировать для себя какие-то данные. xml/json/csv хороши прежде всего для обмена программ между собой, но их потом еще надо переводить в удобочитаемый для пользователя формат, что не всегда оправдано по трудозатратам.


          1. psyriccio
            14.09.2016 10:33

            В данном случае так сделано, потому что писать сложную загрузку, обработку, валидацию данных на bsl — это тот ещё мазохизм, без регулярных выражений, аспектов и других крайне необходимых штук. Но так как не маленькую часть логики нецелесообразно переносить из 1С во внешнюю систему — принято такое решение. Код пишется на нормальном языке, с мало-мальски богатой библиотекой, написанной под эти потребности, а всё 1С-ное мракобесие генерится генератором кода, регулярки, по возможности, реализуются через валидацию полей XDTO, там где не получается так — используется более медленная реализация в виде 1С-компоненты (думаю придется ещё и такую компоненту писать в итоге). Валидация и аспекты реализуются через адов динамический «code injection», писать такое на 1С-ном языке наверное человеку не очень под силу, умом точно тронешься. Запросы пишутся на нормальном SQL/HQL, а потом на основе, «подтягиваемого» из 1С маппинга её внутренних объектов на объекты БД — генерятся прямые запросы к БД, в «особо тонких» местах, где очень важна производительность. По-хорошему выбросить из этой системы 1С и заменить на БД + ORM(который и так есть уже) + web-контейнер c UI для всего этого хозяйства, но блин «М» — Монополия.

            При чем тут СКД? СКД — это внутренний механизм 1С, им всё равно нужно рулить и самое главное получать от него данные во вне. Статью я эту читал, естественно, знаком уже со всеми внутренними технологиями 1С (как это развидеть?!!) даже с полнейшим «извращенством» вроде серверов написанных прямо на bsl или «обмена» через внешние события 1С, которые генерятся через js-скрипт. работающий в ПолеHTMLДокумента, с открытой страницей, любезно предоставленной java-сервером, на форме открытой в постоянно запущенном клиенте 1С.

            Уж простите, но мои проблемы явно не в незнании какой-либо хитрой технологии в 1С, решающей всё проблемы. Наоборот садишься за scala писать какой-нибудь хардкор, в хорошем смысле этого слова, чтобы выбить это из головы на время, чтобы избавиться от какого-то непонятного чувства стыда, как будто копался зачем-то в корзине с чужим грязным бельём, уж простите за прямые ассоциации. У мира 1С есть БООЛЬШАЯ проблема — тотальное и поголовное отсутствие минимально квалификации у людей, которые под это активно пишут, включая разработчиков платформы. По крайне мере складывается такое ощущения. Чего только стоят, в штыки воспринимаемые статьи на infostart-е на какие-нибудь банальные темы вроде «нужно писать тесты», «Банальная дисциплина программирования или пишем хороший код, за который не стыдно». Отговорка обычно одна — «вы все теоретики, а мы тут реальные проблемы бизнеса решаем, у нас нет времени на глупости».


          1. psyriccio
            14.09.2016 10:48

            И по поводу web-серверов. IIS не подходит, всё наше хозяйство кроссплатформенное (с натягом включая саму 1С, от которой, рано или поздно, придется избавляться тоже) и построено преимущественно на открытых технологиях. IIS, который тянет за собой серверную винду, клиентские лицензии и (Б)анальное рабство от MS (хватит, пожалуй и Oracl`а) — не очень то вписывается в нашу «кухню». Пока что apache 2.2 в контейнере, изолированном по самое «не балуйся», через LXC/cgroups, в отдельном виртуальном инстансе proxmox, вместе с 1С, внутри корпоративной DMZ. С ним общается только отдельный сервис, который уже, в свою очередь, доступен «во вне». Компания крупная и требования к безопасности серьезные. Регулярно проводится аудит и за торчащий даже в интранет apache такой дряхлой версии — надают по шапке, к гадалке не ходи. И будут правы.


            1. philya
              15.09.2016 11:09
              +1

              Текущая платформа 1с 8.3.8 умеет apache 2.4. Фанаты безопасности, почему не обновили 1с?

              1с пишет тесты их можно скачать и запустить для типовых конфигураций. Программисты 1с не пишут тестов по банальной причине: тест изменения трех строчек в запросе отчета может занять остаток рабочего дня, т.к. нужно создать тестовую базу данных с приличным объемом данных, а поддержка этого теста при накатывании обновлений от 1с займет всю оставшуюся жизнь. На Зарплату 2.5 за этот год выкатили не бета релизов 16 штук, за 10 лет которые она живет 166 штук. У Бухгалтерии 3.0 за этот год не бета релизов 51, за 4 года жизни 258 штук. В целом проще исправить три строчки в запросе, когда они сломаются, чем поддерживать тест этого отчета. Привет программистам scala, министерству финансов, пенсионному фонду, государственной думе, фонду социального страхования, министерству налогов и сборов, росалкогольрегулированию и правительству рф в целом )


              1. psyriccio
                15.09.2016 15:22

                Не знаю почему не обновили, на это видимо есть свои причины, кстати обновлять платформу 1С сразу на новую версию, как только она вышла — плохая практика, лучше подождать и посмотреть на какой набор глюков сменится тот набор, что есть сейчас. Если бы дело было только в тестах, насчет тестов — им и впрямь не всегда есть место/время, особенно в бизнес логике. Но тесты — первое, что пришло в голову, как пример, на самом деле не в тестах дело, а в принципиальном игнорировании любых «дисциплинирующих» практик. Вот и вы мне тут повторяете ровно то же самое, о чём я рассказывал выше. «У нас нет времени. Мы решаем реальные проблемы. Проще две строчки кода исправить в запросе, чем...». Не это ли называется быдлокодингом и костылестроением? Количество релизов какое имеет отношение к обсуждаемой теме? Если бы в 1С приветствовались нормальные практики программирования, а самое главное — проектирования, было бы гораздо проще выпускать релизы, и работы было бы меньше, а не больше. Вы подтверждаете мои слова просто, я вам сейчас объясняю вещи, которые объясняют студентам, а то и школьникам, изучающим программирование. Понимаете, не в тестах дело. Есть много стилей, практик, парадигм, шаблонов проектирования, подходов к проектированию, подходов к менеджменту проекта, есть разные модели разработки и разные модели контроля качества. Многие из этих вещей противоположны друг другу, т.е. есть масса их комбинаций, где тесты неуместны или даже вредны и, соответственно — не используются. А есть полное игнорирование всякой дисциплины, «мы пишем запросы в три строчки, много запросов, что заказали то и пишем, у нас нет времени, мы выпускаем по 10 релизов в день». Вы даже не понимаете что нужно иметь не просто тестовую базу, а желательно тестовую ферму, имитирующую всю инфраструктуру в масштабе. Но для вас, необходимость в тестовой базе — это причина не писать тесты.


                1. DMGarikk
                  15.09.2016 16:02

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

                  Если бы в 1С приветствовались нормальные практики программирования, а самое главное — проектирования, было бы гораздо проще выпускать релизы, и работы было бы меньше, а не больше

                  у нас бывает так что окончательный формат отчёта для налоговой утверждают за неделю до окончания периода сдачи отчётов
                  потом наши законодатели такие забавные, могут выдумать такой отчёт что для сбора данных под него надо перепиливать всю архитектуру конфигурации (камень в сторону 6-НДФЛ и то как с ним работает ЗУП 2.5)


                  1. psyriccio
                    15.09.2016 16:47

                    Конечно, бывают разные случаи. В целом я согласен, что есть проблема со «сверхсрочными» правками, особенно в этой стране. Но для решения подобных проблем тоже существуют «хорошие» и «плохие» практики. Хорошие — модульность систем, возможность замены шаблонов и форм документов без пересборки или обновления всей системы, разделение системы на части по уровням ответственности, грамотное проектирование системы, чтобы даже серьезные изменения «цепляли» наименьшее количество компонентов, т.е. уменьшение связности и монолитности — да много есть чего. А есть практики плохие — строчить «релизы» спагетти-кода в попытке угнаться за всеми дуралеями, которые «не будут кошмарить бизнес». И вроде бы в 1С есть зачатки каких-то подобных практик, но выглядит это всё так себе и начинает дурно пахнуть. А потом тебе рассказывают, что «пробовали» и «ну его нафиг». 1С — это как АвтоВАЗ, такая структура давным давно должна просто рухнуть, но ряд нюансов и обстоятельств позволяет этому существовать и дальше, да ещё и неплохо себя чувствовать.


                1. philya
                  15.09.2016 22:20

                  А обновлять apache сразу на новую версию — это хорошая практика? А почему за этот год наплодили 5 релизов apache 2.4? Как получилось, что apache 2.2 написанный богами и имеющий модульную структуру, покрытие тестами (вы не знаете где их скачать?), нельзя выставлять в интернет?

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

                  Если послушать вас, то 1с Бухгалтерия — это такая простая программка, которая пишется любым тру веб-программистом с использованием передовых практик примерно за неделю? А фирма 1с уже пару десятилетий занимается фигней и изнасилованием практик программирования? Где те герои, которые подвинут 1с? Желательно бесплатно )


                  1. psyriccio
                    16.09.2016 01:40

                    apache обновлять сразу — хорошая, если он за nginx. Ого, целых 5 релизов! apache, кстати, совсем не «эталон» разработки, я бы даже особо его не хвалил. apache напрямую нельзя выставлять почти никакой, а особенно старый, куча есть известных проблем, взять хотя бы «slow headers». Но всё же, по сравнению с моделью разработки 1С — небо и земля. Что вы так к тестам то прицепились? Где скачать тесты apache? В репозитории с его основным кодом (хттп:/svn.apache.org/viewvc/httpd/test/) там не просто тесты, у него там в субпроектах целый фреймворк для тестирования, специально под него написанный, от модульного и функционального тестирования до нагрузочного. Опять же, на мой взгляд — apache не совсем хороший пример для подражания.

                    Уж простите но такая модульность — это просто имитация модульности, что-то с еле-еле прорисовывалось через, так называемую библиотеку стандартных подсистем, но получилась имитация чуть лучше, но такая же имитация. Очень похоже по «стайлу» на имитацию ООП, которую можно встретить в некоторых конфах, т.е. явные потуги реализовать немного ООП на том что есть — выглядит как паралимпиада по программированию.

                    Я не говорил, что конфы 1С простые, скорее наоборот, там много усложнений из-за отсутствия инструментов и квалификации у разработчиков. А архитекторов, такое ощущение, что нет вовсе.

                    Чудес не бывает, в том виде в котором 1С есть — она монополист (ну почти) и так может оставаться довольно долго. Другой пример подобной ситуации — Артемий Татьянович Лебедев, не сказать, что он плохой дизайнер, но не гениальный и он останется «первый дизайнер России» совсем не потому, что лучше него никого нет — он просто оказался в нужное время в нужном месте и сумел свою «монополию» поставить параллельно со становлением дизайна, как такового, на просторах нашей необъятной. Я совсем не хочу сказать, что это легко, но и гением дизайна можно не быть. С 1С история ещё печальнее — монополия крепче, талантами и не пахнет. Симбиоз хищной системы гос аппарата с паразитической 1С. А вы говорите — прогоните паразитов, быстро, желательно с помощью чего-нибудь вкусного и желательно бесплатно. А разгоните как хищников. Желательно без «заварушек», а честным голосованием.


    1. Avenger911
      13.09.2016 23:55

      Дык наличие таких «выгрузок/вгрузок» определяется желаниями заказчика, а не кривизной рук программиста.


      1. psyriccio
        14.09.2016 01:16

        Не совсем так, заказчик часто не обладает необходимой информацией и компетенцией, для того чтобы выбирать форматы «выгрузок/вгрузок» и в этом выборе ему должны помочь специалисты на этапе разработки ТЗ. Зачастую требования «тут нужен только xls» обусловлены не ограничениями системы или техническими аспектами, а настроением «левой булки» главного бухгалтера заказчика, пусканием этого дела на «самотёк», отсутствием соответствующих этапов проектирования системы или отсутствием проектирования как такового. Вот как раз 1С «разработчики» приучают руководителей и бухов к «наколеночной» разработке, без проектирования, выдавая это за «фичу», мол «мы поспеваем за бизнесом, сделаем всё, что попросите, в кратчайшие сроки», при этом не неся, зачастую, долгосрочную ответственность за подобные «разработки». Абсолютно все 1С-конфигурации, которые я в своей жизни видел (а видел не мало), дописываемые кем угодно — не важно, будь то франчайзи, студент-третьекурсник или собственный отдел разработки из n программистов с m сертификатами — абсолютно все эти системы являются системами с быстро и необратимо возрастающей энтропией. Все эти «разработки» напоминают эрозию, и у любой «базы» наступает момент, когда это проще выбросить, чем привести в порядок. Вот в такие моменты у директоров наступает (далеко не всегда) прозрение и шанс задуматься, какие же причины привели к подобной ситуации. Я таких руководителей видел, поверьте — этот опыт бесценен.


        1. Avenger911
          16.09.2016 08:33

          Охотно верю, хотя сам в области 1С не работал, но ситуацию живо представляю. Понятное дело, что если есть выбор, можно объяснить заказчику, что XLS будет в N раз дольше реализовывать, чем CSV, чтобы он подумал, нужно за это платить, или нет. Но бывает и так, что нужен именно функционал офисных файлов. И тут уж не скажешь «давайте лучше сделаем ODT», потому что MS Office куда более распространён, а OpenDocument он поддерживает только в последних версиях.


  1. vsb
    13.09.2016 02:28
    +1

    Самому, конечно, делать поддержку таких форматов будет сложно. Но, например, для Java есть Apache POI (а т.к. Java работает почти везде, то и прикрутить эту библиотеку можно почти везде через любой RPC), который для многих практических целей имеет достаточную поддержку офисных форматов. Поэтому не факт, что проще Windows поставить. Может быть проще написать малюсенькую программку на Java, скармливать ей входные параметры и получать от неё готовый документ (это если вы пишете не на Java).


    1. ruswizard
      15.09.2016 11:08

      Приходилось использовать apache tike (на базе poi) для преобразований doc(не docx) ) -> html. Увы, таки местами все там не особо хорошо. В результате пришлось допиливать до приличного понимания списков, заголовков и некоторых стилей. Хотя если нужно выгрузить данные\текст, то проблем особых нет) Иначе приходится закапываться в спецификации.


  1. novar
    13.09.2016 06:34
    +1

    Купите один сервер Windows 2003, установите на него лицензионный Word, и настройте простой веб-сервис.

    А есть такая версия MS Office, лицензионное соглашение которой такое позволяет?


  1. D_T
    13.09.2016 06:59

    «Сохраните в Excel 3.0 минимальный файл только с теми функциями, которые вам необходимы, и используйте его как пример минимальной BIFF-записи»

    Это уже не очень хорошо работает. Пользуюсь самодельным генератором 4.0.Последние эксели открывают в режиме «только чтение» и с отрисовкой содержимого иногда проблемы.


  1. Alexsandr_SE
    13.09.2016 10:12

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


  1. river-fall
    13.09.2016 12:23

    C тех пор прошло немало времени, Word/Excel онлайн давно доступен в Onedrive и многих других облачных сервисах — тот же Яндекс.Диск.


  1. yukon39
    13.09.2016 13:44
    +2

    «Купите один сервер Windows 2003, установите на него лицензионный Word, и настройте простой веб-сервис. Работы на полдня, с применением C# и ASP.NET… В последствии Word будет находиться в памяти под управлением COM-системы.»

    Только перед сдачей в продакшн ознакомьте клиента с такой информацией:

    Вопросы серверной автоматизации Office
    https://support.microsoft.com/ru-ru/kb/257757
    «Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.»


  1. EviGL
    13.09.2016 18:07

    Кстати, интересный вопрос. Автор предлагает использовать лицензионную Windows с лицензионным Office для решения проблем с форматом документов.
    Но позволяет ли лицензия офисного пакета такое использование? Что-то мне подсказывает, что использование пакета «не поддерживаемым Microsoft» способом, да ещё и перепродажа части его функциональности (если мы в своём платном веб-сервисе генерируем отчёты в xls, например) выходят за рамки лицензионного соглашения. Явно противоречит правилам про личное использование (1 лицензия = 1 пользователь).

    Так какой тогда смысл? В итоге разработчик тратит кучу бабла, но эффект такой же как и если бы он спиратил все вышеупомянутые продукты.


  1. DjOnline
    13.09.2016 19:16
    +3

    Я за старые добрые бинарные форматы, которые выглядят как нативные структуры данных C. Непонятно зачем многие перешли на XML, получив только увеличение времени открытия/сохранения и потребления памяти. Всё равно все используют готовые библиотеки для работы с этими форматами, поэтому абсолютно пофигу что там внутри, и этот человекочитаемый XML там нафиг был не нужен, ни там, ни в других подобных случаях как в примере ниже.
    Тот же Premiere перешёл с бинарного формата в XML, теперь сохранение больших проектов с теми же бинарными данными Warp Stabilizer — это боль на десятки секунд и минут. Вместо того чтобы кинуть бинарные данные сразу на диск, они теперь сначала кодируются через base64, затем кидаются в виде строки в сотни мегабайт в XML, а потом это всё зипуется в проект одноядерным алгоритмом из zlib. Эффективные менеджеры, мать их за ногу.


  1. xdenser
    13.09.2016 20:21

    Не сочтите за рекламу, но существует куча вендоров, которые предоставляют библиотеки для работы с офисными форматами без офиса. На вскидку Aspose и GemBox. Aspose вроде рендерит похоже на ворд. Сделать 100% похожий на Office рендеринг вобоще очень сложная задача, тут со статьей согласен — используй COM. Он правда любит глючить. Потом есть куча проблем с апгрейдом старого кода, который использует COM и макросы. Если нужно только модифицировать/генерировать, то для Java есть бесплатная poi, хоть она и кривая, но генерацию документов Excel на ней сделать у меня получилось, в Word пришлось лезть в дебри формата — poi не умеет правильно обрабатывать закладки. А старые форматы… да лучше уж через COM…


  1. McAaron
    13.09.2016 23:55
    +1

    Вы нам тут расскажите еще, что микрософт разработал ексель. Последняя коза знает, что она его купила уже готовый и практически ничего нового за все это время туда не добавила. Куплен эксель был в рамках многоходовки по отжатию ништяков — приватизации прибылей и национализации убытков, которую провернула команда под крышей конгресса. В те времена конкурент экселя 123 был куда производительнее и функционально мощнее. Умел на 386/486 машине через дос-экстендер заюзать всю доступную память — 16 Мбайт. Потом микрософт купила ексель, айбиэм купил лотус. Потом айбиэм убил 123, передав все наработки в микрософт, как это было и с полуосью. Вклад микрософт в эксель состоит в засовывании туда OLE. Чтобы таблицы можно было курочить не вылезая из мсворда.
    Масштабировав на порядки методику ибм-микрософт по приватизации прибылей/национализации убытков, НАСА передала свои технологии вместе с несколькими тысяч живых инженеров Илоне Маск. В результате вся инженерная братия была поставлена перед выбором — перейти к Илоне в частную контору и лишиться государственной пенсии, либо уволиться по сокращению.
    В случае ибм-микрософт колическтво людей ограничивалось парой сотен. Кстати, если кто забыл, разработчик, который работал над контейнером в PM и GDI остался в IBM, в резульате чего вплоть до 98 включительно виндовсы были 16-разрядными — исходников не передали, поэтому приходилось линковать виндовысы со старым 16-разрядным объектным кодом от виндовсов 3.11.


    1. DMGarikk
      14.09.2016 13:14

      вплоть до 98 включительно виндовсы были 16-разрядными — исходников не передали,


      вы про NT забыли


      1. McAaron
        14.09.2016 14:53

        Ее практически с нуля делали, в отличие от Win'9x. Она и называлась «Виндовс-новые технологии» поэтому. Там контейнер полностью свой, внешне похож на тот, что был у Win'3 но совершенно беспонтовый. Даже драг-н-дроп толком не поддерживался.


        1. DMGarikk
          14.09.2016 15:12

          на самом деле ноги NT частично растут из OS/2


          1. McAaron
            14.09.2016 16:06

            Только на уровне некоторых концепций. NT была микроядерной, полуось — монолитной. NT была 32-разрядной, OS/2 была 32-разрядной только выше ядра — все драйвера аппартного уровня были 16-разрядными начиная от варпа 3.0 вплоть до авроры 4.5. Даже термин был такой «thunking» — передача управления между 16- и 32-разрядными сегментами кода. Хорошо это или плохо, не ясно до сих пор — код закрыт, все засекречено. Тем не менее современные процессоры 16-разрядный режим поддерживают, судя по форматам дескрипторов шлюзов.


  1. artemt
    13.09.2016 23:55

    Как вспомню старые добрые времена, так вздрогну — драйвер Excel при импорте табличных данных проанализировал первые пять строк и решил, что в этой колонке строка не длинне 255 сиволов а в этой вообще ничего нет; и тут не число, мало ли что там пользователь ввёл, Excel же для красоты точку на запятую поменял…


    1. user343
      14.09.2016 10:12

      Зато Excel ещё 97 года допускал совместную работу через сеть нескольких пользователей (на разных листах).

      В Open Office с «простым» форматом этой функции не смогли полноценно сделать до сих пор.

      «Q: Могут ли несколько пользователей одновременно работать с одним файлом?
      A: Совместная работа в электронных таблицах Calc возможна в версии 3.0 Сервис — Совместно использовать документ
      В режиме совместного доступа к таблице налагается ряд ограничений на редактирование (нельзя удалять/добавлять столбцы/строки и т.д.)»


  1. Sly_tom_cat
    14.09.2016 11:45
    +1

    Я так понял, статя была попыткой остановить развитие таких проектов как OpenOffice — типа «не пытайтесь ребята — у вас все равно ничего не выйдет с нашими форматами» (это сообщение в тексте повторено несколько раз)


    1. NetBUG
      14.09.2016 13:07

      А по состоянию на 2016 год через ту же Apache Tika вполне можно работать, и осчастливить минимум 80% пользователей.


      1. Sly_tom_cat
        14.09.2016 14:49

        По современному состоянию уже много есть и офисных пакетов и просто библиотек которые вполне сносно позволяют работать с DOC и SCV, но от этого те лимиты что были в них заложены не исчезли — в CSV например на каждой странице не может быть больше 65535 строк или столбцов — как не крути.

        Собственно CSV потихоньку уходит в прошлое — все больше используется XLSX.


        1. McAaron
          14.09.2016 15:01

          Все, что на xml, не более, чем раскрученная мода. У этой «технологии» нет абсолютно никаких преимуществ над джейсон-подобными форматами, даже наоборот — попробуйте распаковать odt или docx и что-нибудь поправить, да хотя бы найти.
          xml планировался вместо flex+bison, которые нынешние «програмизды» не в состоянии освоить в силу массовой необразованности.


        1. relia
          15.09.2016 11:09

          в CSV например на каждой странице не может быть больше 65535 строк или столбцов — как не крути.

          Собственно CSV потихоньку уходит в прошлое — все больше используется XLSX.

          Откуда такие ограничения в форматированном текстовом файле?! Если Ваши инструменты не умеют читать большие CSV, то меняйте инструменты, а не обвиняйте формат не в его грехах.

          Прекрасно перегоняю данные в CSV файлах на почти 200 млн строк. Любой другой формат выжрал бы винчестер, ОЗУ, и, самое главное, время!


    1. McAaron
      14.09.2016 15:14

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


      1. DMGarikk
        14.09.2016 15:24

        они в блокноте отчёты пишут?


        1. McAaron
          14.09.2016 15:55

          В конце 90-х начали использовать Lotus Notes, из приложений которого выбросили возможность форматирования текста поль зователем, и развили в мощное корпоративное приложение. Вы просто набираете тексты в формах, решаете, что выделить, и не заботитесь, как он будет выглядеть на бумаге. В отчете, который выполняется по определенным стандартам, не требуется пользовательское форматирование — достаточно текста, а формой занимаются специально обученные люди.
          Когда ставили задачу, одним из требований было, чтобы документ, прошедший двумя путями правок через полсотни человек, выглядел на выходе абсолютно одинаково.


          1. DikSoft
            14.09.2016 22:22

            По закрытости и «фундаментализму» Lotus Notes (… is not a mail system! ) даст фору любому офисному формату. )))
            До сих пор с ужасом вспоминаю этого монстра, с которым в бытность Зурабова «подружился» ПФР.


            1. McAaron
              15.09.2016 13:03

              Кого-нибудь интересует формат файлов Оракла или дибиту кроме их разработчиков?
              Не знаю, как в настоящее время, но в конце90-х того API, что IBM предоставлял разработчикам, было более, чем достаточно. Не помню, чтобы возникали какие-нибудь вопросы в связи с недостатком информации. Мало кто так подробно и тщательно подавал информацию не только тогда, но и сегодня. Да, был децел «недокументируемых» вещей, но в подавляющем большинстве своем это были депрекаты, удаление которых на тот момент было нецелессообразным. Причем эти «недокументированные» просто не находились в онлайн-системе электронной подсказки visual age из ide по хоткею. Тем не менее, информация о них присутствовала на каком-нибудь сиди из комплекта документации или была откомментирована в заголовочном файле.
              Зачем и кому может понадобиться информация о формате файлов, можно только пофантазировать — физический формат данных вообще в рамках среды IBM ничего не значил — поддерживалась настоящая объектная модель в том самом виде, в котором она изначально была задумана. Все вопросы совместимости и переносимости, включая межплатформенный обмен, решались на уровне абсолютно открытых решений и стандартов — в рамках среды IBM это был SOM (System Object Model), вне ее — CORBA. То, что позже появилось у микрософт под названием COM, это крайне криво реализованное подмножество технологий SOM. Причем спецом реализованное так, чтобы огородиться от остальных.


              1. relia
                15.09.2016 13:36

                Кого-нибудь интересует формат файлов Оракла или дибиту кроме их разработчиков?
                Не знаю, как в настоящее время, но в конце90-х того API, что IBM предоставлял разработчикам, было более, чем достаточно. Не помню, чтобы возникали какие-нибудь вопросы в связи с недостатком информации.


                А в серверах БД фишка не в файлами с данными, а в алгоритмах работы с ними. Делал реверс баз Pervasive до 5.x и 6.2 (там заголовки таблиц генерировались приложением на лету, а в файлах были только данные) — ничего сложного. А вот заставить быстро читать или писать — это колоссальные знания.

                PS
                Криптованные данные умышленно вывожу за скобки.


  1. geekmetwice
    15.09.2016 11:09

    Spolsky — мужик, конечно, известный, но его ОПРАВДАНИЯ для меня не выглядят профессионально. Особенно там, где сама же компания ЗАИНТЕРЕСОВАНА В МОНОПОЛИИ. Именно закрытый формат файлов и его безумная структура позволили мелкософту год за годом продавать «перекрашенный офис» слегка пополняя его перделками — ведь никто не напишет ДАЖЕ ИМПОРТ этой фигни в свой «СуперОфис», не говоря об экспорте.
    Так что нет, Джоел, не оправдывай мелкомягкую глупость и намеренное усложнение формата. Да и кто вообще может заложить голову за то, что в MS работают сплошные специалисты??
    Для примера, есть формат SVG — вы сами догадываетесь, насколько сложными могут быть переплетения геометрии, раскраски, текста, наложений и т.п. И ничего — обошлись ПРОСТЫМ XML! Элементарной иерархией, которую даже чайник может открыть и сходу понять хотя бы половину текста. ВОТ ТАК нужно проектировать форматы!


    1. McAaron
      15.09.2016 13:30

      Шутите? xml человеком практически не читаем. То, что это символьный формат, а не бинарный, не делает его более понятным. Это во-первых.
      Во-вторых, мало какие данные могут быть представлены в иерархическом формате. Был уже лет двадцать назад такой — sgml назывался (xml — жалкая калька с него). Загнулся именно по причине того, что не может поддерживать полносвязные объекты с той же эффективностью (здесь можно смеяться), что и иерархические.
      А уж просто понять структуру дерева, просто глядя в xml, могут не только лишь все.


      1. geekmetwice
        15.09.2016 14:16

        Вы можете впадать в крайности сколько угодно, но очевидное вы не переспорите: читать XML — можно, бинарный формат — нет.
        Во-вторых, никого не интересует «мало какие данные», тем более, что речь идёт о конкретном применении. Вы HTML страницы видели? Ничего, что они тоже иерархия? Так что мешало макакам в менеджменте использовать XML?
        Структуру дерева и не надо ВСЕМ понимать — достаточно иметь грамотно спроектированную иерархию + документацию. Посмотрите, сколько редакторов поддерживают SVG — для них это пара пустяков именно по причине удобного формата.

        Так или иначе, ЛЮБОЙ человеко-читаемый формат был бы лучше кусков бинарного гогна, плодимого больным менеджментом MS.
        К слову, тот же JSON — вполне удобный формат, но MS даже его профукала, когда переходила с бинарного. эпик фэйл.


        1. McAaron
          16.09.2016 12:45

          Вот видите, Вы сами даже простой текст понять не в состоянии, а спорите.
          Ваша фраза «читать XML — можно, бинарный формат — нет.» совершенно не противоречит моей «То, что это символьный формат, а не бинарный, не делает его более понятным», она просто уточняет некоторую часть исходной семантики. И речь шла не о том, можно ли прочитать бинарный формат или нельзя прочитать xml — речь шла о том, легче ли понять, что описывает xml, чем, например тот же джейсон или шиндаини, если они описывают один и тот же объект.
          Я вот что Вам скажу — не имея специальной программы, Вы не только ничего в xml-документе не поправите, Вы даже в нем не разберетесь в отведенное для этого Вам время. Ключевое слово здесь — «в отведенное для этого время.» Именно поэтому появился и отлично на территории xml себя чуствует json, ну а уж если и его не хватает, то народ использует lex/yacc по их пярмому назначению.

          У меня есть софт для разработки под платформу IBM и там в составе есть система контекстной помощи, из которой подсказка или соответствующая страница мануала вызывается по хоткею из IDE. Я использовал ее по подписке лет десять, если не больше, и имел счастье наблюдать как появившияся модный xml туда проникал. Контент имеется в трех форматах: в специальном символьном редактируемом и компилируемом формате, в html и xml. Предполагается, что первый, назовем его СА, предназначен для контестного использования, второй для свободного чтения мануалов и справки, а третий типа универсальный и очень перспективный. Так вот этот универсальный по объему занимает в два с половиной раза больше места, чем первый и второй вместе взятые. При этом в процессе работы все CА полностью помещаются в ОП и вывод справки происходит быстрее, чем я палец с хоткея сниму, а универсальный на каждый вызов шелестит блинами. Для чтения html достаточно примитивного просмотрщика, лишь бы умел картинки показывать, а для универсального xml требуется сугубо свой просмотрщик.
          Эта справка иногда подразумевает показ картинки, например, синтаксической диаграммы или схемы БД. Картинки присутствуют в трех форматах — svg (тот же xml), png и бинарном векторном (оба компилируются из svg). Первый используется для xml, второй для html, третий для CA. Это единственное место в эдвайзере, где оправдано использование xml (svg). И самое интересное — именно под шиндовсами это не работает — в страницу, сверстанную из xml, вставляется png.


          1. geekmetwice
            16.09.2016 13:52

            > Вот видите, Вы сами даже простой текст понять не в состоянии, а спорите.

            Зачем вы тратите своё время, испражняя пустопорожние «доказательства»? Начинайте сразу с фразы «самдурак» — это лучший аргумент. Не стыдо быть таким быдлом, «товарищ из Рассеи»? Вас где учили общению со взрослыми? Я могу сказать ровно тот же текст, что вы ни черта не поняли из объяснений оппонента, но с пеной у рта пытаетесь ПРОПИХНУТЬ своё «единственно верное» мнение. Именно «мнение», а не реальный аргумент.
            С вами лично не вижу никакого смысла продолжать — сами разбирайтесь с новыми воротами.