Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

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

Достать значение с табличного поля
Я
   Pavel55555
 
02.11.16 - 11:21
Доброго дня!
Платформа 8.3 Толстый клиент. УТ 10.3
Подскажите в каком направлении копать.
Есть номенклатура в ней табличное поле "МестаХранения" в нём есть колонка ячейка, каким образом мне в другом документе "ПриходныйОрдерНаТовары" вывести в новой колонке эту ячейку?

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

Может быть эту ячейку не запросом выводить?
 
 
   h-sp
 
1 - 02.11.16 - 11:24
(0) вы же уже вроде решили эту задачу?
   d546
 
2 - 02.11.16 - 11:25
точно в номенклатуре есть табличное поле?

точно в параметр "МестаХранения" в запросе надо приравнивать к Номенклатура?

     |ГДЕ
     |    МестаХраненияНоменклатуры.Номенклатура = &МестаХранения";
   Pavel55555
 
3 - 02.11.16 - 11:35
(2) Да, точно есть в форме это таб. поле., форма доработанная.
(1) Нет её я не решил еще, есть подобные Запросы но они что то не идут.
Фото https://cloud.mail.ru/public/Bx26/AQqDWsZSV
   h-sp
 
4 - 02.11.16 - 11:38
(3) ты не ответил, почему номенклатуру сравниваешь со складами. Вы что, ангарами торгуете?
   Pavel55555
 
5 - 02.11.16 - 11:44
(4) Конечно запрос не верный...
Не могу сообразить, как они формируются :(
   Pavel55555
 
6 - 02.11.16 - 11:46
В запросе получается две таб. Номен и Места Хр.?
Поля Склад, Место, Номен ?
   Pavel55555
 
7 - 02.11.16 - 11:47
Нужна ли в Запросе таб. ПриходныйОрдерНаТовары ?
   h-sp
 
8 - 02.11.16 - 11:49
(0) нужна конечно. Иначе откуда ты возьмешь номенклатуру?
   Pavel55555
 
9 - 02.11.16 - 11:59
(8)
1. Номен из таб. ПриходныйОрдерНаТовары
2. МестаХраненияНоменклатуры.МестоХранения из РС

Далее Связи ковырять или Условие?
   Pavel55555
 
10 - 02.11.16 - 12:02
 
 Рекламное место пустует
   Pavel55555
 
11 - 02.11.16 - 12:04
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ПриходныйОрдерНаТовары.Товары.(
        |        Номенклатура
        |    ),
        |    МестаХраненияНоменклатуры.МестоХранения
        |ИЗ
        |    Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
        |        ПО ПриходныйОрдерНаТовары.Товары.Номенклатура.Ссылка = МестаХраненияНоменклатуры.МестоХранения.Ссылка";
    
    РезультатЗапроса = Запрос.Выполнить();
   h-sp
 
12 - 02.11.16 - 12:37
ВЫБРАТЬ
        |    ПриходныйОрдерНаТоварыТовары.Номенклатура,
        |    МестаХраненияНоменклатуры.МестоХранения
        |ИЗ
        |    Документ.ПриходныйОрдерНаТовары.Товары КАК ПриходныйОрдерНаТоварыТовары
   Pavel55555
 
13 - 02.11.16 - 12:46
|    ПриходныйОрдерНаТовары.Товары.(
.Товары. - это тч

 |    ПриходныйОрдерНаТоварыТовары ошибка
   Peltzer
 
14 - 02.11.16 - 12:52
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ПриходныйОрдерНаТовары.Товары.(
        |        Номенклатура
        |    ),
        |    МестаХраненияНоменклатуры.МестоХранения
        |ИЗ
        |    Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатурыСрезПоследних(тут параметры виртуальной таблицы) КАК МестаХраненияНоменклатуры
        |        ПО ПриходныйОрдерНаТовары.Товары.Номенклатура = МестаХраненияНоменклатуры.Номенклатура
И ПриходныйОрдерНаТовары.Склад = МестаХраненияНоменклатуры.Склад";
    
    РезультатЗапроса = Запрос.Выполнить();
   h-sp
 
15 - 02.11.16 - 12:56
(13) делай запрос сразу к табличной части
|ИЗ
        |    Документ.ПриходныйОрдерНаТовары.Товары


нафига тебе многоэтажные структуры?
   Pavel55555
 
16 - 02.11.16 - 14:13
(14) У меня почти так же получилось:
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ПриходныйОрдерНаТовары.Товары.(
        |        Номенклатура
        |    ),
        |    МестаХраненияНоменклатуры.МестоХранения,
        |    ПриходныйОрдерНаТовары.Склад
        |ИЗ
        |    Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
        |        ПО ПриходныйОрдерНаТовары.Товары.Номенклатура.Ссылка = МестаХраненияНоменклатуры.МестоХранения.Ссылка
        |            И ПриходныйОрдерНаТовары.Склад.Ссылка = МестаХраненияНоменклатуры.МестоХранения";
    
    РезультатЗапроса = Запрос.Выполнить();
   Pavel55555
 
17 - 02.11.16 - 15:13
Башку уже сломал, не выходит и всё тут.
   Pavel55555
 
18 - 02.11.16 - 15:15
Уже пробовал через Процедура ПоказатьМестаХранения..//...

РаботаСДиалогами.ПоказатьМестаХранения..//...

Тоже не то
   Pavel55555
 
19 - 02.11.16 - 15:15
ЯчейкиСтрокиТабПоля.МестаХранения.УстановитьТекст(Номенклатура.МестаХранения);
   Pavel55555
 
20 - 02.11.16 - 18:41
Как то выводит но не правильно, одна и та же ячейка по всем строкам и док. начинает немного тормозить:
Вся структура:
Функция МестоХранения(Номенклатура) Экспорт
Текст =    "ВЫБРАТЬ
           |    ПриходныйОрдерНаТовары.Товары.(
           |        Номенклатура
           |    ),
           |    МестаХраненияНоменклатуры.МестоХранения,
           |    ПриходныйОрдерНаТовары.Склад
           |ИЗ
           |    Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
           |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
           |        ПО ПриходныйОрдерНаТовары.Склад = МестаХраненияНоменклатуры.Склад
           |            И ПриходныйОрдерНаТовары.Товары.Номенклатура = МестаХраненияНоменклатуры.Номенклатура";
        
        Запрос = Новый Запрос;
        Запрос.Текст = Текст;
        Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
МестоХранения = ?(Выборка.Следующий(),Выборка.МестоХранения,0);
Возврат МестоХранения;

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


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


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

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

КонецПроцедуры
   Pavel55555
 
21 - 02.11.16 - 18:42
В чем может быть проблема, мне кажется при Выборке?
   Peltzer
 
22 - 03.11.16 - 05:23
Что делает Функция МестоХранения(Ном):
В запросе ты выбрал все записи приходного ордера на товары и присоединил к ним все доступные записи по местам хранения на данном складе для каждой номенклатуры (а их может быть несколько, если регистр периодический).
Потом взял первую попавшуюся запись и вернул как результат функции.

Теперь как ты выводишь - пришло сообщение о том, что надо вывести строку таблицы - идём в базу, выполняем функцию МестоХранения - выводим результат для одной строки.
Естественно, работать всё это будет меедленно. И не верно. Ведь отбора по номенклатуре в запросе нет.

Можно где-то хранить таблицу мест хранения пока форма работает, либо записывать место хранения в свой реквизит ТЧ и выводить его штатными средствами.
   Pavel55555
 
23 - 04.11.16 - 08:48
(22) Так все таки Запрос нужно ковырять?
   Pavel55555
 
24 - 04.11.16 - 09:03
Параметры виртуальной таблицы - Это таблицы самой "МестаХраниний" ?
   Pavel55555
 
25 - 04.11.16 - 11:36
У кого нибудь есть мысли как решить данную задачу?
   catena
 
26 - 04.11.16 - 11:59
(25)Ответь на вопросы:
1. Для чего ты в функцию МестоХранения передаешь номенклатуру?
2. Какие действия происходят в строке: МестоХранения = ?(Выборка.Следующий(),Выборка.МестоХранения,0);?
3. Где учитывается склад?
4. Зачем устанавливать текст в невидимой колонке?
   catena
 
27 - 04.11.16 - 12:01
5. Периодичность регистра МестаХраненияНоменклатуры ?
   Pavel55555
 
28 - 04.11.16 - 12:17
(26)
И ПриходныйОрдерНаТовары.Товары.Номенклатура = МестаХраненияНоменклатуры ?
Действие взято с другой функции.
Иначе         ЯчейкиСтрокиТабПоля.МестоХранения.УстановитьТекст(""); Удалил.
   bootini
 
29 - 04.11.16 - 12:19
В какой момент место хранения выводить надо?
   Pavel55555
 
30 - 04.11.16 - 12:21
(29) ТоварыПриПолученииДанных
   bootini
 
31 - 04.11.16 - 12:24
(30) ПриходныйОрдерНаТовары.Товары.МестоХранения - есть такой реквизит таб части документа?
   Pavel55555
 
32 - 04.11.16 - 12:28
(31) Реквизита нет, есть колонка.
Фото https://cloud.mail.ru/public/G218/A4xdFq8zr
Фото https://cloud.mail.ru/public/2XES/o5dcvShHE
   bootini
 
33 - 04.11.16 - 14:12
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    Если ЗначениеЗаполнено(ДанныеСтроки.Номенклатура) Тогда
        МестоХранения = ПолучитьМестоХранения(ДанныеСтроки.Номенклатура);
        Если НЕ МестоХранения = Неопределено Тогда
            ОформлениеСтроки.Ячейки.МестоХранения.УстановитьТекст(МестоХранения);
        КонецЕсли; 
    КонецЕсли; 
    
КонецПроцедуры

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

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

КонецФункции// ()
 
 
   Pavel55555
 
34 - 04.11.16 - 14:50
(33) БОЛЬШОЕ СПАСИБО bootini!
УРА! ВСЁ ЧЕТКО!
   bootini
 
35 - 04.11.16 - 15:11
Зачем только всё это надо непонятно, чисто для контроля при оприходовании, заданы ячейки для номенклатуры или нет?
   Pavel55555
 
36 - 04.11.16 - 19:01
(35) Да и не только, для того что бы кладовщик видел куда положить товар, не открывая его карточку.
   Peltzer
 
37 - 07.11.16 - 06:33
Про периодичность не учли.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует