Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Форма списка команда Переместить в группу. Какое событие?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Sharki
Доброго времени суток.
В форме списка есть стандартная команда Переместить в группу которая вызывает форму выбора группы и выделенные элементы переносит в соответствующую группу.
Хочется отловить этот момент, задать албанский вопрос и в зависимости от ответа дополнительно обработать изменяемые элементы.

Собственно какое событие поможет делу?

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

варианты о модуле объекта не предлагать ибо албанские вопросы пользователю с сервера не задашь.

з.ы. дополнительно обрабатываю перетаскивание элемента в группу но заказчик хочет воспользоваться такой командой.
logist
Цитата(Sharki @ 24.12.13, 15:10) необходимо зарегистрироваться для просмотра ссылки
Собственно какое событие поможет делу?

ПриСменеТекущегоРодителя
Sharki
Цитата(logist @ 24.12.13, 15:26) необходимо зарегистрироваться для просмотра ссылки
ПриСменеТекущегоРодителя

это событие возникает при выборе в текущих данных группового элемента.

точнее даже при раскрытия группы в форме списка
logist
Второй и последний вариант "ПередНачаломИзменения", если и это не то, значит в форме списка никак не отловите.
Sharki
Цитата(logist @ 24.12.13, 15:50) необходимо зарегистрироваться для просмотра ссылки
Второй и последний вариант "ПередНачаломИзменения", если и это не то, значит в форме списка никак не отловите.

( такое к сожалению тоже не катит.. ладно буду делать свою команду..
Sharki
Вот наваял.. самое простое исполнение данной команды:
&НаКлиенте
Процедура ПереместитьВГруппу(Команда)
    
    лФорма = ПолучитьФорму("Справочник.ВашСправочник.ФормаВыбораГруппы");
    лНовыйРодитель = лФорма.ОткрытьМодально();
    
    Если лЗначение <> Неопределено Тогда//выбрано какое-то значение
        Для Каждого лЭлемент Из Элементы.Список.ВыделенныеСтроки Цикл
            ИзменитьНаСервере(лЭлемент, лНовыйРодитель);
        КонецЦикла;
    КонецЕсли;    
    
    Элементы.Список.Обновить();
    
КонецПроцедуры

&НаСервере
Процедура ИзменитьНаСервере(пЭлемент, пНовыйРодитель);
    
    лОбъект = пЭлемент.ПолучитьОбъект();
    лОбъект.Родитель = пНовыйРодитель;
    лОбъект.Записать();
    
КонецПроцедуры


ну а дальше делаем что хотим.

может кому пригодится
Vofka
Sharki, единственное что, я бы цикл полностью вынес в серверную (кстати, безконтекстную) процедуру, чтоб не гонять каждый раз данные клиент-сервер-клиент:

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

&НаСервереБезКонтекста
Процедура ИзменитьНаСервере(Элементы, пНовыйРодитель);
    
    Для Каждого пЭлемент ИЗ Элементы Цикл
       лОбъект = пЭлемент.ПолучитьОбъект();
       лОбъект.Родитель = пНовыйРодитель;
       лОбъект.Записать();
   КонецЦикла;
    
КонецПроцедуры
Sharki
ну тогда я бы поместил Элементы.Список.ВыделенныеСтроки в отдельную переменную типа лМассив потому что нельзя элементы формы отправлять на сервер.. Выдает ошибку
{Справочник.ВашСправочник.Форма.ФормаСписка.Форма(83)}: Поле объекта недоступно для записи (ВыделенныеСтроки)
ИзменитьНаСервере(Элементы.Список.ВыделенныеСтроки, лЗначение);
Финальный код;)
Процедура ПереместитьВГруппу(Команда)
    
    лФорма = ПолучитьФорму("Справочник.ВашСправочник.ФормаВыбораГруппы");
    лНовыйРодитель = лФорма.ОткрытьМодально();
    
    Если лЗначение <> Неопределено Тогда//выбрано какое-то значение
         лМассив = Элементы.Список.ВыделенныеСтроки;
         ИзменитьНаСервере(лМассив, лНовыйРодитель);
    КонецЕсли;    
    
    Элементы.Список.Обновить();
    
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ИзменитьНаСервере(Элементы, пНовыйРодитель);
    
    Для Каждого пЭлемент ИЗ Элементы Цикл
       лОбъект = пЭлемент.ПолучитьОбъект();
       лОбъект.Родитель = пНовыйРодитель;
       лОбъект.Записать();
   КонецЦикла;
    
КонецПроцедуры
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.