Сдвигает строку табличной части на указанное количество позиций.
Синтаксис
Сдвинуть(<Строка>, <Смещение>)Примеры платформы
Состав.Сдвинуть(1, -1);
Состав.Сдвинуть(1, 1);Полное описание, параметры и ограничения
ПланСчетовВидыСубконто.<Имя плана счетов>.Сдвинуть (ChartOfAccountsExtDimensionTypes.<Chart of accounts name>.Move)
ПланСчетовВидыСубконто.<Имя плана счетов> (ChartOfAccountsExtDimensionTypes.<Chart of accounts name>)
Сдвинуть (Move)
Доступен, начиная с версии 8.0.
Синтаксис:
Сдвинуть(<Строка>, <Смещение>)
Параметры:
<Строка> (обязательный)
Тип: Число, ПланСчетовВидыСубконтоСтрока.<Имя плана счетов>.
Индекс строки, которую нужно сдвинуть, либо сама сдвигаемая строка.
<Смещение> (обязательный)
Тип: Число.
Количество строк, на которое необходимо переместить строку. Положительное значение означает, что строка будет передвинута ближе к концу табличной части (вниз), отрицательное - ближе к началу (вверх).
Описание:
Сдвигает строку табличной части на указанное количество позиций.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Использование метода допустимо только в том случае, если табличная часть получена из свойства объекта. Если табличная часть получена из свойства ссылки (или выборки), то использование этого метода будет вызывать ошибку выполнения.
Пример:
// сдвиг 2-й строки на предыдущую позицию
Состав.Сдвинуть(1, -1);
// сдвиг 2-й строки на следующую позицию
Состав.Сдвинуть(1, 1);
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Настроить порядок трёх аналитик нового счёта в памяти
Добавим А и В, вставим Б между ними, найдём исходные строки, проверим живые ссылки отбора и изменим порядок. Затем удалим одну строку и очистим только свой черновик, сохранив отдельный второй счёт.
Где и как запускать
Полный обычный клиентский общий модуль УчебныеСубконто85, только толстый клиент; все помощники включены, полный модуль Пульта отдельно. Не выполнялся.
Подготовка
Создайте НОВУЮ отдельную файловую базу 8.5.1.1343, имя конфигурации УчебныеСубконто85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не рабочую БП/КА2 и не её копию. Здесь база и код не запускались: runtimeVerifiedScenarios=0.
Планы видов характеристик → УчебныеАналитики85: тип значений только Строка(30), переменная длина. В Предопределённые создайте три собственных элемента НЕ группы: имя АналитикаА, код A, наименование Учебная аналитика A; АналитикаБ, код B, наименование Учебная аналитика B; АналитикаВ, код C, наименование Учебная аналитика C. Их тип значения — Строка(30). Дополнительные значения, свои реквизиты и табличные части не создавайте.
Планы счетов → УчебныеСчета85: ДлинаКода=10, ДлинаНаименования=100, ВидыСубконто=УчебныеАналитики85, МаксКоличествоСубконто=3. Признаки учёта субконто и обычные признаки учёта отсутствуют, собственные реквизиты/табличные части и предопределённые счета отсутствуют. Все объектные и менеджерские модули пустые.
Никаких регистров бухгалтерии, документов, подписок и расширений. Предопределённые аналитики — подготовленные элементы своего стенда; 1С может создать их при обновлении своей базы. Это не создание нами рабочих аналитик и не записи счёта из примера.
Создайте неглобальный общий модуль УчебныеСубконто85: Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, другие клиентские флаги=Нет. Вставляйте полный основной модуль выбранного урока целиком. Все три имеют ВыполнитьПример; для другого урока заменяйте весь текст.
Создайте обработку УчебныеСубконто85, обычную основную форму Пульт с кнопкой Выполнить, действие ВыполнитьНажатие. Полный отдельный модуль этой формы приведён ниже. Дайте своему учебному пользователю доступ к своим планам, предопределённым аналитикам и обработке.
F7, сохранение и обновление только своего нового стенда. В будущем толстом клиенте запустите Пульт. Каждый вызов создаёт новый незаписанный счёт в памяти; Код, Наименование и остальные обязательные поля счёта для записи здесь не заполняются, поскольку Записать не вызывается.
Итог и Свернуть у ВидыСубконто оставлены для совместимости и, по справке, не имеют прикладного смысла. Третий урок — контролируемая демонстрация границы API, не вычисление бухгалтерских итогов и не способ изменить виды аналитики в рабочем учёте.
Процедура ВыполнитьПример() Экспорт
Счет = СоздатьСвойСчет();
Аналитики = ПолучитьСвоиАналитики();
Субконто = Счет.ВидыСубконто;
СтрокаА = Субконто.Добавить();
ЗаполнитьСвоюСтроку(СтрокаА, Аналитики[0], Ложь);
СтрокаВ = Субконто.Добавить();
ЗаполнитьСвоюСтроку(СтрокаВ, Аналитики[2], Ложь);
СтрокаБ = Субконто.Вставить(1);
ЗаполнитьСвоюСтроку(СтрокаБ, Аналитики[1], Истина);
ПроверитьСвоиСтроки(Субконто, Аналитики, СвоиФлаги(Ложь, Истина, Ложь));
Если Субконто.Найти(Аналитики[1], "ВидСубконто") <> СтрокаБ Тогда
ВызватьИсключение "Поиск своей аналитики Б не вернул настоящую строку";
КонецЕсли;
Отбор = Новый Структура("ТолькоОбороты", Ложь);
Найденные = Субконто.НайтиСтроки(Отбор);
ИндексА = Найденные.Найти(СтрокаА);
Если Найденные.Количество() <> 2 Или ИндексА = Неопределено Или Найденные.Найти(СтрокаВ) = Неопределено Тогда
ВызватьИсключение "Нужны две исходные строки не только оборотных аналитик";
КонецЕсли;
Найденные[ИндексА].ТолькоОбороты = Истина;
Если Не СтрокаА.ТолькоОбороты Тогда
ВызватьИсключение "НайтиСтроки должен хранить ссылки на исходные строки";
КонецЕсли;
СтрокаА.ТолькоОбороты = Ложь;
Субконто.Сдвинуть(СтрокаВ, -2);
Порядок = Новый Массив;
Порядок.Добавить(Аналитики[2]);
Порядок.Добавить(Аналитики[0]);
Порядок.Добавить(Аналитики[1]);
ПроверитьСвоиСтроки(Субконто, Порядок, СвоиФлаги(Ложь, Ложь, Истина));
Субконто.Сортировать("ТолькоОбороты Убыв, НомерСтроки Возр");
Порядок.Очистить();
Порядок.Добавить(Аналитики[1]);
Порядок.Добавить(Аналитики[2]);
Порядок.Добавить(Аналитики[0]);
ПроверитьСвоиСтроки(Субконто, Порядок, СвоиФлаги(Истина, Ложь, Ложь));
ДругойСчет = СоздатьСвойСчет();
ДругаяСтрока = ДругойСчет.ВидыСубконто.Добавить();
ЗаполнитьСвоюСтроку(ДругаяСтрока, Аналитики[0], Ложь);
Если Субконто.Индекс(ДругаяСтрока) <> -1 Тогда
ВызватьИсключение "Строка другого счета не должна принадлежать нашей таблице";
КонецЕсли;
Субконто.Удалить(СтрокаВ);
Порядок.Удалить(1);
ПроверитьСвоиСтроки(Субконто, Порядок, СвоиФлаги(Истина, Ложь));
Субконто.Очистить();
Если Субконто.Количество() <> 0 Или ДругойСчет.ВидыСубконто.Количество() <> 1 Тогда
ВызватьИсключение "Очистка должна затрагивать только свою таблицу памяти";
КонецЕсли;
Сообщить("А, Б, В добавлены, найдены и переставлены; своя таблица очищена, другой черновик сохранил строку. Счета не записывались.");
КонецПроцедуры
Процедура ПроверитьСвойКонтекст()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен собственный стенд УчебныеСубконто85 платформы 8.5.1.1343";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
КонецЕсли;
КонецПроцедуры
Функция СоздатьСвойСчет()
ПроверитьСвойКонтекст();
МДПлана = Метаданные.ПланыСчетов.Найти("УчебныеСчета85");
МДАналитик = Метаданные.ПланыВидовХарактеристик.Найти("УчебныеАналитики85");
Если МДПлана = Неопределено Или МДАналитик = Неопределено Тогда
ВызватьИсключение "Подготовьте собственные планы счетов и аналитик";
КонецЕсли;
Если МДПлана.ВидыСубконто <> МДАналитик Или МДПлана.МаксКоличествоСубконто <> 3
Или МДПлана.ПризнакиУчетаСубконто.Количество() <> 0 Тогда
ВызватьИсключение "Нужен свой план с тремя субконто без дополнительных флагов";
КонецЕсли;
Счет = ПланыСчетов.УчебныеСчета85.СоздатьСчет();
Если Счет.ВидыСубконто.Количество() <> 0 Тогда
ВызватьИсключение "Новый собственный счет должен иметь пустую таблицу";
КонецЕсли;
Возврат Счет;
КонецФункции
Функция ПолучитьСвоиАналитики()
Аналитики = Новый Массив;
Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаА);
Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаБ);
Аналитики.Добавить(ПланыВидовХарактеристик.УчебныеАналитики85.АналитикаВ);
Для Каждого Аналитика Из Аналитики Цикл
Если Аналитика.Пустая() Тогда
ВызватьИсключение "Предопределенные аналитики должны иметь непустые ссылки своего плана";
КонецЕсли;
КонецЦикла;
Если Аналитики[0] = Аналитики[1] Или Аналитики[0] = Аналитики[2] Или Аналитики[1] = Аналитики[2] Тогда
ВызватьИсключение "Три свои аналитики должны различаться";
КонецЕсли;
Возврат Аналитики;
КонецФункции
Процедура ЗаполнитьСвоюСтроку(СтрокаСубконто, Аналитика, ТолькоОбороты)
СтрокаСубконто.ВидСубконто = Аналитика;
СтрокаСубконто.ТолькоОбороты = ТолькоОбороты;
СтрокаСубконто.Предопределенное = Ложь;
КонецПроцедуры
Функция СвоиФлаги(Первый, Второй, Третий = Неопределено)
Флаги = Новый Массив;
Флаги.Добавить(Первый);
Флаги.Добавить(Второй);
Если Третий <> Неопределено Тогда
Флаги.Добавить(Третий);
КонецЕсли;
Возврат Флаги;
КонецФункции
Процедура ПроверитьСвоиСтроки(Субконто, Аналитики, Флаги)
Если Субконто.Количество() <> Аналитики.Количество() Или Флаги.Количество() <> Аналитики.Количество() Тогда
ВызватьИсключение "Не совпал полный размер своей таблицы";
КонецЕсли;
Для Индекс = 0 По Аналитики.Количество() - 1 Цикл
СтрокаСубконто = Субконто.Получить(Индекс);
Если СтрокаСубконто <> Субконто[Индекс] Или Субконто.Индекс(СтрокаСубконто) <> Индекс
Или СтрокаСубконто.НомерСтроки <> Индекс + 1
Или СтрокаСубконто.ВидСубконто <> Аналитики[Индекс]
Или СтрокаСубконто.ТолькоОбороты <> Флаги[Индекс] Или СтрокаСубконто.Предопределенное Тогда
ВызватьИсключение "Не совпали порядок, вид, флаг оборотов или принадлежность собственной строки";
КонецЕсли;
КонецЦикла;
КонецПроцедурыУчебныеСубконто85.Пульт
УчебныеСубконто85 → Обработки → УчебныеСубконто85 → Формы → Пульт → Модуль
Полный модуль собственной обычной формы, не выполнялся.
Процедура ВыполнитьНажатие(Кнопка)
УчебныеСубконто85.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
СоздатьСвойСчет проверяет платформу и свой стенд, связь с планом аналитик, предел три вида и отсутствие дополнительных флагов. СоздатьСчет создаёт новый объект, не получает записанный счёт по ссылке.
Три ссылки берутся из своих предопределённых АналитикаА/Б/В, заданных в подготовке. Непустая ссылка не подменяется произвольным UUID или неизвестным входным объектом.
Строки специальной таблицы имеют ВидСубконто как ссылку на план характеристик и два отдельных Булево. Предопределенное=Ложь относится к строке счёта, не к тому, является ли сама аналитика предопределённым элементом плана.
Индекс начинается с 0, НомерСтроки — с 1 и readonly. Полный валидатор сверяет обе адресации, принадлежность строки, вид и оба флага; НомерСтроки не присваивается вручную.
Мутирующие методы допустимы у таблицы объекта. У таблицы ссылки или выборки они вызовут ошибку: ни ссылку на записанный счёт, ни неизвестную таблицу урок не принимает.
Добавить помещает строку в конец, Вставить(1) — на вторую позицию. Все три поля новой строки заполнены явно; исходный порядок А, Б, В с флагами Ложь, Истина, Ложь.
Найти получает конкретную ссылку Б и явное имя ВидСубконто. НайтиСтроки получает Структуру отбора ТолькоОбороты=Ложь и возвращает массив ссылок на А и В, не копии.
Находим индекс СтрокаА в массиве результатов, не предполагая порядок отбора. Меняем флаг у Найденные[ИндексА] и проверяем тот же флаг у СтрокаА; затем возвращаем Ложь. Это контроль живой связи результата поиска.
Сдвинуть(СтрокаВ,-2) даёт В,А,Б. Сортировать по оборотам вниз и текущему номеру вверх даёт Б,В,А; номера после перестановок пересчитываются.
Строка отдельного второго счёта с той же аналитикой А имеет Индекс=-1 в первом. Совпадение значений не означает принадлежность коллекции.
Удалить принимает настоящую СтрокаВ; её после удаления не читаем. Проверяем Б,А, затем Очистить даёт 0, а другая таблица по-прежнему содержит одну строку.
Как проверить результат
Будущий тест: F7 и запуск Пульта только в своём новом стенде. Каждый вызов начинается с нового счёта и пустой таблицы; здесь BSL не выполнялся.
Если не созданы свои предопределённые имена, подготовьте их и обновите только свой стенд. Не заменяйте их чужими ссылками из БП или КА2.
В коде нет Записать счёта, проводок или регистров бухгалтерии. Удаление/очистка затрагивает только новые строки памяти, не записи базы.
Полные контрольные последовательности: А,Б,В → В,А,Б → Б,В,А → Б,А → пусто. Флаги каждой аналитики и Предопределенное=Ложь должны сохраняться.
В будущем изменении кода уберите возврат флага А после НайтиСтроки: следующий полный контроль должен обнаружить иной набор флагов. Это не повод менять сортировку для маскировки ошибки.
Другой счёт после очистки первого имеет одну свою строку; оба остаются незаписанными.
Ожидаемый результат
Будущий опыт сверяет полный состав собственного незаписанного счёта в памяти и границы специальной таблицы. Рабочая база, проводки и счета не меняются. runtimeVerifiedScenarios=0.
На что обратить внимание
ВидыСубконто — специальная таблица счёта, не таблица сумм бухгалтерского регистра. Изменение её порядка влияет на позиции аналитик, не на остатки.
ТолькоОбороты и Предопределенное — разные флаги. Ссылка на предопределённый вид не делает автоматически предопределённой добавленную нами строку счёта.
Методы объекта памяти не сохраняют счёт. Этот черновик намеренно не подготовлен к записи; не добавляйте Записать ради проверки примера.
Статические Python/HTML-проверки и сверка установленной справки не являются компиляцией и запуском в 1С. runtimeVerifiedScenarios остаётся 0.
Найти возвращает одну строку либо Неопределено, НайтиСтроки — массив. Чужую строку нельзя подставлять как позицию своей коллекции.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.