Имя: Пароль:
1C
1С v8
УФ отображение характеристик при программном заполнении документов
0 TomWaits
 
29.03.17
17:50
При программном формировании документа заполняются в ТЧ номенклатура и характеристика, но при этом отображения характеристики не происходит - пишет "<характеристики не используются>".
В целом причина понятна - не вызвался обработчик события изменения номенклатуры, который определяет доступность хар-ки для конкретной номенклатуры, т.к. заполнение не интерактивное.

Не могу понять как тут поступать, ведь:
1. на сервере не вызвать обработчик события изменения поля ТЧ;
2. на клиенте не перебрать ТЧ.

Как поступать в данной ситуации?
1 lubitelxml
 
29.03.17
18:01
перечитал несколько раз, но так и не понял, показывай код как создаешь документ и "обработчик события изменения номенклатуры" который не вызвался
2 TomWaits
 
29.03.17
18:12
Документ создается и заполняется без проблем.
Обработчик события изменения поля ТЧ при таком способе и не должен вызываться.

Условно так:

&НаКлиенте
Процедура СоздатьДокумент(Команда)
    Форма = ПолучитьФорму("Документ.ХХХ.Форма.ФормаДокумента");
    ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
    ЗаполнитьНаСервере(ДанныеФормы); // Заполняем документ на сервере
    КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее
    Форма.Открыть();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере(ДанныеФормы)
    Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ХХХ"));
    Для каждого стр из Объект.Товары Цикл
        НоваяСтрока = Док.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, стр);
    КонецЦикла;
    ЗначениеВДанныеФормы(Док, ДанныеФормы); // Кладем обратно в объект формы уже созданный документ
КонецПроцедуры

В отладчике видно, что в ТЧ и номенклатура и характеристика заполнились, только вот отображения характеристики не происходит.
По сути необходимо выполнить в цикле это:
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", НоваяСтрока.Характеристика);  
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, Неопределено);
Но на сервере оно недоступно.
3 singlych
 
29.03.17
18:19
Вроде должна быть симметричная процедура в серверном модуле ОбработкаТабличнойЧастиСервер
4 TomWaits
 
29.03.17
18:36
Да, действительно такая процедура есть, спасибо.

Дело упирается в отсутствие в таблице колонки "ХарактеристикиИспользуются".

Обращение к ней есть, а в каком месте колонка появляется не ясно.
5 TomWaits
 
29.03.17
19:38
И всетаки как возможно перебрать ТЧ на клиенте?

Колонка "ХарактеристикиИспользуются" для ТЧ "Товары" документа создана непосредственно на форме и не является реквизитом табличной части объекта - возможно проблема в этом. И поэтому обращаться к ней нужно из-под клиента. В самом документе под клиентом это поле видно в отладчике и не видно на сервере.
6 TomWaits
 
29.03.17
19:47
Если я все правильно понимаю, то я должен каким то образом заполнить реквизит Товары.ХарактеристикиИспользуются для каждой строки ТЧ Товары.
На сервере он мне недоступен, а на клиенте доступен, но ТЧ я перебрать не могу.
7 h-sp
 
30.03.17
03:06
(6) на клиенте перебор таб поля доступен, почему всё время пишете, что не можете перебрать?
8 TomWaits
 
30.03.17
07:48
А можно пример такого перебора?
9 TomWaits
 
30.03.17
08:09
Вопрос решился так:
На клиенте перебрал ТЧ:

    Для каждого ТекСтрока из Форма.Объект.Товары Цикл
        СтруктураДействий = Новый Структура;
        СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекСтрока.Характеристика);  
        ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекСтрока, СтруктураДействий, Неопределено);
    КонецЦикла;

Всем кто навел на верные мысли, спасибо)