Имя: Пароль:
1C
1С v8
Внешняя обработка заполнения табличной части
0 Flempy
 
04.03.22
09:28
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    Для каждого  ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл
        ТекущаяСтрока.Номенклатура= ???;
    КонецЦикла ;    
КонецПроцедуры    

Так же есть функция, которая выгружает результат запроса

Функция ПолучитьДанныеДокумента(СсылкаНаОбъект)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТМЦВЭксплуатацииОбороты.Номенклатура КАК Номенклатура,
    |    ТМЦВЭксплуатацииОбороты.КоличествоОборот КАК Количество
    |ИЗ
    |    РегистрНакопления.ТМЦВЭксплуатации.Обороты(, &Дата, , ФизическоеЛицо = &ФизЛицо) КАК ТМЦВЭксплуатацииОбороты";
    
    Запрос.УстановитьПараметр("Дата",СсылкаНаОбъект.Дата);
    Запрос.УстановитьПараметр("ФизЛицо", УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект.Ссылка, ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ФизическоеЛицо")));
    
    РезультатЗапроса = Запрос.Выполнить();    
    ТЗ = РезультатЗапроса.Выгрузить();
    Возврат ТЗ;     
    //Либо так
    //Выборка = Запрос.Выполнить().Выбрать;
КонецФункции


Как передать ТЗ на клиент, чтобы заполнить этими данными ТЧ формы, либо как заполнить ее на сервере, если есть такая возможность?
1 Мимохожий Однако
 
04.03.22
09:34
Заполняй НаСервере
2 lodger
 
04.03.22
09:38
(0) из процедуры НаКлиенте ВыполнитьКоманду вызывай процедуру НаСервере и в ней пиши обход по строкам ТЧ.
3 Flempy
 
04.03.22
09:38
(1) на сервере не дает обращаться к элементам формам ТЧ или может я не так обращаюсь.


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    ПолучитьДанныеДокумента(ВладелецФормы.Объект);
КонецПроцедуры


Функция ПолучитьДанныеДокумента(СсылкаНаОбъект)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТМЦВЭксплуатацииОбороты.Номенклатура КАК Номенклатура,
    |    ТМЦВЭксплуатацииОбороты.КоличествоОборот КАК Количество
    |ИЗ
    |    РегистрНакопления.ТМЦВЭксплуатации.Обороты(, &Дата, , ФизическоеЛицо = &ФизЛицо) КАК ТМЦВЭксплуатацииОбороты";
    
    Запрос.УстановитьПараметр("Дата",СсылкаНаОбъект.Дата);
    Запрос.УстановитьПараметр("ФизЛицо", УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект.Ссылка, ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ФизическоеЛицо")));
    
    Выборка= Запрос.Выполнить().Выбрать();    
    Пока выборка.Следующий() Цикл
        СсылкаНаОбъект.Товары.Добавить()
    КонецЦикла;
    
КонецФункции
4 Flempy
 
04.03.22
09:53
Сделал следующим образом, вроде работает. Подскажите, так правильно будет?


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    ОбъектФормы = ВладелецФормы.Объект;
    ИзмененныйОбъект = ПолучитьДанныеДокумента(ОбъектФормы);
    КопироватьДанныеФормы(ИзмененныйОбъект, ВладелецФормы.Объект);    
КонецПроцедуры    

Функция ПолучитьДанныеДокумента(СсылкаНаОбъект)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТМЦВЭксплуатацииОбороты.Номенклатура КАК Номенклатура,
    |    ТМЦВЭксплуатацииОбороты.КоличествоОборот КАК Количество
    |ИЗ
    |    РегистрНакопления.ТМЦВЭксплуатации.Обороты(, &Дата, , ФизическоеЛицо = &ФизЛицо) КАК ТМЦВЭксплуатацииОбороты";
    
    Запрос.УстановитьПараметр("Дата",СсылкаНаОбъект.Дата);
    Запрос.УстановитьПараметр("ФизЛицо", УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект.Ссылка, ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ФизическоеЛицо")));
    
    Выборка = Запрос.Выполнить().Выбрать();    
    Пока выборка.Следующий() Цикл
        Сообщить(выборка.Номенклатура);
        НоваяСтрока = СсылкаНаОбъект.Товары.Добавить();
        НоваяСтрока.Номенклатура = выборка.Номенклатура;
    КонецЦикла;
    Возврат СсылкаНаОбъект;
КонецФункции
5 Мимохожий Однако
 
04.03.22
10:26
Если работает, то правильно )
6 Flempy
 
04.03.22
10:47
В принципе работает и заполняет, но возникла ошибка при заполнении поля "Единица измерения" - Поле объекта недоступно для записи. вот код:

Выборка = Запрос.Выполнить().Выбрать();    
    СсылкаНаОбъект.Товары.Очистить();
    Пока выборка.Следующий() Цикл
        НоваяСтрока = СсылкаНаОбъект.Товары.Добавить();
        НоваяСтрока.Номенклатура = выборка.Номенклатура;
        НоваяСтрока.КоличествоУпаковок = выборка.Количество;
        НоваяСтрока.Номенклатура.ЕдиницаИзмерения = выборка.НоменклатураЕдиницаИзмерения;
        Сообщить(НоваяСтрока.Номенклатура.ЕдиницаИзмерения)
    КонецЦикла;
    Возврат СсылкаНаОбъект;
7 Мимохожий Однако
 
04.03.22
10:56
(6) У ссылки не может быть реквизита. Из ссылки получи объект и туда запиши
8 Flempy
 
04.03.22
10:59
(7) Пробовал получить объект ссылки, но все равно почему-то выдавало ошибку. сделал вот так и заработало

ОбъектНоменклатуры = НоваяСтрока.Номенклатура.ПолучитьОбъект();
ОбъектНоменклатуры.ЕдиницаИзмерения = выборка.НоменклатураЕдиницаИзмерения;
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший