Имя: Пароль:
1C
1С v8
Обработка заполнения ТЧ в УФ
,
0 Chai Nic
 
17.09.13
11:25
Задача элементарная - нужно заполнить номенклатурные группы в ТЧ из реквизита номенклатуры. Пробую сделать внешнюю обработку, подключил её к документу - команда вызывается нормально. Однако, возникает ошибка
{Форма.Форма.Форма(5)}: Поле объекта недоступно для записи (НоменклатурнаяГруппа)
        Строка.НоменклатурнаяГруппа=Строка.Номенклатура.НоменклатурнаяГруппа;


Вот собственно код. Что тут не так? Как из этой процедуры правильно изменять содержимое открытой формы документа?

Процедура ВыполнитьКоманду(ИдентификаторКоманды,ПараметрыОбработки) Экспорт
    Документ=ПараметрыОбработки[0];
    Для Каждого Строка из Документ.Продукция цикл
        Строка.НоменклатурнаяГруппа=Строка.Номенклатура.НоменклатурнаяГруппа;
    КонецЦикла;
КонецПроцедуры
1 Chai Nic
 
17.09.13
11:30
Помогите плиз!
2 Ненавижу 1С
 
гуру
17.09.13
11:33
потому что заполнять надо на сервере
3 cw014
 
17.09.13
11:36
(2)+1
4 Chai Nic
 
17.09.13
11:36
(2) Не помогает. Та же ошибка в той же операции присваивания.


&НаСервере
Процедура ЗаполнитьНаСервере(Документ)
    Для Каждого Стр из Документ.Продукция цикл
        Стр.НоменклатурнаяГруппа=Стр.Номенклатура.НоменклатурнаяГруппа;
    КонецЦикла;
КонецПроцедуры


Процедура ВыполнитьКоманду(ИдентификаторКоманды,ПараметрыОбработки) Экспорт
    Документ=ПараметрыОбработки[0];
    ЗаполнитьНаСервере(Документ);
КонецПроцедуры
5 ДенисЧ
 
17.09.13
11:38
А объект получил?
6 Chai Nic
 
17.09.13
11:39
(5) А ПараметрыОбработки[0] это что, если не объект?
7 cw014
 
17.09.13
11:45
(6) Ссылка?
8 Chai Nic
 
17.09.13
11:46
(7) Однозначно нет. Ибо эта обработка может применяться и к еще не записанному документу, когда ссылки еще не существует.
9 Chai Nic
 
17.09.13
11:52
Ни у кого нет примерчика рабочей обработки по заполнению ТЧ под управляемые формы?
10 shds
 
17.09.13
12:19
&НаКлиенте
Процедура ВыполнитьКоманду(Идентификатор, ОбъектыНазначения) Экспорт
    ...
    ЗаполнитьДокументНаСервере(ОбъектыНазначения[0]);
    ...
КонецПроцедуры

&НаСервере
Функция ЗаполнитьДокументНаСервере(Документ)
    ДокументОбъект = Документ.ПолучитьОбъект();
    ...;
    ДокументОбъект.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия");    
    ДокументОбъект.Комментарий = "Загрузка "+ ТекущаяДата();
    ...;
    ДокументОбъект.Услуги.Очистить();
    Для Каждого СтрТаблицы Из ТаблицаДанных Цикл
        ДокСтрокаТЧ = ДокументОбъект.Услуги.Добавить();
        ДокСтрокаТЧ.Номенклатура =  СтрТаблицы.СпрНоменклатура;
        ...;
    КонецЦикла;
    ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
    Возврат Истина;
КонецФункции
11 banco
 
17.09.13
12:45
(0) неправильно делаешь, открой демо базу БСП, там есть примеры.
12 Chai Nic
 
17.09.13
12:50
(10) А мне не надо получать объект, изменять его и записывать.. мне надо вносить изменения непосредственно в открытую форму документа. Чтобы пользователь видел изменения и при необходимости мог не сохранять документ, а просто закрыть его..
13 Chai Nic
 
17.09.13
12:51
(12) В общем, так как это делалось в обычных формах
14 Chai Nic
 
17.09.13
13:20
(11) Посмотрел как в БСП - там записывается объект.. это не то..
15 НЕА123
 
17.09.13
13:21
>мне надо вносить изменения непосредственно в открытую форму документа
2.>В общем, так как это делалось в обычных формах

"в общем" изменения вносятся в объект.
16 Chai Nic
 
17.09.13
13:22
(15) Можно пример кода, как внести подключаемой обработкой изменения в открытый объект, отобразив эти изменения на форме, но БЕЗ записи объекта?
17 banco
 
17.09.13
14:39
(14) не там смотрел значит
18 Chai Nic
 
17.09.13
14:41
(17) "Демо пример: обработка заполнения". А где смотреть?
19 banco
 
17.09.13
14:50
(18) в этой демо обработке есть процедура ЗаполнитьИНН, там то что тебе нужно.
20 Chai Nic
 
17.09.13
14:56
(18) Нет такой процедуры в этой обработке. Демонстрационная конфигурация "Библиотека стандартных подсистем", редакция 2.0 (2.0.1.19)
21 banco
 
17.09.13
15:09
(20) потому что в редакции в 2.0 еще не было такого функционала, чтоб не записать объект в доп. обработке. Если у тебя конфа тоже на бсп 2.0, тогда тебе надо обновить бсп
22 olegves
 
17.09.13
15:12
(0) исправь на
Для каждого Объект.ИмяТЧ Цикл
23 Chai Nic
 
17.09.13
15:14
(21) У меня типовая БП3.0. Версия последняя. Как в ней делать?
24 olegves
 
17.09.13
15:17
+ (22) а если тебе не надо этот реквизит в ТЧ документа хранить, то проще раскрыть (+) у реквизита ТЧ Номенклатура и перетащить мышкой нужную тебе группу в элементы формы
25 Chai Nic
 
17.09.13
15:24
(24) Речь идет не о том, что проще, а о том, что нужно. Конфигурация типовая, реквизит в ТЧ - значимый.
26 olegves
 
17.09.13
16:01
(25) кури (22) до просветления
27 banco
 
17.09.13
16:03
(26) ты не в теме
28 banco
 
17.09.13
16:03
(23) держи пример

// Возвращает сведения о внешней обработке.
Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.1.3.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
    ПараметрыРегистрации.Версия = "0.1";
    ПараметрыРегистрации.БезопасныйРежим = Истина;
    ПараметрыРегистрации.Назначение.Добавить("Документ.ТребованиеНакладная");
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Заполнить ""Номенклатурнау группу"" в таб части ""Материали"" '");
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
        
    Возврат ПараметрыРегистрации;
    
КонецФункции

// Интерфейс для выполнения команд обработки.
Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
    
    ЭтаФорма = ПараметрыВыполнения.ЭтаФорма;
    Объект = ЭтаФорма.Объект;
    ЭтаФорма.Модифицированность = Истина;
    
    Для Каждого СтрокаТЧ Из Объект.Материалы Цикл
        СтрокаТЧ.НоменклатурнаяГруппа = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТч.Номенклатура, "НоменклатурнаяГруппа");
    КонецЦикла;
        
    Результат = ПараметрыВыполнения.РезультатВыполнения;
    Результат.ВыводПредупреждения.Использование = Истина;
    Результат.ВыводПредупреждения.Текст = НСтр("ru = 'Поле ""Номенклатурная группа"" успешно заполнено'");

КонецПроцедуры
29 Chai Nic
 
17.09.13
16:37
(28) Спасибо! Так вроде работает. А еще подскажите пожалуйста - каким образом в этой процедуре можно организовать ввод значения пользователем? Иногда требуется заполнить реквизит какой-то одной номенклатурной группой. А ВыполнитьКоманду() исполняется на сервере, на котором нельзя обращаться к пользователю..
30 banco
 
17.09.13
16:54
(29) прочитай документацию БСП
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой