|
Загрузка таблицы значений во временную таблицу и дальнейшие манипуляции с ней | ☑ | ||
---|---|---|---|---|
0
ultrannge89
24.03.14
✎
13:00
|
Вот этот кусок, полностью работает:
Запрос = Новый Запрос; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | ПОДСТРОКА(ТаблицаЗначений.ФИО, 0, 100) КАК ФИО, | ПОДСТРОКА(ТаблицаЗначений.НомерПаспорта, 0, 29) КАК НомерПаспорта, | ПОДСТРОКА(ТаблицаЗначений.НомерСчета, 0, 23) КАК НомерЛицевогоСчета |ПОМЕСТИТЬ ВременнаяТаблица1 |ИЗ | &ВТ КАК ТаблицаЗначений |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблица1.ФИО, | ВременнаяТаблица1.НомерПаспорта, | ВременнаяТаблица1.НомерЛицевогоСчета |ИЗ | ВременнаяТаблица1 КАК ВременнаяТаблица1"; Запрос.УстановитьПараметр("ВТ", ВременнаяТаблица); Результат = Запрос.Выполнить().Выгрузить(); Но если я пытаюсь поместить данные в виртуальную таблицу, то результат становится пустым. Как мне обойти данное ограничение? Распиливать запрос на два не очень хочется, или может можно заранее подготовить дынные во временной таблице и соединить его с данным запросом? |
|||
1
cw014
24.03.14
✎
13:00
|
Не совсем понял, чего ты хочешь
|
|||
2
vicof
24.03.14
✎
13:02
|
"Поместить данные в виртуальную таблицу?" 0_о
|
|||
3
Cube
24.03.14
✎
13:02
|
(0) А так?
Запрос = Новый Запрос; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | ТаблицаЗначений.ФИО КАК ФИО, | ТаблицаЗначений.НомерПаспорта КАК НомерПаспорта, | ТаблицаЗначений.НомерСчета КАК НомерЛицевогоСчета |ПОМЕСТИТЬ ВременнаяТаблица1 |ИЗ | &ВТ КАК ТаблицаЗначений |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблица1.ФИО, | ВременнаяТаблица1.НомерПаспорта, | ВременнаяТаблица1.НомерЛицевогоСчета |ИЗ | ВременнаяТаблица1 КАК ВременнаяТаблица1"; Запрос.УстановитьПараметр("ВТ", ВременнаяТаблица); Результат = Запрос.Выполнить().Выгрузить(); |
|||
4
Cube
24.03.14
✎
13:03
|
(0) И это лишнее:
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; |
|||
5
Полька
24.03.14
✎
13:04
|
|ВЫБРАТЬ
| ВременнаяТаблица1.ФИО, | ВременнаяТаблица1.НомерПаспорта, | ВременнаяТаблица1.НомерЛицевогоСчета |ИЗ | ВременнаяТаблица1 КАК ВременнаяТаблица1"; а это вообще зачем? сразу в Результат выгрузить и выбирать не? |
|||
6
Ненавижу 1С
гуру
24.03.14
✎
13:04
|
ПОДСТРОКА начинается не с 0, а с 1
|
|||
7
cw014
24.03.14
✎
13:09
|
На сколько я помню - виртуальные таблицы - это "РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки"
Зачем в них что-то еще и помещать, тем более в запросе? |
|||
8
ultrannge89
24.03.14
✎
13:22
|
О чем вы? Я хочу приведенный запрос соединить с условной виртуальной таблицей в которой хочу проверить, есть ли у такого ФИО физлицо, совпадает ли номер паспорта, работает ли такой сотрудник, в каком подразделении он работает.
|
|||
9
Molinor
24.03.14
✎
13:23
|
(8) Покажи как делаешь.
|
|||
10
ultrannge89
24.03.14
✎
13:24
|
(7) Виртуальные таблицы могут быть и условной выборкой, виртуальная таблица, это таблица расположенная в оперативной памяти, над которой я хочу совершить некоторые манипуляции
|
|||
11
ultrannge89
24.03.14
✎
13:25
|
ВЫБРАТЬ
ФИОФизЛицСрезПоследних.Фамилия + " " + ФИОФизЛицСрезПоследних.Имя + " " + ФИОФизЛицСрезПоследних.Отчество КАК ФИО, ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия + " " + ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер КАК СерияНомер, ВЫБОР КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &ТекДата ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КОНЕЦ КАК Подразделение, ЕСТЬNULL(ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета, "") КАК НомерЛицевогоСчета, ФИОФизЛицСрезПоследних.ФизЛицо ПОМЕСТИТЬ Информация ИЗ РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних КАК ПаспортныеДанныеФизЛицСрезПоследних ПО ФИОФизЛицСрезПоследних.ФизЛицо = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних( , ВЫБОР КОГДА ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) И ПериодЗавершения <= &ТекДата И ПодразделениеОрганизацииЗавершения <> &УволенныеКорректировка ИЛИ ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1) И ПодразделениеОрганизации <> &УволенныеКорректировка ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК РаботникиОрганизацийСрезПоследних ПО ФИОФизЛицСрезПоследних.ФизЛицо = РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации ПО ФИОФизЛицСрезПоследних.ФизЛицо = ЛицевыеСчетаРаботниковОрганизации.ФизЛицо ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Информация.ФизЛицо, ит_ВыпущенныеЗарплатныеКарты.НомерЛицевогоСчета КАК ЛицевыеСчетаСвино, ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета КАК ЛицевыеСчетаОбщие ПОМЕСТИТЬ ЛицевыеСчета ИЗ Информация КАК Информация ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ит_ВыпущенныеЗарплатныеКарты КАК ит_ВыпущенныеЗарплатныеКарты ПО (Информация.Подразделение <> &ПлощадкаСвино) И Информация.ФизЛицо = ит_ВыпущенныеЗарплатныеКарты.ФизЛицо ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации ПО Информация.ФизЛицо = ЛицевыеСчетаРаботниковОрганизации.ФизЛицо |
|||
12
ultrannge89
24.03.14
✎
13:26
|
Примерно такую хочу соединить с первой.
|
|||
13
ultrannge89
24.03.14
✎
13:28
|
Я просто несколько раз пробовал делать через консоль, 100% если сохранять во временную таблицу первый запрос, по средствам "ПОМЕСТИТЬ ВремТабл", то потом результат получается пустой, видимо это ограничение платформы.
|
|||
14
MrStomak
24.03.14
✎
13:28
|
(10) Тебе следует ознакомиться с базовыми понятиями. Виртуальная таблица - это таблица в конструкторе запросов, которой физически не существует.
Смысл термина "виртуальность" как бы намекает на это. Временная таблица - это термин sql, обозначает физически создаваемую в бд таблицу, заполненную нужными тебе данными, для всяческих манипуляций. |
|||
15
vicof
24.03.14
✎
13:28
|
"КАК ЛицевыеСчетаСвино"
в банке работаешь? |
|||
16
MrStomak
24.03.14
✎
13:29
|
(13) Если в запросе есть Поместить, то он тебе не показывает результат.
|
|||
17
vicof
24.03.14
✎
13:30
|
"Я просто несколько раз пробовал делать через консоль, 100% если сохранять во временную таблицу первый запрос, по средствам "ПОМЕСТИТЬ ВремТабл", то потом результат получается пустой, видимо это ограничение платформы."
Это ограничение рук. |
|||
18
Molinor
24.03.14
✎
13:30
|
Ты дальше со временной таблицей "ЛицевыеСчета" работаешь?
Если нет, то просто убери "ПОМЕСТИТЬ ЛицевыеСчета" |
|||
19
ultrannge89
24.03.14
✎
13:31
|
(15) Нет, делаю обработку по загрузке лицевых счетов и учету их в программе, просто у нас несколько подразделений и надо чтобы бух сначала отмечал какие карты сотрудник получил на руки а затем уже эти счета шли в реальный регистр ЛицевыеСчета. Данный алгоритм должен действовать лишь для некоторых подразделений, типа СвиноПодразделения :)
|
|||
20
ultrannge89
24.03.14
✎
13:33
|
(18) Да, мне еще дальше нужно с ним работать. Это только кусок кода. Про руки соглашусь, опыт еще мало.
|
|||
21
Molinor
24.03.14
✎
13:36
|
Давай полный текст запроса, который ничего не показывает.
|
|||
22
ultrannge89
24.03.14
✎
13:39
|
Ок, минут 15.
|
|||
23
Molinor
24.03.14
✎
13:40
|
(22) Ну а вообще тебе уже сказали:
"(13) Если в запросе есть Поместить, то он тебе не показывает результат." |
|||
24
ultrannge89
24.03.14
✎
13:50
|
Все работает вот так:
Запрос = Новый Запрос; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | ПОДСТРОКА(ТаблицаЗначений.ФИО, 0, 100) КАК ФИО, | ПОДСТРОКА(ТаблицаЗначений.НомерПаспорта, 0, 29) КАК НомерПаспорта, | ПОДСТРОКА(ТаблицаЗначений.НомерСчета, 0, 23) КАК НомерЛицевогоСчета |ПОМЕСТИТЬ ВременнаяТаблица |ИЗ | &ВТ КАК ТаблицаЗначений |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ФИОФизЛицСрезПоследних.Фамилия + "" "" + ФИОФизЛицСрезПоследних.Имя + "" "" + ФИОФизЛицСрезПоследних.Отчество КАК ФИО, | ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия + "" "" + ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер КАК СерияНомер, | ВЫБОР | КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &ТекДата | ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения | ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации | КОНЕЦ КАК Подразделение, | ЕСТЬNULL(ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета, """") КАК НомерЛицевогоСчета, | ФИОФизЛицСрезПоследних.ФизЛицо, | РаботникиОрганизацийСрезПоследних.Сотрудник |ПОМЕСТИТЬ Информация |ИЗ | РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних КАК ПаспортныеДанныеФизЛицСрезПоследних | ПО ФИОФизЛицСрезПоследних.ФизЛицо = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних( | , | ВЫБОР | КОГДА ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И ПериодЗавершения <= &ТекДата | И ПодразделениеОрганизацииЗавершения <> &УволенныеКорректировка | ИЛИ ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1) | И ПодразделениеОрганизации <> &УволенныеКорректировка | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ) КАК РаботникиОрганизацийСрезПоследних | ПО ФИОФизЛицСрезПоследних.ФизЛицо = РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации | ПО ФИОФизЛицСрезПоследних.ФизЛицо = ЛицевыеСчетаРаботниковОрганизации.ФизЛицо |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Информация.ФизЛицо, | ит_ВыпущенныеЗарплатныеКарты.НомерЛицевогоСчета КАК ЛицевыеСчетаСвино, | ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета КАК ЛицевыеСчетаОбщие, | Информация.СерияНомер, | Информация.Подразделение, | Информация.НомерЛицевогоСчета, | Информация.Сотрудник, | Информация.ФИО |ПОМЕСТИТЬ ЛицевыеСчета |ИЗ | Информация КАК Информация | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ит_ВыпущенныеЗарплатныеКарты КАК ит_ВыпущенныеЗарплатныеКарты | ПО (Информация.Подразделение <> &ПлощадкаСвино) | И Информация.ФизЛицо = ит_ВыпущенныеЗарплатныеКарты.ФизЛицо | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации | ПО Информация.ФизЛицо = ЛицевыеСчетаРаботниковОрганизации.ФизЛицо |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблица.НомерПаспорта, | ЛицевыеСчета.СерияНомер, | ВременнаяТаблица.НомерЛицевогоСчета, | ЛицевыеСчета.ЛицевыеСчетаОбщие, | ЛицевыеСчета.ЛицевыеСчетаСвино, | ЛицевыеСчета.Сотрудник, | ЛицевыеСчета.Подразделение, | ВременнаяТаблица.ФИО |ИЗ | ВременнаяТаблица КАК ВременнаяТаблица | ЛЕВОЕ СОЕДИНЕНИЕ ЛицевыеСчета КАК ЛицевыеСчета | ПО ВременнаяТаблица.ФИО = ЛицевыеСчета.ФИО"; Запрос.УстановитьПараметр("ВТ", ВременнаяТаблица); Запрос.УстановитьПараметр("ТекДата", ТекущаяДата()); Запрос.УстановитьПараметр("УволенныеКорректировка", Справочники.ПодразделенияОрганизаций.НайтиПоКоду("ок000225 ")); Запрос.УстановитьПараметр("ПлощадкаСвино", Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000042")); Результат = Запрос.Выполнить().Выгрузить(); |
|||
25
ultrannge89
24.03.14
✎
13:58
|
Теперь осталось пройтись в цикле с условиями по результату запроса и в зависимости от условия записать набор записей в нужный регистр. С этим я думаю справлюсь.
Может подскажите какую-нибудь книгу по тонкостям запросов? А то ЗУП меня скоро в могилу сведет. Есть задачка, в ней надо кое что в расчете НДФЛ подправить. У меня мозг взывается при виде этого запроса. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |