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

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

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

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

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

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

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

|ИЗ
        |    Документ.ПриходныйОрдерНаТовары.Товары


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

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

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


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


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

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

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

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

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

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

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

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