Если Вы считаете, что:

  • 1С 7.7 "умерла"
  • Вашу конфигурацию не составит труда быстренько и недорого переписать под 1С 8.2, а потом под 8.3 и 8.4
  • Ваша типовая конфигурация не подвергалась значительным изменениям, а если и подвергалась - проще перестроить свои бизнес-процессы, чем доработать новую конфигурацию.
  • Купить новый сервер - тоже не проблема (хотя любой сервер можно убить прожорливой программой, неоптимальной структурой базы и запросами)

...значит эта страничка не для Вас.

Эта страничка для тех, кто столкнулся с проблемами производительности на платформе 1С 7.7 и ее ограничениями в части интерфейса.


 

Альтернативные формы журналов документов и справочников  

Поля выбора значений


 

Альтернативные формы журналов документов и справочников

 

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

Много возможностей для расширения интерфейса предоставляет внешняя компонента FormEx. С ее помощью можно изменять размеры форм, присоединять формы, перехватывать события мыши и клавиатуры, раскрашивать строки, создавать деревья и проч. По ссылке можно скачать демо конфигурацию FormEx и саму компоненту. Документация online к ВК находится по ссылке.

Рассмотрим простой пример использования плана раскраски для подсветки текущей строки таблицы значений на форме (Табл).

ТЗ.ВставитьКолонку("FormEx_ПланРаскраски", 1);
ТЗ.Заполнить("(BRUSH_S[15582114])",,, "FormEx_ПланРаскраски");

Табл.Загрузить(ТЗ);

Табл.ВидимостьКолонки("FormEx_ПланРаскраски", 0);

Результат получается вот таким:

В глобальном модуле необходимо после загрузки ВК написать:

Сервис = СоздатьОбъект("Сервис");

Сервис.ВключитьРаскраскуТаблиц();
Сервис.ИспользоватьПланРаскраски(1);

При работе с табличными документами может очень пригодиться ВК Yoksel. Она позволяет быстро сохранять документы в Excel, создавать подписки на события, напрямую редактировать значения в ячейках, создавать группировки, использовать гиперссылки, скрывать и показывать колонки и ячейки и проч. Скачать компоненту, демо конфигурацию и документацию можно по ссылке.

Вот пример табличного поля с подсветкой текущей ячейки и строки и группировками:


 

Поля выбора значений   <в начало>

 

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

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

Выбор можно производить также набором некоторого количества символов и нажатием клавиши Ввод. Это более простой в реализации способ.


 

Прямые запросы   <в начало>

 

Использование прямого доступа к данным (формат БД: SQL либо DBF) позволяет значительно (иногда в десятки раз) ускорить формирование отчетов, проведение документов. Использование прямых запросов в модулях проведения документов в совокупности с другими мероприятиями позволяет значительно снизить транзакционную нагрузку на сервер, сделать комфортной активную работу значительно большего количества пользователей. Проблема блокировок БД и простоев после грамотно проведенной оптимизации может практически исчезнуть. Вместо того, чтобы бесконечно наращивать мощности компьютеров пользователей и сервера, попробуйте заняться оптимизацией.

Статьи, посвященные прямым запросам:

Как написать прямой запрос в 1С (SQL) с помощью 1С++

Как написать прямой запрос в 1С (DBF, 1sqlite)

Ускоряем регистрацию объектов в МОД (для SQL)

Проверка дублей строк с помощью 1С++ 

Аналог ON DUPLICATE KEY UPDATE в MS SQL

Как использовать УРБД в отличающихся конфигурациях

Примеры решения нестандартных задач на T-SQL в 1С

Запросы в 1С к двум базам одновременно (DBF, OLE DB)

Онлайн резервирование товаров на складе (online reservation)


 

Как ускорить проведение документов в 1С 7.7?   <в начало>

 

Прежде всего нужно исчерпать все штатные возможности.

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

А вот обратить внимание на состояние данных стоит самым внимательным образом. Например, регистры должны закрываться. Вот пример из практики.

В программе оформляются документы "Реализация" с видом операции "Прочая розничная реализации", которые формируют задолженность с видом долга "Долг за товары".
Они закрывается безналом (Строка выписки приход).
Но в основном от покупателей идут оплаты ПКО с видом операции "Розничная выручка".
Такой ПКО не закрывает имеющиеся реализации.
Если бы в реализациях стоял вид операции "Продажи по принятой выручке", то формировался бы долг с видом долга "Долг за товары в рознице" и такие реализации закрывались бы ПКО, но не закрывались бы безналом.
 
Что получается когда документы оформляются таким образом? Каждый месяц появляются новые незакрытые документы "Реализация", программа при открытии периода переносит задолженности по ним на следующий месяц, затем к ним добавляется такое же количество незакрытых документов в текущем месяце и т.п. В результате таблица итогов становится огромной, и даже простая выгрузка итогов регистра в таблицу значений (что предусмотрено модулями проведения документов) занимает несколько секунд.
Закрыв регистры вы получите значительный прирост в производительности учетной системы.
 
Если конфигурацией предусмотрено ведение последовательностей - восстанавливайте их регламентным заданием. Это будет гарантировать хоть какой-то порядок.
 
В случае невозможности перепроведения большого количества документов прошлых периодов можно закрыть регистры обработкой и закрыть период для изменений.
 
Если Вы сможете организовать работу с помощью корректировочных документов и отказаться от временного расчета регистров - получите еще больший выигрыш по скорости проведения документов, ведь в новой системе будут задействованы все документы оперативного учета.
 
Организация работы с программой также значительно влияет на нагрузку сервера. Проведение документов задним числом, независимо от того используется временный расчет регистров или нет, вызывает пересчет таблиц итогов вперед до точки актуальности.
 
Если у Вас есть лавинообразные блокировки при проведении документов - попробуйте ВК TerminalSleep от romix, скачать ее можно по ссылке.

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

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

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

Если документ при проведении или записи лишь измененяет какой-то признак, то стоит задуматься о другом способе хранения этого признака. Например, не стоит записывать или проводить документ, если нужно изменить его этап. Этап лучше хранить в собственной таблице или в служебном справочнике. "Чужие таблицы" 1С при реструктуризации не трогает. Тогда вместо огромного количества запросов Вы можете обойтись одним (!) запросом, который будет изменять лишь одну (!) индексированную запись в таблице. Старайтесь не пользоваться документами для хранения служебных данных (например, контакт с контрагентом и проч.). Запись и проведение документа вызывает больше блокировок и выполняется дольше, нежели запись одного элемента справочника (можете посмотреть профайлером).

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

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

Один из самых важных моментов - это пересмотр бизнес-процессов. Если удастся сократить количество производимых операций или упростить их - выиграет не только база 1С. Также поможет разгрузить пользователей и систему использование роботов (служебных пользователей) для выполнения тех операций, которые можно автоматизировать  (загрузка заявок, подготовка данных для тяжелых отчетов, проведение всех документов от имени одного пользователя и проч.).

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

Тяжелые аналитические отчеты можно строить в OLAP-кубах, добавляя данные за предыдущий период. В процессе использования таблиц Excel или какого-то другого ПО нагрузка может быть такой большой, что для нормальной работы потребуется отдельный сервер.

По аппаратной части в сети можно найти множество советов. Основной момент – использование терминального доступа для работы нескольких пользователей. Даже если у Вас не серверная операционная система на «сервере» - можно пропатчить termsrv.dll (снять ограничение на количество пользователей) и внести необходимые данные в реестр.

 

Рассмотрим нештатные и дополнительные возможности оптимизации и увеличения производительности 1С.

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

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

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

Разумное использование прямых запросов также поможет снизить нагрузку на сервер. Так, например, возникла необходимость многократно проводить заявки. Путем изменения данных только по необходимым строкам была достигнута скорость проведения документов роботом по 2-3 документа в секунду при около 100 работающих пользователях. Но само по себе использования прямого доступа к данным еще не означает того, что документы будут проводиться или заполняться быстрее. Неумелое его использование может показать худшие результаты, чем применение штатных методов. Поэтому сравнивайте результаты при одинаковых условиях.

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

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

Можно применять также достаточно сложные в реализации гибкие блокировки, собственную работу с таблицами итогов и прочие "извращения". Но только если Вы попробовали все то что написано выше.

Буду рад участию в интересных проектах по всему тому (и не только) что описано выше, пишите.

 

Продолжение следует...