Сегодня расскажу о своём недавнем случайным опытом. Вдруг кому-то поможет (на самом деле нет).
Перем ЗапомнитьСтроку; //расскажу ниже
Я не знаю, как это обозвать, так что обзову «интерактивная
работа пользователя с таблицами».
Суть в следующем – понадобилась обработка, с помощью которой пользователь сможет удалять некорректные записи из регистра сведений. А так как записей с одним и тем же измерением может быть несколько, то необходимо было придумать механизм, с помощью которого пользователь смог бы интерактивно и самостоятельно выбирать и удалять записи.
Суть в следующем – понадобилась обработка, с помощью которой пользователь сможет удалять некорректные записи из регистра сведений. А так как записей с одним и тем же измерением может быть несколько, то необходимо было придумать механизм, с помощью которого пользователь смог бы интерактивно и самостоятельно выбирать и удалять записи.
Все достаточно просто (кстати, я не претендую, что у меня
самое оптимальное решение, мне кажется, можно сделать проще и лучше, но я ж
быдло, мне можно):
по нажатию на кнопку «прочитать регистр» запросом отбираем из регистра по некоторому условию записи, они отображаются в ТабличномПоле. Стрелочкой можем перекинуть выделенную строку в ТабличноеПоле1, и тогда уже нажать на кнопку «удалить записи» и произойдет запись этих строк из регистра.
по нажатию на кнопку «прочитать регистр» запросом отбираем из регистра по некоторому условию записи, они отображаются в ТабличномПоле. Стрелочкой можем перекинуть выделенную строку в ТабличноеПоле1, и тогда уже нажать на кнопку «удалить записи» и произойдет запись этих строк из регистра.
Итого будет выглядеть как-то так:
Теперь о реализации.
В первой процедуре, где происходит запрос, выгружаем запрос
в таблицу, копируем её (чтоб не парится с созданием колонок, и вообще), и
очищаем. Итого имеем две одинаковые по структуре таблицы, но одну с данными, а
другую – нет. Таблицы выводим в форму, в табличные поля.
ТаблицаИсходняя = Запрос.Выполнить().Выгрузить();//выгружаем в таблицу данные запроса
ТаблицаИсходняя = Запрос.Выполнить().Выгрузить();//выгружаем в таблицу данные запроса
ТаблицаНаУдаление
= ТаблицаИсходняя.Скопировать();
ТаблицаНаУдаление.Очистить();
ТабличноеПоле = ТаблицаИсходняя;
ТабличноеПоле1 = ТаблицаНаУдаление;
ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();//вывели таблицу в форму в поле ТабличноеПоле
Ах да, не забываем вынести в глобальные переменные следующие
вещи:
Перем ЗапомнитьСтроку; //расскажу ниже
Перем ЗапомнитьСтроку2; //расскажу ниже
Перем ТаблицаИсходняя; //таблица из запроса
Перем ТаблицаНаУдаление;//таблица, которую «создал»
пользователь
Теперь идем в табличные поля и находим там событие
«ПриАктивизацииСтроки» (см. рисунок)
В эту процедуру идет следующее:
ТекущаяСтрока = ЭлементыФормы.ТабличноеПоле.ТекущаяСтрока;
Если
ТекущаяСтрока <> Неопределено Тогда //данное условие сделано для того,
чтобы в случае пустой строки переменная ЗапомнитьСтроку имела тип
«Неопределенно», а не «ошибка чтения значения»
ЗапомнитьСтроку
= ТекущаяСтрока;
Иначе
ЗапомнитьСтроку
= Неопределено; //переменная ЗапомнитьСтроку будет перекидываться в другую
таблицу
КонецЕсли;
Ну и теперь, соответственно, событие на нажатие кнопки
переноса:
Если ЗапомнитьСтроку <> Неопределено Тогда
Если ЗапомнитьСтроку <> Неопределено Тогда
СтрокаТаблицыНаУдаление
= ТаблицаНаУдаление.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицыНаУдаление,
ЗапомнитьСтроку);//первый параметр – как можно догадаться, строка-приёмник,
второй параметр – строка таблицы источника
ТаблицаИсходняя.Удалить(ЗапомнитьСтроку);
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
КонецЕсли;
Дальше я затупил и с кнопкой обратного переноса сделал точно
такие же процедуры (ТабличноеПоле1ПриАктивизацииСтроки и Кнопка1 нажатие). Так
как у меня выплыл какой-то косяк, то добавил переменную ЗапомнитьСтроку2.
Такие дела. Мысли вслух (но мне лениво их проверять) –
полюбас можно избавится от переменной ЗапомнитьСтроку2, и, скорее всего, не
обязательно при каждой итерации заново создавать на форме ТабличноеПоле и
ТабличноеПоле1. Но мне лень думать.
Воюйте с 1с и побеждайте, а я пошел дальше эникеить.
Воюйте с 1с и побеждайте, а я пошел дальше эникеить.
P.S. Раскрашивать буковки - та еще морока.
Комментариев нет:
Отправить комментарий