8.х Доп колонка в табл. части

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

  1. TopicStarter Overlay
    Galich
    Offline

    Galich Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    276
    Симпатии:
    9
    Баллы:
    29
    Динамический список, запрос произвольный. Нужно в одну колонку поместить данные двух. Например:
    ВЫБРАТЬ
    Номенклатура КАК Номенклатура,
    Артикул КАК Артикул,
    а вот сюда нужно вставить колонку, например, "наименование", которая будет = Номенклатура + Артикул
    ИЗ
    ....
    И второй вопрос. При запросе нужно также получить какую-то колонку, которой нет в запросе. Например,
    ВЫБРАТЬ
    Номенклатура КАК Номенклатура,
    Артикул КАК Артикул,
    а вот сюда нужно вставить колонку, например, "наименование", которая будет = еще один запрос к какому-то справочнику
    ИЗ
    ...
    Тут через вложенный запрос?
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Выразите поля как строки и можно делать вот так: Номенклатура + Артикул
  3. TopicStarter Overlay
    Galich
    Offline

    Galich Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    276
    Симпатии:
    9
    Баллы:
    29
    А как это прописать в самом запросе?
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Как-то так:
    Код:
    ВЫРАЗИТЬ(Номенклатура КАК СТРОКА(300)) + ВЫРАЗИТЬ(Артикул КАК СТРОКА(300))
    должно сработать
  5. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    По второму вопросу: Можно сделать левое соединение по полям первого и второго запроса и все. Не забывая про проверки на ЕстьNULL
  6. TopicStarter Overlay
    Galich
    Offline

    Galich Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    276
    Симпатии:
    9
    Баллы:
    29
    Но это нужно подставить в поле которого нет в запросе, т.е.
    ВЫБРАТЬ
    Номенклатура КАК Номенклатура,
    Артикул КАК Артикул,
    КАКОЕТОИМЯПОЛЯ КАК ВЫРАЗИТЬ(Номенклатура КАК СТРОКА(300)) + ВЫРАЗИТЬ(Артикул КАК СТРОКА(300))

    так что ли?
  7. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Какого поля нет в запросе ?
  8. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Код:
    ВЫБРАТЬ
    Номенклатура КАК Номенклатура,
    Артикул КАК Артикул,
    ВЫРАЗИТЬ(Номенклатура КАК СТРОКА(300)) + ВЫРАЗИТЬ(Артикул КАК СТРОКА(300)) КАК КакоеТоПоле
    Galich нравится это.
  9. TopicStarter Overlay
    Galich
    Offline

    Galich Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    276
    Симпатии:
    9
    Баллы:
    29
    ок, попробую.
  10. TopicStarter Overlay
    Galich
    Offline

    Galich Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    276
    Симпатии:
    9
    Баллы:
    29
    Не получается так. Пишет не соответствие типов, это и понятно, берется дата, а ВЫРАЗИТЬ не может преобразовывать типы.
    Конструкция
    ВЫБРАТЬ
    Номенклатура КАК Номенклатура,
    Артикул КАК Артикул,
    "" КАК КакоеТоПоле
    работает, а вот подставить вместо "" Номенклатура +Артикул не получается.
    Объясню еще раз: в запросе выбирается (например) "Номенклатура" и "Артикул", но мне нужно получить еще одно поле "КакоеТоПоле", которого нет и формируется оно из сцепки двух полей Номенклатура и Артикул.
    Вообще такое возможно?
  11. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    А где у вас дата? В номенклатуре или в артикуле?
  12. Sert
    Offline

    Sert Опытный в 1С

    Регистрация:
    4 фев 2011
    Сообщения:
    365
    Симпатии:
    12
    Баллы:
    29
    Блин. Ну ведь замечательно работает. Ща на консоли быстро настукал, запустил

    Код:
    ВЫБРАТЬ
        Номенклатура.Наименование,
        Номенклатура.Код,
        ВЫРАЗИТЬ(Номенклатура.Наименование КАК СТРОКА(300)) + " ("+ВЫРАЗИТЬ(Номенклатура.Код КАК СТРОКА(10))+")" КАК НаименованиеКод
    ИЗ
        Справочник.Номенклатура КАК Номенклатура
    
    --- Объединение сообщений, 2 июл 2015 ---
    Результат запроса три колонки:
    Мандарины подарочные
    00000001045
    Мандарины подарочные (0000000104)
    --- Объединение сообщений, 2 июл 2015 ---
    Ну длину кода не угадал :) 11 надо, и тогда всё ровно
    Мандарины подарочные (00000001045)
  13. TopicStarter Overlay
    Galich
    Offline

    Galich Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    276
    Симпатии:
    9
    Баллы:
    29
    у меня в реальном запросе выбираются две даты.
    ...
    ПРЕДСТАВЛЕНИЕ(Документ.ВремяНачала) КАК ВремяНачала,
    ПРЕДСТАВЛЕНИЕ(Документ.ВремяОкончания) КАК ВремяОкончания,
    ...
    Как я понимаю ПРЕДСТАВЛЕНИЕ преобразует к типу строка
    дальше
    ВЫРАЗИТЬ(ВремяНачала КАК СТРОКА(8)) КАК Интервал

    Ошибка:
    Ошибка в запросе набора данных
    по причине:
    {(20, 2)}: Несовместимые типы "ВЫРАЗИТЬ"

    Если делать
    ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Документ.ВремяНачала) КАК СТРОКА(8)) КАК Интервал
    то же ошибка.
    Мне надо в Интервал получить строковое значение "21:00 - 22:00"
  14. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Представление и так преобразует в строку, но только ссылочный тип данных. Все остальные примитивы - через Выразить
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Нельзя преобразовывать типы с помощью ВЫРАЗИТЬ. В SQL применяю внутренние функции преобразования TO_Date, TO_String.....
    В 1С - если только обход результата запроса и преобразование, либо с помощью СКД.....
  16. TopicStarter Overlay
    Galich
    Offline

    Galich Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    276
    Симпатии:
    9
    Баллы:
    29
    Функция ПРЕДСТАВЛЕНИЕ
    Данная функция предназначена для получения строкового представления значения произвольного типа.
    Параметр функции – выражение любого типа.
    Возвращаемое значение – представление значения, тип Строка.
    Получается, что ВремяНачала в ПРЕДСТАВЛЕНИЕ(Документ.ВремяНачала) КАК ВремяНачала дает строковое значение.
    Но почему тогда не работает ВЫРАЗИТЬ(ВремяНачала) КАК СТРОКА(8)) КАК Интервал, время начала то строка.
  17. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    У вас как минимум синтаксическая ошибка
  18. TopicStarter Overlay
    Galich
    Offline

    Galich Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    276
    Симпатии:
    9
    Баллы:
    29
    ВЫРАЗИТЬ(ВремяНачала КАК СТРОКА(8)) КАК Интервал, суть то не меняется - ошибка остается. Или подскажите правильный вариант.
    Если бы не динамический список, то проще бы было.
  19. Sert
    Offline

    Sert Опытный в 1С

    Регистрация:
    4 фев 2011
    Сообщения:
    365
    Симпатии:
    12
    Баллы:
    29
    Хм... Действительно никакие пляски (даже с временными таблицами) не позволяют сделать из даты строку...
    --- Объединение сообщений, 2 июл 2015 ---
    Ну может ток двумя запросами ещё можно. Первый запрос с выразить выгрузить в ТЗ, а потом вторым обработать ТЗ. Но эт пробовать нужно... Чёт лень.
  20. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    А зачем вам дату к строке приводить ?

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