Консультация № 172995
06.10.2009, 23:44
0.00 руб.
0 8 2
Здравствуйте уважаемые эксперты. Конфигурация самописная на 1С 8.1. Сервер баз данных MSSQL2005+. Вопрос состоит в следующем. Поскольку клиентские машины слабые, а сервер достаточно серьезный, при написании отчетов, я стараюсь все условия закидать в запрос. Мне надо в запросе по условию соединить два поля. Привожу работающий пример без запроса: см. Пример 1. Каким образом я могу в запросе выбрать поле? По следующим условиям:
1. Если ВидДок=перечисления.НавчанняГуртожитокПроживання_ВидДок.виселення (передаю параметром)
2. Тогда надо соединить два поля ЖитловийФонд + "ДатаПосВис" (желательно с форматом дд.ММ.гг для даты)
3. В остальных условиях просто выводить "ЖитловийФонд".
В Примере 2, я пробовал выполнить нужные условия в запросе. Мне показывает ошибку при использовании оператора "+". Пробовал переводить поля в строку через метод "ПРЕДСТАВЛЕНИЕ", ситуация с ошибкой повторилась.
Подскажите, или реально это сделать, и как именно?
Заранее благодарен.




Приложение:
Пример 1
Если ВыборкаДетали.ВидДок=перечисления.НавчанняГуртожитокПроживання_ВидДок.виселення тогда
ОбластьДетальныхЗаписей.Параметры.ЖитловийФонд=""+ВыборкаДетали.ЖитловийФонд+"-"+Формат(ВыборкаДетали.ДатаПосВис,"ДФ=""дд.ММ.гг""");
КонецЕсли;

Пример 2
ВЫБОР
КОГДА МешканцiЖитлаСрезПоследних.ВидДок=&ВидДокВис
ТОГДА МешканцiЖитлаСрезПоследних.ЖитловийФонд + МешканцiЖитлаСрезПоследних.Период
ИНАЧЕ МешканцiЖитлаСрезПоследних.ЖитловийФонд
КОНЕЦ

Обсуждение

Неизвестный
06.10.2009, 23:56
общий
Andris:
Это не ответ на вопрос, конечно. Но Вам стоит задуматься о том, чтобы поднять на сервере сервер терминалов для клиентских частей и забыть о том, что клиентские машины слабые.
Еще стоит задуматься о том, где Вы взяли слабые машины: для нормальной работы клиентской части 1с достаточно 256 Мб оперативной памяти, для конфигуратора желательно 512. У Вас меньше? И еще... загляните в типовую конфигурацию... любую... можно заметить, что в них не экономили не только на условиях в коде, но и в вызове большого количества процедур.
Еще можно подумать о 8.2.... там совсем тонкие клиенты.
Неизвестный
07.10.2009, 00:13
общий
Яна:
Терминалы возможно и выход, но пользователей около 250. Так что на один сервер всех не посадишь, по крайней мере тот что есть. А минимальные требования по оперативки у всех минимум 512. Но если жителей которые выводятся в отчет 15-20 тис., и в каждом рядку используется условие, то время формирования отчета растет. Типовые конфигурации не подойдут, поскольку эта совмещает (Учебный процесс(университет), общежитие, транспорт, типография и естественно бухгалтерия), соответственно, с специализированными документами и отчетами. Переход на 8.2 конечно вариант, но это пока не скоро..., а решение нужно сейчас.
Неизвестный
07.10.2009, 00:32
общий
Andris:
Попробуйте вместо Представление использовать Выразить
Неизвестный
07.10.2009, 06:55
общий
Яна, как бы то ни было, для 8-ки общая рекомендация - приводить все к запросам.
Это логично и существенно снижает нагрузку при выборке данных
давно
Студент
218854
56
07.10.2009, 07:00
общий
Andris:
Метод ВЫРАЗИТЬ не позволит из даты сделать строку, он используется для приведения составного типа поля запроса к одному из составляющих его типов.
Насколько я знаю в запросе нет возможности из строки и даты собрать единую строку.
Неизвестный
07.10.2009, 07:01
общий
это ответ
Здравствуйте, Andris.

К сожалению, в конкатенации (оператор "+") нельзя использовать поля разных типов.
Функция запросов "ВЫРАЗИТЬ" поможет Вам лишь в случае составного типа. Тогда будут выводиться те поля периода, которые имеют тип Строка.
Попробуйте использовать Представление с гарантированной передачей этой функции непустого параметра

Приложение:
ВЫБОР КОГДА
МешканцiЖитлаСрезПоследних.ВидДок=&ВидДокВис
ТОГДА
МешканцiЖитлаСрезПоследних.ЖитловийФонд + Представление(ЕСТЬNULL(МешканцiЖитлаСрезПоследних.Период ,""))
ИНАЧЕ
МешканцiЖитлаСрезПоследних.ЖитловийФонд
КОНЕЦ
Неизвестный
07.10.2009, 07:06
общий
Andris:
И все-таки для Вашего вопроса есть решение!

Вот оно:

http://www.forum.mista.ru/topic.php?id=388253

смотрите в самом конце обсуждения.
Неизвестный
08.10.2009, 09:50
общий
это ответ
Здравствуйте, Andris!
Попробуйте так:
ВЫБОР
КОГДА МешканцiЖитлаСрезПоследних.ВидДок=ЗНАЧЕНИЕ(Перечисление.НавчанняГуртожитокПроживання_ВидДок.виселення)
ТОГДА МешканцiЖитлаСрезПоследних.ЖитловийФонд + ВЫРАЗИТЬ(МешканцiЖитлаСрезПоследних.Период КАК СТРОКА(10))
ИНАЧЕ МешканцiЖитлаСрезПоследних.ЖитловийФонд
КОНЕЦ
Форма ответа