Заполнение колонки ТЧ дополнительным реквизитом справочника

1. AndrewUs 11 19.09.18 10:33 Сейчас в теме
Здравствуйте.
Программа 1С ERP 2.4.
У элемента справочника "Номенклатура" создал дополнительный реквизит с типом значения "Дополнительное значение". Также внес перечень значений, например, "Списание 1 мес. (Инвентарь)" или "Списание 1 мес. (Инвентарь)". Данные наименования полностью совпадают с категориями эксплуатации, которые используются в документе "ВнутреннееПотреблениеТоваров" с хоз. операцией "Передача в эксплуатацию".
Далее создал простенькую обработку по заполнению ТЧ вышеупомянутого документа. Но не получается получать дополнительный реквизит и подставлять подходящую категорию эксплуатации.

Собственно код:
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
	
	КатегорияЭксп = Справочники.Номенклатура.
	
	Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
		ТекущаяСтрока.КатегорияЭксплуатации = ????????;
		ТекущаяСтрока.Упаковка = 100;
		ТекущаяСтрока.КоличествоУпаковок = 100;
	КонецЦикла;	
	
	Закрыть();
	
КонецПроцедуры
Показать


Пробовал просто вывести перечень номенклатуры с этим доп реквизитом, получается, но использовать запросы на клиенте нельзя, а дополнительные реквизиты на сервере нельзя получать.

Текст запроса:
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.ДополнительныеРеквизиты.(
		|		Значение КАК Значение
		|	) КАК ДополнительныеРеквизиты,
		|	Номенклатура.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура";
	
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
Показать


Подскажите, пожалуйста, решение моей проблемы.
Спасибо.
По теме из базы знаний
Найденные решения
9. Doreng 27 19.09.18 13:34 Сейчас в теме
(8)
&НаСервере
Функция ЗаполнитьКатегориюЭксплуатацииНаСервере(Номенклатура)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
       "ВЫБРАТЬ
|	НоменклатураДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
|	Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
|	НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Номенклатура);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
   Если Результат.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Для Каждого Строка Из Результат Цикл
// какоето условие на проверку нужного значения например
Если ТипЗнч(Строка .Значение) = Тип("Число") Тогда
Возврат Строка .Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецФункции

&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
    
    Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
ПоищемДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере(ТекущаяСтрока.Номенклатура);
Если ПоищемДопРеквизит  <> Неопределено Тогда
        ТекущаяСтрока.КатегорияЭксплуатации = ПоищемДопРеквизит ;
Иначе
Сообщить("Нет доп реквизитов" + ТекущаяСтрока.Номенклатура);
КонецЕсли;
    КонецЦикла;        
    Закрыть();
    
КонецПроцедуры
Показать

Поправил чутка
AndrewUs; +1 Ответить
14. EVKash 14 19.09.18 15:32 Сейчас в теме
(13)
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	Если РезультатЗапроса.Следующий() Тогда
		Возврат РезультатЗапроса.Значение;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
AndrewUs; +1 Ответить
16. EVKash 14 19.09.18 16:52 Сейчас в теме
(15) Я про ошибку написал.
Конечно не работает.
КатегорииЭксплуатации имеет тип СправочникСсылка.КатегорииЭксплуатации
т.е. надо как-то так

Возврат Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(Строка(РезультатЗапроса.Значение),Истина);
AndrewUs; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Doreng 27 19.09.18 10:46 Сейчас в теме
(1)
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
    
    КатегорияЭксп = Справочники.Номенклатура.
    ДопРеквизиты = ВернутьРезультатЗапроса();
    Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
        ТекущаяСтрока.КатегорияЭксплуатации = ????????;
        ТекущаяСтрока.Упаковка = 100;
        ТекущаяСтрока.КоличествоУпаковок = 100;
    КонецЦикла; 
КонецПроцедуры;

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

Я конечно слабо понял что Вы хотите сделать, но попробуйте, так вернете результат запроса на форму
3. AndrewUs 11 19.09.18 10:56 Сейчас в теме
(2)
Я конечно слабо понял что Вы хотите сделать


Есть элемент справочника "Номенклатура" с доп. реквизитом "Категория эксплуатации".
И если в тч документа "Внутреннее потребление товаров" есть эта номенклатура, мы нажимаем на кнопку заполнения, ищется совпадение по наименованию доп реквизита и категории эксплуатации и подставляется в колонку "Категория эксплуатации".
4. login1020 133 19.09.18 10:58 Сейчас в теме
(2)
РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Возврат РезультатЗапроса ;

в результате получим Таблицу значений, а вернется она на клиент без ошибок только при работе на Толстом клиенте, на тонком надо возвращать либо массив, либо структуру.
AndrewUs; +1 Ответить
5. Bene_Valete 188 19.09.18 10:59 Сейчас в теме
(1)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.ДополнительныеРеквизиты.(
| Значение КАК Значение
| ) КАК ДополнительныеРеквизиты,
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";

РезультатЗапроса = Запрос.Выполнить().Выбрать();


Обратите внимание, что если в будущем понадобится добавить еще один доп реквизит, то данный запрос будет возвращать информацию также по нему, поэтому нужно указать тип реквизита(сделайте по аналогии с моим запросом, "руководитель это имя доп реквизита в моем случае") :
		"ВЫБРАТЬ
		|	ПодразделенияОрганизацийДополнительныеРеквизиты.Ссылка КАК Подразделение,
		|	ЕСТЬNULL(ПодразделенияОрганизацийДополнительныеРеквизиты.Значение, ЗНАЧЕНИЕ(справочник.сотрудники.пустаяссылка)) КАК Руководитель
		|ИЗ
		|	Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК ПодразделенияОрганизацийДополнительныеРеквизиты
		|ГДЕ
		|	ПодразделенияОрганизацийДополнительныеРеквизиты.Свойство = &ДопРеквизитРуководитель"
Запрос.УстановитьПараметр("ДопРеквизитРуководитель", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Руководитель")); 
Показать
6. AndrewUs 11 19.09.18 11:16 Сейчас в теме
Пока что попробовал так

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

КонецФункции

&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
	
	ДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере();
	Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
		ТекущаяСтрока.КатегорияЭксплуатации = ДопРеквизит.ДополнительныеРеквизиты;
	КонецЦикла;		
	Закрыть();
	
КонецПроцедуры
Показать


Выдало ошибку.
Прикрепленные файлы:
7. AndrewUs 11 19.09.18 11:25 Сейчас в теме
Поправил: РезультатЗапроса = Запрос.Выполнить().Выбрать(); на РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Другая ошибка вывалилась.
Прикрепленные файлы:
8. AndrewUs 11 19.09.18 11:26 Сейчас в теме
Проблема в том, что мне необходимо, чтобы работало и на тонком клиенте тоже. Скорее всего из-за этого ошибка.
9. Doreng 27 19.09.18 13:34 Сейчас в теме
(8)
&НаСервере
Функция ЗаполнитьКатегориюЭксплуатацииНаСервере(Номенклатура)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
       "ВЫБРАТЬ
|	НоменклатураДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
|	Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
|	НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Номенклатура);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
   Если Результат.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Для Каждого Строка Из Результат Цикл
// какоето условие на проверку нужного значения например
Если ТипЗнч(Строка .Значение) = Тип("Число") Тогда
Возврат Строка .Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецФункции

&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
    
    Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
ПоищемДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере(ТекущаяСтрока.Номенклатура);
Если ПоищемДопРеквизит  <> Неопределено Тогда
        ТекущаяСтрока.КатегорияЭксплуатации = ПоищемДопРеквизит ;
Иначе
Сообщить("Нет доп реквизитов" + ТекущаяСтрока.Номенклатура);
КонецЕсли;
    КонецЦикла;        
    Закрыть();
    
КонецПроцедуры
Показать

Поправил чутка
AndrewUs; +1 Ответить
10. AndrewUs 11 19.09.18 14:40 Сейчас в теме
(9) Не знаю, может быть скрины помогут доп реквизита, который был добавлен.
Прикрепленные файлы:
11. AndrewUs 11 19.09.18 14:43 Сейчас в теме
А вот где должно искаться соответствие
Прикрепленные файлы:
12. AndrewUs 11 19.09.18 14:46 Сейчас в теме
Длина строки "Наименование" в справочнике "ЗначениеСвойстОбъектов" и "КатегорииЭксплуатации" совпадает и равна 100.
13. AndrewUs 11 19.09.18 14:52 Сейчас в теме
Вот в таком виде выдает ошибку:
&НаСервере
Функция ЗаполнитьКатегориюЭксплуатацииНаСервере(Номенклатура)
	
	Запрос = Новый Запрос;
    Запрос.Текст = 
       "ВЫБРАТЬ
		|    НоменклатураДополнительныеРеквизиты.Значение КАК Значение
		|ИЗ
		|    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
		|ГДЕ
		|    НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Номенклатура);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
	Возврат РезультатЗапроса.Значение;

КонецФункции

&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
	
	Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
		ПоищемДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере(ТекущаяСтрока.Номенклатура);
		Если ПоищемДопРеквизит  <> Неопределено Тогда
        	ТекущаяСтрока.КатегорияЭксплуатации = ПоищемДопРеквизит ;
		Иначе
			Сообщить("Нет доп реквизитов" + ТекущаяСтрока.Номенклатура);
		КонецЕсли;
	КонецЦикла;
	
    Закрыть();
	
КонецПроцедуры
Показать


"Поле объекта не обнаружено (Значение)"
14. EVKash 14 19.09.18 15:32 Сейчас в теме
(13)
	РезультатЗапроса = Запрос.Выполнить().Выбрать();
	Если РезультатЗапроса.Следующий() Тогда
		Возврат РезультатЗапроса.Значение;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
AndrewUs; +1 Ответить
15. AndrewUs 11 19.09.18 16:18 Сейчас в теме
(14) Так ошибку не дает, но и не работает.
16. EVKash 14 19.09.18 16:52 Сейчас в теме
(15) Я про ошибку написал.
Конечно не работает.
КатегорииЭксплуатации имеет тип СправочникСсылка.КатегорииЭксплуатации
т.е. надо как-то так

Возврат Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(Строка(РезультатЗапроса.Значение),Истина);
AndrewUs; +1 Ответить
18. AndrewUs 11 20.09.18 11:36 Сейчас в теме
(16) Сделал как вы написали, только написал не "Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(Строка(РезультатЗапроса.Значение),Истина);", а
"Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(РезультатЗапроса.Значение,Истина);" и получилось.
Буду тестировать. Спасибо.
17. SlavaKron 19.09.18 16:53 Сейчас в теме
Заполняйте ТЧ на сервере. Параметры регистрации обработки должны быть примерно такими:
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();

	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
    ПараметрыРегистрации.Назначение.Добавить("Документ.ВнутреннееПотреблениеТоваров");
	
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();	
	НоваяКоманда.Представление = "Заполнить категорию эксплуатации";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
	НоваяКоманда.Идентификатор = "ЗаполнитьКатегориюЭксплуатации";
	
	Возврат ПараметрыРегистрации;
КонецФункции
Показать

Для получения доп. реквизитов используйте функции общего модуля УправлениеСвойствами:
УправлениеСвойствами.ЗначенияСвойств() или УправлениеСвойствами.ЗначениеСвойства()
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот