Циклы применяются для выполнения каких либо повторяющихся действий, возможные варианты перебора в цикле:
Перебираем строки с помощью цикла Для каждого
Перебираем строки с помощью цикла Пока
Перебираем строки с помощью цикла Для
Еще вариант, но советую его использовать только в без выходных ситуациях, Если
Примеры циклов
А какой цикл работает быстрее?
Итак, я нашел пять способов, как можно организовать цикл средствами 1С.
Первый вид цикла, назовем его условно «Для По» выглядит так:
Второй вид «Для Каждого»:
Третий «Пока»:
Далее вспомнил ассемблерную молодость & цикл «Если»:
Ну и напоследок «Рекурсия»
Естественно, что относить рекурсию к циклам не совсем корректно, но тем ни менее с её помощью можно добиться похожих результатов. Сразу оговорюсь, что в дальнейшем тестировании рекурсия не участвовала. Во первых все тесты проводились при 1 000 000 итераций, а рекурсия выпадает уже при 2 000. Во вторых скорость рекурсии в десятки раз меньше, чем скорость остальных циклов.
Последнее отступление. Одним из условий было выполнение в цикле каких-либо действий. Во первых пустой цикл используется очень редко. Во вторых цикл «ДляКаждого» используется для какой-либо коллекции, а значит и остальные циклы должны работать с коллекцией, чтобы тестирование проходило в одинаковых условиях.
Ну что ж, поехали. В качестве тела цикла использовалось чтение из заранее заполненного массива.
или, при использовании цикла «Для Каждого»
Тестирование проводилось на платформе 8.3.5.1231 для трех видов интерфейса (Обычное приложение, Управляемое приложение и Такси).
Результаты для 8.3.5.1231
Интерфейс
ДляПо
ДляКаждого
Пока
Если
Обычное приложение
5734,2
4680,4
7235,4
7263,0
Управляемое приложение
5962,4
4882,6
7497,4
7553,6
Такси
5937,2
4854,6
7500,8
7513,0
Числа это время в миллисекундах полученное с помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах(), которую я вызывал до цикла и после его завершения. Числа дробные, потому что я использовал среднее арифметическое пяти замеров. Почему я не использовал Замер производительности? У меня не было цели замерить скорость каждой строчки кода, только скорость циклов с одинаковым результатом работы.
Казалось бы и все, но & тестировать так тестировать!
Результаты для 8.2.19.106
Интерфейс
ДляПо
ДляКаждого
Пока
Если
Обычное приложение
4411,8
3497,2
5432,0
5454,0
Управляемое приложение
4470,8
3584,8
5522,6
5541,0
В среднем платформа 8.2 на 25% быстрее, чем 8.3. Я немножко не ожидал такой разницы и решил провести тест на другой машине. Скажу только, что там 8.2 была быстрее процентов на 20.
Почему? Не знаю, дезасемблировать ядро в мои планы не входило, но в замер производительности я все же заглянул. Оказалось, что сами циклические операции в 8.3 проходят несколько быстрее, чем в 8.2. Но на строке
то есть при считывании элемента коллекции в переменную происходит значительное снижение производительность.
Для себя я сделал несколько выводов:
1. Если есть возможность использовать специализированный цикл & «Для Каждого», то лучше использовать его. Кстати, сам по себе он отрабатывает дольше чем другие циклы, но скорость доступа к элементу коллекции у него на много выше.
2. Если заранее знаешь количество итераций & используй «Для По». «Пока» отработает медленнее.
3. Если использовать цикл «Если» & другие программисты тебя явно не поймут.
В 1С 8.х
В процессе длительной эксплуатации системы в журнале регистрации может накапливаться значительное число записей. Поэтому поддерживается возможность сокращения журнала регистрации и удаления записей, ставших неактуальными. При сокращении журнала регистрации можно записать удаляемые события в файл, если предвидится необходимость их анализа в будущем. В конфигураторе, в меню «Администрирование – Настройка журнала регистрации…» кнопкой «Сократить» – установив текущую дату. Там же можно сохранить журнал в файл.
В поле Текущий диапазон событий, указывается диапазон времени за который есть данные. Удалить события до – здесь указываем до какой даты можно удалить данные.
Удаляемые данные можно сохранить, для этого установим свойство “Записать удаляемые события в файл” и укажем папку в которую сохраним.
Если требуется периодически сокращать журнал и при этом иметь возможность просматривать уже удаленные события журнала, то установите флажок “Сохранять разделение хранения журнала по периодам и объединять с сохраненным ранее журналом“.
Используя средства работы со списками, разработчик имеет возможность выгрузить журнал регистрации в текстовый или табличный документ, который в дальнейшем может быть сохранен в собственном формате или, например, формате листа Excel или документа HTML.
Кроме этого поддерживается выгрузка журнала регистрации в формате XML, что может использоваться для последующего анализа выгруженных записей средствами встроенного языка.
Особенности функционирования журнала регистрации
При создании новой информационной базы для журнала устанавливается режим регистрации событий всех уровней важности; включение и выключение журнала регистрации. При загрузке информационной базы из файла журнал регистрации не очищается.
Microsoft Internet Explorer
Для работы с веб-клиентом в операционной системе Windows XP SP 2 требуется наличие системной библиотеки jscript.dll версии 5.6.0.8834 или выше. Библиотека находится в каталоге system32 операционной системы. Если на вашем компьютере установлена более раняя версия библиотки, то возможно значительное замедление работы веб-клиента. Для обновления версии необходимо скачать пакет обновлений. Находящийся по адресу http://support.Microsoft.com/kb/942840/en-us.
Для начала работы необходимо выполнить следующие настройки подключения:
· открыть браузер, в меню Сервис (Tools) выбрать пункт Свойства обозревателя (Internet Options).
· в открывшемся окне перейти на закладку Безопасность (Security).
· нажать кнопку Другой (Custom level…).
· в открывшемся окне в разделе Сценарии (Scripting) для параметра Активные сценарии (Active scripting) установить Разрешить или Включить (Enable) и нажать ОК.
· перейти на закладку Конфиденциальность (Privacy) и с помощью регулятора выбрать уровень использования cookies умеренный или Средний (Medium) (рекомендуется не выше Умеренно высокий (Medium High).
· на этой же закладке в разделе Блокирование всплывающих окон (Pop-up Bloker) снять флажок Блокировать всплывающие окна или Включить блокирование всплывающих окон (Blok Pop-ups или Turn on Pop-up Blocker).
Mozilla Firefox - Настройки подключения
Для начала работы необходимо выполнить следующие настройки:
· Открыть браузер. В меню Инструменты (Tools) выбрать пункт Настройки (Options).
· В открывшемся окне перейти в раздел Содержимое (Content).
· Снять флажок Блокировать всплывающие окна (Block pop-up Windows).
· Установить флажок Использовать JavaScript (Enable JavaScript).
· Перейти в раздел Приватность (Privacy) и установить флажок Принимать cookies с сайтов (Assept cookies from sites).
Автоматическая аутентификация
Для браузера Mozilla Firefox имеется возможность сконфигурировать веб-браузер для использования автоматической аутентификации ОС. Для этого необходимо выполнить следующие настройки:
· в адресной строке браузера набрать Aboutconfig
· затем на странице настроек в строке фильтра ввести название параметра.
Данная настройка осуществляется для трех параметров:
a) network.automatic-ntlm-auth.trusted-uris,
b) network.negotiate-auth.delegation-uris,
c) network.negotiate-auth.trusted-uris.
· Далее задать список веб-серверов, через которые будет осуществляться работа с базой «1С-Предприятия».
Если такое происходит, обратите внимание на следующее:
Посмотрите, какой режим восстановления (Recovery) стоит на закладке Options в свойствах базы данных. Он бывает Simple (простой, который требует наименьшего администрирования) или Full (полный, который обеспечивает наилучшую возможность восстановления данных после сбоя). В режиме Full возможен рост журнала транзакций (LDF), поскольку изменения базы данных накапливаются в этом журнале.
Уменьшение журнала транзакций зависит от операции резервного копирования (backup): если не делать резервное копирование, то лог транзакций в режиме Full будет расти.
Обратите внимание на пункт контекстного меню "Shrink Database" (shrink - англ. усадка, усушка, уменьшение). Эта операция уменьшает размер базы данных путем "удаления неиспользуемых страниц" ("remove unused pages").
В свойствах базы данных есть опция "Auto Shrink", которая активизирует автоматическое уменьшение базы, во время периодических проверок неиспользуемого места ("during periodic checks for unused space").
Для базы данных предприятия в свойствах базы я установил опцию Full Recovery. На этой же закладке я установил флажок Auto Shrink. Базу надо периодически архивировать, для чего я настроил автоматическое архивирование базы данных (каждое утро) и журнала транзакций (каждые 10 минут).
Режим восстановления базы данных:
Режимы восстановления базы данных (recovery models) баз данных SQL Server 2005, полное протоколирование (full), неполное протоколирование (bulk-logged), простая модель восстановления (simple)
Одно из важных решений, которые нужно принять при создании базы данных — в каком режиме восстановления будет работать база. Этот параметр выбирается на вкладке Options свойств базы данных в строке Recovery Model (Режим восстановления) (над списком остальных параметров). Изменить режим восстановления базы данных можно также при помощи команды A_lter DATABASE.
Всего предусмотрено три режима восстановления базы данных: Full (режим полного протоколирования) — в этом режиме максимальное количество операций записывается в журнал транзакций. Журнал транзакций автоматически не обрезается. Этот режим обеспечивает максимальные возможности восстановления (за счет снижения производительности). Только в этом режиме вы можете использовать зеркальное отображение баз данных и автоматическую доставку журналов (log shipping). Именно этот режим выбирается по умолчанию для пользовательских баз данных, поскольку он настроен для базы данных model. Если изменить режим восстановления для базы данных model, то для создаваемых баз данных по умолчанию будет выбираться новый режим.
Bulk-logged (режим неполного протоколирования) — это компромисс между требованиями производительности и возможностями восстановления. При использовании этого режима запись в журнал практически отключается (в терминологии Microsoft — проводится минимальное протоколирование) для операций следующих типов:
- массовой вставки (команды BULK I_nsert, S_elect INTO, загрузка средствами bcp и т. п.);
- вставка/изменение больших двоичных данных (text, ntext, image);
- операции по созданию, перестроению и удалению индексов.
Автоматическая перезапись журналов транзакций при этом не производится, работа с транзакциями, не включающими в себя перечисленные операции, производится как обычно.
При работе в этом режиме вы лишаетесь возможности использовать журнал транзакций для восстановления (при утрате файлов данных, на момент времени или на метку транзакции), если в нем была хотя бы одна запись о перечисленных ранее операциях. Microsoft рекомендует не использовать этот режим восстановления на постоянной основе, а переключаться в него из режима Full на время выполнения больших операций массовой вставки, а потом возвращаться обратно.
Simple (простая модель восстановления) — максимальный выигрыш в производительности и удобстве работы за счет возможностей восстановления. Минимально протоколируются те же операции, что и в режиме восстановления Bulk-logged, а кроме этого, журнал транзакций автоматически очищается (блоками, размер которых изначально равен 256 Кбайт, но при необходимости он может быть автоматически увеличен). В результате вы получаете максимальную производительность и возможность не думать о потенциальной нехватке места в журнале транзакций. Но в этом режиме использовать журнал транзакций для восстановления уже не удасться. Вы не сможем даже выполнить резервное копирование журнала транзакций: команда BACKUP LOG в этом режиме сразу вернет ошибку.
Какой же режим восстановления выбрать?
Microsoft (в своих учебных курсах) рекомендует для рабочих баз данных выбирать только режим Full. Однако из опыта проведения автором этих самых учебных курсов и общения со слушателями можно сказать, что очень многие опытные администраторы сознательно настраивают для своих баз данных режим восстановления Simple. Значительное повышение производительности при операциях массовой вставки и при работе с большими двоичными данными вполне оправдывает некоторое снижение возможностей резервного копирования и восстановления. Что важнее для вашей задачи — дополнительные возможности восстановления или максимальная производительность, решать вам. Рост журнала транзакций в 1С MS SQL Server
Данные функции позволяют разложить строку в массив, используя заданный разделитель
Например есть строка: абв$dfd$232$-0oj$5
Выполнив код: НашМассив = РазложитьСтрокуВМассив(абв$dfd$232$-0oj$5, "$") ;
Получим: НашМассив = абв
dfd
232
-0oj
5
Пример с использованием предустановленной библиотеки RegExp, т.е. она есть в любом windows.
Плюсы RegExp:
1. Хорошая скорость анализа, т.к. 1С анализ строк (разбор) обычно реализуется циклами и функциями: Лев, Прав, Сред, Найти, а встроенный язык медленный
2. Высокая читаемость и модифицированность (более предсказуем в случае несоответствия строки - разбору)
3. Дополнительный функционал (можно осуществлять анализ, замену и проверку строковых выражений)
Минусы RegExp:
1. Не все задачи можно решить (например рекурсивные разборы тип 1 + (2+3*(2-7)) в случае если нужно разобрать на выражения в скобках) приходится смешивать с кодом.
2. Возможность зависания при использовании сложных шаблонов(редкость, но бывает).
3. RegExp - это дополнительная библиотека и инициализация занимает значительное время.
TEMPDB представляет собой системную базу данных Microsoft SQL Server, в которой хранятся временные таблицы, созданные как самим сервером, так и пользователями. Эта база данных создается заново при каждом перезапуске Microsoft SQL Server. По умолчанию размер этой базы данных неограничен и увеличение его осуществляется при необходимости автоматически, порциями по 10% от текущего размера TEMPDB. Однако эти параметры могут быть переопределены пользователем. По умолчанию, минимальный размер этой базы данных, который устанавливается при старте Microsoft SQL Server, определяется размером системной базы данных MODEL. Очистка журнала транзакций в этой базе данных производится автоматически, при этом удаляются только неактивные записи журнала транзакций.
При работе 1С:Предприятия 8 в режиме клиент-сервер широко используются временные таблицы. Кроме того, TEMPDB используется Microsoft SQL Server при выполнении запросов, использующих операторы GROUP BY, U_nion, DISTINCT и т.п.
Проблема
В процессе работы 1С:Предприятия 8 возможно значительное увеличение размера базы данных TEMPDB. Если размер диска, на котором расположена база данных TEMPDB, окажется недостаточным, работа 1С:Предприятия 8 может завершиться аварийно.
Решение
Если эта проблема проявляется регулярно, то рекомендуется переместить TEMPDB на другой диск большего размера.
Эту операцию можно выполнить следующим способом:
* определить логические имена файлов базы данных TEMPDB (колонка "NAME" результата выполнения процедуры). Для этого нужно в Query Analyzer выполнить следующую команду:
* изменить месторасположение файлов базы данных TEMPDB с помощью команды A_lter DATABASE. Для этого нужно в Query Analyzer выполнить следующую последовательность команд:
3. Перезапустить Microsoft SQL Server.
Более подробное описание и рекомендации по использованию этих команд можно найти в документации по Microsoft SQL Server.
Для решения этой проблемы нужно запустить программу в монопольном режиме (поставьте галочку в поле "Монопольно" при запуске программы). Конечно, предварительно придется попросить всех пользователей выйти из 1С: Предприятие. На предложение восстановления индексных файлов нужно ответить утвердительно. Этот процесс может занять значительное количество времени, от 1-2 минут для баз в 5-10 мегабайт до порядка часа для больших баз. Если Вам не удается запустить систему в монопольном режиме, хотя Вы уверены, что все пользователи вышли из программы, то сначала проверьте свой компьютер, возможно, там осталась запущенная копия программы. Если и это не помогло, то попробуйте выключить клиентские машины (можно по одной, с проверкой после каждой). Вероятно, что одна из программ была некорректно завершена и не освободила базу