Запросы, динамические списки и отчеты на СКД: требования по локализации
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. В некоторых случаях строковые литералы из текстов запросов также могут оказаться частью пользовательского интерфейса. В таких случаях строковые литералы необходимо выносить из текста запроса в параметры.
ЗапросПоВерсиям = Новый Запрос(" |ВЫБРАТЬ |Версии.Ссылка, |ВЫБОР КОГДА Версии.Выпущена = ИСТИНА | ТОГДА ""выпущена"" | ИНАЧЕ ""в разработке"" |КОНЕЦ КАК ТекстПояснения | ИЗ | Справочник.Версии КАК Версии");
ТекстЗапроса = "ВЫБРАТЬ |Версии.Ссылка, |ВЫБОР КОГДА Версии.Выпущена = ИСТИНА | ТОГДА &ТекстВыпущеннойВерсии | ИНАЧЕ &ТекстНеВыпущеннойВерсии |КОНЕЦ КАК ТекстПояснения | ИЗ | Справочник.Версии КАК Версии"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВыпущеннойВерсии", НСтр("ru='выпущена'")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстНеВыпущеннойВерсии", НСтр("ru='в разработке'"));
ЗапросПоВерсиям = Новый Запрос(" |ВЫБРАТЬ |Версии.Ссылка, |ВЫБОР КОГДА Версии.Выпущена = ИСТИНА | ТОГДА &ТекстВыпущеннойВерсии | ИНАЧЕ &ТекстНеВыпущеннойВерсии |КОНЕЦ КАК ТекстПояснения | ИЗ | Справочник.Версии КАК Версии"); ЗапросПоВерсиям.УстановитьПараметр("ТекстВыпущеннойВерсии", НСтр("ru='выпущена'")); ЗапросПоВерсиям.УстановитьПараметр("ТекстНеВыпущеннойВерсии", НСтр("ru='в разработке'"));
2. Аналогичные требования предъявляются к выражениям СКД и запросам, которые используются в наборах данных СКД и содержат строковые литералы, выводимые в пользовательском интерфейсе. Например, если в выражении для параметров СКД встречаются строковые константы, требующие перевода, то следует:
а) в запросе указывать строковые константы, соответствующие «Правилам образования имен переменных» («»ЗавершитеСозданиеДокументов» КАК Рекомендация «), а в списке доступных значений поля указать локализуемый строковый литерал («Завершите создание документов»);

б) либо значение таких параметров с помощью функции НСтр устанавливать не в колонке Выражение, а в модуле отчета в обработчике события ПриКомпоновкеРезультата
ВЫБОР КОГДА ВидОперации = "Отгрузка клиентам" ТОГДА 1 КОГДА ВидОперации = "Возвраты товаров от клиентов" ТОГДА 2 КОГДА ВидОперации = "Приемка от поставщиков" ТОГДА 3 КОНЕЦ
ВЫБОР КОГДА ВидОперации = &ВидОперацииОтгрузкаКлиентам ТОГДА 1 КОГДА ВидОперации = &ВидОперацииВозвратыТоваровОтКлиентов ТОГДА 2 КОГДА ВидОперации = &ВидОперацииПриемкаОтПоставщиков ТОГДА 3 КОНЕЦ
в) В выражениях, используемых в настройках СКД, например Выражение представления и Выражение упорядочивания на закладке Наборы данных , а также в других им подобных, необходимо использовать функцию НСтр , аналогично тому, как это делается в коде модулей (см. стандарт Интерфейсные тексты в коде: требования по локализации).
Выбор Когда Объект = Раздел Тогда Выбор Когда Раздел = Значение(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) Тогда "" Иначе "" Конец Иначе Объект Конец
Выбор Когда Объект = Раздел Тогда Выбор Когда Раздел = Значение(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) Тогда НСтр("ru=''") Иначе НСтр("ru=''") Конец Иначе Объект Конец
3. Для колонок отчета на СКД для поля выборки, полученного вычислением с заданием ему псевдонима, необходимо задавать синоним при разработке. Нельзя опираться на автоматически сгенерированный заголовок по имени/псевдониму.


В отчётах, если не стоит галочка у поля выборки, полученного вычислением с заданием ему псевдонима, оно не попадает в результаты поиска редактирования текстов интерфейсов.
См. также
Использование в запросах конструкции ВЫБОР КОГДА в 1С
Иногда в запросах необходимо получить не сами данные, а в зависимости от результата вывести другие данные. Для этих целей в языке запросов 1С (впрочем как и в SQL) есть конструкция ВЫБОР КОГДА.
Конструкция выглядит так
ВЫБОР КОГДА
ТОГДА
ИНАЧЕ
КОНЕЦ
Пример:

Результат будет приблизительно таким
Обратите внимание, что условие обязательно должно быть логическим, например такая конструкция не будет работать:
Вместо этого надо точно указать сравнение
ОБРАБОТКИ.com
Недокументированный синтаксис оператора «ВЫБОР» в запросе 1С
Недавно обнаружил не совсем стандартное, не описанное в официальной документации использование оператора «ВЫБОР» в запросах 1С, и спешу им поделиться с уважаемыми читателями. В документации описан следующий пример использования оператора выбора в языке запрсов 1С:
1000 | ТОГДА ""1000 -"" | КОГДА Номенклатура.ЗакупочнаяЦена > 100 | ТОГДА ""100 – 1000"" | КОГДА Номенклатура.ЗакупочнаяЦена > 10 | ТОГДА ""10 – 100"" | КОГДА Номенклатура.ЗакупочнаяЦена > 0 | ТОГДА ""0 – 10"" | ИНАЧЕ ""Не Задана"" | КОНЕЦ КАК Цена |ИЗ | Справочник.Номенклатура КАК Номенклатура"
А вот такой конструкции в документации я не обнаружил:
Запрос = Новый Запрос(" |ВЫБРАТЬ | ВЫБОР &Перем | КОГДА 1 | ТОГДА ""Раз"" | КОГДА 2 | ТОГДА ""Два"" | КОГДА 3 | ТОГДА ""Три"" | ИНАЧЕ ""Много"" | КОНЕЦ КАК РезультатВыбора"); Запрос.УстановитьПараметр("Перем",2); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Сообщить(Выборка.РезультатВыбора);
Прямо классический switch … case … default из С в чистом виде получился.
Примечание: Так как от ошибок никто не застрахован, исходный код может содержать различные ошибки, неточности и т.д. Если таковые будут замечены, просьба сообщить мне об этом.
Если публикация помогла Вам справится с проблемой, решить задачу или расширить свои знания — поддержите автора.
ВЫБОР, ТОГДА КОГДА в Запросе
При попытке написать условие в параметрах виртуальной таблицы ВЫБОР, ТОГДА, КОГДА пишет (6,7) ожидается выражение «)» , где то ковычку пропустил? просто я вроде все пересмотрел, вроде норм все.
По теме из базы знаний
- Модель запроса
- Запрос всей номенклатуры с характеристиками
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Заметки по SQL 4: Преобразование в запросе строки в дату одним выражением
- Быстрый фронт в базе размером 6.8 терабайт – наши стандарты при разработке и рефакторинге запросов
- Дата
- Дата
- Рейтинг всех уровней
- Рейтинг 1-го уровня
- Древо развёрнутое
- Древо свернутое
Свернуть все
2. iskdv 14.06.17 05:48 Сейчас в теме
не надо так «КАК Номенклатура.ОсновнойПоставщик» — лучше «КАК ОсновнойПоставщик»
ivangrant; Vitaly1C8; vz1987; SyachinS; boln; + 5 – Ответить
3. pm74 195 14.06.17 07:39 Сейчас в теме
«выразить» обычно используется когда реквизит составного типа
4. j3qq4 14.06.17 08:02 Сейчас в теме
ВЫБОР КОГДА ПартииТоваровНаСкладахОстатки.ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслуг ТОГДА ПартииТоваровНаСкладахОстатки.ДокументОприходования.Контрагент КОГДА ПартииТоваровНаСкладахОстатки.ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслугВНТТ ТОГДА ПартииТоваровНаСкладахОстатки.ДокументОприходования.Контрагент ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ КАК ОсновнойПоставщик
gybson; Vitaly1C8; Amadeuc404; + 3 – Ответить
5. ProGG3R 14.06.17 08:54 Сейчас в теме
Такс. эту проблему разрешил, смотрите суть в следующем, есть обработка (Скрин 1), я для нее написал запрос:
ВЫБРАТЬ ТоварыВНТТОстатки.Номенклатура.Артикул КАК Артикул, ТоварыВНТТОстатки.Номенклатура, ТоварыВНТТОстатки.ЦенаВРознице КАК РозничнаяЦена, ТоварыВНТТОстатки.СерияНоменклатуры, ТоварыВНТТОстатки.СерияНоменклатуры.ювШтрихкодПоставщика КАК ШтрихкодПоставщика, ТоварыВНТТОстатки.Склад КАК Магазин, ТоварыВНТТОстатки.КоличествоОстаток КАК Количество, ТоварыВНТТОстатки.ювВесОстаток КАК Вес, ТоварыВНТТОстатки.Организация, ТоварыВНТТОстатки.Склад.ТипЦенРозничнойТорговли.ВалютаЦены КАК Валюта, ТоварыВНТТОстатки.СерияНоменклатуры.ювРазмер КАК Размер, ВЫБОР КОГДА ПартииТоваровНаСкладахОстатки.ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслуг ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОстатки.ДокументОприходования КАК Документ.ПоступлениеТоваровУслуг).Контрагент КОГДА ПартииТоваровНаСкладахОстатки.ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслугВНТТ ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОстатки.ДокументОприходования КАК Документ.ПоступлениеТоваровУслугВНТТ).Контрагент ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ КАК Поставщик ИЗ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(, ) КАК ПартииТоваровНаСкладахОстатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВНТТ.Остатки(, ) КАК ТоварыВНТТОстатки ПО ПартииТоваровНаСкладахОстатки.Склад = ТоварыВНТТОстатки.Склад И ПартииТоваровНаСкладахОстатки.Номенклатура = ТоварыВНТТОстатки.Номенклатура И ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыВНТТОстатки.ХарактеристикаНоменклатуры И ПартииТоваровНаСкладахОстатки.СерияНоменклатуры = ТоварыВНТТОстатки.СерияНоменклатуры И ПартииТоваровНаСкладахОстатки.СерияНоменклатуры.ювРазмер = ТоварыВНТТОстатки.СерияНоменклатуры.ювРазмер ГДЕ ТоварыВНТТОстатки.КоличествоОстаток > 0 И ТоварыВНТТОстатки.ювВесОстаток >= 0
Вроде в запросе ошибок нет, фильтрацию сделал по поставщику в обработке, при нажатии Выгрузить данные -> Пишет успешно выгружены данные-> А самого файла нету, запрос свой проверял в Консоле Запросов отрабатывает, только не фильтрует, а когда пытаюсь посмотреть Выгруженные данные в обработке показывает следующее (скрин 2), т.е. я так понимаю в выгружаемых данных просто пусто и вот вопрос в следующем, косяк в самой обработке надо искать, либо же я запрос написал некорректно ?