Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

УФ - программное изменение строки

УФ - программное изменение строки
Я
   МешочекЗнаний
 
18.10.18 - 11:08
Приветствую уважаемые.

Что-то туплю, помогите сообразить.
УФ. Есть документ "Приобретение товаров услуг". Делаю доработку - когда пользователь записывает документ нужно программно проставить характеристику в ТЧ "Товары".

Если делать в &НаКлиенте "Перед записью" в модуле формы документа то запросом не выбрать данные текущей ТЧ (ведь данные ещё не записаны в базу). По логике доработки данные ТЧ нужны.

Если делать в &НаСервере "ПриЗаписиНаСервере" запросом можем прочитать данные т.к. они уже записаны, но уже не достучаться до типового обработчика &НаКлиенте "ТоварыХарактеристикаПриИзменении(Элемент)" чтобы поля пересчитались (пытаемся вызвать клиентскую процедуру из серверное что невозможно).

Как это по правильному сделать?
 
 
   ssh2006
 
1 - 18.10.18 - 11:10
(0) Выгружай данный в ТЗ из объекта и помещай ее в запрос во врем таблицу
   МешочекЗнаний
 
2 - 18.10.18 - 11:13
(0) Я рассматривал такой вариант, да так можно. Но для себя хочу узнать есть ли ещё другой способ т.к. этот мне не нравится тем, что при большом количестве строк скуль эту временную таблицу долго суёт себе в память.
   МешочекЗнаний
 
3 - 18.10.18 - 11:13
(2) -> (1)
   ssh2006
 
4 - 18.10.18 - 11:16
(2) нормальный способ, так и делается
   ZDenis
 
5 - 18.10.18 - 11:21
(0) Насколько понимаю обработчик "ТоварыХарактеристикаПриИзменении(Элемент)" запускается для каждого отдельного товара, а не всего сразу, поэтому какой смысл от запроса, а потом его перебора. Не проще сразу для каждой строки ТЦ Товаров установить характеристику?
   ZDenis
 
6 - 18.10.18 - 11:24
+5 Либо посмотреть что в этом обработчике происходит и запускать свой на стороне сервера.
   МешочекЗнаний
 
7 - 18.10.18 - 11:26
(5) Общая логика - характеристика заполняется для строк, где характеристику пользователь не указал. Я запоминаю эти строки а потом циклом их перебираю

    ИзменённыеСтроки = ПроставитьХарактеристикиНоменклатурыНаСервере();
    Для каждого ИзмененнаяСтрока Из ИзменённыеСтроки Цикл
        
        Элементы.Товары.ТекущаяСтрока = ИзмененнаяСтрока;
        ТоварыХарактеристикаПриИзменении(Неопределено);
        
    КонецЦикла;

(6) А если разрабы изменят что нибудь, это при обновлении гемморой. Проще просто вызвать эту процедуру.
   ssh2006
 
8 - 18.10.18 - 11:31
(7) Можно через НайтиСтроки отобрать строки с пустой характеристикой и проставить ее
   ZDenis
 
9 - 18.10.18 - 11:38
(7) Я имел ввиду, что посмотри что выполняется в ТоварыХарактеристикаПриИзменении() и выполняй это не на клиенте, а в серверной процедуре, ведь это ПроставитьХарактеристикиНоменклатурыНаСервере() у тебя явно на сервере происходит.
   Вафель
 
10 - 18.10.18 - 11:57
(7) и это все на клиенте?
лучше один раз на сервер пеерйти и форму не трогать вообще
(  Элементы.Товары.ТекущаяСтрока = ИзмененнаяСтрока; )
 
 Рекламное место пустует
   МешочекЗнаний
 
11 - 18.10.18 - 12:19
(10) На сервер хожу 1 раз в строке  
ИзменённыеСтроки = ПроставитьХарактеристикиНоменклатурыНаСервере()


Ладно, видимо действительно временная таблица это единственный вариант. Спасибо всем за участие.
   Вафель
 
12 - 18.10.18 - 12:20
(11) у тебя ТоварыХарактеристикаПриИзменении каждый раз на сервер ходит
   МешочекЗнаний
 
13 - 18.10.18 - 12:53
(12) Так это типовой механизма так отрабатывает. Думаю это небольшая цена за автоматизацию и лёгкость поддержки. Вариант в (1) в моём случае самый оптимальный.
   ZDenis
 
14 - 18.10.18 - 12:58
(13) Сам подумай. У тебя сперва определяются незаполненые на сервере, потом ты их передаешь на клиент, там перебираешь и выполняешь серверные процедуры. Тебе предложили при определении пустых на сервере сразу там и отрабатывать заполнение. Либо второй вариант -  зачем тогда уже лезть на сервер в самом начале что бы узнать незаполненные, если можно это сделать сразу на клиенте?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует