Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 ноя 2024, 10:12

Удаление текущей строки после ЗаполнитьЗначениеСвойств

Автор Mro, 26 окт 2016, 18:29

0 Пользователей и 1 гость просматривают эту тему.

Mro

Есть такой код:

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если Источник = "ОбработкаЗаполнения" И ИмяСобытия = "ПередачаНомеров" Тогда

ТекСтрока = Элементы.ТЧ.ТекущиеДанные;

СтрокаНовая=Объект.ТЧ.Добавить();

ЗаполнитьЗначенияСвойств(СтрокаНовая,ТекСтрока);

СтрокаНовая.Количество=1;

СтрокаНовая.Номер = Параметр.Номер;

КонецЕсли;

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


Как мне изменить код, чтобы после выполнения обработки оповещения, программно удалялась бы текущая строка?

Пытаюсь влепить

Объект.ТЧ.Удалить(Элементы.ТЧ.ТекущаяСтрока);

выдает ошибку:

{Документ.Тест.Форма.ФормаДокумента.Форма(29)}: Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств)
   ЗаполнитьЗначенияСвойств(СтрокаНовая,ТекСтрока);
по причине:
Недопустимое значение параметра (параметр номер '2')

Типа теряет текущую строку, потому что я её программно удаляю.)

Но, я же могу её удалить уже руками из формы документа.

А как изменить код, чтобы эта текущая строка удалялась сама после отработки процедуры ОбработкаОповещения?

alex0402

Цитата: Mro от 26 окт 2016, 18:29СтрокаНовая=Объект.ТЧ.Добавить();
как то не стыкуется!
Цитата: Mro от 26 окт 2016, 18:29Объект.ТЧ.Удалить(Элементы.ТЧ.ТекущаяСтрока);

добавить строку и тут же удалить. зачем?
Спасибо за Сказать спасибо

ilyay

Цитата: Mro от 26 окт 2016, 18:29ТекСтрока = Элементы.ТЧ.ТекущиеДанные;
Эта строчка некорректная. Вы написали следующее: как только поймаем событие, то строка, в которой я нахожусь сейчас...
Это событие может быть поймано параллельно открытой формой, например. Поэтому передавайте в событии необходимую информацию через Параметр.

Mro

Цитата: ilyay от 27 окт 2016, 10:08Эта строчка некорректная. Вы написали следующее: как только поймаем событие, то строка, в которой я нахожусь сейчас...

в целом мне так и нужно. Ловлю событие из обработчика, копирую текущую строку столько раз, сколько нужно, заполняю в новых строках значение параметром из оповещения. И в итоге остается первоначальная строка, которая теперь не нужна.)
Добавлено: 27 окт 2016, 15:21


в текущем виде код выглядит так:

Обработка:
&НаКлиенте
Процедура Перенос(Команда)

Для каждого     Стр из Объект.ЧТО Цикл

СтруктураОповещения = Новый Структура;
СтруктураОповещения.Вставить("Номер",Стр.Номер);

Оповестить("ПередачаНомеров",СтруктураОповещения,"ОбработкаЗаполнения");

КонецЦикла;

Закрыть();

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


Документ:

Если Источник = "ОбработкаЗаполнения" И ИмяСобытия = "ПередачаНомеров" Тогда

ТекСтрока = Элементы.ТЧ.ТекущиеДанные;

СтрокаНовая=Объект.ТЧ.Добавить();

ЗаполнитьЗначенияСвойств(СтрокаНовая,ТекСтрока);

СтрокаНовая.Количество=1;

СтрокаНовая.Номер = Параметр.Номер;

КонецЕсли;


Суть операции. В ТЧ документа есть строка с заполненным количеством и незаполненным серийным номером. По кнопке вызываю обработку:

&НаКлиенте
Процедура Обработка(Команда)

ОткрытьФорму("Обработка.ДляПередачи.Форма.Форма",,ЭтаФорма,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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


в которой создается такое-же количество строк с уникальными серийными номерами, сколько было указано в ТЧ документа в поле "Количество". После этого, по кнопке я хочу получить ровно столько-же строк в ТЧ документа с заполненными серийными номерами, кол-вом 1 в каждой строке и заполненными остальными реквизитами, которые первоначально были в строке ТЧ документа. Как то так.)


Добавлено: 27 окт 2016, 15:24


т.е.

из одной строки документа, в которой Номенклатура = А, Кол-во = 3, Серийный Номер = незаполнено, после обработки я хочу получить три строки, в которых Номенклатура = А, Кол-во = 1, Серийный Номер = Каждый зааполнен из обработки
Добавлено: 27 окт 2016, 15:28


Добавил скрин для наглядности. В скрине видно, что я получаю нужный результат, но помимо него остается строчка, после обработки которой результат был получен. а она мне, как раз таки, и не нужна.)

ilyay

до обработки оповещения запоминать текущую строку с помощью ПолучитьИдентификатор() либо ИсходныйНомерСтроки
потом удалять после обработки оповещения с указанием запомненного элемента.

Mro

Цитата: ilyay от 27 окт 2016, 16:37
до обработки оповещения запоминать текущую строку с помощью ПолучитьИдентификатор() либо ИсходныйНомерСтроки
потом удалять после обработки оповещения с указанием запомненного элемента.

а если после обработки у меня есть необходимость снова добавить строку в ТЧ документа и повторить все операции по заполнению номерами?

ilyay

заново значит будет текущая строка определяться.
Добавлено: 27 окт 2016, 18:25


Мне кажется, проще выгрузить табличную часть, а потом загрузить модифицированную. Все сделать на сервере. Зачем такие сложности с оповещениями и работой на клиенте?

Mro

Цитата: ilyay от 27 окт 2016, 18:17
заново значит будет текущая строка определяться.

Спасибо,
т.е. до обработки оповещения я пишу что-то вроде

УдаляемаяСтрока=Объект.ТЧ.НайтиПоИдентификатору(Элементы.ТЧ.ТекущаяСтрока)

"потом удалять после обработки оповещения с указанием запомненного элемента." - а вот тут я уже плыву.(

как именно мне это сделать?

Добавлено: 27 окт 2016, 18:28


Цитата: ilyay от 27 окт 2016, 18:17
заново значит будет текущая строка определяться.
Добавлено: 27 окт 2016, 18:25


Мне кажется, проще выгрузить табличную часть, а потом загрузить модифицированную. Все сделать на сервере. Зачем такие сложности с оповещениями и работой на клиенте?

этого я пока еще банально не умею.)

ilyay


Mro

Цитата: ilyay от 27 окт 2016, 18:38
Как-то так:
Объект.ТЧ.Удалить(УдаляемаяСтрока);

Я не понимаю, как мне это сделать программно ПОСЛЕ процедуры обработки оповещения.))

Пробую так:

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)


Если Источник = "ОбработкаЗаполнения" И ИмяСобытия = "ПередачаНомеров" Тогда

ТекСтрока = Элементы.ТЧ.ТекущиеДанные;

СтрокаНовая=Объект.ТЧ.Добавить();

ЗаполнитьЗначенияСвойств(СтрокаНовая,ТекСтрока);

СтрокаНовая.Количество=1;

СтрокаНовая.Номер = Параметр.Номер;

КонецЕсли;

УдалитьСтроку();

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

&НаКлиенте
Процедура УдалитьСтроку()

УдаляемаяСтрока=Объект.ТЧ.НайтиПоИдентификатору(Элементы.ТЧ.ТекущаяСтрока);
Объект.ТЧ.Удалить(УдаляемаяСтрока);

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


дает ошибку:

{Документ.Тест.Форма.ФормаДокумента.Форма(19)}: Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств)
   ЗаполнитьЗначенияСвойств(СтрокаНовая,ТекСтрока);
по причине:
Недопустимое значение параметра (параметр номер '2')

а как выполнить программно

УдаляемаяСтрока=Объект.ТЧ.НайтиПоИдентификатору(Элементы.ТЧ.ТекущаяСтрока);
Объект.ТЧ.Удалить(УдаляемаяСтрока);


конкретно ПОСЛЕ процедуры обработки оповещения?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск