1с контекстное меню дерева значений

Контекстное меню и перемещение строк.

В итоге либо строки не двигаются, либо происходит бесконечное зацикливание и выкидывает с 1с. Так же стандартные кнопки перемещения( контектсное меню) не отрабатывают.

КоллекцияСтрокДереваЗначений.Сдвинуть (ValueTreeRowCollection.Move)
Синтаксис:
Сдвинуть(, )
Параметры:
(обязательный)
Тип: Число.
Индекс строки, которую надо сдвинуть.
(обязательный)
Тип: Число.
Количество строк, на которые необходимо сдвинуть строку. Положительное смещение обозначает увеличение текущего индекса (сдвиг к концу коллекции), отрицательное — уменьшение текущего индекса (сдвиг к началу коллекции).
Описание:
Сдвигает строку на указанное количество позиций в коллекции строк данного уровня дерева значений.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
// сдвинем первую строку на следующую позицию

СтрокиСостава.Сдвинуть(0, 1);
// сдвинем вторую строку на предыдущую позицию

СтрокиСостава.Сдвинуть(1, -1);
Использование в версии:
Доступен, начиная с версии 8.0.

(4) для примера я повесил событие на свою кнопку. То есть при нажатии на кнопку мы смотрим какая сейчас активная строка дерева. Берем строку родителя. А дальше у Строки родителя у реквизита «Строки» вызываем метод «Сдвинуть», в параметрах которого указываем строку, которую хотим подвинуть(нашу текущую строку) и то на сколько ее нужно переместить. Только надо еще проверки какие-нибудь чтобы не улететь за границы.
//В примере на гифке Строка2 и Строка3 подчинены Строка1

(5)
1. Первую строку не сдвинуть,так как родитель отсуствтует.
2. Выход за границы индексов таблицы: «неправильное смещение внутри коллекции».

(6) «Первую строку не сдвинуть». Попробуй напрямую обратиться к строкам верхнего уровня дерева ИмяТвоегоДерева.Строки.Сдвинуть(НужнаяСтрока, Смещение)

(9) Все, что связано с деревьями, не только понимать, но и объяснять сложно) Сейчас попробую перефразировать. Если у строки нет родителя, то это строка первого уровня, а коллекция строк первого уровня, на сколько я помню, это просто ИмяТвоегоДерева.Строки. Вот именно у этой коллекции и вызывай метод Сдвинуть() чтобы подвигать строку

(10) А ну и перед делать проверку на то, что это первая строка ?

Читайте также:  Острым клювом дятел долбит своим клювом деревья

А по поводу метода количества() как проверять ?

Да, проверять, что у нее нет родителя

Если мы хотим двинуться вниз по дереву, то Примерно следующее:

ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока); Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки Тогда РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока); Иначе Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя"); КонецЕсли;

Аналогично при движении наверх

ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока; РодительТекущейСтроки = ТекущаяСтрока.Родитель; ЭлементыФормы.ГруппировкиНаПечать.ТекущиеДанные.Родитель.Строки.Сдвинуть(ТекущаяСтрока,1); ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока); Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки Тогда РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока); Иначе Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя"); КонецЕсли;

Вот так ?
Всё равно ловлю ошибку "неправильное смещение внутри коллекци"
И ИндексТекущейСтроки < РодительТекущейСтроки.Строки это число и колеекциястрок. как их сравнивать..

Количество() я пропустил, когда Вам ответ писал.

Я еще только не проверял индекс с 0 начинается или с 1. Так что в отладчике проверьте и если что код на Количество()-1 подкорректируйте

(13)Сначала проверки, потом сдвиги, а то Вы сначала сдвиг делаете, а потом идете проверку делать и если она проходит, то еще один сдвиг. Примерно так должно быть:

ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока; РодительТекущейСтроки = ТекущаяСтрока.Родитель; Если РодительТекущейСтроки = Неопределено Тогда РодительТекущейСтроки = ГруппировкиНаПечать; КонецЕсли; ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока); Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество() Тогда РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока); Иначе Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя"); КонецЕсли;

(16)Скиньте Ваш код как он есть сейчас, я попробую у себя внешнюю обработку сделать и смоделировать чтобы все работало

ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока; РодительТекущейСтроки = ТекущаяСтрока.Родитель; Если РодительТекущейСтроки = Неопределено Тогда РодительТекущейСтроки = ГруппировкиНаПечать; КонецЕсли; ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока); Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество() Тогда РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока,1); Иначе Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя"); КонецЕсли;

(16)Вот код и пример обработки. У меня работает:

Процедура КнопкаВнизНажатие(Элемент) ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока; РодительТекущейСтроки = ТекущаяСтрока.Родитель; Если РодительТекущейСтроки = Неопределено Тогда РодительТекущейСтроки = ГруппировкиНаПечать; КонецЕсли; ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока); Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество() - 1 Тогда РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока, 1); Иначе Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя"); КонецЕсли; КонецПроцедуры Процедура КнопкаВВерхНажатие(Элемент) ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока; РодительТекущейСтроки = ТекущаяСтрока.Родитель; Если РодительТекущейСтроки = Неопределено Тогда РодительТекущейСтроки = ГруппировкиНаПечать; КонецЕсли; ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока); Если ИндексТекущейСтроки <>0 Тогда РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока, -1); Иначе Сообщить("Мы в начале уровня дерева. Вверх двигаться нельзя"); КонецЕсли; КонецПроцедуры

(19) Открыл у себя. Попадаю в сообщение() всегда..
Плюс у Вас не программно стоят колонки и иеархия отсуствтует видимая.

Читайте также:  Скрученное дерево red dead redemption 2

(20)Строки дерева добавь в таком порядке. Добавь первую строку. Встань на нее фокусом и добавь вторую строку. Потом опять встань на первую строку фокусом и добавь третью строку. Вторая и третья строка у тебя окажутся подчинены первой. Затем попробую подвигать вторую и третью строки местами. Лень было реализовывать полноценный инструмент добавления строк ради демки.

Разве это важно для демонстрации перемещения строк? По моему нет, я сделал просто демку, которая показывает как работает перемещение, то что это действительно дерево видно в конфигураторе, то, что строки подчинены друг другу если их корректно внести тоже можно увидеть в конфигураторе

Если ГруппировкиНаПечать.Колонки.Количество() = 0 Тогда ГруппировкиНаПечать.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево")); ГруппировкиНаПечать.Колонки.Добавить("Группировка", Новый ОписаниеТипов("Строка")); ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений")); Иначе Если ГруппировкиНаПечать.Колонки.Найти("Значение") = Неопределено Тогда ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений")); КонецЕсли; КонецЕсли; ЭлементыФормы.ГруппировкиНаПечать.СоздатьКолонки(); ЭлементыФормы.ГруппировкиНаПечать.ЧередованиеЦветовСтрок = Истина; ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.ДанныеФлажка = ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные; ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные = ""; ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.КнопкаСпискаВыбора = Истина; ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораИзСписка = Истина; ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора.ДоступныеЗначения = ПолучитьСписокКолонокТаблицыТовары(); ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора = ПолучитьСписокКолонокТаблицыТовары(); ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораНезаполненного = РежимВыбораНезаполненного.ПриАктивизации; ЭлементыФормы.ГруппировкиНаПечать.Колонки.Значение.РежимРедактирования = РежимРедактированияКолонки.Вход; ЭлементыФормы.ГруппировкиНаПечать.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;

Видимо из-за этого и криво работает.. То есть у меня иеарирхия, каждая строки подчинена другой..

сли ГруппировкиНаПечать.Колонки.Количество() = 0 Тогда

ГруппировкиНаПечать.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево"));

ГруппировкиНаПечать.Колонки.Добавить("Группировка", Новый ОписаниеТипов("Строка"));

ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));

Если ГруппировкиНаПечать.Колонки.Найти("Значение") = Неопределено Тогда

ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));

Источник

8.2 + Управляемые формы + дерево значений + контекстное меню = проблемы #616888

Исходные данные: Платформа: 8.2.14.528 Режим работы: управляемое приложение, тонкий клиент Журнал документов. На форме журнала динамический список с документами и дерево значений, которое служит для отображения подчиненных документов. Задача: на дереве значений при правом клике вывести контекстное меню, которое может изменяться программно в зависимости от активного вида документа на момент клика на дереве значений. Попытка решения: Основное контекстное меню дерева значений построено в конфигураторе. При активизации строки дерева значений некоторые пункты контекстного меню перестраиваются (меняется доступность, меняются заголовки, добавляются некоторые пункты, например для ввода на основании n-ных видов документов). Изменения пунктов меню происходит где-то так: Проблема: при попытке изменить содержание контекстного меню (в процедуре ПриАктивизацииСтроки) эта же процедура отрабатывает самостоятельно вновь. И все бы ничего, но при повторной отработке текущая строка дерева значений становится всегда первой, на какой бы ветке дерева я не находился в данный момент. Соответственно, после того, как текущая строка дерева самостоятельно изменилась, процедура ПриАктивизацииСтроки отрабатывает в третий раз. Т.е. из-за такого поведения системы пользователю невозможно получить контекстное меню строк дерева значений, которые находятся ниже первой строки. Если отключить программную перестройку содержания контекстного меню, то все отрабатыват в штатном режиме. Вопрос: может быть кто-то сталкивался с подобной проблемой, и у него появились варианты обхода подобного глюка? Есть ли какие-нибудь мысли по поводу вышеизложенного? Как можно обойти данную проблему отображения не жертвуя функциональностью системы. Заранее благодарен за дельные мысли.

Читайте также:  Гриб трутовик дерево паразитизм

Похожие вопросы 1С

  • Управляемые блокировки в УПП
  • Где правильнее поставить управляемые блокировки
  • Управляемые формы
  • УТ 11 управляемые формы - добавить в таб часть колонку с остатками
  • получить форму во внешней обработке (8.2 управляемые формы)
  • Как программно вставить элемент формы в определённое место (управляемые формы)?
  • Управляемые формы, Дерево значений, Динамический список, ОТБОРЫ
  • Управляемые формы. Вызов второй формы кнопкой из первой
  • Дерево значений управляемые формы. как скрыть строку ?
  • Управляемые формы: Обратиться из модуля объекта к элементу формы
  • Управляемые формы. Убрать заголовок формы
  • Управляемые формы. Как раскрасить дерево значений?

В этой группе 1С

  • Завис процесс 1с
  • Как вам такой КОД .
  • скд = >связи наборов данных = > список параметров
  • Расчет ресурса по группировкам иерархии.
  • Почему функция ВставитьОбласть недоступна в тонком клиенте? А как же SaaS?
  • Precomp.dll
  • v7: Как вывести остатки по 41 (номенклатура+код) счету в xml в бухгалтерии 7.7
  • Списание ошибок округления при расчете себестоимости
  • УНФ резервное копирование
  • Печатная форма добавление строки в конец страницы
  • Как в ут 11 складу установить тип Розничный
  • Отбор в стандартной форме "Редактирование списка значений" - как?
  • 8.2.15 При проведении не срабатывает процедура модуля объекта "ПередЗаписью"
  • Выгрузка Макета в эксель
  • КД. Не выгружается реквизит справочника.
  • ЗУП. Расчет премии от оклада
  • УТ 11 изменить значение табличной части документа УстановкаЦенНоменклатуры
  • сохранение параметров отбора построителя отчета
  • вывод своего макета в СКД
  • v8: Не запускается служба "Агент сервера 1С Предприятия 8.1".

Источник

Оцените статью