Библиотека Интернет Индустрии I2R.ru |
|||
|
Поколение 1СБлагодарностиХотелось бы поблагодарить tsd и slw за их убежденность, за то, что смогли зацепить, за то, что заставили вспомнить программирование на 1С. Очень хотелось бы поблагодарить Александра Зданевича (_-ZAV-_), Алексея Мазуркина (Marshak_IX) и Александра Галимова за активное участие в обсуждении проблемы. Во-первых, без их поддержки я не смог бы выбраться из пучин пессимизма. Во-вторых, их здоровая лень вынудила меня сделать мастера создания тестовых данных. ПредысторияНа форуме Территория 1С было начато обсуждение "Возвращаясь к ERP и 1С" (к сожалению, на форуме не работают ссылки на топики, поэтому, если хотите найти оригинал, поищите в архиве. здесь копия). Где то в середине (46 постинг) один из участников БТР сказал: "Сколько общаюсь, пока не слышал реальных проблем по реализации ERP в конфигурациях 1С". Я, считая, что он написал несерьезно, написал свой ответ (50 постинг): "А как насчет ввода планов будущим числом? Или всю ERP-систему на бухгалтерии делать? :)" После этого было длинное обсуждение. Я постарался выйти из этого обсуждения. В конце (286 постинг) известный участник этого форума Тот высказал мысль, что к 1С предъявляются только "технические" претензии, что все учетные задачи на 1С решаются: "А БТР - он хитрый. Он знает, что никто ничего конкретного не скажет. Потому как давно бы все это известно было. Что вот нельзя решить задачу в 1С, сформулированную в терминах учета - и все тут". Я повелся на утверждение Тота и привел только три таких задачи:
Трехвалютный учет обсуждался давно и неоднократно. Я даже создал страницу с описанием проблемы. Там же находится пример, который нельзя реализовать на 1С и внешний вид отчета, который нельзя получить. Немного о функциях работы со временем. В самой 1С v 7.7 просто нет такого типа. Т.е. нет штатных средств, которые работают со временем. Это значит что программисты вынуждены придумывать что то свое. А это сильно удорожает проекты, в которых учет времени обязателен. Удорожает вплоть до неприемлимости решения. Про планирование хотелось бы поговорить в данной статье. Что такое "решаются - не решаются"1С открытая система. В 1С есть внутренний язык программирования. Кроме того, платформа 1С предоставляет механизм "внешних компонент", который позволяет "прикрутить" любую библиотеку на любом языке. Это значит, что теоретически на 1С можно решить абсолютно ЛЮБУЮ задачу. НО. Совершенно очевидно, что теория и практика - разные вещи. Совершенно очевидно, что любое практическое решение имеет свою цену. Эта цена складывается из: цены создания, цены подключения (внедрения), цены сопровождения и цены утилизации. Я постоянно говорю, что имею в виду практическую решаемость задачи. Это значит, что при рассмотрении должны учитываться вопросы цены и целесообразности. Если задачу можно решить теоретически, то вполне возможно, что практическое решение не имеет никакого смысла. Например, многие алгоритмы шифрования основываются на том, что практически, за разумное время, большое число нельзя разложить на простые множители (т.е. задача не решается практически), хотя теоретический алгоритм нахождения множителей был известен еще Эвклиду. ПланированиеИтак, предположим мы занимаемся планированием. Если сильно упростить, это значит, что у нас есть некоторый процесс и есть некоторое число параметров этого процесса. Планирование состоит в том, что записываются плановые оценки состояния параметров, а после того как стали известны фактические оценки, фактические и плановые оценки сравниваются, затем на основе выявленных отличий принимаются решения. Пример планирования. Когда речь идет об 1С, как правило, подразумевается управленческое и финансовое планирование. Т.е. все оценки выражены числами. Пример финансового планирования. Что является ключевым в нашем случае? Плановая оценка записывается до фактического исполнения процесса. Как правило, чем раньше мы сделаем оценку, тем лучше. Проблема будущих проводок на регистрахИтак, для планирования мы должны внести информацию о будущих событиях. Если эту задачу решать при помощи регистров, то:
Практически это значит, что период планирования необходимо записывать в одном из измерений регистра. А это значит, что для составления отчета план/факт 1С будет вынуждена:
Только отклонения плана от факта явно недостаточны для анализа. Например, отклонение в 100 рублей, если запланировали 10 000, является терпимым. Но такое же отклонение в 100 рублей является совершенно недопустимым, если запланировали всего лишь 100 рублей. Совершенно очевидно, что анализ проводок с начала деятельности будет выполняться слишком медленно. Это недопустимый вариант. Рассмотрим вариант с незакрытым регистром. Хранение незакрытых (не обнуленных) планов приводит к сильному распуханию файла с промежуточными итогами и очень медленной обработке итогов. На реальных данных распухание приводит к недопустимо медленной работе 1С. Незакрытый регистрРегистр это объект, который позволяет хранить движения по заданным измерениям и получать итоги в разрезе этих измерений. Гарантируется, что регистры очень быстро получают итоги на некоторый момент времени. Этот момент времени называется точкой актуальности (ТА). Разработчики предполагали, что ТА должна совпадать с текущим моментом времени. Для нас важно физическая структура регистра. Регистр это два файла - сами движения и промежуточные итоги. По-умолчанию, 1С создает ежемесячные итоги плюс итоги ТА. Важно, что для получения итога на произвольный момент времени 1С берет ближайший итог и суммирует все движения регистра от момента промежуточного итога до заданного момента. Таким образом, каждый промежуточный итог должен хранить (и хранит) ненулевые итоги по всем комбинациям измерений. Чем больше измерений, тем больше может раздуваться файл итогов. В методиках, на всех обучениях и в типовых конфигурациях 1С говорит, что надо стремиться, чтобы каждый плюс закрывался минусом, каждый минус - плюсом. Очень нехорошо, когда в регистре длительное время остаются незакрытые остатки. Надо стремиться, чтобы все суммы по всем измерениям закрывались в 0. Как только в регистре по некоторому измерению получился 0, то в следующий период этот промежуточный итог переноситься не будет. Подробнее см. "Описание встроенного языка" начало главы работа с регистрами оперативного учета. У меня стр. 315. Предложения tsd и slwНа форуме были два человека (tsd и slw), которые убеждали меня в возможности планирования на регистрах. Если кратко, то их предложение сводилось к тому, что период надо представлять как измерение регистра. На форуме приводился пример кода, в котором объяснялось, как надо упаковывать информацию о периоде в справочник. Ничего о закрытии регистра не было сказано. Но мою просьбу предоставить работающий пример, slw прислал вот такую конфигурацию. Я благодарен slw за затраченное время. Жаль, что в тестовом примере нет мастера, который создавал бы тестовые данные. Но все равно, пример очень показателен. Тестовый пример от slwВ этом тестовом примере есть две принципиальные идеи:
По-моему, кодирование даты это совершенно избыточная функциональность, так как удобнее просто завести дату в реквизите и искать по реквизиту, вместо того, чтобы затевать подобные извраты (см. модуль проведения документа План). Для того, чтобы решить проблему с закрытием итогов было введено понятие "Горизонт планирования". Горизонт планирования должен выбирается заранее, до планирования. Горизонт планирования это день, неделя, месяц, квартал, год. Документ закрытия планов просматривает все планы и если план был создан давно и ушел за горизонт планирования, то план ОБНУЛЯЕТСЯ! Мда... Интересное решение. Во-первых, проблема не решается, а "загоняется под коврик". Во-вторых, а что делать, если хочется сделать отчет план/факт за прошлый год после того, как план закрыт? :) Кроме того, стоит посмотреть на безумства, которые совершаются для "оптимизации". На самом деле эта "оптимизация" только замедлила проведение, но ни в коем случае не решила проблему с незакрытыми регистрами. Но именно такие безумства сильно удорожают проекты и сопровождение. На форуме было сказано, что эта конфигурация может быть создана за "пару часов". Наверное. Жаль, всет-таки, что нет мастера и автор не подумал о количестве реальных параметров планирования... Мой тестовый примерЯ считаю, что теоретически, реализовать планирование на 1С можно. Планирование на 1С можно использовать для "игрушечных" случаев. Я считаю, что в 1С невозможно реализовать планирование в практически значимых случаях за разумное время и за разумные деньги. Кроме того, не надо забывать, что просто вводить плановые данные недостаточно. Необходимо продумать систему урегулирования бюджетов, систему выявления значимых параметров, систему поддержки принятия решения, систему нормального сравнения с фактическими данными и т.п. Я не решал проблемы. Я попытался их показать. Для этого была создана конфигурация, в которой есть:
Я предполагал, что бюджетов может быть несколько: оптимистичный, пессимистичный, бюджет продаж, бюджет оплат, бюджет затрат и т.п. Я предполагал, что периоды кодируются каким-либо образом в элементах справочника. Сейчас совершенно неважно каким именно. Главное, что каждый элемент однозначно определяет период планирования. Я предполагал, что планирование ведется по статьям затрат. Кстати, совершенно необязательно планировать именно затраты. Вместо затрат может быть что угодно. Но затраты планируют очень часто, и у меня сработала привычка. А потом переименовывать этот справочник было лень в 1С это непросто. Планы вводятся с помощью документа План. Плановые данные записываются в регистр План. Все документы вводятся текущей датой. Как правило, документы планирования будут "размазаны" во времени. Это должно несколько снизить объемы файла с промежуточными итогами. Но если в данной программе учет ведется несколько лет, то не стоит рассчитывать на существенное облегчение. Отчет выводит только служебную информацию и информацию о времени исполнения. Однако, отчет План/факт честно исполняет запрос по регистру/план факт. Причем запрос выполняется на точку актуальности (мы помним, что 1С гарантирует, что итоги быстрее всего рассчитываются именно на ТА). Время исполнения этого отчета при различных параметрах и было основным тестируемым параметром. Кроме времени исполнения, можно посмотреть и на временные файлы, которые генерируются во временном каталоге (см. документацию 1С). Объем этого файла позволяет получить нижнюю оценку объема данных, необходимых для построения данного отчета. В реальной жизни этот отчет должен содержать запросы к фактическим данным. Кроме того, отчет должен уметь сопоставить период планирования и фактические даты. В реальной жизни отчет будет выполняться существенно медленнее (в разы). Отчет сознательно не использует никаких ухищрений типа таблицы значений. Дело в том, что таблица значений (ТЗ) "живет" в своп-файле операционной системы. Я понимаю, что ТЗ в некоторых случаях спасает программиста от рутинной работы. Но использование ТЗ никогда не дает выигрыша по скорости. Замедление - сколько угодно. ТЗ - удобный инструмент, иногда без нее не обойтись, но повсеместное использование ТЗ говорит скорее о низкой квалификации программиста. :) И наконец, мастер. Это пожалуй, самая трудоемкая вещь во всей конфигурации. Если для создания остальных объектов, я просто использовал автосоздание, то здесь пришлось повозится. Задача мастера в конфигурации сделать для вас всю подготовительную работу по вводу данных. Мастер предлагает 4 набора параметров для тестирования. 1 вариант - минимальный 2 вариант - еженедельное планирование по 100 статьям затрат 3 вариант - ежедневное планирование по 100 статьям затрат 4 вариант - еженедельное планирование продаж по артикулам Результаты тестированияНемного о методике тестирования. Перед каждым тестом я удалял старые данные с помощью bat-файла "deldata.bat". Перед каждым тестом я очищал временный каталог Windows. Тест запускался в монопольном режиме. Dbf-база располагается на локальной машине. Я замерял:
Тест проводился на ноутбуке Celeron 900, 256Mb, Windows XP Home Edition. 1С:Предприятие 18 релиз. Собственно сами результаты:
Еще раз напомню, что тесты проводились на локальной машине и к приведенному здесь времени надо добавить задержки на передачу по сети. А это существенные задержки. Я принципиально не хочу приводить результаты теста в сети, поскольку результаты будут существенно различаться в разных условиях (разные типы сетей, разные нагрузки и с разное число пользователей 1С, разно число проведений планирования). Если интересно, то выполните этот тест самостоятельно. Производительность в сети может упасть на порядок-два. На создание самого примера было затрачено 3 часа. Около 5 часов было затрачено на поиски альтернативных более оптимальных вариантов. Более 40 часов было затрачено на тестирование. Итого на создание работоспособного простейшего примера было затрачено около 48 часов. И это без механизма согласования бюджетов, это без механизма выявления источников отклонений, это вообще без сопоставления с фактическими данными... мда... На написание этой статьи было затрачено около 4 часов. ВыводыВывод 1: очевидный Существуют технические приемы (например, внешние компоненты) и существуют административные приемы (например, свертка параметров), которые позволяют поднять производительность. Однако, эти приемы очень сложны и очень недешевы в сопровождении. Небольшие планы удобнее создавать при помощи электронных таблиц. Поэтому не думаю, что небольшим предприятиям целесообразно вести планирование на регистрах в 1С. Вывод 2: неожиданный Чтобы уверенно предлагать решение, которое работает настолько медленно нужно обладать достаточным уровнем авантюризма :или просто ничего не знать про 1С :или ничего не знать о реальных задачах :или просто быть молодым и здоровым. Вывод 3: личный Что ж, здравствуй племя молодое поколение 1С. |
|
2000-2008 г. Все авторские права соблюдены. |
|