Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отменить копирование строки в табличной части
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Keyword1109
Добрый день!
Подскажите, пожалуйста, как можно запретить ввод новой записи в табличную часть копированием? Т.е., чтобы в табличную часть можно было добавлять только новую строку, а не копировать существующую.
pablo
Вариант 1. Не заполнять автоматически командную панель, а выносить туда только нужные команды.
Вариант 2. Программно обрабатывать событие ПередНачаломДобавления табличной части. У него есть параметр Копирование.
zay
Процедура ПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    
    Если Копирование Тогда
        
        Элемент.Значение.Удалить( Элемент.ТекущаяСтрока );
        
    КонецЕсли;
    
КонецПроцедуры
Keyword1109
zay , использовал ваш код. Но у меня в табличной части есть описано событие ПриАктивизацииСтроки:
Процедура ПриАктивизацииСтроки(Элемент)
    МояПеременная = ЭлементыФормы.МояТЧ.ТекущаяСтрока["МояКолонка"];
КонецПроцедуры

Но после после попытки копирования, кликаю по какой-нибудь строке таб.части и получаю ошибку:
Цитата
Получение элемента по индексу для значения не определено
МояПеременная = ЭлементыФормы.МояТЧ.ТекущаяСтрока["МояКолонка"];

Когда делаю второй клик по строке, то все работает дальше нормально. Почему так?
pablo
Процедура  ПередНачаломДобавления(Элемент, НоваяСтрока, Копирование)
    
    Если Копирование Тогда
        
        Возврат;
    КонецЕсли;
    
КонецПроцедуры
Keyword1109
pablo, а так все равно копируется...
pablo
Ну так скрестите мое событие и код zay. Ил ждете готового текста для копипасты?
Keyword1109
Цитата(pablo @ 01.02.13, 16:34) необходимо зарегистрироваться для просмотра ссылки
Ну так скрестите мое событие и код zay. Ил ждете готового текста для копипасты?

Ну так я же говорю:
Цитата(Keyword1109 @ 01.02.13, 16:24) необходимо зарегистрироваться для просмотра ссылки
после попытки копирования, кликаю по какой-нибудь строке таб.части и получаю ошибку

И "Возврат" ничем тут не помогает...
zay
Два варианта:
1.
Процедура ПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    
    Если Копирование Тогда
        
        ИндексСкопированнойЗаписи = Элемент.Значение.Индекс( Элемент.ТекущаяСтрока );
        
        Элемент.ТекущаяСтрока = Элемент.Значение[ИндексСкопированнойЗаписи - 1];
        
        Элемент.Значение.Удалить( Элемент.Значение[ИндексСкопированнойЗаписи] );
        
    КонецЕсли;
    
КонецПроцедуры


2.
Процедура ПриАктивизацииСтроки(Элемент)

    Если ЭлементыФормы.МояТЧ.ТекущаяСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;

    МояПеременная = ЭлементыФормы.МояТЧ.ТекущаяСтрока["МояКолонка"];

КонецПроцедуры

Я бы выбрал второй - потому что по коду сразу понятно, что автор ставит ставит защиту от ситуации, если ТекущаяСтрока = Неопределено. Первый вариант для непосвященного будет загадкой.
Keyword1109
Цитата(zay @ 01.02.13, 17:21) необходимо зарегистрироваться для просмотра ссылки
Я бы выбрал второй - потому что по коду сразу понятно, что автор ставит ставит защиту от ситуации, если ТекущаяСтрока = Неопределено.

Спасибо большое! Теперь все нормально работает.
alex040269
Цитата(Keyword1109 @ 01.02.13, 16:24) необходимо зарегистрироваться для просмотра ссылки
zay , использовал ваш код. Но у меня в табличной части есть описано событие ПриАктивизацииСтроки:
Процедура ПриАктивизацииСтроки(Элемент)
    МояПеременная = ЭлементыФормы.МояТЧ.ТекущаяСтрока["МояКолонка"];
КонецПроцедуры

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

Когда делаю второй клик по строке, то все работает дальше нормально. Почему так?

В этот момент ЭлементыФормы.МояТЧ.ТекущаяСтрока = Неопределно.
нужно еще одно условие втулить.

Цитата(zay @ 01.02.13, 15:13) необходимо зарегистрироваться для просмотра ссылки
Процедура ПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    
    Если Копирование Тогда
        
        Элемент.Значение.Удалить( Элемент.ТекущаяСтрока );
        
    КонецЕсли;
    
КонецПроцедуры


есть еще
Процедура ВыданныеАвансыПередНачаломДобавления(Элемент, Отказ, Копирование)
   Отказ = Копирование
КонецПроцедуры
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.