Заполнение колонки ТЧ дополнительным реквизитом справочника
Здравствуйте.
Программа 1С ERP 2.4.
У элемента справочника "Номенклатура" создал дополнительный реквизит с типом значения "Дополнительное значение". Также внес перечень значений, например, "Списание 1 мес. (Инвентарь)" или "Списание 1 мес. (Инвентарь)". Данные наименования полностью совпадают с категориями эксплуатации, которые используются в документе "ВнутреннееПотреблениеТоваров" с хоз. операцией "Передача в эксплуатацию".
Далее создал простенькую обработку по заполнению ТЧ вышеупомянутого документа. Но не получается получать дополнительный реквизит и подставлять подходящую категорию эксплуатации.
Собственно код:
Пробовал просто вывести перечень номенклатуры с этим доп реквизитом, получается, но использовать запросы на клиенте нельзя, а дополнительные реквизиты на сервере нельзя получать.
Текст запроса:
Подскажите, пожалуйста, решение моей проблемы.
Спасибо.
Программа 1С ERP 2.4.
У элемента справочника "Номенклатура" создал дополнительный реквизит с типом значения "Дополнительное значение". Также внес перечень значений, например, "Списание 1 мес. (Инвентарь)" или "Списание 1 мес. (Инвентарь)". Данные наименования полностью совпадают с категориями эксплуатации, которые используются в документе "ВнутреннееПотреблениеТоваров" с хоз. операцией "Передача в эксплуатацию".
Далее создал простенькую обработку по заполнению ТЧ вышеупомянутого документа. Но не получается получать дополнительный реквизит и подставлять подходящую категорию эксплуатации.
Собственно код:
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
КатегорияЭксп = Справочники.Номенклатура.
Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
ТекущаяСтрока.КатегорияЭксплуатации = ????????;
ТекущаяСтрока.Упаковка = 100;
ТекущаяСтрока.КоличествоУпаковок = 100;
КонецЦикла;
Закрыть();
КонецПроцедуры
ПоказатьПробовал просто вывести перечень номенклатуры с этим доп реквизитом, получается, но использовать запросы на клиенте нельзя, а дополнительные реквизиты на сервере нельзя получать.
Текст запроса:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.ДополнительныеРеквизиты.(
| Значение КАК Значение
| ) КАК ДополнительныеРеквизиты,
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
РезультатЗапроса = Запрос.Выполнить().Выбрать();
ПоказатьПодскажите, пожалуйста, решение моей проблемы.
Спасибо.
По теме из базы знаний
- ТОРГ-12 с заполнением колонок "Вид упаковки", "Количество в одном месте", "Количество мест, штук", "Масса брутто". Бухгалтерия 3.0
- Множественные дополнительные реквизиты в УТ 11.5 (11.4)
- Расширение типового механизма настройки заполнения бухгалтерской отчетности (на примере конфигурации 1С:ERP. Управление холдингом 3.1.8.15)
- «Отчет ГОЗ» для 1С:Бухгалтерия 3.0. ПРОФ и КОРП
- 1С:БСП Дополнительные реквизиты и сведения
Найденные решения
(8)
Поправил чутка
&НаСервере
Функция ЗаполнитьКатегориюЭксплуатацииНаСервере(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Номенклатура);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Для Каждого Строка Из Результат Цикл
// какоето условие на проверку нужного значения например
Если ТипЗнч(Строка .Значение) = Тип("Число") Тогда
Возврат Строка .Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
ПоищемДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере(ТекущаяСтрока.Номенклатура);
Если ПоищемДопРеквизит <> Неопределено Тогда
ТекущаяСтрока.КатегорияЭксплуатации = ПоищемДопРеквизит ;
Иначе
Сообщить("Нет доп реквизитов" + ТекущаяСтрока.Номенклатура);
КонецЕсли;
КонецЦикла;
Закрыть();
КонецПроцедуры
ПоказатьПоправил чутка
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Я конечно слабо понял что Вы хотите сделать, но попробуйте, так вернете результат запроса на форму
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
КатегорияЭксп = Справочники.Номенклатура.
ДопРеквизиты = ВернутьРезультатЗапроса();
Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
ТекущаяСтрока.КатегорияЭксплуатации = ????????;
ТекущаяСтрока.Упаковка = 100;
ТекущаяСтрока.КоличествоУпаковок = 100;
КонецЦикла;
КонецПроцедуры;
&НаСервере
Функция ВернутьРезультатЗапроса()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.ДополнительныеРеквизиты.(
| Значение КАК Значение
| ) КАК ДополнительныеРеквизиты,
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса ;
КонецФункции;
ПоказатьЯ конечно слабо понял что Вы хотите сделать, но попробуйте, так вернете результат запроса на форму
(2)
Есть элемент справочника "Номенклатура" с доп. реквизитом "Категория эксплуатации".
И если в тч документа "Внутреннее потребление товаров" есть эта номенклатура, мы нажимаем на кнопку заполнения, ищется совпадение по наименованию доп реквизита и категории эксплуатации и подставляется в колонку "Категория эксплуатации".
Я конечно слабо понял что Вы хотите сделать
Есть элемент справочника "Номенклатура" с доп. реквизитом "Категория эксплуатации".
И если в тч документа "Внутреннее потребление товаров" есть эта номенклатура, мы нажимаем на кнопку заполнения, ищется совпадение по наименованию доп реквизита и категории эксплуатации и подставляется в колонку "Категория эксплуатации".
(2)
в результате получим Таблицу значений, а вернется она на клиент без ошибок только при работе на Толстом клиенте, на тонком надо возвращать либо массив, либо структуру.
РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Возврат РезультатЗапроса ;
в результате получим Таблицу значений, а вернется она на клиент без ошибок только при работе на Толстом клиенте, на тонком надо возвращать либо массив, либо структуру.
(1)
Обратите внимание, что если в будущем понадобится добавить еще один доп реквизит, то данный запрос будет возвращать информацию также по нему, поэтому нужно указать тип реквизита(сделайте по аналогии с моим запросом, "руководитель это имя доп реквизита в моем случае") :
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.ДополнительныеРеквизиты.(
| Значение КАК Значение
| ) КАК ДополнительныеРеквизиты,
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.ДополнительныеРеквизиты.(
| Значение КАК Значение
| ) КАК ДополнительныеРеквизиты,
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Обратите внимание, что если в будущем понадобится добавить еще один доп реквизит, то данный запрос будет возвращать информацию также по нему, поэтому нужно указать тип реквизита(сделайте по аналогии с моим запросом, "руководитель это имя доп реквизита в моем случае") :
"ВЫБРАТЬ
| ПодразделенияОрганизацийДополнительныеРеквизиты.Ссылка КАК Подразделение,
| ЕСТЬNULL(ПодразделенияОрганизацийДополнительныеРеквизиты.Значение, ЗНАЧЕНИЕ(справочник.сотрудники.пустаяссылка)) КАК Руководитель
|ИЗ
| Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК ПодразделенияОрганизацийДополнительныеРеквизиты
|ГДЕ
| ПодразделенияОрганизацийДополнительныеРеквизиты.Свойство = &ДопРеквизитРуководитель"
Запрос.УстановитьПараметр("ДопРеквизитРуководитель", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Руководитель"));
Показать
Пока что попробовал так
Выдало ошибку.
&НаСервере
Функция ЗаполнитьКатегориюЭксплуатацииНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.ДополнительныеРеквизиты.(
| Значение КАК Значение
| ) КАК ДополнительныеРеквизиты,
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Возврат РезультатЗапроса;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
ДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере();
Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
ТекущаяСтрока.КатегорияЭксплуатации = ДопРеквизит.ДополнительныеРеквизиты;
КонецЦикла;
Закрыть();
КонецПроцедуры
ПоказатьВыдало ошибку.
Прикрепленные файлы:
(8)
Поправил чутка
&НаСервере
Функция ЗаполнитьКатегориюЭксплуатацииНаСервере(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Номенклатура);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Для Каждого Строка Из Результат Цикл
// какоето условие на проверку нужного значения например
Если ТипЗнч(Строка .Значение) = Тип("Число") Тогда
Возврат Строка .Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
ПоищемДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере(ТекущаяСтрока.Номенклатура);
Если ПоищемДопРеквизит <> Неопределено Тогда
ТекущаяСтрока.КатегорияЭксплуатации = ПоищемДопРеквизит ;
Иначе
Сообщить("Нет доп реквизитов" + ТекущаяСтрока.Номенклатура);
КонецЕсли;
КонецЦикла;
Закрыть();
КонецПроцедуры
ПоказатьПоправил чутка
Вот в таком виде выдает ошибку:
"Поле объекта не обнаружено (Значение)"
&НаСервере
Функция ЗаполнитьКатегориюЭксплуатацииНаСервере(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Номенклатура);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса.Значение;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
Для каждого ТекущаяСтрока Из ВладелецФормы.Объект.Товары Цикл
ПоищемДопРеквизит = ЗаполнитьКатегориюЭксплуатацииНаСервере(ТекущаяСтрока.Номенклатура);
Если ПоищемДопРеквизит <> Неопределено Тогда
ТекущаяСтрока.КатегорияЭксплуатации = ПоищемДопРеквизит ;
Иначе
Сообщить("Нет доп реквизитов" + ТекущаяСтрока.Номенклатура);
КонецЕсли;
КонецЦикла;
Закрыть();
КонецПроцедуры
Показать"Поле объекта не обнаружено (Значение)"
(16) Сделал как вы написали, только написал не "Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(Строка(РезультатЗапроса.Значение),Истина);", а
"Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(РезультатЗапроса.Значение,Истина);" и получилось.
Буду тестировать. Спасибо.
"Справочники.КатегорииЭксплуатации.НайтиПоНаименованию(РезультатЗапроса.Значение,Истина);" и получилось.
Буду тестировать. Спасибо.
Заполняйте ТЧ на сервере. Параметры регистрации обработки должны быть примерно такими:
Для получения доп. реквизитов используйте функции общего модуля УправлениеСвойствами:
УправлениеСвойствами.ЗначенияСвойств() или УправлениеСвойствами.ЗначениеСвойства()
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
ПараметрыРегистрации.Назначение.Добавить("Документ.ВнутреннееПотреблениеТоваров");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Заполнить категорию эксплуатации";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
НоваяКоманда.Идентификатор = "ЗаполнитьКатегориюЭксплуатации";
Возврат ПараметрыРегистрации;
КонецФункции
ПоказатьДля получения доп. реквизитов используйте функции общего модуля УправлениеСвойствами:
УправлениеСвойствами.ЗначенияСвойств() или УправлениеСвойствами.ЗначениеСвойства()
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот