1С:Предприятие 7.7. Оптимизация.

26.12.12

База данных - HighLoad оптимизация

Разгоняем 1С:Предприятие 7.7. Выжимаем последние соки.

Хочу сразу оговориться (уточнить), что в статье описаны приемы, которые позволяют на моем домашнем компьютере рассчитывать 11000 абонентов и при этом формировать и рассчитывать 60000 записей в журнал расчетов за 26 секунд в монопольном режиме в DBF версии 1С:Предприятия 7.70.025 на компоненте 1С:Расчет (ОС Windows XP). Объем базы данных около 350 Mb.

Постараюсь наиболее полно отразить замечания из комментариев к статье...

 

Только качественный контент

 

Мысль написать статью у меня появилась после того, как был задан вопрос в процессе обсуждения конфигурации для Абонентского отдела водоканала. Вопрос был прост: «Какие проблемы встречались, и какие методы использовались для повышения производительности».

Ответить на этот вопрос односложно не представляется возможным, т.к. было применено множество различных приемов. В этой статье описаны лишь некоторые из них. Начнем с того, что мне известно только два способа, которые позволяют поднять производительность вычислительной системы:

  1. Увеличить вычислительные мощности (железо)
  2. Сократить количество выполняемых действий (программа)

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

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

Начнем с простого и очевидного. Первый прием. Использование библиотек turbobl.dll, автор Александр Орефков или 1cpp.dll. Если рассматривать типовые конфигурации фирмы 1С для 1С:Предприятия 7.7, то наиболее заметный эффект использования данных библиотек проявляется в конфигурациях «1С:Зарплата и кадры 7.7» и «1С:Комплексная конфигурация 7.7». В данном случае для использования этих библиотек не требуется значительная модификация кода конфигурации. Эффект наступает сразу после загрузки библиотек даже в типовых конфигурациях, т.к. рост производительности происходит на уровне платформы 1С:Предприятия 7.7. В базовых версиях можно воспользоваться обработкой, которая загрузит одну из библиотек.

Например, для загрузки библиотеки можно вставить в конец глобального модуля следующий код:

ИмяБиблиотеки = КаталогПрограммы() + "TurboBL.dll";
Если ФС.
СуществуетФайл(ИмяБиблиотеки) = 1 Тогда
    ЗагрузитьВнешнююКомпоненту(
ИмяБиблиотеки);
Иначе
   
ИмяБиблиотеки = КаталогИБ() + "TurboBL.dll";
    Если ФС.
СуществуетФайл(ИмяБиблиотеки) = 1 Тогда
        ЗагрузитьВнешнююКомпоненту(
ИмяБиблиотеки);
    КонецЕсли;
КонецЕсли;

Остальные приемы потребовали более значительной модификации программного кода конфигурации.

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

Например:

Форма.Закладки.Добавить("Общий,Кнопки", "Общий");
Форма.Закладки.Добавить("Льготы,Кнопки", "Льготы");
Форма.Закладки.Добавить("Объекты,Кнопки", "Объекты");

Заменяем на

СписокЗакладок = Форма.Закладки;
СписокЗакладок.Добавить("Общий,Кнопки", "Общий");
СписокЗакладок.Добавить("Льготы,Кнопки", "Льготы");
СписокЗакладок.Добавить("Объекты,Кнопки", "Объекты");

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

Результат применения второго приема можно посмотреть здесь: Дополнительные материалы к статье.

Третий прием связан с сокращением количества используемых в конфигурации команд СоздатьОбъект(). В конфигурации для Абонентского отдела водоканала команды СоздатьОбъект("СписокЗначений") и СоздатьОбъект("ТаблицаЗначений") встречаются 1 раз только в глобальном модуле конфигурации. Например:

Перем глПустаяТаблицаЗначений Экспорт;

//*******************************************************
//  глТипТаблицаЗначений()
//
//  Параметры:
//      нет
//
//  Возвращаемое значение:
//      Пустая таблица значений
//
//  Описание:
//      Возвращает объект типа "ТаблицаЗначений"
//      Работает в 5-6 раз быстрее чем использование
//      конструкции СоздатьОбъект("ТаблицаЗначений")
//

Функция глТипТаблицаЗначений() Экспорт
    Перем
ТаблицаЗначений;

   
глПустаяТаблицаЗначений.Выгрузить(ТаблицаЗначений);
    Возврат
ТаблицаЗначений;

КонецФункции
// глТипТаблицаЗначений

глПустаяТаблицаЗначений = СоздатьОбъект("ТаблицаЗначений");

Далее по тексту всех модулей использование вызовов может быть следующим:

Процедура ПроцедураСозданияТаблиц()
    Перем
Таблица1, Таблица2, Таблица3;

   
глПустаяТаблицаЗначений.Выгрузить(Таблица1);
   
Таблица1.НоваяКолонка("ТекущийЭлемент");
   
Таблица1.НоваяКолонка("ТЗ");

    Пока <
УсловиеЦикла> Цикл
       
// Запишем таблицу в таблицу таблиц
       
Таблица1.НоваяСтрока();
       
Таблица1.ТекущийЭлемент = ТекущийЭлемент;
       
Таблица1.ТЗ = глТипТаблицаЗначений();
    КонецЦикла;

КонецПроцедуры
//глИнициализацияВидовТарифов

Замеры производительности показали, что в случае использования библиотек turbobl.dll или 1cpp.dll наибольшее ускорение дают команды глПустаяТаблицаЗначений.Выгрузить() и глПустойСписокЗначений.Выгрузить(). При этом может быть ускорение в 50-55 раз. Если библиотеки не используются, то ускорение только в 5-6 раз - тоже неплохо. Но есть прием описанный в 7 посте этой статьи, который при работе со СпискомЗначений дает ускорение в 15 раз и это без использования библиотек: ЗначениеИзСтрокиВнутр("{""VL"",{}}").

Результат применения третьего приема можно посмотреть здесь: Дополнительные материалы к статье.

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

ЖУ = СоздатьОбъект("ЖурналРасчетов.Учет");
ЖР = СоздатьОбъект("ЖурналРасчетов.Учет");

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

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

Пятый прием связан с использованием эффективных порций обрабатываемой информации. Эффективные порции могут измеряться в строках документов, количестве записей или количестве сотрудников. Эти порции чтения-записи обрабатываются в транзакции. Следует отметить, что размер эффективных порций зависит от режима работы 1С:Предприятия 7.7. В монопольном режиме работы размер эффективных порций может быть в 2-4 раза больше, чем в разделенном режиме. Это связано с обработкой блокировок, которые создают дополнительный трафик в разделенном режиме.

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

Для определения размера эффективных порций можно воспользоваться счетчиками диспетчера задач «Прочитано байт» и «Записано байт». При подборе эффективной порции уменьшение значения этих показателей чаще всего дает наибольший рост производительности.

Рассмотрим возможную реализацию данного приема чуть подробнее.

  1. Отключается автоматическое удаление движений документа
  2. В форме документа создается процедура, которая запускает на проведение документ блоками
  3. В модуле документа процедура проведения изменяется на работу с блоками данных
  4. В модуле документа добавляется процедура отмены проведения
  5. В глобальном модуле добавляются процедуры на события пометки на удаление и отмены проведения документов с "особой" обработкой документов без автоматического удаления движений
  6. Изменяется групповая обработка документов, которая для документов без автоматического удаления движений открывает форму с передачей параметра запускающего документ на проведение

Блоки могут формироваться в виде списка (списка значений, массива и т.д.) или в виде указателя: номер строки, позиция в выборке по справочнику и т.д.

Примеры реализации можно посмотреть в типовых конфигурациях 1С или здесь http://www.infostart.ru/public/18657/

Пример обработки блоков с передачей указателя строки документа.
Текст в модуле формы документа

//*******************************************************
//  __Провести()
//
//    Параметры:
//      Нет
//
//  Описание:
//      Сохраняет и проводит документ. При этом делит процесс проведения на
//      несколько транзакций, что значительно сокращает общее время
//      проведения документа.
//

Процедура __Провести()
     
    ПриЗаписи
();
    Если СтатусВозврата() = 0 Тогда
        Возврат;
    ИначеЕсли
Модифицированность
() = 1 Тогда
        Записать();
    ИначеЕсли
Выбран
() = 0 Тогда
        Записать();
    КонецЕсли;
 
    Если
глУдалитьДвиженияДокумента(ТекущийДокумент
()) = 0 Тогда
        Возврат
    КонецЕсли;

 

    ФлагПроведения = 1;
   
Сч = 1; КоличествоСтрок = КоличествоСтрок
();
    Пока
Сч <= КоличествоСтрок
Цикл
        ФлагПроведения = Провести(,Сч
);

        Если ФлагПроведения = 0 Тогда
            Прервать
        КонецЕсли;

        Сч = Сч
+ 500;
    КонецЦикла;


    Если ФлагПроведения = 0 Тогда
       
глУдалитьДвиженияДокумента(ТекущийДокумент());
       
СделатьНеПроведенным();

    КонецЕсли;
 
КонецПроцедуры
//__Провести

Текст в модуле документа

//*******************************************************
Процедура ОбработкаПроведения(Режим = 0)
   
// Режим = 0 - провести документ без формирования движений по документу
    // Режим > 0 - допроведение документа

 
    Если ГрупповаяОбработка() = 1 Тогда
        глСообщениеГрупповойОбработки(ТекущийДокумент
);
        СтатусВозврата(0); Возврат;
    ИначеЕсли
Режим
= 0 Тогда
        Возврат;
    КонецЕсли;
 
    Для
Сч = Режим По Мин(Режим + 499, КоличествоСтрок()) Цикл
        ПолучитьСтрокуПоНомеру(Сч);
        // Текст обработки строк документа
    КонецЦикла;
 
КонецПроцедуры //ОбработкаПроведения

Шестой прием связан с заменой использования для объектов типа СписокЗначений метода Принадлежит() на метод НайтиЗначение(). Это связано с особенностями данных методов. Вот описание из метода Принадлежит():

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

Как показали замеры (в том числе и в отладчике) в большинстве случаев заявленная оптимизация не работает. Из около 100 проверенных строк кода оптимизация отработала только в 2-х. Во всех остальных случаях получалось ускорение в 2-3 раза на замененной команде. При сотнях тысяч повторений эффект получается довольно значительный. К сожалению мне не удалось определить точно по какому принципу определяется "массовое последовательное сравнение" и включается оптимизация, поэтому предлагаю протестировать конкретный кусок кода до и после применения данного приема.

Результат применения шестого приема можно посмотреть здесь: Дополнительные материалы к статье.

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

Результат применения седьмого приема можно посмотреть здесь: Дополнительные материалы к статье.

Восьмой прием связан с сокращением повторных обращений к базе данных в рамках, например, проведения документа. Т.к. операции чтения из базы данных являются более медленными, чем, например, из ТаблицыЗначений.

Пример использования данного приема применительно к конфигурациям «1С:Торговля и склад 7.7» и «1С:Комплексная 7.7» можно посмотреть здесь Распределение суммы по таблице значений

Разумеется, в конфигурации Абонентский отдел водоканала применяется еще множество других приемов. Но это касается в большей степени рефакторинга.

Да, еще про печать. Тема от ineoosaki. Вот несколько приемов. При выводе печатных форм оптимизировать можно код и таблицу.

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

Результат применения девятого приема можно посмотреть здесь: Печать этикеток. Быстрее, быстрее, быстрее.

Десятый прием. Шаблон печатной формы. Чем меньше ячеек содержит результирующая таблица, тем меньше памяти потребуется для ее отображения, тем быстрее будет выполняться навигация по таблице. Также при формировании таблиц большого объема нужно стараться избегать использования картинок и объединенных ячеек. Последние в некоторой степени можно заменить, указав свойство «По выделенным столбцам».

Результат применения десятого приема можно посмотреть здесь: Печать этикеток. Быстрее, быстрее, быстрее.

Одиннадцатый прием. Для больших таблиц также применим метод определения эффективной порции. Т.е. большой отчет может быть разбит на несколько небольших отчетов. Это тоже позволит поднять производительность печати.

Результат применения одиннадцатого приема можно посмотреть здесь: Печать этикеток. Быстрее, быстрее, быстрее.

Двенадцатый прием. Кроме этого можно значительно сэкономить ресурсы ПК, если отправлять отчеты непосредственно на печать без вывода на экран. При этом таблицы MXL можно предварительно сохранить на жестком диске и отправлять на печать по очереди с диска, а не держать в оперативной памяти. Также можно повысить и скорость печати, если организовать печать одновременно на несколько принтеров.


Это к 1С не имеет прямого отношения, но все-таки. Так как большинство принтеров имеют встроенные шрифты, то для повышения скорости печати можно уменьшить "качество" печати до 150 dpi. Буквы останутся в идеальном состоянии, а при печати таблиц для вертикальных и горизонтальных линий такой точности более чем достаточно. С учетом того, что MXL это таблица, то ускорение будет, даже если в печатной форме нет рамок.

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

Дополнительные материалы к статье.


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

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

//*******************************************************
Процедура ПриОткрытии()

    СписокЗакладок = Форма.Закладки;
    СписокЗакладок.Добавить("Общий,Кнопки", "Общий");
    СписокЗакладок.Добавить("Льготы,Кнопки", "Льготы");
    СписокЗакладок.Добавить("Объекты,Кнопки", "Объекты");
 
КонецПроцедуры //ПриОткрытии

//*******************************************************
Процедура ПриОткрытиПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки)
 
    Форма.ИспользоватьСлой(ЗначениеЗакладки, 2);
 
КонецПроцедуры //ПриВыбореЗакладки

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

//*******************************************************
Перем СтАдрес, АдресПредставление;

//*******************************************************
Процедура ПредставлениеАдреса()
 
    Если СтАдрес <> Адрес Тогда
        СтАдрес = Адрес;
        АдресПредставление = глПредставлениеАдреса(СтАдрес);
    КонецЕсли;
 
    Возврат АдресПредставление;
 
КонецПроцедуры
//ПредставлениеАдреса

Формирование представления адреса тоже можно оптимизировать. К теме данной статьи это, наверное, не имеет прямого отношения, но все же. Для формирования представления адреса можно использовать такой код глобального модуля:

//*******************************************************
Перем глСокрАдреса[10];

//*******************************************************
// глПредставлениеАдреса(АдреснаяСтрока,Способ)
//
// Параметры:
//  Адрес (строка), адрес представление которого нужно вернуть.
//  Способ - способ представления адреса (если=1, то возвращает представление адреса без индекса)
//
// Возвращаемое значение:
//  Строка: представление адреса
//
// Описание:
//  Предназначена для формирования адресной строки в "удобочитаемом" виде
//  для отражения в формах.
//

Процедура глПредставлениеАдреса(Адрес, Способ = 0) Экспорт
 
    АдреснаяСтрока = СокрЛП(Адрес);
 
    Если (АдреснаяСтрока = ",,,,,,,,,") или (АдреснаяСтрока = "") Тогда
        Если Способ = 0 Тогда
            Возврат "<>"
        КонецЕсли;
        Возврат ""
    ИначеЕсли СтрЧислоВхождений(АдреснаяСтрока, ",") <> 9 Тогда
        Возврат СтрЗаменить(АдреснаяСтрока, РазделительСтрок, ", ")
    КонецЕсли;

    Индекс = 2;
    Результат = "";
    лСпособ = Способ + 2;
    АдреснаяСтрока = Сред(АдреснаяСтрока, 2);
    Пока АдреснаяСтрока <> "" Цикл
        Если АдреснаяСтрока = "," Тогда
            Прервать
        ИначеЕсли АдреснаяСтрока = ",,," Тогда
            Прервать
        ИначеЕсли АдреснаяСтрока = ",," Тогда
            Прервать
        КонецЕсли; 
 
        Поз = Найти(АдреснаяСтрока, ",");
        Если Поз = 1 Тогда
            АдреснаяСтрока = Сред(АдреснаяСтрока, 2)
        ИначеЕсли Индекс < лСпособ Тогда
            АдреснаяСтрока = Сред(АдреснаяСтрока, Поз + 1)
        Иначе
            Если Поз = 0 Тогда
                СтрокаИзАдреса = АдреснаяСтрока;
                АдреснаяСтрока = ""
            Иначе
                СтрокаИзАдреса = Лев(АдреснаяСтрока, Поз - 1);
                АдреснаяСтрока = Сред(АдреснаяСтрока, Поз + 1)
            КонецЕсли;
   
            Если СтрокаИзАдреса = "" Тогда
            ИначеЕсли Результат = "" Тогда
                Результат = СтрокаИзАдреса
            ИначеЕсли Индекс > 7 Тогда
                Результат = Результат + глСокрАдреса[Индекс] + СтрокаИзАдреса
            Иначе
                Результат = Результат + ", " + СтрокаИзАдреса
            КонецЕсли;
        КонецЕсли;
 
        Индекс = Индекс + 1
    КонецЦикла;

    Возврат Результат

КонецПроцедуры
//глПредставлениеАдреса

//*******************************************************


глСокрАдреса[8] = ", д. ";
глСокрАдреса[9] = ", кор. ";
глСокрАдреса[10] = ", кв. ";

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

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

 

Для раскрашивания программного кода в тексте статьи в цвета конфигуратора 1С:Предприятия 7.7 была использована Разукрашка.

31.01.2009 /Константинов Алексей Викторович/
Редакция от 18.02.2011

См. также

Блокировки SQL базы данных 1С 7.7

HighLoad оптимизация Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Конфигурация на 1С 7.7, показывающая блокировки на MS SQL сервере и доменных пользователей по SPID. Используется 1С++ и классы.

1 стартмани

09.11.2021    4647    8    ShoDm    17    

11

Ускорение работы 1С 7

HighLoad оптимизация Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Недорогое повышение скорости работы 1С

31.05.2013    13026    ins-post    22    

-1

Удаление нулевых значений в промежуточных регистрах

Чистка данных HighLoad оптимизация Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

По статье "Зачем в 1С нужно периодически пересчитывать итоги по регистрам?" http://infostart.ru/public/177171/ Обработка для 7.7, чтобы посмотреть что же творится в БД для SQL

1 стартмани

13.03.2013    23208    54    maxpiter    15    

8

Не гибкие блокировки в "1С:Предприятие 7.7", но чуть-чуть "Управляемые".

HighLoad оптимизация Оперативный учет 7.7 Бухгалтерский учет 7.7 Расчет 7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Обратились ко мне с вопросом по теме форума: http://forum.mista.ru/topic.php?id=558772 Автор темы: "DennizzM". Название: "v7: 1c v7.7 ошибки транзакции - как отловить виновника?" Текст с сокращениями: "Вопрос наверняка не новый... Итак - есть база 1c v7.7 (самописная конфа). Периодически у пользователей возникает ошибка при проведении транзакции. База работает под терминалом. Нагрузка на дисковую подсистему небольшая, CPU на нуле, RAM до черта свободного. Вопрос вот в чем - как отловить инициатора первой транзакции которая всех держит? Итак - как мне выкрутиться? ;) ...я не имею права и не могу лезть внутрь конфы и модифицировать ее.".

13.07.2011    26241    hogik    16    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
100. vandalsvq 1545 04.06.10 08:27 Сейчас в теме
Я бы мог посоветовать еще использовать ИТЗ (1С++) вместо ТЗ. Методы практически идентичны, а скорость работы очень отличается, особенно в поисках, фильтрах и свертке *при наличии индексов
Ну и ассоциативный вектор вместо списка значений. Очень хороший объект (в 8-ке есть его аналог Структура), и просто Вектор (массив).
+
101. alexk-is 6534 04.06.10 09:29 Сейчас в теме
(100) Вот именно что "почти". При замене СоздатьОбъект("ТаблицаЗначений") на СоздатьОбъект("ИндексированнаяТаблица") любая типовая конфигурация падает. Т.е. требуется значительная доработка конфигурации под ИТЗ. Если бы была сделана полная совместимость методов, а индекс строился по первой колонке по умолчанию (в большинстве случаев большего и не нужно), тогда в любой типовой конфигурации можно было бы по всей конфигурации заменить СоздатьОбъект("ТаблицаЗначений") на вызов функции глобального модуля, которая проверяла бы загрузку 1С++ и создавала бы соответствующий объект.

Про 1С++ в статье упоминается в самом начале, ссылка есть. Переписывать все материалы с сайта http://www.1cpp.ru/ не считаю необходимым.
+
102. пользователь 11.12.11 14:39
Сообщение было скрыто модератором.
...
103. Den_Zenit 18 21.12.11 15:07 Сейчас в теме
Узнал кое что для себя новое.
Спасибо за статью.
Я думаю чем-то воспользуюсь.
+
104. пользователь 21.12.11 17:15
Сообщение было скрыто модератором.
...
105. dicwork 24.12.11 22:00 Сейчас в теме
Интересная и полезная статья. Хотелось бы еще узнать об оптимизации 1С с помощью настроек сервера - без изменения кода приложений. Где бы об этом почитать?
+
106. пользователь 04.01.12 10:42
Сообщение было скрыто модератором.
...
107. пользователь 09.01.12 17:22
Сообщение было скрыто модератором.
...
108. пользователь 31.01.12 17:21
Сообщение было скрыто модератором.
...
109. Rockman 14.03.12 16:24 Сейчас в теме
Спасибо, полезная статья.
+
110. nurislam 19.05.12 09:29 Сейчас в теме
Спасибо. Открыл много нового для себя.
+
111. Agema 19.05.12 12:17 Сейчас в теме
Спасибо! очень полезная статья. Особенно помогло и использование - http://infostart.ru/public/14299/
+
112. an_2 19 27.05.12 03:15 Сейчас в теме
Меня недавно отладчик удивил.
Присвоение Значения колонке таблицы значений типизированной как просто "Число"
Вдвое быстрее чем присвоение колонке для которой указана длина и точность.
А присвоение значения нетипизированной колонке о-о-очень медленное мероприятие.

В списке значений тоже фокус интересный есть:
Если добавлять значение справочника и не указывать представление, то 1с в базу за представлением сходит.
Поэтому всегда в качестве представления пустую строку передаю. Даже если список будет показан на экран все представления будут нормально отображены.
+
113. aimerlive 13.07.12 12:07 Сейчас в теме
правильная статья! хорошая систематизация знаний.
+
114. maxim305 18 19.07.12 04:23 Сейчас в теме
Спасибо! Отличная статья, узнал много нового, возможно что-то буду применять в работе.
+
Оставьте свое сообщение