Перетаскивание: собственная управляемая таблица

Учебные задачи

После отпускания мыши собственный маркер преобразуется в одну новую строку приёмника в памяти; стандартное копирование отключено.

Где и как запускать

Модуль своей управляемой формы; клиентское событие элемента, серверная подготовка отдельно.

Подготовка

  1. Создайте внешнюю учебную обработку с управляемой формой и запускайте в тонком клиенте (кроме отдельного мобильного урока).

  2. Реквизиты формы: Товары (ТаблицаЗначений), Статус (Строка 200), ИтогКоличество (Число 10.0), РазрешитьУдаление (Булево), ЗапретитьСворачивание (Булево). Выведите статус, итог и оба флажка.

  3. У таблицы Товары колонки Наименование (Строка 100), Количество (Число 10.0), Фиксирована (Булево). Имя элемента таблицы — Товары, данные / путь — Товары; разрешите интерактивное редактирование строк.

  4. Основной обработчик назначьте указанному событию элемента Товары, не событию формы. Первый параметр Элемент уже включён в процедуру; платформа передаёт его автоматически.

  5. Каждый урок проверяйте в отдельном варианте своей формы. Не объединяйте повторяющиеся процедуры подготовки и обработчики с одинаковыми именами.

  6. Колонки реквизита ТаблицаЗначений создайте в редакторе реквизитов формы до добавления элемента-таблицы. На клиенте это данные формы, а не серверный объект ТаблицаЗначений.

  7. Добавьте реквизит ТоварыИсточник типа ТаблицаЗначений с теми же колонками и второй элемент Источник с данными / путём ТоварыИсточник. У Источник включите РазрешитьНачалоПеретаскивания, у Товары — РазрешитьПеретаскивание.

  8. НачалоПеретаскивания назначается ИсточникНачалоПеретаскивания у Источник; приём и проверка относятся к Товары, окончание — к Источник. Не перетаскивайте файлы из проводника.

&НаКлиенте
Процедура ТоварыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
    СтандартнаяОбработка = Ложь;
    Если ПараметрыПеретаскивания.Значение <> "КНИГА" Тогда
        Возврат;
    КонецЕсли;
    Новая = Товары.Добавить();
    Новая.Наименование = "Книга";
    Новая.Количество = 1;
    Сообщить("В свою таблицу добавлена книга");
КонецПроцедуры
Та же управляемая форма: отдельная серверная процедура подготовки
&НаСервере
Процедура ЗаполнитьТоварыНаСервере()
    Товары.Очистить();
    СтрокаТовара = Товары.Добавить();
    СтрокаТовара.Наименование = "Книга";
    СтрокаТовара.Количество = 2;
    СтрокаТовара.Фиксирована = Ложь;
    СтрокаТовара = Товары.Добавить();
    СтрокаТовара.Наименование = "Ручка";
    СтрокаТовара.Количество = 3;
    СтрокаТовара.Фиксирована = Истина;
    РазрешитьУдаление = Ложь;
    ЗапретитьСворачивание = Истина;
    ИтогКоличество = 5;
    Статус = "Готово";
    ТоварыИсточник.Очистить();
    ИсточникТовара = ТоварыИсточник.Добавить();
    ИсточникТовара.Наименование = "Книга";
    ИсточникТовара.Количество = 1;
КонецПроцедуры
Назначить событию формы ПриСозданииНаСервере
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЗаполнитьТоварыНаСервере();
    Сообщить("Собственная таблица подготовлена");
КонецПроцедуры
Только элемент Источник: начало собственного копирования
&НаКлиенте
Процедура ИсточникНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
    ПараметрыПеретаскивания.Значение = "КНИГА";
    ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.Копирование;
    ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование;
    Выполнение = Истина;
    Сообщить("Передаётся собственный маркер КНИГА");
КонецПроцедуры

Разбор по шагам

  1. Подготавливаем настоящую собственную таблицу / список и назначаем точное событие.

  2. Параметры после Элемент соответствуют установленной справке конкретного типа.

  3. После отпускания мыши собственный маркер преобразуется в одну новую строку приёмника в памяти; стандартное копирование отключено.

Как проверить результат

  1. После переноса КНИГА появляется одна новая книга с количеством 1.

  2. Неизвестный маркер строк не добавляет. База данных не записывается.

Ожидаемый результат

Событие работает с собственными данными и реально заданным источником действия.

На что обратить внимание

  1. Не вызывайте обработчики событий вручную: проверяйте указанное пользовательское действие.

  2. События активизации, наведения, раскрытия и смены родителя не должны вызывать серверные методы формы.

  3. Обычная и управляемая формы имеют разные API; не переносите между ними элементы и процедуры без адаптации.

  4. Таблица значений хранит данные формы, не записывает их в регистр автоматически.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.