Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите подкорректировать запрос
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
SanSay
Есть рабочий запрос для помещения Таблицы значений в менеджервременных таблиц
Запрос.Текст = "    
        |ВЫБРАТЬ
        |    *
        |ПОМЕСТИТЬ
        |    ВременнаяТаблица2
        |ИЗ
        |    &ТабЗнач2 ТЗПрайс;
        |ВЫБРАТЬ
        |    *
        |ИЗ
        |    ВременнаяТаблица2";
        Запрос.УстановитьПараметр("ТабЗнач2",ТЗПрайс);
        Запрос.Выполнить();

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

где *** как раз и не знаю как описать пустую ячейку... использование "" не прокатывает, ругается:
{Обработка.АЦК.Форма.Поиск(133)}: Ошибка при вызове метода контекста (Выполнить): {(13, 55)}: Строка, не закрывающаяся кавычкой
ВЫРАЗИТЬ(ВременнаяТаблица2.Серия КАК Строка(1000)) = <<?>>"
        Результат = Запрос.Выполнить().Выбрать();
pablo
Если тип Серия - строка, тогда используйте """", иначе работайте с функцией ЕстьNULL.
SanSay
блин точно... знал же, чет стормозил )
SanSay
так, чет я не понял:
если после запроса
Запрос.Текст = "    
        |ВЫБРАТЬ
        |    *
        |ПОМЕСТИТЬ
        |    ВременнаяТаблица2
        |ИЗ
        |    &ТабЗнач2 ТЗПрайс;
        |ВЫБРАТЬ
        |    *
        |ИЗ
        |    ВременнаяТаблица2
        |ГДЕ
        |    ВЫРАЗИТЬ(ВременнаяТаблица2.Серия КАК Строка(1000)) = """"";
        Запрос.УстановитьПараметр("ТабЗнач2",ТЗПрайс);
        Запрос.Выполнить();

проверить данные в "ВременнаяТаблица2", то показывает данные соответствующие условию "ВременнаяТаблица2.Серия = """
но когда использую "ВременнаяТаблица2" ниже по коду, там почемуто полные данные, т.е. даже те где "ВременнаяТаблица2.Серия не равно """
как так?
pablo
А какой у Вас дальше код? Может проблема в нем?
Fynjy
Цитата(SanSay @ 19.12.13, 10:59) необходимо зарегистрироваться для просмотра ссылки
так, чет я не понял:

Зачем там выразить? Колонки ТЗ жестко типизированы?
SanSay
Цитата(Fynjy @ 19.12.13, 13:46) необходимо зарегистрироваться для просмотра ссылки
Зачем там выразить? Колонки ТЗ жестко типизированы?

типизированы, без "выразить" ругается, что нельзя сравнивать чето там разных типов или т.п.
pablo
Судя по всему, Серия - строка без ограничения длины, поэтому используется Выразить.
SanSay
Цитата(SanSay @ 19.12.13, 12:59) необходимо зарегистрироваться для просмотра ссылки
проверить данные в "ВременнаяТаблица2", то показывает данные соответствующие условию "ВременнаяТаблица2.Серия = """но когда использую "ВременнаяТаблица2" ниже по коду, там почемуто полные данные, т.е. даже те где "ВременнаяТаблица2.Серия не равно """как так?

в общем пришлось создать еще одну временную таблицу.
Fynjy
Цитата(SanSay @ 19.12.13, 12:03) необходимо зарегистрироваться для просмотра ссылки
типизированы, без "выразить" ругается, что нельзя сравнивать чето там разных типов или т.п.

Типизацию колонки серии покажите.
SanSay
Цитата(Fynjy @ 19.12.13, 15:23) необходимо зарегистрироваться для просмотра ссылки
Типизацию колонки серии покажите.

если я правильно понял, что вам надо то:
ТЗПрайс.Колонки.Добавить("Серия", Новый ОписаниеТипов("Строка"));
Fynjy
Цитата(SanSay @ 19.12.13, 14:21) необходимо зарегистрироваться для просмотра ссылки
если я правильно понял, что вам надо то:
ТЗПрайс.Колонки.Добавить("Серия", Новый ОписаниеТипов("Строка"));

Все правильно поняли.
В запросе сравнение
.Серия = ""

должно работать 100%.
Ardi
Цитата(SanSay @ 19.12.13, 14:21) необходимо зарегистрироваться для просмотра ссылки
если я правильно понял, что вам надо то:
ТЗПрайс.Колонки.Добавить("Серия", Новый ОписаниеТипов("Строка"));

здест нужно указать длину строки. Тогда не нужно будет приводить длину строки в запросе.
SanSay
Цитата(Fynjy @ 19.12.13, 16:43) необходимо зарегистрироваться для просмотра ссылки
В запросе сравнение .Серия = ""должно работать 100%.

это:
|    ВЫРАЗИТЬ(ВременнаяТаблица2.Серия КАК Строка(1000)) = """"";

заменил на:
|    .Серия = """"

все равно:
{Обработка.АЦК.Форма.Поиск(92)}: Ошибка при вызове метода контекста (Выполнить): {(9, 9)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
.Серия <<?>>= ""
        Запрос.Выполнить();

так же при создании ТЗ прописал длину строки:
ТЗПрайс.Колонки.Добавить("Серия", Новый ОписаниеТипов("Строка"),,15);


таже ошибка
Ardi
КоллекцияКолонокТаблицыЗначений.Добавить (ValueTableColumnCollection.Add)
КоллекцияКолонокТаблицыЗначений (ValueTableColumnCollection)
Добавить (Add)
Синтаксис:

Добавить(<Имя>, <Тип>, <Заголовок>, <Ширина>)

<Ширина> (необязательный)

Тип: Число.
Ширина колонки в символах. Используется при визуальном отображении таблицы
SanSay
чет не то я значит сделал )
вот так лучше:
ТЗПрайс.Колонки.Добавить("Серия", Новый ОписаниеТипов("Строка"    , , Новый КвалификаторыСтроки(200, ДопустимаяДлина.Переменная)));

время обработки с 16 сек упало до 2-3 )

только вопрос
Новый КвалификаторыСтроки(200, ДопустимаяДлина.Переменная))

200 это что?
Ardi
200 это будет максимальная длина.

Если в таблицу совать больше знаков - то оно обрежет до двухсот.
SanSay
Цитата(Ardi @ 19.12.13, 21:21) необходимо зарегистрироваться для просмотра ссылки
Если в таблицу совать больше знаков - то оно обрежет до двухсот.

число знаков 1 ячейки я так понимаю?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.