Поиск по блогу

четверг, 14 июля 2016 г.

Миграция на новую версию сервера 1С:Предприятия

Данный метод справедлив для клиент-серверного варианта работы! Первым шагом выполняем создание резервной копии информационной базы (ИБ). Выполнить создание резервной копии можно различными способами, как средствами конфигуратора, так и средствами СУБД.

При работе в клиент-серверном варианте используется трехуровневая архитектура с использованием кластер серверов 1С:Предприятия, через который выполняется общение клиентской части 1С:Предприятия и СУБД.

После создания резервной копии, удаляем информационную базу в кластере серверов 1С:Предприятия старой версии (допустим, версии 8.2), связанную с базой данных СУБД, которая хранит данные информационной базы. Перед удалением запоминаем имя базы данных в СУБД.

У сервера 1С:Предприятие нет собственного пользовательского интерфейса (GUI), для управления им используется консоль администрирования кластера серверов, ее можно установить при установке платформы 1С.

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

четверг, 7 июля 2016 г.

Элементарный способ разложения строки на подстроки

Стандартная функция разложения строки на подстроки по разделителю в платформе 1С версии 8.2 отсутствует. Если посмотреть на реализацию такой функции в БСП(Библиотека стандартных подсистем), то алгоритм весьма впечатляющий для такой операции: высчитывается позиция символа, применяется куча функций для работы со строками и т.д и т.п.

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

Способ заключается в том, что разделитель заменяем на символ перевода строки, тем самым из строки создаем многострочную строку (см. рисунок 1).
Рисунок 1. Преобразование строки в многострочную строку
Далее с помощью стандартных функций по работе со строками СтрЧислоСтрок() и СтрПолучитьСтроку() обходим построчно многострочную строку, читаем строку и записываем в массив.

вторник, 5 июля 2016 г.

Супер-пупер быстрая конкатенация(сложение) строк

Определение пересечения периодов (числовых множеств)
Разность дат, а как быстрее?

И снова сложно о простом. Что бы присоединить одну строку к другой, в платформу 1С заложена операция конкатенации ("+").

При выполнении конкатенации:
  • длина результирующей строки равна сумме длин соединяемых строк;
  • в случае несовпадения типа данных второго или последующих операндов со строковым типом, их значение преобразуется к строковому типу в соответствии с правилами преобразования типов.
Пример: ФИО = Фамилия + " " + Имя + " " + Отчество;

Выполним операцию конкатенации 100000 раз по алгоритму:
ИтоговаяСтрока = "";
Для Счетчик = 1 По Объект.КоличествоИтераций Цикл
ИтоговаяСтрока = ИтоговаяСтрока + Объект.РеквизитСтрока;
КонецЦикла;


Переменные содержат следующие значения:
  • Объект.КоличествоИтераций = 100000;
  • Объект.РеквизитСтрока = "ПроизвольнаяСтрока".
Произведем замер длительности выполнения алгоритма (см. рисунок 1).

воскресенье, 3 июля 2016 г.

Определение пересечения периодов (числовых множеств)

Супер-пупер быстрая конкатенация(сложение) строк
Разность дат, а как быстрее?

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

Допустим, имеется два периода:
1) НачалоПериода1 - КонецПериода1;
2) НачалоПериода2 - КонецПериода2.


Можно пойти от противного и составить логическое выражение по определению непересекаемости периодов с отрицанием:
Пересекаются = Не ((НачалоПериода2 > КонецПериода1) Или (КонецПериода2 < НачалоПериода1))

Другой тождественный вариант по определению пересекаемости периодов:
Пересекаются = (НачалоПериода2 < КонецПериода1) И (КонецПериода2 > НачалоПериода1);

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