Имя: Пароль:
1C
1С v8
СКД, доп. реквизиты в запросе
0 tesei
 
12.05.22
09:24
Бухгалтерия 3.0. В номенклатуре доп. реквизит Вес, вид Число 14,3. Делаю отчет на СКД:

ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.Количество КАК Количество,
    НоменклатураДополнительныеРеквизиты.Значение КАК Вес
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
        ПО РеализацияТоваровУслугТовары.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство.Наименование ПОДОБНО &ИмяСвойства
    И РеализацияТоваровУслугТовары.Ссылка = &Ссылка


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

ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.Количество КАК Количество,
    Выразить(НоменклатураДополнительныеРеквизиты.Значение КАК Число(14,3)) КАК Вес
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
        ПО РеализацияТоваровУслугТовары.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство.Наименование ПОДОБНО &ИмяСвойства
    И РеализацияТоваровУслугТовары.Ссылка = &Ссылка

Теперь Вес можно перемножать, но он везде = 0.

Как это можно исправить?
1 tesei
 
12.05.22
09:50
Может быть, поместить во временную таблицу?
2 Kassern
 
12.05.22
09:58
(0) Как вы думаете, что будет, если у части номенклатуры данный доп реквизит будет не заполнен?)
Как отработает вот этот кусок?)
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство.Наименование ПОДОБНО &ИмяСвойства
3 tesei
 
12.05.22
10:11
(2) Заполнено в параметрах СКД, "%Вес%", иначе бы первый запрос не работал. Ссылка выбирается на форме. Отчет выдает правильный вес, но не считает его числом.
4 tesei
 
12.05.22
10:11
+(3) и там левое соединение.
5 Kassern
 
12.05.22
10:12
(3) А как вы думаете, что будет с общей таблицей после соединения, если вы обрезаете условием по правой таблице?
6 Kassern
 
12.05.22
10:17
Вот вам простой пример
Таб1
Номенклатура | Количество
Стакан             10
Кружка             20

Таб2
Номенклатура | Свойство | Значение
Стакан          Вес           0.5

Как вы думаете, что будет в итоговой, когда вы левым соединением к таб1 прикрутите таб2 по номенклатуре и сделаете отбор Где Таб2.Свойство=Вес?
7 tesei
 
12.05.22
10:28
Ну хорошо, тогда как сделать правильно?
8 Kassern
 
12.05.22
10:33
(7) вы должны понимать, что отбор работает уже после соединения таблиц. Для того, чтобы не потерять данные из реализации, вам нужно либо изначально сделать отбор в правой таблице и готовую уже поместить во временную таблицу (ее уже соединять с основной таблицей). Либо в самом соединении прописать условие ПО РеализацияТоваровУслугТовары.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка И НоменклатураДополнительныеРеквизиты.Свойство.Наименование ПОДОБНО &ИмяСвойства
9 Kassern
 
12.05.22
10:34
Попробуйте еще заменить подобно на равно
10 Kassern
 
12.05.22
10:34
и указать точное наименование
11 СвинТуз
 
12.05.22
10:36
Как правильно = долго объяснять
Не буду. Пока есть такие коллеги у меня будет работа по оптимизации.

В чем проблема? Не все данные? Это коллега написал выше.
ЕстьNULL пробовали?

"И дают таким ружье?" (С) И зарплату высокую.
Все такими были.

Когда вводишь свойство, нужно указывать имя для программиста.
12 СвинТуз
 
12.05.22
10:37
Проблема в чем? В том что не прермножается?
ЕстьNULL
Какой вопрос, такой ответ.
13 СвинТуз
 
12.05.22
10:38
Вообще странно
Вроде большенький. Одногодка. 15 лет стажа )
Удачи коллега.
14 Kassern
 
12.05.22
10:41
(12) Это хорошо, что на данном этапе тормознул. Было бы гораздо хуже, когда вес вывелся и посчитался. А потом через несколько месяцев руководство заметило, что числа сильно занижены и выяснилось, что часть строк тупо обрезалась и планировние шло по одному месту все это время. А все из-за отбора по правой таблице и косяков в заведении веса в карточках номенклатуры)
15 СвинТуз
 
12.05.22
10:41
Топорная работа на 16-м году кодирования. )
16 Kassern
 
12.05.22
10:42
хорошо ведь, когда отчет работает, строчки какие-то выводит, суммы считает вроде даже пару совпало)
17 СвинТуз
 
12.05.22
10:42
(14)
Ну да.
Запрос кривой.
И не только по этому.
Подход г...но.
18 Kassern
 
12.05.22
10:44
мой совет ТС, купите пару книжек Хрусталевой по запросам и СКД, многие вопросы сами отпадут
19 СвинТуз
 
12.05.22
10:44
Скорость отбора будет завышена по сравнению с той что могла бы быть.
20 СвинТуз
 
12.05.22
10:44
(18)
Не трогай его. Он 15 лет за еду пишет.
21 СвинТуз
 
12.05.22
10:46
Поздно учить. До пенсии 15 лет.
Судя по виду на аватарке не доживет )
22 youalex
 
12.05.22
10:46
Чем типовой механизм характеристик не устраивает? В БП для Номенклатуры он настроен для Справочник.Номенклатура.ТабличнаяЧасть.ДополнительныеРеквизиты в том числе.
23 СвинТуз
 
12.05.22
10:51
ох. виноват )))
это еще и СКД )
Батюшки святы ... Тогда еще больше вариантов.
Ленивые не пишут код.
24 СвинТуз
 
12.05.22
10:52
Видимо вариант отчета придется только в пользовательском настраивать.
25 tesei
 
12.05.22
11:49
Спасибо, коллеги. Запрос подправил, появились строки накладной без веса :) Основная проблема в том, что значение - это составной тип данных, который не хочет преобразовываться в число.
26 Kassern
 
12.05.22
11:56
(25) а теперь эти строки нужно проверять на нулл и преобразовывать в 0
27 Kassern
 
12.05.22
11:57
Тогда тип будет числовой у поля и можно будет суммировать. А то у вас получается

Кружка 10
Ложка  Null
Вилка   5

Итого   редиска!
28 tesei
 
12.05.22
13:28
ЕСТЬNULL(ВложенныйЗапрос.Вес, 0) - пустое значение во всех строках
ВложенныйЗапрос.Вес даёт значение веса, но выглядит в отчёте как строка (форматирование влево по умолчанию), в то время как Количество отформатировано как число, вправо.
29 tesei
 
12.05.22
17:35
Сделал через обычную внешнюю печатную форму, ну его нафиг, этот СКД. Вес преобразовал из строки в число. Итоговый вес посчитал инкрементом в цикле. Дёшево, сердито, без понтов.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший