8.х Достать значение с табличного поля

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Павел55555, 4 ноя 2016.

  1. TopicStarter Overlay
    Павел55555
    Offline

    Павел55555

    Регистрация:
    4 ноя 2016
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Доброго дня!
    Платформа 8.3 Толстый клиент. УТ 10.3
    Подскажите в каком направлении копать.
    Есть номенклатура в ней табличное поле "МестаХранения" в нём есть колонка ячейка, каким образом мне в другом документе "ПриходныйОрдерНаТовары" вывести в новой колонке эту ячейку?


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

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

    Запрос = Новый Запрос;
    Запрос.Текст = Текст;
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    МестоХранения = ?(Выборка.Следующий(),Выборка.МестоХранения,0);
    Возврат МестоХранения;

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


    Процедура ПоказатьМестоХранения(КолонкиТабПоля, ЯчейкиСтрокиТабПоля, Номенклатура) Экспорт
    Если КолонкиТабПоля.МестоХранения.Видимость Тогда
    МестоХранения = МестоХранения(Номенклатура); ЯчейкиСтрокиТабПоля.МестоХранения.УстановитьТекст(МестоХранения);
    Иначе ЯчейкиСтрокиТабПоля.МестоХранения.УстановитьТекст("");
    КонецЕсли;
    КонецПроцедуры


    Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

    ПоказатьМестоХранения(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Номенклатура);

    КонецПроцедуры
  2. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    461
    Симпатии:
    4
    Баллы:
    29
    Попробуйте так
    Текст = "ВЫБРАТЬ
    | ПриходныйОрдерНаТоварыТовары.Номенклатура,
    | МестаХраненияНоменклатуры.МестоХранения,
    | ПриходныйОрдерНаТоварыТовары.Ссылка.Склад
    |ИЗ
    | Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
    | ПО ПриходныйОрдерНаТоварыТовары.Ссылка.Склад = МестаХраненияНоменклатуры.Склад
    | И ПриходныйОрдерНаТоварыТовары.Номенклатура = МестаХраненияНоменклатуры.Номенклатура"
  3. TopicStarter Overlay
    Павел55555
    Offline

    Павел55555

    Регистрация:
    4 ноя 2016
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Без изменений одна и та же ячейка по всем строкам и док.

    Вложения:

  4. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    461
    Симпатии:
    4
    Баллы:
    29
    А где у вас в запросе отбор по номенклатуре? Вы тупо вытаскиваете ячейки по ВСЕЙ номенклатуре документов ПриходныйОрдер и позиционируетесь на первый элемент выборки!
    --- Объединение сообщений, 4 ноя 2016 ---
    Текст = "ВЫБРАТЬ
    | ПриходныйОрдерНаТоварыТовары.Номенклатура,
    | МестаХраненияНоменклатуры.МестоХранения,
    | ПриходныйОрдерНаТоварыТовары.Ссылка.Склад
    |ИЗ
    | Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
    | ПО ПриходныйОрдерНаТоварыТовары.Ссылка.Склад = МестаХраненияНоменклатуры.Склад
    | И ПриходныйОрдерНаТоварыТовары.Номенклатура = МестаХраненияНоменклатуры.Номенклатура
    | ГДЕ
    |ПриходныйОрдерНаТоварыТовары.Ссылка = &СсылкаНаВашДокумент
    |И ПриходныйОрдерНаТоварыТовары.Номенклатура = &СсылкаНаНоменклатуруВСтрокеТабличногоПоля
    "

    А вообще запросы в цикле-это зло.
  5. TopicStarter Overlay
    Павел55555
    Offline

    Павел55555

    Регистрация:
    4 ноя 2016
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Всем спасибо! найдено решение:
    Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

    Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
    МестоХранения = ПолучитьМестоХранения(ДанныеСтроки.Номенклатура);
    Если НЕ МестоХранения = Неопределено Тогда
    ОформлениеСтроки.Ячейки.МестоХранения.УстановитьТекст(МестоХранения);
    КонецЕсли;
    КонецЕсли;

    КонецПроцедуры

    Функция ПолучитьМестоХранения(Номенклатура)

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

    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    Возврат Выборка.МестоХранения;
    Иначе
    Возврат неопределено
    КонецЕсли;

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

Поделиться этой страницей