|
Загрузить в РегистрСведений из Эксель | ☑ | ||
---|---|---|---|---|
0
dft2014
16.05.14
✎
13:00
|
Загружаю из Эксель данные в регистр сведений "Заметки" (это в ЗУП). Файл состоит из трех колонок:
- ФИО - Номер - Дата Все загружается, кроме измерения "Дата" в этом регистре (данные должны браться из Эксель, из столбца "Дата"). Подскажите, где ошибка, вот код: Процедура КнопкаВыполнитьНажатие(Кнопка) Если Не ЗначениеЗаполнено(ИмяФайлаДляЗагр) Тогда Сообщить("Не выбран файл!"); Возврат; КонецЕсли; СодержимоеФайла = ПолучитьСодержимоеФайла(ИмяФайлаДляЗагр); Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда Сообщить("Ошибка считывания содержимого файла " + ИмяФайлаДляЗагр); Возврат; КонецЕсли; Если Не ЗаписатьЛС(СодержимоеФайла) Тогда Сообщить("Ошибка при попытке записи ЛС!"); Возврат; КонецЕсли; Сообщить("Данные загружены!"); КонецПроцедуры Функция ПолучитьСодержимоеФайла(ИмяФайлаДляЗагр) ВозврМассив = Новый Массив; МассивСтр = Новый Массив; ТаблЗнач = Новый ТаблицаЗначений; ТаблЗнач.Очистить(); ТаблЗнач.Колонки.Добавить("ФИО"); ТаблЗнач.Колонки.Добавить("НомерАД"); ТаблЗнач.Колонки.Добавить("ДатаАД"); // Excel Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ИмяФайлаДляЗагр); РабЛист = Excel.Worksheets(1); РабЛист.Activate(); ОбщКолво = ПоследняяСтрока - ПерваяСтрока + 1; счСтр = ПерваяСтрока; Пока счСтр <= ПоследняяСтрока Цикл ТекСтрДанных = Новый Массив; новСтр = ТаблЗнач.Добавить(); ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаФИО).Value); ТекСтрДанных.Добавить(ЗначениеДанных); новСтр[0] = ЗначениеДанных; ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаНомерАД).Value); ТекСтрДанных.Добавить(ЗначениеДанных); новСтр[1] = ЗначениеДанных; ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаДатаАД).Value); ТекСтрДанных.Добавить(ЗначениеДанных); новСтр[2] = ЗначениеДанных; МассивСтр.Добавить(ТекСтрДанных); счСтр = счСтр + 1; КонецЦикла; Excel.Quit(); Excel = 0; Возврат МассивСтр; Исключение Сообщить(ОписаниеОшибки()); Возврат ВозврМассив; КонецПопытки; КонецФункции Функция ЗаписатьЛС(ТаблМас) ТаблНом = Новый ТаблицаЗначений; ТаблНом.Очистить(); ТаблНом.Колонки.Добавить("ФИО"); ТаблНом.Колонки.Добавить("НомерАД"); ТаблНом.Колонки.Добавить("ДатаАД"); ОбщКолво = ТаблМас.Количество(); Для сч1 = 0 По ТаблМас.Количество() - 1 Цикл СтрТаблНом = ТаблНом.Добавить(); Для сч2 = 0 По 1 Цикл СтрТаблНом[сч2] = ТаблМас[сч1][сч2]; КонецЦикла; КонецЦикла; ОбщКолво = ТаблНом.Количество(); Для Каждого стрНом Из ТаблНом Цикл ВидЗ = Справочники.ВидыЗаметок.НайтиПоНаименованию("договор"); Если НЕ ВидЗ.Пустая() Тогда ВидЗаметки = ВидЗ.Ссылка; з=Новый Запрос; з.Текст= "ВЫБРАТЬ | Заметки.Дата, | Заметки.Объект, | Заметки.ВидЗаметки |ИЗ | РегистрСведений.Заметки КАК Заметки |ГДЕ | Заметки.Объект = &ФЛ | И Заметки.ВидЗаметки = &Вид"; з.УстановитьПараметр("ФЛ",стрНом.ФИО); з.УстановитьПараметр("Вид", ВидЗаметки); ТаблРез = З.Выполнить().Выгрузить(); ТаблРезКол = ТаблРез.Количество(); Если ТаблРезКол = 0 Тогда Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | ФизическиеЛица.Ссылка |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица |ГДЕ | ФизическиеЛица.Наименование = &ФИО" ; Запрос.УстановитьПараметр("ФИО", стрНом.ФИО); ТаблФИО = Запрос.Выполнить().Выгрузить(); ТаблФИОКол = ТаблФИО.Количество(); Если ТаблФИОКол = 0 Тогда Сообщить("Не найден сотрудник " + стрНом.ФИО); Продолжить; ИначеЕсли ТаблФИОКол > 1 Тогда Сообщить("Не уникален сотрудник " + стрНом.ФИО); Продолжить; КонецЕсли; ЗаписьРС = РегистрыСведений.Заметки.СоздатьМенеджерЗаписи(); ЗаписьРС.Дата = стрНом.ДатаАД; // вот эта дата не подгружается ЗаписьРС.Объект = ТаблФИО[0].Ссылка; // ЗаписьРС.Автор = ; ЗаписьРС.Содержание = стрНом.НомерАД; ЗаписьРС.ВидЗаметки = ВидЗаметки; ЗаписьРС.Записать(); КонецЕсли; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции |
|||
1
dft2014
16.05.14
✎
13:02
|
+(0) Есть у меня подозрение, что неправильно написала в начале функции ЗаписатьЛС(), возможно, столбец с датой не видит... Вот:
Функция ЗаписатьЛС(ТаблМас) ТаблНом = Новый ТаблицаЗначений; ТаблНом.Очистить(); ТаблНом.Колонки.Добавить("ФИО"); ТаблНом.Колонки.Добавить("НомерАД"); ТаблНом.Колонки.Добавить("ДатаАД"); ОбщКолво = ТаблМас.Количество(); Для сч1 = 0 По ТаблМас.Количество() - 1 Цикл СтрТаблНом = ТаблНом.Добавить(); Для сч2 = 0 По 1 Цикл СтрТаблНом[сч2] = ТаблМас[сч1][сч2]; КонецЦикла; КонецЦикла; ОбщКолво = ТаблНом.Количество(); |
|||
2
dft2014
16.05.14
✎
13:03
|
Запуталась с массивом и ТЗ...
Помогите!!! |
|||
3
mexanik_96
16.05.14
✎
13:19
|
стрНом.ДатаАД какой тип? строка?
|
|||
4
Gogger
16.05.14
✎
13:20
|
А зачем делать такую загрузку ректально газовой горелкой?
Есть прекрасная типовая обработка "Загрузка данных из табличного документа". Воспользуйтесь ей. |
|||
5
mexanik_96
16.05.14
✎
13:26
|
религия она такая ))
|
|||
6
dft2014
16.05.14
✎
13:46
|
(4) Пробовал типовой: она перезаписывает, а мне надо добавлять, чтобы у сотрудника было несколько заметок. Поэтому и пишу свою обработку.
|
|||
7
dft2014
16.05.14
✎
13:47
|
(3) Не прописывала. В Эксель-файле она тип "дата": 12.03.2014 например
|
|||
8
mexanik_96
16.05.14
✎
14:01
|
в 1с стрНом.ДатаАД какой тип?
|
|||
9
dft2014
16.05.14
✎
14:01
|
Ап!
|
|||
10
dft2014
16.05.14
✎
14:02
|
Комп глючит! В отладку не заходит (((
|
|||
11
mexanik_96
16.05.14
✎
14:03
|
типзнч(стрНом.ДатаАД) что там?
|
|||
12
dft2014
16.05.14
✎
14:05
|
сейчас...
|
|||
13
Gogger
16.05.14
✎
14:06
|
(6) у типовой есть настройки, в том числе и те, которые регулируют - перезаписывать, или добавлять...
|
|||
14
dft2014
16.05.14
✎
14:07
|
(8), (11) "Не определено" пишет через Сообщить(ТипЗнч(стрНом.ДатаАД));
|
|||
15
dft2014
16.05.14
✎
14:08
|
(13) типовая мне не подходит, речь здесь не о ней...
|
|||
16
mexanik_96
16.05.14
✎
14:10
|
Что здесь ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаДатаАД).Value)?
|
|||
17
Aleks73
16.05.14
✎
14:13
|
ТС, весь эльфокод не читал, попробуй отладчик.
|
|||
18
dft2014
16.05.14
✎
14:14
|
(17) отладчик не запускается, см.(10), уже и комп перегружала...
|
|||
19
dft2014
16.05.14
✎
14:18
|
(16) Написала:
ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаФИО).Value); //сотрудник Сообщить(ЗначениеДанных + " *0 "); ТекСтрДанных.Добавить(ЗначениеДанных); новСтр[0] = ЗначениеДанных; ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаНомерАД).Value); //номер ЛС Сообщить(ЗначениеДанных + " *1 "); ТекСтрДанных.Добавить(ЗначениеДанных); новСтр[1] = ЗначениеДанных; ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаДатаАД).Value); //номер ЛС Сообщить(ЗначениеДанных + " *2 "); ТекСтрДанных.Добавить(ЗначениеДанных); новСтр[2] = ЗначениеДанных; Выводит: Кузнецов Артем Алексеевич *0 2 *1 12.03.2014 0:00:00 *2 |
|||
20
Aleks73
16.05.14
✎
14:19
|
хорошо тогда попробуй так
дт = СокрЛП(Эксель.ActiveSheet.Cells(к,8).Value); если дт <> "" тогда дт = лев(дт,10); ПОПЫТКА новдог.Дата = дата(число(ПРАВ(дт,4)),число(ЛЕВ(ПРАВ(дт,7),2)),лев(дт,2)); исключение //сообщить("Не удалось ДАТА" + СокрЛП(Эксель.ActiveSheet.Cells(к,8).Value) + " на строке "+ к); конецпопытки ; конецесли; |
|||
21
Aleks73
16.05.14
✎
14:20
|
это конечно если время ставить начало дня
|
|||
22
dft2014
16.05.14
✎
14:23
|
Я думаю ошибка в том, что изначально, в коде было только две колонки и все грузилось отлично, затем я добавила колонку ДатаАД и она не грузится:
ТаблНом.Колонки.Добавить("ФИО"); ТаблНом.Колонки.Добавить("НомерАД"); ТаблНом.Колонки.Добавить("ДатаАД"); //это я добавила Вероятно, надо поменять что-то здесь, т.к. это для двух колонок - срабатывает, а если три колонки, то нет: ОбщКолво = ТаблМас.Количество(); Для сч1 = 0 По ТаблМас.Количество() - 1 Цикл СтрТаблНом = ТаблНом.Добавить(); Для сч2 = 0 По 1 Цикл СтрТаблНом[сч2] = ТаблМас[сч1][сч2]; КонецЦикла; КонецЦикла; ОбщКолво = ТаблНом.Количество(); Для Каждого стрНом Из ТаблНом Цикл |
|||
23
dft2014
16.05.14
✎
14:24
|
(20) это куда вставлять?
|
|||
24
Aleks73
16.05.14
✎
14:25
|
(23) это нужно творчески переработать.
|
|||
25
mexanik_96
16.05.14
✎
14:29
|
Функция ПолучитьСодержимоеФайла(ИмяФайлаДляЗагр)
ТаблЗнач = Новый ТаблицаЗначений; ТаблЗнач.Колонки.Добавить("ФИО"); ТаблЗнач.Колонки.Добавить("НомерАД"); ТаблЗнач.Колонки.Добавить("ДатаАД"); Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ИмяФайлаДляЗагр); РабЛист = Excel.Worksheets(1); РабЛист.Activate(); ОбщКолво = ПоследняяСтрока - ПерваяСтрока + 1; счСтр = ПерваяСтрока; Пока счСтр <= ПоследняяСтрока Цикл новСтр = ТаблЗнач.Добавить(); ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаФИО).Value); новСтр.ФИО = ЗначениеДанных; ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаНомерАД).Value); новСтр.НомерАД = ЗначениеДанных; ЗначениеДанных = НормСтрокаВыгр(РабЛист.Cells(счСтр, КолонкаДатаАД).Value); новСтр.ДатаАД = ЗначениеДанных; счСтр = счСтр + 1; КонецЦикла; Excel.Quit(); Excel = 0; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Возврат ТаблЗнач; КонецФункции Функция ЗаписатьЛС(ТаблМас) ТаблМас = ТаблНом.Количество(); Для Каждого стрНом Из ТаблМас Цикл ВидЗ = Справочники.ВидыЗаметок.НайтиПоНаименованию("договор"); Если НЕ ВидЗ.Пустая() Тогда ВидЗаметки = ВидЗ.Ссылка; з=Новый Запрос; з.Текст= "ВЫБРАТЬ | Заметки.Дата, | Заметки.Объект, | Заметки.ВидЗаметки |ИЗ | РегистрСведений.Заметки КАК Заметки |ГДЕ | Заметки.Объект = &ФЛ | И Заметки.ВидЗаметки = &Вид"; з.УстановитьПараметр("ФЛ",стрНом.ФИО); з.УстановитьПараметр("Вид", ВидЗаметки); ТаблРез = З.Выполнить().Выгрузить(); ТаблРезКол = ТаблРез.Количество(); Если ТаблРезКол = 0 Тогда Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | ФизическиеЛица.Ссылка |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица |ГДЕ | ФизическиеЛица.Наименование = &ФИО" ; Запрос.УстановитьПараметр("ФИО", стрНом.ФИО); ТаблФИО = Запрос.Выполнить().Выгрузить(); ТаблФИОКол = ТаблФИО.Количество(); Если ТаблФИОКол = 0 Тогда Сообщить("Не найден сотрудник " + стрНом.ФИО); Продолжить; ИначеЕсли ТаблФИОКол > 1 Тогда Сообщить("Не уникален сотрудник " + стрНом.ФИО); Продолжить; КонецЕсли; ЗаписьРС = РегистрыСведений.Заметки.СоздатьМенеджерЗаписи(); Рег = РегистрыСведений.Ассортимент.СоздатьМенеджерЗаписи(); ЗаписьРС.Дата = стрНом.ДатаАД; // вот эта дата не подгружается ЗаписьРС.Объект = ТаблФИО[0].Ссылка; // ЗаписьРС.Автор = ; ЗаписьРС.Содержание = стрНом.НомерАД; ЗаписьРС.ВидЗаметки = ВидЗаметки; ЗаписьРС.Записать(); КонецЕсли; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции |
|||
26
dft2014
16.05.14
✎
15:37
|
(25) Выдал ошибку:
{Форма.Форма.Форма(341)}: Итератор для значения не определен Для Каждого стрНом Из ТаблМас Цикл |
|||
27
ДенисЧ
16.05.14
✎
15:38
|
ТаблМас = ТаблНом.Количество();
Для Каждого стрНом Из ТаблМас Цикл facepalm.png |
|||
28
dft2014
16.05.14
✎
15:42
|
(25), (27) Пишет ошибку еще только при синтаксич.контроле:
{Форма.Форма.Форма(339,11)}: Переменная не определена (ТаблНом) ТаблМас = <<?>>ТаблНом.Количество(); |
|||
29
dft2014
16.05.14
✎
16:07
|
Разобралась!
mexanik_96 - СПАСИБО!!! *) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |