Имя: Пароль:
1C
1С v8
Загрузка таблицы значений во временную таблицу и дальнейшие манипуляции с ней
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
Теперь осталось пройтись в цикле с условиями по результату запроса и в зависимости от условия записать набор записей в нужный регистр. С этим я думаю справлюсь.

Может подскажите какую-нибудь книгу по тонкостям запросов? А то ЗУП меня скоро в могилу сведет. Есть задачка, в ней надо кое что в расчете НДФЛ подправить. У меня мозг взывается при виде этого запроса.