| 
    
        
     
     | 
    
    
  | 
Загрузка таблицы значений во временную таблицу и дальнейшие манипуляции с ней | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        Теперь осталось пройтись в цикле с условиями по результату запроса и в зависимости от условия записать набор записей в нужный регистр. С этим я думаю справлюсь.
 
        Может подскажите какую-нибудь книгу по тонкостям запросов? А то ЗУП меня скоро в могилу сведет. Есть задачка, в ней надо кое что в расчете НДФЛ подправить. У меня мозг взывается при виде этого запроса.  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |