|
Не получается загрузить таблицу значений во временную таблицу и выполнить запрос | ☑ | ||
---|---|---|---|---|
0
ultrannge89
23.03.14
✎
19:05
|
Задача следующая: Загрузить лицевые счета из xls файла, при этом проверять есть ли такой сотрудник, работает ли он и есть ли у него уже такой лицевой счет.
ВременнаяТаблица = Новый ТаблицаЗначений; ВременнаяТаблица.Колонки.Добавить("ФИО", Новый ОписаниеТипов("Строка")); ВременнаяТаблица.Колонки.Добавить("НомерПаспорта", Новый ОписаниеТипов("Строка")); ВременнаяТаблица.Колонки.Добавить("НомерСчета", Новый ОписаниеТипов("Строка")); ВременнаяТаблица.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций")); ВременнаяТаблица.Колонки.Добавить("НомерСчетаПоДаннымИБ", Новый ОписаниеТипов("Строка")); ВременнаяТаблица.Колонки.Добавить("Уволен", Новый ОписаниеТипов("Булево")); ВременнаяТаблица.Колонки.Добавить("Банк", Новый ОписаниеТипов("СправочникСсылка.Контрагенты")); ВременнаяТаблица.Колонки.Добавить("Подразделение", Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций")); ВременнаяТаблица.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации")); ВременнаяТаблица.Колонки.Добавить("Сообщение", Новый ОписаниеТипов("Строка")); ВременнаяТаблица.Очистить(); Если ИмяЛиста <> "" Тогда Попытка Лист = Книга.WorkSheets(ИмяЛиста); КолонкаФИО = 0; КолонкаПаспорт = 0; КолонкаСчет = 0; СтрокаЗаголовка = 0; ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; Для Строка = 1 По ВсегоСтрок Цикл Для Колонка = 1 По ВсегоКолонок Цикл Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value); Если (Найти(Значение,"Фамилия, имя, отчество") > 0) Тогда КолонкаФИО = Колонка; СтрокаЗаголовка = Макс(СтрокаЗаголовка,Строка); ИначеЕсли Найти(Значение,"№ Паспорта") > 0 Тогда КолонкаПаспорт = Колонка; СтрокаЗаголовка = Макс(СтрокаЗаголовка,Строка); ИначеЕсли Найти(Значение,"№ открытого счета") > 0 Тогда КолонкаСчет = Колонка; СтрокаЗаголовка = Макс(СтрокаЗаголовка,Строка); КонецЕсли; КонецЦикла; КонецЦикла; Если КолонкаФИО * КолонкаПаспорт * КолонкаСчет = 0 Тогда Возврат; КонецЕсли; Для Строка = СтрокаЗаголовка + 1 По ВсегоСтрок Цикл Если СокрЛП(Лист.Cells(Строка,КолонкаФИО).Value) <> "" И СокрЛП(Лист.Cells(Строка,КолонкаПаспорт).Value) <> "" И СокрЛП(Лист.Cells(Строка,КолонкаСчет).Value) <> "" Тогда ВременнаяСтрока = ВременнаяТаблица.Добавить(); ВременнаяСтрока.ФИО = СокрЛП(Лист.Cells(Строка,КолонкаФИО).Value); ВременнаяСтрока.НомерПаспорта = СокрЛП(Лист.Cells(Строка,КолонкаПаспорт).Value); ВременнаяСтрока.НомерСчета = СокрЛП(Лист.Cells(Строка,КолонкаСчет).Value); КонецЕсли; КонецЦикла; Исключение КонецПопытки; Попытка Эксель.Application.Quit(); Исключение КонецПопытки; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПОДСТРОКА(Врем.ФИО, 0, 152) КАК ФИО, | ПОДСТРОКА(Врем.НомерПаспорта, 0, 29) КАК НомерПаспорта, | ПОДСТРОКА(Врем.НомерСчета, 0, 23) КАК НомерЛицевогоСчета |ПОМЕСТИТЬ ВременнаяТаблица |ИЗ | &ВТ КАК Врем |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблица.НомерЛицевогоСчета, | ВЫБОР | КОГДА ВременнаяТаблица.НомерПаспорта = ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия + "" "" + ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер | ТОГДА ЕСТЬNULL(ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо, ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)) | ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка) | КОНЕЦ КАК ФизЛицо |ПОМЕСТИТЬ ФизЛицоСПасп |ИЗ | ВременнаяТаблица КАК ВременнаяТаблица | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(, ) КАК ПаспортныеДанныеФизЛицСрезПоследних | ПО ФИОФизЛицСрезПоследних.ФизЛицо = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо | ПО (ВременнаяТаблица.ФИО = ФИОФизЛицСрезПоследних.Фамилия + "" "" + ФИОФизЛицСрезПоследних.Имя + "" "" + ФИОФизЛицСрезПоследних.Отчество) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 | ЕСТЬNULL(РаботникиОрганизацийСрезПоследних.Сотрудник, ЗНАЧЕНИЕ(Справочник.СотрудникиОрганизаций.ПустаяСсылка)) КАК Сотрудник, | ВЫБОР | КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &ТекДата | ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения | ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации | КОНЕЦ КАК Подразделение, | ЕСТЬNULL(РаботникиОрганизацийСрезПоследних.Сотрудник.ДатаПриемаНаРаботу, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПриемаНаРаботу, | ФизЛицоСПасп.НомерЛицевогоСчета |ПОМЕСТИТЬ ПоследнийСотрудник |ИЗ | ФизЛицоСПасп КАК ФизЛицоСПасп | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних( | , | Сотрудник.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1) | И Сотрудник.Физлицо <> ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)) КАК РаботникиОрганизацийСрезПоследних | ПО ФизЛицоСПасп.ФизЛицо = РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо | |УПОРЯДОЧИТЬ ПО | ДатаПриемаНаРаботу УБЫВ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЛицевыеСчетаРаботниковОрганизации.ФизЛицо КАК ФизЛицо, | ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета КАК НомерЛицевогоСчета, | ПоследнийСотрудник.Подразделение, | ЛицевыеСчетаРаботниковОрганизации.Организация, | ЛицевыеСчетаРаботниковОрганизации.Банк |ПОМЕСТИТЬ ОбщииеСчета |ИЗ | ПоследнийСотрудник КАК ПоследнийСотрудник | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации | ПО (ВЫБОР | КОГДА ПоследнийСотрудник.Сотрудник.Физлицо = ЛицевыеСчетаРаботниковОрганизации.ФизЛицо | И ПоследнийСотрудник.НомерЛицевогоСчета = ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ит_ВыпущенныеЗарплатныеКарты.ФизЛицо, | ит_ВыпущенныеЗарплатныеКарты.НомерЛицевогоСчета, | ОбщииеСчета.Подразделение, | ит_ВыпущенныеЗарплатныеКарты.Организация, | ит_ВыпущенныеЗарплатныеКарты.Банк |ПОМЕСТИТЬ СвинокомплексСчета |ИЗ | ОбщииеСчета КАК ОбщииеСчета | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ит_ВыпущенныеЗарплатныеКарты КАК ит_ВыпущенныеЗарплатныеКарты | ПО (ВЫБОР | КОГДА ОбщииеСчета.Подразделение = &ПодразделениеСвинокомплекс | И ОбщииеСчета.ФизЛицо = ит_ВыпущенныеЗарплатныеКарты.ФизЛицо | И ОбщииеСчета.НомерЛицевогоСчета = ит_ВыпущенныеЗарплатныеКарты.НомерЛицевогоСчета | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОбщииеСчета.ФизЛицо, | ОбщииеСчета.НомерЛицевогоСчета, | ОбщииеСчета.Подразделение, | ОбщииеСчета.Организация, | ОбщииеСчета.Банк |ИЗ | ОбщииеСчета КАК ОбщииеСчета | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | СвинокомплексСчета.ФизЛицо, | СвинокомплексСчета.НомерЛицевогоСчета, | СвинокомплексСчета.Подразделение, | СвинокомплексСчета.Организация, | СвинокомплексСчета.Банк |ИЗ | СвинокомплексСчета КАК СвинокомплексСчета"; Запрос.УстановитьПараметр("ВТ", ВременнаяТаблица); Запрос.УстановитьПараметр("ПодразделениеСвинокомплекс", Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Справочники.ит_Константы.ПодразделениеСвинокомплекс)); Запрос.УстановитьПараметр("ТекДата", ТекущаяДата()); МассивРезультатов = Запрос.ВыполнитьПакет(); Результат = Запрос.Выполнить().Выгрузить(); |
|||
1
ultrannge89
23.03.14
✎
19:07
|
В принципе лучше посоветуйте какую-нибудь обработку, в которой можно посмотреть код, желательно из ЗУПа или УПП.
|
|||
2
shuhard
23.03.14
✎
19:09
|
(0)[ Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Справочники.ит_Константы.ПодразделениеСвинокомплекс)]
финиш полный |
|||
3
Zmich
23.03.14
✎
19:10
|
(0). Эту строчку надо добавить:
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; |
|||
4
France
23.03.14
✎
19:24
|
(1) да и без принципа достаточно использовать универсальную обработку загрузки из табличного документа..
|
|||
5
ultrannge89
23.03.14
✎
19:28
|
(2) Самое смешное что это финиш не я придумал, по тз вся ссылочная информация должна иметь возможность редактироваться из пользовательского интерфейса без изменения конфигураций. А то мало ли вдруг решат переименовать подразделение.
|
|||
6
ultrannge89
23.03.14
✎
19:30
|
Когда я гружу из табличного документа данные, они типизированы как строка неограниченной длины?
|
|||
7
AlexITGround
23.03.14
✎
19:32
|
(6) тебе в 3 уже подсказали, создаешь менеджер ВТ, параметром в запрос и работаешь
|
|||
8
ultrannge89
23.03.14
✎
19:34
|
Ладно спасибо. Буду пытать.
|
|||
9
France
23.03.14
✎
19:35
|
(6) можно расшифровать, а то чо т не врубился..
|
|||
10
shuhard
23.03.14
✎
19:36
|
(5)[Справочники.ит_Константы.ПодразделениеСвинокомплекс]
вот ЭТО ни когда ни чего не вернёт |
|||
11
KarpovDeniska
23.03.14
✎
20:47
|
+ непонятно зачем здесь менеджер временных таблиц, без него все неплохо работает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |