Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 05:04

Получение доп реквизитов во внешней обработке.

Автор kocapb, 22 фев 2018, 11:08

0 Пользователей и 1 гость просматривают эту тему.

kocapb

День добрый.
УТ 11.3, платформа 8.3
Есть задача, одну из подзадач которой не могу реализовать.
Нужно выгрузить прайс лист с кучей дополнительных реквизитов.

Я нашел обработку выгрузки прайс-листа,
Добавил для тестов доп реквизиты через настройку 1с, а не через конфигуратор.
Понял, что доп реквизиты хранятся в табличной части.

Получить доп реквизиты номенклатуры в общем запросе не получается, так как в запросе используется группировка.
Сделал отдельный запрос к каждой номенклатуре, которую получаем из общего отбора.

Через консоль запросов сформировал запрос:

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

А дальше возникли проблемы.
Консоль запросов результаты отображает верно, но как получить доступ к свойству и его значению я не понимаю

по сути, у меня есть набор таблиц с двумя колонками. набор состоит из 1 таблицы, в этой таблицы N строк и 2 столбца(свойство, значение)

А дальше только догадки на основе поиска в интернетах:

//Получить текущую таблицу, первую в списке:
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
  Структура1 = Новый Структура;
        Структура1.Вставить(ВыборкаДетальныеЗаписи);
        Массив1 = Новый Массив;
        Массив1.Добавить(Структура1);
// что дальше? пробовал по всякому, мне не удается получить данные.
КонецЦикла; 

По сути, мне нужна функция, которая принимает в себя код номенклатуры и название свойства, а возвращает значение этого свойства.

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

wise

(0) добавь в ИСХОДНЫЙ запрос по номенклатуре
{
Номенклатура.ДополнительныеРеквизиты.(Свойство,Значение)
}
а при выборке
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ТекущаяНоменклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    ВыборкаДопРеквизиты = ВыборкаДетальныеЗаписи.Выбрать();
    Пока ВыборкаДопРеквизиты.Следующий() Цикл
        ТекущийДопРеквизитСвойство = ВыборкаДопРеквизиты.Свойство;
        ТекущийДопРеквизитЗначение = ВыборкаДопРеквизиты.Значение;
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

kocapb

Цитата: wise от 22 фев 2018, 11:51
(0) добавь в ИСХОДНЫЙ запрос по номенклатуре
{
Номенклатура.ДополнительныеРеквизиты.(Свойство,Значение)
}
а при выборке
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ТекущаяНоменклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    ВыборкаДопРеквизиты = ВыборкаДетальныеЗаписи.Выбрать();
    Пока ВыборкаДопРеквизиты.Следующий() Цикл
        ТекущийДопРеквизитСвойство = ВыборкаДопРеквизиты.Свойство;
        ТекущийДопРеквизитЗначение = ВыборкаДопРеквизиты.Значение;

Если добавить получение доп рекв в основной запрос, то мы получим ошибку от 1с: "в запросе используется группировка, по этому запрос делать не могу"

AIFrame

А почему не
Для каждого СтрокаДоп из Номенклатура.ДополнительныеРеквизиты Цикл
    Сообщить("" + СтрокаДоп.Свойство + " : " + СтрокаДоп.Значение);
КонецЦикла;

?
Добавлено: 22 фев 2018, 21:19


Вообще, перечисление характеристик для номенклатуры в формате функционала нового БСП - немного не то пальто.
Если  у тебя в прайсе будет стоять что-то типа колонки "Ширина" и в ней перечисление Ширины для каждой позиции - доп.реквизиты тут не помогут.
Характеристики - это именно предопределенное перечисление, список возможных значений.
Т.е. доп.реквизит будет не "размер обуви",  а "38", "40", "42", "44" и т.д.
И эти характеристики указываются для штрихкодов, в документах продажи или поступлений и т.д., но не в самой карточке товара, там только перечисление всех возможных характеристик этого товара или этого ВидаНоменклаутры.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск