Сдвигает элемент с заданным индексом на указанное смещение.
Синтаксис
Сдвинуть(<Индекс>, <Смещение>)Полное описание, параметры и ограничения
КоллекцияЗамещающихЭлементовПланировщика.Сдвинуть (PlannerReplacementItemCollection.Move)
КоллекцияЗамещающихЭлементовПланировщика (PlannerReplacementItemCollection)
Сдвинуть (Move)
Доступен, начиная с версии 8.3.6.
Синтаксис:
Сдвинуть(<Индекс>, <Смещение>)
Параметры:
<Индекс> (обязательный)
Тип: Число, ЭлементПланировщика;.
Индекс сдвигаемого элемента в коллекции или сам элемент.
<Смещение> (обязательный)
Тип: Число.
Количество элементов, на которое необходимо сдвинуть элемент. Положительное значение обозначает смещение к концу, отрицательное - к началу коллекции.
Описание:
Сдвигает элемент с заданным индексом на указанное смещение.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.6.
Методическая информация
Практические примеры
Перенести повторение и отличить отмену от удаления исключения
В собственном плане создадим две серии, у первой три замещения; проверим дату исходного слота, новое время, флаг отмены и весь жизненный цикл её коллекции исключений.
Где и как запускать
Полный обычный клиентский общий модуль УчебныеЗамещения85; только собственные данные в памяти, Пульт отдельно ниже.
Подготовка
НОВАЯ собственная файловая база 8.5.1.1343, конфигурация УчебныеЗамещения85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не рабочая база и не её копия; без расширений, разделителей и фоновых прикладных заданий. Здесь 1С и UI не запускались: runtimeVerifiedScenarios=0.
Общий модуль УчебныеЗамещения85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, остальные клиентские флаги=Нет, Привилегированный=Нет. Полный основной модуль выбранного урока вставляется целиком. Обработка УчебныеЗамещения85 → обычная основная форма Пульт → кнопка Выполнить → действие ВыполнитьНажатие; полный модуль формы ниже.
Данные строятся в памяти: собственный Планировщик, собственное ежедневное событие 08.10.2026 09:00–10:00 либо три одиночных события внутри/вне заданного периода. Записи календарей, задач, сотрудников и документов не используются. Не вызывайте Напечатать.
Первый урок использует три даты исходных повторений: 09, 10 и 11 октября в 09:00. Замещённое повторение 10 октября переносится на 11:00–12:00, но ДатаЗамещения остаётся 10 октября 09:00. Не подменяйте дату-ключ новым временем события.
Для второго урока: сохраните полный SVG из дополнительного блока как свой marker16.svg и импортируйте в Общие → Общие картинки → Уч85Маркер16. Один вариант 16×16, не коллекция картинок. Это собственная картинка конфигурации, а не абсолютный объект из произвольного файла. Здесь импорт и создание файла не выполнялись.
Второй урок проверяет ВидКартинки.ИзБиблиотеки и фактические Ширина()/Высота()=16 до назначения. При другом виде, размере или Неопределено опыт останавливается. Для первого урока общая картинка вообще не нужна.
F7 и обновление только собственной базы, затем Пульт обычного толстого клиента. Первый урок проверяет данные замещений. Второй не подключает Планировщик к визуальному полю: проверяет модель картинки/рамки и очистку событий по собственным периодам, не внешний вид интерфейса.
Свойство Рамка доступно на платформе, но по установленной справке НЕ применяется в интерфейсе Версия 8.5. Успешное присваивание/чтение не обещает визуальную рамку. В этой партии не выдаём чтение пустого ЗначенияИзмерений за назначение события ресурсу.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойКонтекст();
План = Новый Планировщик;
Серия = План.Элементы.Добавить(Дата(2026, 10, 8, 9), Дата(2026, 10, 8, 10));
Серия.Значение = "own-series";
Серия.Текст = "Своя ежедневная часовая встреча";
Расписание = Новый РасписаниеЭлементаПланировщика;
Расписание.ДниНедели.Очистить();
Расписание.Месяцы.Очистить();
Расписание.ПериодПовтораДней = 1;
Расписание.КоличествоПовторов = 7;
Серия.Расписание = Расписание;
ДругаяСерия = План.Элементы.Добавить(Дата(2026, 10, 8, 14), Дата(2026, 10, 8, 15));
ДругаяСерия.Значение = "other-own-series";
ДругоеРасписание = Новый РасписаниеЭлементаПланировщика;
ДругоеРасписание.ДниНедели.Очистить();
ДругоеРасписание.Месяцы.Очистить();
ДругоеРасписание.ПериодПовтораДней = 1;
ДругоеРасписание.КоличествоПовторов = 2;
ДругаяСерия.Расписание = ДругоеРасписание;
Замещения = Серия.ЗамещающиеЭлементы;
ДругиеЗамещения = ДругаяСерия.ЗамещающиеЭлементы;
Если ТипЗнч(Замещения) <> Тип("КоллекцияЗамещающихЭлементовПланировщика")
Или ТипЗнч(ДругиеЗамещения) <> Тип("КоллекцияЗамещающихЭлементовПланировщика") Тогда
ВызватьИсключение "Для собственных серий требуется реальная коллекция, не Неопределено";
КонецЕсли;
Если Замещения.Количество() <> 0 Или ДругиеЗамещения.Количество() <> 0 Тогда
ВызватьИсключение "Нужны собственные новые серии без существующих исключений";
КонецЕсли;
ДатаА = Дата(2026, 10, 9, 9);
ДатаБ = Дата(2026, 10, 10, 9);
ДатаВ = Дата(2026, 10, 11, 9);
А = Замещения.Добавить(ДатаА);
В = Замещения.Добавить(ДатаВ);
Б = Замещения.Вставить(1, ДатаБ);
ПодготовитьСвоеЗамещение(А, Серия, ДатаА, Дата(2026, 10, 9, 11));
ПодготовитьСвоеЗамещение(Б, Серия, ДатаБ, Дата(2026, 10, 10, 11));
ПодготовитьСвоеЗамещение(В, Серия, ДатаВ, Дата(2026, 10, 11, 11));
Если Замещения.Количество() <> 3 Или Замещения.Получить(1).ДатаЗамещения <> ДатаБ
Или Замещения[1].ДатаЗамещения <> ДатаБ Или Замещения.Индекс(Б) <> 1 Тогда
ВызватьИсключение "Нужен исходный порядок трёх своих замещений А,Б,В";
КонецЕсли;
Найденный = Замещения.Найти(ДатаБ);
Если Найденный = Неопределено Тогда
ВызватьИсключение "Найти не подтвердил существующее собственное замещение";
КонецЕсли;
Если Найденный.ДатаЗамещения <> ДатаБ Или Найденный.Значение <> ДатаБ Или Замещения.Количество() <> 3 Тогда
ВызватьИсключение "Найденное замещение и размер собственной коллекции не совпали";
КонецЕсли;
Б.Удаленный = Истина;
Если Не Б.Удаленный Или Замещения.Количество() <> 3 Тогда
ВызватьИсключение "Удаленный отмечает отмену повторения, а не удаляет запись исключения из коллекции";
КонецЕсли;
Б.Удаленный = Ложь;
Замещения.Сдвинуть(В, -2);
Если Замещения.Получить(0).ДатаЗамещения <> ДатаВ Или Замещения.Индекс(В) <> 0 Тогда
ВызватьИсключение "После сдвига объекта нужен порядок В,А,Б";
КонецЕсли;
Замещения.Сдвинуть(0, 2);
Если Замещения.Получить(2).ДатаЗамещения <> ДатаВ Тогда
ВызватьИсключение "Сдвиг по числовой позиции должен вернуть В в конец";
КонецЕсли;
Замещения.Удалить(В);
Замещения.Удалить(0);
Если Замещения.Количество() <> 1 Или Замещения.Получить(0).ДатаЗамещения <> ДатаБ Тогда
ВызватьИсключение "Удаление объекта В и позиции А должно оставить собственный Б";
КонецЕсли;
Замещения.Очистить();
Если Замещения.Количество() <> 0 Или ДругиеЗамещения.Количество() <> 0
Или План.Элементы.Количество() <> 2 Или Серия.Расписание.ПериодПовтораДней <> 1 Тогда
ВызватьИсключение "Очищались только исключения своей первой серии, не две исходные серии";
КонецЕсли;
Сообщить("Перенос, флаг отмены, оба способа сдвига и удаления проверены в памяти. Исключения очищены, обе исходные серии остались.");
КонецПроцедуры
Процедура ПодготовитьСвоеЗамещение(Элемент, Серия, ИсходнаяДата, НовоеНачало)
Если Элемент.Родитель <> Серия Или Элемент.ДатаЗамещения <> ИсходнаяДата Тогда
ВызватьИсключение "Замещение должно принадлежать своей серии и её исходной дате повторения";
КонецЕсли;
Элемент.Значение = ИсходнаяДата;
Элемент.Начало = НовоеНачало;
Элемент.Конец = НовоеНачало + 3600;
Элемент.Текст = "Своё переносимое повторение";
Элемент.Удаленный = Ложь;
Если Элемент.Удаленный Или Элемент.Конец - Элемент.Начало <> 3600
Или Элемент.ДатаЗамещения = Элемент.Начало Тогда
ВызватьИсключение "Часовой перенос и ключ исходного повторения должны различаться";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойКонтекст()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен собственный стенд УчебныеЗамещения85 платформы 8.5.1.1343";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
КонецЕсли;
КонецПроцедурыУчебныеЗамещения85.Пульт
УчебныеЗамещения85 → Обработки → УчебныеЗамещения85 → Формы → Пульт → Модуль
Полный модуль собственной обычной формы, не выполнялся.
Процедура ВыполнитьНажатие(Кнопка)
УчебныеЗамещения85.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Новый Планировщик существует только в памяти. Две исходные серии создаются через настоящую коллекцию Элементы; каждая получает своё отдельное расписание, а не общий изменяемый экземпляр.
ЗамещающиеЭлементы — readonly-свойство, возвращающее коллекцию или Неопределено. Проверяем фактический класс после назначения расписания; новый конструктор коллекции не выдумывается, свойство не переназначается.
Добавить принимает обязательную Дату исходного повторения, Вставить — индекс и такую дату. Создаём А/Б/В для трёх разных исходных 09:00, не передаём новое 11:00 как ключ.
Родитель и ДатаЗамещения только читаются и сверяются. Начало/Конец переносимого элемента устанавливаются на 11:00–12:00; исходный ключ 09:00 не превращается в новое время.
Получить(1) и [1] читают по индексу. Индекс получает сам объект Б. Число исключений не является числом всех визуальных повторений серии.
Найти имеет противоречивую статью: параметр назван ДатаЗамещения, описание упоминает Значение и содержит фразу о добавлении. Здесь Значение каждого исключения совпадает с его датой-ключом, ищем уже существующий Б и проверяем отсутствие изменения размера; не объявляем спорный общий случай решённым.
Удаленный=Истина помечает замещаемое повторение отменённым, но исключение остаётся в коллекции. Проверяем прежний размер, затем возвращаем Ложь. Это не пометка удаления объекта информационной базы.
Сдвинуть поддерживает объект и числовую позицию: В идёт в начало и возвращается в конец. Это меняет порядок коллекции, а не ДатаЗамещения или новое время события.
Удалить также принимает объект либо индекс. После удаления В и позиции А остаётся Б; Очистить удаляет только оставшиеся исключения первой серии, не её расписание и не вторую серию.
Как проверить результат
Будущий тест: F7 и собственный Пульт. Сначала три исключения А/Б/В, после перемещений снова А/Б/В, после двух удалений только Б, после очистки ноль. Здесь runtimeVerifiedScenarios=0.
ДатаЗамещения Б — 10.10.2026 09:00, а новое Начало — 11:00; продолжительность 3600 секунд и Родитель именно первая серия.
После Удаленный=Истина размер остаётся три. Возврат Ложь меняет состояние отмены, не добавляет ещё один объект.
Найти вызывается только для существующего Б с равными датой-ключом и Значение; если результат или размер отличаются, опыт отказывает, а не скрывает противоречие установленной статьи.
Обе исходные серии после очистки остаются в План.Элементы; вторая коллекция исключений не менялась. Здесь нет визуального доказательства развёртывания повторений в поле формы.
Ожидаемый результат
Будущий результат — проверенный перенос собственного повторения и различение флага отмены, удаления исключения и сохранения исходной серии.
На что обратить внимание
Не присваивайте Родитель, ДатаЗамещения или ЗамещающиеЭлементы: они readonly. Для нового исключения нужна дата исходного слота в Добавить/Вставить.
Статья Найти неоднозначна; её три разных формулировки не исправляются предположением модели. Этот ограниченный пример проверяет согласованный собственный ключ и сохраняет требование реального будущего теста.
Удалить исключение из коллекции и отменить повторение флагом Удаленный — противоположные по смыслу операции. Не считать пустую коллекцию исключений удалённой серией.
После удаления/очистки старые переменные А/Б/В больше не используются. Перемещение коллекции не переносит событие на новую дату.
Количество Элементы считает исходные элементы плана; Количество ЗамещающиеЭлементы — исключения конкретной серии. Ни один счётчик не выдается за число всех видимых повторов.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.