Ускоряем расчет себестоимости УПП

Публикация № 176644

Администрирование - Производительность и оптимизация (HighLoad)

Замер производительности показал, что при расчете себестоимости в моем случае очень много времени выполняется процедура РассчитатьСписаниеПоСредней() из общего модуля КорректировкаСтоимости. Простейшая оптимизация позволила значительно ускорить эту процедуру, что дало некоторую экономию времени при расчете себестоимости, а так же при корректировке стоимости списания товаров

Себестоимость у нас считается достаточно долго от 30 минут и больше в зависимости от разных факторов.

Используем партионный учет. Списание партий "по средней" в БУ/НУ, по ФИФО в УУ

Как-то раз решил сделать замер производительности чтобы определить какие операции занимают много времени. Замер приложен в файле ЗамерПроведенияСебестоимости.pff.

Меня очень удивило, что почти 10% общего времени выполнялся код:

    Если Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда

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

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

В приложенном файле КорректировкаСтоимости_РассчитатьСписаниеПоСредней.txt находится уже готовая к применению процедура - просто замените штатную.

Для тех кто не имеет доступ к скачиванию распишу, что исправил в процедуре РассчитатьСписаниеПоСредней() из общего модуля КорректировкаСтоимости УПП 1.3.37.1 (вообще эта процедура не менялась со времен как минимум 1.2.16.1)

Для возможности сравнения времени операции в начало процедуры добавим (учитываем, что ТекущаяУниверсальнаяДатаВМиллисекундах() появилась только в 8.2.17, для более ранних используем просто ТекущаяДата())

    // ША
   
НачалоОперации = ТекущаяУниверсальнаяДатаВМиллисекундах();
   
ИспользоватьМассивы = Истина;
   
// ША

После кода

    СтруктураСостояния = Новый Структура;

Добавим

    // ША
   
Если ИспользоватьМассивы Тогда
       
МассивСостояний = Новый Массив;
       
МассивСостоянийБР = Новый Массив;
    КонецЕсли;
   
// ША

После кода

                СтруктураСостояния.Вставить(Колонка.Имя)

Добавим

                // ША
               
Если ИспользоватьМассивы Тогда
                   
МассивСостояний.Добавить(Колонка.Имя);
                    Если Не
Колонка.Имя = "ВременнаяРазница" И Не Колонка.Имя = "ПостояннаяРазница" Тогда
                       
МассивСостоянийБР.Добавить(Колонка.Имя);
                    КонецЕсли;
                КонецЕсли;
               
// ША

Код

            НайденоСостояние=Истина;
            Для Каждого
Элемент Из СтруктураСостояния Цикл

                Если
Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда
                    Продолжить;
                КонецЕсли;
                Если НЕ (
ЭлементСостояние.Значение[Элемент.Ключ] = Строка[Элемент.Ключ]) Тогда

                   
НайденоСостояние = Ложь; // состояния различны

                   
Прервать; // дальше можно не проверять
               
КонецЕсли;
            КонецЦикла;

Заменим на

            НайденоСостояние=Истина;
           
// ША
           
Если ИспользоватьМассивы Тогда
                Для Каждого
Элемент Из МассивСостоянийБР Цикл Если ЭлементСостояние.Значение[Элемент] <> Строка[Элемент] Тогда НайденоСостояние = Ложь; Прервать; КонецЕсли; КонецЦикла;
            Иначе
           
// ША
           
Для Каждого Элемент Из СтруктураСостояния Цикл

                Если
Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда
                    Продолжить;
                КонецЕсли;
                Если НЕ (
ЭлементСостояние.Значение[Элемент.Ключ] = Строка[Элемент.Ключ]) Тогда

                   
НайденоСостояние = Ложь; // состояния различны

                   
Прервать; // дальше можно не проверять
               
КонецЕсли;
            КонецЦикла;
            КонецЕсли;
// ША

Код

            // Переносим в соответствие
           
СтрСост = Новый Структура;
            Для Каждого
Элемент Из СтруктураСостояния Цикл
                Если
Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда
                    Продолжить;
                КонецЕсли;
               
СтрСост.Вставить(Элемент.Ключ, Строка[Элемент.Ключ]);
            КонецЦикла;

Заменим на

            // Переносим в соответствие
           
СтрСост = Новый Структура;
           
// ША
           
Если ИспользоватьМассивы Тогда
                Для Каждого
Элемент Из МассивСостоянийБР Цикл СтрСост.Вставить(Элемент, Строка[Элемент]); КонецЦикла;
            Иначе
           
// ША
           
Для Каждого Элемент Из СтруктураСостояния Цикл
                Если
Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда
                    Продолжить;
                КонецЕсли;
               
СтрСост.Вставить(Элемент.Ключ, Строка[Элемент.Ключ]);
            КонецЦикла;
            КонецЕсли;
// ША

Код

            НайденоСостояние=Истина;
            Для Каждого
Элемент Из СтруктураСостояния Цикл

                Если
Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда
                    Продолжить;
                КонецЕсли;

                Если НЕ (
ЭлементСостояние.Значение[Элемент.Ключ] = Строка[Элемент.Ключ+ПрефиксПараметровНовогоСостояния]) Тогда

                   
НайденоСостояние = Ложь; // состояния различны

                   
Прервать; // дальше можно не проверять
               
КонецЕсли;
            КонецЦикла;

Заменим на

            НайденоСостояние=Истина;
           
// ША
           
Если ИспользоватьМассивы Тогда
                Для Каждого
Элемент Из МассивСостоянийБР Цикл Если ЭлементСостояние.Значение[Элемент] <> Строка[Элемент + ПрефиксПараметровНовогоСостояния] Тогда НайденоСостояние = Ложь; Прервать; КонецЕсли; КонецЦикла;
            Иначе
            Для Каждого
Элемент Из СтруктураСостояния Цикл

                Если
Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда
                    Продолжить;
                КонецЕсли;

                Если НЕ (
ЭлементСостояние.Значение[Элемент.Ключ] = Строка[Элемент.Ключ+ПрефиксПараметровНовогоСостояния]) Тогда

                   
НайденоСостояние = Ложь; // состояния различны

                   
Прервать; // дальше можно не проверять
               
КонецЕсли;
            КонецЦикла;
            КонецЕсли;
// ША

Код

            // Переносим в соответствие
           
СтрСост = Новый Структура;
            Для Каждого
Элемент Из СтруктураСостояния Цикл
               
СтрСост.Вставить(Элемент.Ключ, Строка[Элемент.Ключ+ПрефиксПараметровНовогоСостояния]);
            КонецЦикла;

Заменим на

            // Переносим в соответствие
           
СтрСост = Новый Структура;
           
// ША
           
Если ИспользоватьМассивы Тогда
                Для Каждого
Элемент Из МассивСостояний Цикл СтрСост.Вставить(Элемент, Строка[Элемент+ПрефиксПараметровНовогоСостояния]); КонецЦикла;
            Иначе
            Для Каждого
Элемент Из СтруктураСостояния Цикл
               
СтрСост.Вставить(Элемент.Ключ, Строка[Элемент.Ключ+ПрефиксПараметровНовогоСостояния]);
            КонецЦикла;
            КонецЕсли;
// ША

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

    // ША
   
ЗаписьЖурналаРегистрации("СписаниеПоСредней, сек", УровеньЖурналаРегистрации.Предупреждение, , ,
       
Формат((ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоОперации) / 1000, "ЧДЦ=3; ЧГ=0"));
   
// ША

Теперь меняя всего одну строку (ИспользоватьМассивы = Истина/Ложь) в модуле мы можем проверить эффект от предложенных манипуляций. В моем случае время выполнение этой процедуры сократилось примерно в два раза, что уменьшило время расчета себестоимости на величину порядка 7-10 минут. Конечно это не ускорение расчета себестоимости в разы, но неплохое начало оптимизации

Так же значительно ускорилось время проведения документа "Корректировка стоимости списания товаров"

Тестируем, отписываемся о результатах полученных на ваших базах

Отредактировано 13.03.2013
1) Указал что используем партионный учет
2) Добавил пропущенное в тексте статьи заполнение массивов (в прикрепленном файле это было)
3) Добавил, что ускорилось время проведения документа "Корректировка стоимости списания товаров"

Для раскраски кода применялась Разукрашка

Скачать файлы

Наименование Файл Версия Размер
КорректировкаСтоимости_РассчитатьСписаниеПоСредней.txt
.txt 18,32Kb
05.03.13
63
.txt 18,32Kb 63 Скачать
ЗамерПроведенияСебестоимости.pff
.pff 2,86Mb
05.03.13
18
.pff 2,86Mb 18 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. AlexO 128 05.03.13 16:57 Сейчас в теме
Пример хоть и корявой, но реальной оптимизации УПП :)
И не просто "сферической" УПП, а самого коварного блока - расчет себестоимости.
2. AlexO 128 05.03.13 17:01 Сейчас в теме
(0) Антон Ширяев,
но этот код выполнялся в моем случае в двух местах в общей сложности более 159 млн раз!

а от чего конкретно зависит столь великое число итераций? Объем регистра, активное использование определенных документов?
7. Антон Ширяев 471 05.03.13 17:21 Сейчас в теме
(2)
На самом деле пока не вникал какие именно операции дают столь большие исходные таблицы "ТаблицаТоваров", но очевидно что есть три вложенных цикла которые и дадут столь большой объем итераций.
Плюс ко всему процедура при расчете себестоимости вызывается многократно. Сколько длился каждый вызов покажет журнал регистрации.
9. AlexO 128 05.03.13 17:28 Сейчас в теме
(7) Антон Ширяев,
т.е. зависит здесь просто зависит напрямую от количества товаров в периоде, за который рассчитывается себестоимость?
3. Kom-off 05.03.13 17:09 Сейчас в теме
Вот только, автор не указал режим учета затрат: РАУЗ или традиционный учет.
4. AlexO 128 05.03.13 17:10 Сейчас в теме
(3) Kom-off,
ну этот блок точно не РАУЗ :)
5. Kom-off 05.03.13 17:15 Сейчас в теме
(4) Да, чудес на свете много.
Поди, знай! (с) Интерны
6. AlexO 128 05.03.13 17:16 Сейчас в теме
(3) Kom-off,
автор не указал режим учета затрат: РАУЗ

РАУЗ чем и "хорош" (хотя я наоборот - склонен сказать в данном случае "плох"), что не считает "тупо" все, что попало в период, а на основе показателей (которых набирается на порядки меньше, чем реальных исходных данных, "давших" (сформировавших) эти показатели), дает "приближенную" картину по себестоимости каждого товара.
1С считает, что картина "и так сойдет".
Я же считаю - что даже и для сельской местности нужно быть ответственнее и профессиональнее.
Точно "в тютельку" РАУЗ, по-моему, считает только по НДС (отдельным регистром и расчетом) - тут им (1С-у) просто налоговая не дает безобразничать :)
10. Kom-off 05.03.13 17:35 Сейчас в теме
(6) Какой-то поток сознания.
11. AlexO 128 05.03.13 17:45 Сейчас в теме
(10) Kom-off,
предлагаю озвучить "свое" понимание РАУЗ.
Не возбраняется :)
А остальные послушают.
Только без копи-паста 1совых агиток, а как сам вот понял - так и руби.
12. AlexO 128 05.03.13 17:48 Сейчас в теме
(10) Kom-off,
или напишите сразу - "ниасилил" :)
Ни РАУЗ, ни "потоки сознания".
Только - адаптированные для 1сников агитки 1С.
13. Kom-off 05.03.13 17:48 Сейчас в теме
(12) Без агиток - расчет системы линейных уравнений. Чего тут понимать то?
15. AlexO 128 05.03.13 18:03 Сейчас в теме
(13) Kom-off,
расчет системы линейных уравнений. Чего тут понимать то?

конечно :)
браво. Достойный ответ 1сника, читавшего агитки :)
А что рассчитывают эти ЛУ? Какие исходные данные подставляются в уравнения?
16. Кадош 05.03.13 18:09 Сейчас в теме
(15) мальчик, читай умные книжки, и РАУЗ посетит тебя.
17. AlexO 128 05.03.13 18:14 Сейчас в теме
(16) Кадош,
так, еще один юноша пожаловал :)
Вас посетил РАУЗ уже? Прошу, в двух словах - что это такое.
А иначе - в контейнер с остальными, "знающими" РАУЗ от 1С.
19. Kom-off 05.03.13 18:18 Сейчас в теме
(17) Вот любитель хамить.
Что тут скажешь: тролль - он и в Африке тролль.
Одно чего стоит:
...РАУЗ... двух словах - что это такое...

В двух словах уже сказано было, названо было агиткой и опять по кругу. Молодец!
18. AlexO 128 05.03.13 18:18 Сейчас в теме
(16) Кадош,
читай умные книжки

... хоть бы поискал сначала по инету инфо, что книжек по 1С-РАУЗу - нет.. брошюрки и невнятная методичка с Украины Абрашиной..но куда ж там...
короче, контейнер...
20. Кадош 05.03.13 18:29 Сейчас в теме
(18) мдя...ты книжки читать пробовал?
23. Кадош 05.03.13 19:05 Сейчас в теме
(18) для теоретиков. В одной из ЖКК есть подробный разбор РАУЗа с расчетами и формулами.
Фас, ищи.
26. AlexO 128 06.03.13 12:27 Сейчас в теме
(23) Кадош,
В одной из ЖКК есть подробный разбор РАУЗа с расчетами и формулами.

а на Марсе яблони цветут.
Сам факт того, что даже не знаешь - "в каком ЖКК", да еще и подробный (!) разбор, говорит сам за себя.
27. Кадош 06.03.13 12:41 Сейчас в теме
(26) иди еще маме пожалуйся, что тебе не сказали в какой именно из книг, что искать.
Наверняка больше азбуки в школе ничего не прочитал, ну может быть еще состав на балончике с освежителем.
28. AlexO 128 06.03.13 12:58 Сейчас в теме
(27) Кадош,
задвинься в угол контейнера, друг.
Когда хоть что-то будешь знать - приходи.
А пикироваться с тобой на уровне "В одной из ЖКК" и "Наверняка больше азбуки" - у меня нет времени. Наверняка у тебя есть сотня таких же московских деятелей, равных по разуму, которые с удовольствием продолжат тренд про школу и "там где-то что-то должно же быть", с которыми ты более приятно проведешь время.
29. Кадош 06.03.13 13:10 Сейчас в теме
(28) Ты уже показал себя во всей красе постом о том, что расчет себестоимости с помощью РАУЗ происходит с точностью +- километр. Ах тысячи несчастных российскийх предприятий! Прежде чем выдавать такие тезисы, надо было поработать с РАУЗ хотя бы на 1-2 предприятих.
Ах, да. В вашей деревне только ларьки, которым требуются эникейщики вроде тебя, "компьютерные монстры" так сказать.
31. AlexO 128 06.03.13 13:20 Сейчас в теме
(29) Кадош,
Прежде чем выдавать такие тезисы, надо было поработать с РАУЗ хотя бы на 1-2 предприятих.

Если на каких-то несчастных предприятиях деятели вроде тебя "внедрили" (включили галочки) РАУЗ - это не значит, что на предприятии теперь полная прозрачность в учете и реальная цифра на выходе расчета себестоимости.
И живут они, бедные, по принципу "что-то считает - ну и ладно".
35. Кадош 06.03.13 13:33 Сейчас в теме
(31) бгггг...палишься. РАУЗ это не галочки.
30. Кадош 06.03.13 13:20 Сейчас в теме
(28)
вот и читайте книжки (хотя они несут минимум информации) (с) AlexO
Понял, что книги не несут для тебя полезной информации.
Извиняй, друх.
32. AlexO 128 06.03.13 13:22 Сейчас в теме
(30) Кадош,
Понял, что книги не несут для тебя полезной информации.

спасибо за цитирование, но 2 листа агиток 1С я не считаю за "книжки".
Уж извиняйте.
А "водонасыщенные" методички, которые вы так громко назвали "ЖКК" никакой инфо, кроме "как включить учет по РАУЗ", не несут.
36. Кадош 06.03.13 13:34 Сейчас в теме
(32) скажи сразу, что уровень умственного развития не позволяет понимать ЖКК.
34. AlexO 128 06.03.13 13:32 Сейчас в теме
(30) Кадош,
Извиняй, друх.

И не надо меня принимать в ваше московское общество "избранных".
Я не такой :)
Просто "извиняй, друг" достаточно.
(33) Kom-off,
нас зло обманывают :-)

ну вас, может, и обманывают - но, верно, "и сам обманываться рад" (с) :)
А мне еще ни на один вопрос здесь ни вы, ни другие, кроме автора статьи, не ответили по предмету.
(чтобы не возникло новых "подпрыгиваний" вокруг этой фразы - не привели ни одного понимания; если понятно выражаюсь).
37. Kom-off 06.03.13 13:38 Сейчас в теме
(34)
А мне еще ни на один вопрос здесь ни вы, ни другие, кроме автора статьи, не ответили по предмету.

Да и сами Вы, сударь, ничего путного по этому вопросу не сказали, однако.
Как говорится:
...нечего не зеркало пенять...
(с) Иван Крылов. Зеркало и обезъяна.
33. Kom-off 06.03.13 13:23 Сейчас в теме
(28)
А пикироваться с тобой на уровне "В одной из ЖКК" и "Наверняка больше азбуки" - у меня нет времени.

Судя по количеству постов автора (28) - нас зло обманывают :-)
14. Kom-off 05.03.13 17:49 Сейчас в теме
(12)
ли напишите сразу - "ниасилил" :)

Нет. Я так не скажу. "Звиняй", барин.
8. Антон Ширяев 471 05.03.13 17:22 Сейчас в теме
(3) Kom-off,
Используется партионный учет
21. yuraos 960 05.03.13 18:43 Сейчас в теме
жене сказал - что поехал в командировку,
любовнице сказал - что поехал в колхоз на картошку,
а сам на чердак и .....
Оптимизировать, оптимизировать и еще раз оптимизировать!!!
22. yuraos 960 05.03.13 18:55 Сейчас в теме

Для возможности сравнения времени операции в начало процедуры добавим (учитываем, что ТекущаяУниверсальнаяДатаВМиллисекундах() появилась только в 8.2.17, для более ранних используем просто ТекущаяДата())

(21)
для тех, кто не осчастливлен платформой 8.2.17:

// Функция, возвращающая время в миллисекундах или секундах.
//
&НаКлиентеНаСервереБезКонтекста
Функция ВремяВМиллисекундах()
    Попытка
        Script = Новый COMОбъект("MSScriptControl.ScriptControl");
        Script.Language = "javascript";
        Script.Timeout   = -1;
        Время = Script.Eval("var d = new Date(); d.getTime()");
    Исключение
        Время = ТекущаяДата();
    КонецПопытки;
    
    Возврат Время;
КонецФункции
Показать

---
этот пример любезно предложил StepByStep
в своей статье
http://infostart.ru/public/165702/
24. kapustinag 06.03.13 00:56 Сейчас в теме
Если в этом месте потребуется еще ускорить, даже ценой большего использования памяти, то попробуйте заменить эти многократные проверки равенства строк текстовым константам на проверки равенства чисел или логических переменных. Например, если один раз пройти по структуре или по массиву, и заполнить добавочные элементы примерно так:

Если Элемент.Ключ = "ВременнаяРазница" тогда
Элемент.ПризнакВР = Истина;
КонецЕсли;

то потом вместо сравнений Если Элемент.Ключ = "ВременнаяРазница" Тогда
можно использовать Если Элемент.ПризнакВР Тогда

Это может дать большой выигрыш на многомиллионных повторах.
25. Антон Ширяев 471 06.03.13 09:13 Сейчас в теме
(24) kapustinag,
Дело в том, что это уже не нужно :)
Для этого и создано два массива, чтоб закешировать в них только нужные элементы и не проверять условие в цикле
38. hasp_x 154 06.03.13 15:23 Сейчас в теме
Если учесть, что на блоке себестоимости в 1С сидят наиболее крутые перцы, то автору тем-более большой жирный плюс
39. yuraos 960 06.03.13 17:56 Сейчас в теме
(38) hasp_x,
простите пожалусто за нескромный вопрос:
а что именно у тех самых перцев СамоеЕ крУТое ???
40. Rustig 1350 06.03.13 19:05 Сейчас в теме
(0) плюсую за находчивость и сообразительность! :)
...однажды основательно поменял код типовой конфы (в БП 2.0 механизмы учета ОС - практически всю подсистему переписал), увеличил производительность алгоритмов.
Но привычки критически относиться к коду типовых конфигураций в тот раз не сформировалось.
А теперь на уровне подсознания зафиксировался вопрос: а не прогнать ли тест на производительность?
semen_2008; +1 Ответить
41. Антон Ширяев 471 13.03.13 11:55 Сейчас в теме
Исправил и немного дополнил статью
1) Указал что используем партионный учет
2) Добавил пропущенное в тексте статьи заполнение массивов (в прикрепленном файле это было)
3) Добавил, что ускорилось время проведения документа "Корректировка стоимости списания товаров"
4) Исправил версию УПП на которой проверял - обновил до 1.3.37.1
42. AlexO 128 14.03.13 12:58 Сейчас в теме
(41) Антон Ширяев,
4) Исправил версию УПП на которой проверял - обновил до 1.3.37.1

Да там годами ничего не меняется :)
Не то, что в версиях.
43. MiCe 9 19.03.13 01:43 Сейчас в теме
рауз - идея хорошая.... но как всегда 1с реализация ж..а
и навязывание ее еще большая зад..ца
особенно в ут... просто ....
ихние теоретики хромают что с практикой ... да и теорией ....
44. Pushast 10.06.13 10:35 Сейчас в теме
РАУЗ..рауз...
единственная книга ко мне в руки попала в 170 страничек (отечественная), надеюсь ее в сети еще не затерли, а то старался... картинки сляпывал:)
А вот с расчетом себестоимости у меня засада - у всех главбухов жажда - закрыть счет 20 за каждый день. И стандартный механизм расчета себестоимости "доломали" до состояния расчета с/с за каждый день.
Мне жалко усилий парниши-программера... Если расчет с/с вне зависимости -за один день или месяц у меня укладывается в полчаса - это "щастье"! А, в довесок, и если при этом не весят все остальные (операторы на реализации)...а это редкость:(
45. isn 13 16.10.13 16:38 Сейчас в теме
за РАУЗ как таковой будущее расчета себестоимости, так что нам, программерам "пилить" да "пилить".
SunShinne; +1 Ответить
46. drugoi_mir 11 18.07.17 20:44 Сейчас в теме
Вопрос такой. В свое время читал эту статью, сейчас встретился с проблемой напрямую. Для нас провели анализ и выявили что при использовании серий много времени тратится на часть кода связанную с перебором ТЗ. Кто-то переделывал эту часть кода через индексы. И почему разработчики изначально делали поиск полным перебором а не поиском через индексы?
Для Каждого Строка Из Таб Цикл // поиск выплняется полным перебором
		
		// Состояния-источники
		// Найдем состояние в соответсвии				
		НайденоСостояние=Ложь;
		Для Каждого ЭлементСостояние Из СоотвПараметровСостояний Цикл
			
			НайденоСостояние=Истина;
			Для Каждого Элемент Из СтруктураСостояния Цикл
				
				Если Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда
					Продолжить;
				КонецЕсли;
				Если НЕ (ЭлементСостояние.Значение[Элемент.Ключ] = Строка[Элемент.Ключ]) Тогда
					
					НайденоСостояние = Ложь; // состояния различны
					
					Прервать; // дальше можно не проверять
				КонецЕсли;
			КонецЦикла;
			
			Если НайденоСостояние Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
		Если НайденоСостояние Тогда
			ИндексСостояния = ЭлементСостояние.Ключ;
		Иначе
			// Переносим в соответствие
			СтрСост = Новый Структура;
			Для Каждого Элемент Из СтруктураСостояния Цикл
				Если Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда
					Продолжить;
				КонецЕсли;
				СтрСост.Вставить(Элемент.Ключ, Строка[Элемент.Ключ]);
			КонецЦикла;
			
			ИндексСостояния = СоотвПараметровСостояний.Количество();
			СоотвПараметровСостояний.Вставить(ИндексСостояния, СтрСост);
		КонецЕсли;
		
		// Оставим в таблице ссылку на состояние
		Строка.Источник = ИндексСостояния;
		
		
		// То же самое для состояний-приемников
		// Найдем состояние в соответсвии				
		НайденоСостояние=Ложь;
		Для Каждого ЭлементСостояние Из СоотвПараметровСостояний Цикл
			
			НайденоСостояние=Истина;
			Для Каждого Элемент Из СтруктураСостояния Цикл
				
				Если Элемент.Ключ = "ВременнаяРазница" или Элемент.Ключ = "ПостояннаяРазница" тогда
					Продолжить;
				КонецЕсли;
				
				Если НЕ (ЭлементСостояние.Значение[Элемент.Ключ] = Строка[Элемент.Ключ+ПрефиксПараметровНовогоСостояния]) Тогда
					
					НайденоСостояние = Ложь; // состояния различны
					
					Прервать; // дальше можно не проверять
				КонецЕсли;
			КонецЦикла;
			
			Если НайденоСостояние Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
		Если НайденоСостояние Тогда
			ИндексСостояния = ЭлементСостояние.Ключ;
		Иначе
			// Переносим в соответствие
			СтрСост = Новый Структура;
			Для Каждого Элемент Из СтруктураСостояния Цикл
				СтрСост.Вставить(Элемент.Ключ, Строка[Элемент.Ключ+ПрефиксПараметровНовогоСостояния]);
			КонецЦикла;
			
			ИндексСостояния = СоотвПараметровСостояний.Количество();
			СоотвПараметровСостояний.Вставить(ИндексСостояния, СтрСост);
		КонецЕсли;
		
		// Оставим в таблице ссылку на состояние
		Строка.Приемник = ИндексСостояния;
		
	КонецЦикла;
Показать
Оставьте свое сообщение

См. также

Zabbix: Мониторинг рабочих процессов

Статья Системный администратор Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Zabbix

Мониторинг памяти, потребляемой рабочими процессами, средствами Zabbix. Создание пользовательских LLD правил с помощью One Script

1 стартмани

07.02.2020    1696    EShchavleva    6       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Тест серверного оборудования на допустимое количество пользователей: как это использовать?

Статья Системный администратор Программист Архив с данными v8 1cv8.cf Абонемент ($m) Администрирование СУБД Нагрузочное тестирование Сервера

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

3 стартмани

17.12.2019    6804    9    sapervodichka    3       

Голосование за доклады на INFOSTART MEETUP Kazan - до 25 февраля. Промо

Выбирайте и голосуйте за самые интересные доклады! Лучшие из лучших попадут в окончательную программу казанского митапа. Оставить свой голос можно до 25 февраля 2020 года.

Работа с базами данных 1С в SQL Server Management Studio (Расширение для SSMS)

Инструменты и обработки Системный администратор Программист Архив с данными v8 Windows Абонемент ($m) Администрирование СУБД Производительность и оптимизация (HighLoad) Администрирование данных 1С Структура метаданных

Расширение позволяет просматривать связи объектов метаданных и таблиц БД, сгруппированные данные (по группам метаданных) об используемом дисковом пространстве и выполнять трансляцию SQL текста запроса в термины 1С. И бонусом - при наведении курсора мыши на таблицу или поле показывает назначение объекта в терминах 1С.

10 стартмани

27.11.2019    6974    29    akpaevj    43       

Быстрая реструктуризация базы данных

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Россия Windows Абонемент ($m) Производительность и оптимизация (HighLoad) Конфигурирование 1С

Внешняя обработка для быстрой реструктуризации клиент-серверной базы данных. Способ ускорения реструктуризации - замена таблиц большого объема пустыми копиями перед проведением обновления БД и возврат к исходным таблицам после обновления с предварительной корректировкой их структуры. Полностью автоматизировано создание и выполнение всех требуемых скриптов SQL. Представлены версии обработки для обычных форм (1С:Предприятие 8.2 (8.2.19.130)) и управляемого приложения (1С:Предприятие 8.3 (8.3.9.1818)).

1 стартмани

05.11.2019    7482    20    dmitrydemenew    35       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

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

6500 рублей

Кто круче: "ИЛИ" или "ОБЪЕДИНИТЬ ВСЕ" в запросе?

Статья Программист Внешний отчет (ert,erf) v8 v8::СПР v8::Запросы ЗУП2.5 MySQL Абонемент ($m) Производительность и оптимизация (HighLoad)

Реальный пример оптимизации запроса. Статья будет полезна людям, изучающим вопросы оптимизации запросов в 1С и для подготовки к экзамену "1С: Эксперт по технологическим вопросам", поскольку в статье описывается один их методов расследования причин неоптимальных запросов. UPD. Коллеги в комментариях заметили ошибку, она была исправлена и сейчас выложены данные с корректным решением.

1 стартмани

14.09.2019    3457    azazana    27       

Еще один тест 1C: Postgres SQL 11 Pro Enterpise против MSSQL 14 под Windows 2012 Server R2

Статья Системный администратор Архив с данными v8 Windows Абонемент ($m) Производительность и оптимизация (HighLoad)

Проработав 15 лет с MSSQL в 2017 начал активно СУБД Postgres SQL. За два года успел поработать в 9 версии Postgres и в 10-ой. И пришел к выводу, что существуют реальное замедление работы баз после перехода на Postgres. Недавно вышла 11 версия Postgres Pro Enterpise, которая обещает почти 2-х кратное ускорение над 11 Pro Standart и 10-ой версией. Закупив лицензию Postgres 11 Pro Enterpise Это я и решил проверить на 1С.

1 стартмани

05.09.2019    8822    30    ogidni    96       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Менеджер потоков: реализация "любой" задачи в потоках

Статья Программист Нет файла v8 Абонемент ($m) Производительность и оптимизация (HighLoad) Инструментарий разработчика

Менеджер потоков – один их новых инструментов, который упрощает работу разработчиков. Насколько легко с ним, на конференции Infostart Event 2018 Education показал начальник отдела автоматизации 1С Иван Филимонов компании «Трансстроймеханизация».

01.08.2019    6453    21    DarkAn    6       

Списание (корректировка) задолженности контрагентов УНФ 1.6

Инструменты и обработки Программист Бухгалтер Внешняя обработка (ert,epf) v8 УНФ Украина БУ Дебиторская и кредиторская задолженность Абонемент ($m) Закрытие периода Обработка документов

Обнуление задолженности контрагентов в конфигурации "Управление небольшой (нашей) фирмой" версии 1.6 с помощью документа "Корректировка регистров".

1 стартмани

24.07.2019    9290    10    DMon    1       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Ловец дедлоков СУБД

Статья Системный администратор Программист Архив с данными v8 Россия MS SQL Абонемент ($m) Производительность и оптимизация (HighLoad) Практика программирования Разработка

Анализ простейшего дедлока СУБД в рабочей базе с использованием ЦУП (центра управления производительностью) и profiler MS SQL (Microsoft SQL Server). Эта статья будет полезна людям, изучающим вопросы оптимизации работы 1С, или тем, у кого возникают дедлоки в рабочей базе. UPD 09.07.2019 добавлено воспроизведение блокировки в случае установки управляемой блокировки перед чтением набора записей регистра сведений. UPD 10.07.2019 добавлена тестовая база с примером.

1 стартмани

08.07.2019    8077    2    azazana    79       

Мониторинг производительности и искусственный интеллект

Статья Программист Конфигурация (md, cf) v8 Абонемент ($m) Производительность и оптимизация (HighLoad) Практика программирования Разработка

Расскажем и покажем практически, как использовать искусственный интеллект на страже мониторинга производительности. У вас появится возможность создать собственного помощника Ларису, которая возьмет на себя вопросы по контролю и диагностике состояния обслуживаемой системы.

1 стартмани

01.07.2019    6313    4    ivanov660    28       

Сдача регламентированной отчетности из программ 1С Промо

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

от 1500 руб.

Методика оптимизации программного кода 1С: проведение документов

Инструменты и обработки Программист Архив с данными v8 v8::УФ Абонемент ($m) Обработка документов Производительность и оптимизация (HighLoad) Инструментарий разработчика

Описание простого метода анализа производительности программного кода 1С, способов его оптимизации и оценки результатов в виде числовых показателей прироста производительности. Не требует сторонних программных продуктов, используются только типовые возможности платформ 1С. Методика проверена на линейке платформ начиная с 1С:Предприятие 8.2 (обычные формы, управляемые формы). Позволяет ускорить проведение проблемных документов в 3 и более раз, провести проверку корректности формирования проводок оптимизированным кодом и подтвердить результаты оптимизации реальными замерами производительности в режиме предприятия. К публикации приложены демонстрационные базы для режимов обычного и управляемого приложения на платформе 1С:Предприятие 8.3 (8.3.9.2033).

1 стартмани

19.03.2019    17609    14    dmitrydemenew    83       

Многопоточное тестирование производительности по методике APDEX (управляемые формы)

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Производительность и оптимизация (HighLoad)

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

10 стартмани

09.01.2019    5786    8    capitan    24       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

Решение проблемы быстродействия в ERP на рабочем примере

Инструменты и обработки Программист Конфигурация (md, cf) v8 ERP2 Абонемент ($m) Производительность и оптимизация (HighLoad)

Рассмотрим практический пример оптимизации, определим последовательность действий и воспользуемся специализированными инструментами.

3 стартмани

18.12.2018    11999    79    ivanov660    15       

Сравниваем Управление торговлей 11.4 и Бухгалтерию предприятия 3.0 после обмена

Инструменты и обработки Программист Бухгалтер Внешняя обработка (ert,epf) v8 БП3.0 УТ11 Россия БУ УУ Windows Закрытие периода Абонемент ($m) Анализ учета Поиск данных Закрытие периода

Вам приходилось проверять результаты корректности данных после переноса из УТ в БП? Если "ДА", то Вы знаете какое это "приятное дело". Данная обработка была написана для того, чтобы это стало менее "приятно". И осталось больше времени для других дел.

1 стартмани

07.12.2018    4128    14    RomikR    10       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

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

PostgreSQL для 1С 8.3: ускоряем резервное копирование и восстановление для отдельной базы очень большого размера

Статья Системный администратор Программист Архив с данными v8 1cv8.cf Россия PostgreSQL Абонемент ($m) Производительность и оптимизация (HighLoad) Тестирование и исправление

В этой статье разберем оптимизацию работы с моментальным снимком отдельной базы 1С в кластере PostgreSQL средствами pg_dump.exe, pg_restore.exe, psql.exe в среде Windows Server 2008,2012,2016. А также разберем проблемные ситуации и неожиданные ограничения при работе 1С в связке с PostgreSQL. Для Linux все аналогично.

1 стартмани

03.12.2018    20988    31    vsasav    68       

Многопоточная обработка данных

Инструменты и обработки Системный администратор Программист Конфигурация (md, cf) v8 v8::УФ 1cv8.cf Абонемент ($m) Производительность и оптимизация (HighLoad) Администрирование данных 1С

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

1 стартмани

23.11.2018    14048    50    _ASZ_    15       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

Скорость работы 1С8 файловой по сети

Статья Системный администратор Программист Архив с данными v8 1cv8.cf Абонемент ($m) Производительность и оптимизация (HighLoad)

Как я увеличил скорость работы файловой 1С8 по сети, изменив формат БД и размер страницы.

1 стартмани

01.11.2018    22238    13    Vlx    55       

Мониторинг показателей систем 1С 8.3 с помощью Zabbix

Инструменты и обработки Системный администратор Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Внешние источники данных Zabbix

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

1 стартмани

05.10.2018    27776    39    akimych    48       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Монитор операций закрытия месяца для УТ/КА/УП, или как правильно создать нетривиальное расширение

Инструменты и обработки Системный администратор Программист Бизнес-аналитик Бухгалтер Расширение (cfe) v8 ERP2 УТ11 КА2 Россия БУ Закрытие периода Абонемент ($m) Закрытие периода

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

1 стартмани

17.09.2018    10071    26    zeegin    0       

Очистка и обновление индекса полнотекстового поиска (регламентное задание)

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 УНФ ДО БП3.0 УТ11 УХ ЗУП3.x Россия Абонемент ($m) Производительность и оптимизация (HighLoad)

Обработка-регламентное задание позволяет в автоматическом режиме очищать и обновлять индекс полнотекстового поиска. Это необходимо делать для устранения проблем производительности на крупных базах. Подключаем в доп.обработках, задаем расписание выполнения на выходные и радуемся :)

2 стартмани

14.09.2018    15536    63    Kyrales    6       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Пересечение транзакций. Примеры

Статья Программист Архив с данными v8 Абонемент ($m) Производительность и оптимизация (HighLoad)

Рассматривается пересечение транзакций типа чтение-запись над одним элементом справочника при разных уровнях изоляции.

3 стартмани

03.09.2018    8623    vasilev2015    5       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Робот - Дата запрета редактирования

Инструменты и обработки Системный администратор Бухгалтер Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Закрытие периода

Установка Даты запрета редактирования - по расписанию и по алгоритму.

1 стартмани

27.07.2018    9911    38    Timur.V    16