Задать вопрос
@alenamiron

Как сделать так, что после введения данных первой строки, при переходе на вторую, в ней «копировались» данные из предыдущей в 1c?

Имеется Справочник с табличными данными. Табличная часть(Список), Справочник(Цвета), Реквизиты(Артикул, Наименование, ЦветПоГибдд) Хотелось бы сделать так, что после введения данных первой строки, при переходе на вторую, в ней "копировались" данные из предыдущей с сохранением возможности редактирования этих данных. И так далее. Понимаю что нужно в обработчики события при начале редактирования прописать код, но не получается.

Код(пишет что Список- где текстрока= не опредено), уже много чего искала смотрела уже ничего не идет в голову помогите пожалуйста:
Процедура СписокПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
Если НоваяСтрока Тогда
       ТекСтрока = СправочникСписок.Список.НайтиПоИдентификатору(ЭлементыФормы.Список.ТекущаяСтрока);
	   
	     	   Индекс = СправочникСписок.Список.Индекс(ТекСтрока);
        Если Индекс > 0 Тогда
            ПредыдущаяСтрока = СправочникСписок.Список[Индекс - 1];
            ЗаполнитьЗначенияСвойств(ЭлеметыФормы.Список.ТекущиеДанные, ПредыдущаяСтрока, "Наименование, ЦветпоГИБДД")
        КонецЕсли;
    КонецЕсли;	
КонецПроцедуры
  • Вопрос задан
  • 121 просмотр
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@Dementor
программист, архитектор, аналитик
Алена, ваш вопрос очень не прост. Вы даете минимум информации, а потом выдаете код, где идет смесь приемов по работе с обычными и управляемыми формами, формой объекта и формой списка. Понятно, что работать не будет. Даже, если вы исправите все синтаксические ошибки и компилятор перестанет ругаться, это не сработает.

Попробую по шагам объяснить.

1. Это обычная форма или управляемая (версия не важна)? Сигнатура метода похожа на обработчик с обычной формы. Для работы с коллекцией элементов формы используется ЭлементыФормы, а не Элементы. Но используется метод управляемой формы НайтиПоИдентификатору()

2. Глобальное свойство СправочникСписок характерно для форм списков, но там совсем другие обработчики событий. В обычном интерфейсе на форме списка справочника можно выполнять непосредственное редактирование, но только реквизитов, а не табличных частей.

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

4. Задача решается очень просто. Вам нужно из ЭлементыФормы.Список.ТекущиеДанные.НомерСтроки получить номре строки. Если номре строки больше 1, то значит у нее есть предыдущая, к которой можно обратится через конструкцию Список[НомерСтроки - 2] (в обычных формах индекс строки табличной части всегда на 1 меньше номера строки). А далее копируйте свойства с помощью метода ЗаполнитьЗначенияСвойств()

5. Рекомендую пользоваться отладчиком, пока вы учитесь. Буквально делайте обработчик события без кода, ставьте в нем точку останова, запускайте и в отладке далее изучайте какие свойства формы и параметры метода вам доступны, и какая полезная информация в них содержится.

Финальный код будет примерно таким:

Процедура СписокПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    Если НоваяСтрока Тогда
        НомерСтроки = ЭлементыФормы.Список.ТекущиеДанные.НомерСтроки;
        Если НомерСтроки > 1 Тогда
            ПредыдущаяСтрока = Список[НомерСтроки - 2];
            ЗаполнитьЗначенияСвойств(ЭлементыФормы.Список.ТекущиеДанные, ПредыдущаяСтрока, "Наименование, ЦветпоГИБДД")
        КонецЕсли;
    КонецЕсли;	
КонецПроцедуры
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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