|
Как работать с данными, загруженными в ТЗ на форму обработки | ☑ | ||
---|---|---|---|---|
0
dft2014
22.04.14
✎
11:44
|
Пишу внешнюю обработку по загрузке данных из Эксель. На форме обработки разместила ТабличноеПоле имя-"Таблица" (тип - таблица значений). Сначала, по кнопке Прочитать, данные из Эксель попадают в это табличное поле, вот процедура:
Процедура ПрочитатьНажатие(Элемент) //очищаем таблицу и удаляем колонки Таблица.Очистить(); Таблица.Колонки.Очистить(); ЭлементыФормы.Таблица.Колонки.Очистить(); //подключаемся к эксел Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ИмяФайла); Excel.Sheets(1).Select(); // лист 1, по умолчанию ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row; ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column; //считываем первую строку и генерируем колонки Сч = 1; Пока ЗначениеЗаполнено(Excel.Cells(1, Сч).Text) Цикл ИмяКолонки = Excel.Cells(1, Сч).Text; ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ",""); // убираем из имени колонок пробелы Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки); НоваяКолонка = ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяКолонки); НоваяКолонка.Данные = ИмяБезПробелов; Сч = Сч + 1; КонецЦикла; Для НС = 2 по ФайлСтрок Цикл // НС указываем с какой строки начинать обработку НоваяСтрока = Таблица.Добавить(); Для НомерКолонки = 1 по Таблица.Колонки.Количество() Цикл //заполняем строку значениями ТекущееЗначение = Excel.Cells(НС, НомерКолонки).Text; ИмяКолонки = Таблица.Колонки[НомерКолонки-1].Имя; НоваяСтрока[ИмяКолонки] = ТекущееЗначение; КонецЦикла; КонецЦикла; КонецПроцедуры А как теперь мне обрабатывать эти данные на форме. Вопрос, как? Пишу: |
|||
1
dft2014
22.04.14
✎
12:03
|
+(0) Т.е. мне надо теперь перебрать все строчки ТЗ и загрузить их в справочник. Для этого создала новую кнопку, процедура в ней:
Процедура ЗагрузитьНажатие(Элемент) Для Каждого Стр Из Таблица Цикл КонецЦикла; КонецПроцедуры Как теперь обратиться к каждой строчке каждого столбца? |
|||
2
DmitriyDI
22.04.14
✎
12:05
|
Стр точка имя стобца или Стр[номерстолбца]
|
|||
3
Люблю_УПП
22.04.14
✎
12:05
|
сначала На клиенте заполняешь Таблицу ту что на форму вставил.
Потом передаешь ее на Сервер и записываешь в справочник данные |
|||
4
Люблю_УПП
22.04.14
✎
12:06
|
8.3? или 8.2?
|
|||
5
Fram
22.04.14
✎
12:08
|
(2) ИндексСтолбца
|
|||
6
Люблю_УПП
22.04.14
✎
12:09
|
выгрузи Таблицу в ТаблицуЗначение.
Типо ТЗ = Новый ТаблицаЗначений; Тз.Загрузить(ТвояТаблицаСФормы) или ТвояТаблицаСФормы.ВЫгрузить(ТЗ); |
|||
7
Люблю_УПП
22.04.14
✎
12:10
|
а дальше уже работай с таблицей значений
|
|||
8
dft2014
22.04.14
✎
12:11
|
(3), (4) Платформа 8.2, ЗУП. Загружаю из Эксель в спр.ФЛ
|
|||
9
Адинэснег
22.04.14
✎
12:12
|
Процедура ЗагрузитьНажатие(Элемент)
Для Каждого Стр Из Таблица Цикл Для Каждого Кол Из Таблица.Колонки Цикл Сообщить (Кол.Имя + Стр[Кол.Имя]); КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
10
dft2014
22.04.14
✎
12:12
|
(6) У меня ТабличноеПоле изначально имеет тип таблица значений.
(7) Как? |
|||
11
Люблю_УПП
22.04.14
✎
12:13
|
(8) тогда выгружай Таблицу из формы в Таблицу значений и дальше уше с ней работай. наверное самый простой вариант
|
|||
12
Люблю_УПП
22.04.14
✎
12:14
|
Процедура ЗагрузитьНажатие(Элемент)
ТЗ = Новый ТаблицаЗначений; Тз.Загрузить(ТвояТаблицаСФормы); Для Каждого Стр Из ТЗ Цикл Сотрудник = Стр.Сотрудник; // КонецЦикла; КонецПроцедуры |
|||
13
Адинэснег
22.04.14
✎
12:15
|
(10)ТабличноеПоле изначально имеет тип ТабличноеПоле
а вот данные ТабличноеПоле может и таблица значений :) |
|||
14
Люблю_УПП
22.04.14
✎
12:15
|
какие там у тебя колонки в таблице?
|
|||
15
dft2014
22.04.14
✎
12:22
|
(13), (14) Вот ТабличноеПоле (тип-ТЗ), колонок нет, сюда грузятся данные из Эксель: http://s018.radikal.ru/i515/1404/69/fc3290574797.jpg
|
|||
16
Люблю_УПП
22.04.14
✎
12:26
|
(15) Попробуй
Для каждого СтрокаТЗ из ТабличноеПоле цикл Сообщить(СтрокаТЗ.(Название)); КонецЦикла; |
|||
17
dft2014
22.04.14
✎
12:28
|
+(15) А после загрузки из Эксель в ТабличноеПоле, в нем устанавливаются столбцы по аналогии с Эксель-файлом (код я написала в (0)), вот: http://i058.radikal.ru/1404/1d/a60c053d4214.jpg
|
|||
18
Люблю_УПП
22.04.14
✎
12:29
|
а я понял. У вас нет названий колонок. тогда 9 попробуйте
|
|||
19
dft2014
22.04.14
✎
12:29
|
И мне теперь надо понять, как обратиться к колонке, содержащено НаменованиеФЛ, или к колонке ДатеРождения и т.д.
|
|||
20
Люблю_УПП
22.04.14
✎
12:30
|
Для каждого СтрокаТЗ из ТабличноеПоле цикл
Сообщить(СтрокаТЗ.TAB_NOMER); КонецЦикла; |
|||
21
dft2014
22.04.14
✎
15:23
|
Всем спасибо. Теперь не создает новый элемент в справочнике "ФЛ"... Вот код:
Функция СоздатьФЛ(СпрФЛ, ТекСтрока) СпрФЛ = Справочники.ФизическиеЛица.СоздатьЭлемент(); СпрФЛ.Наименование = ТекСтрока.FIO; СпрФЛ.ИНН = ТекСтрока.INN; СпрФЛ.Записать(); КонецФункции Процедура ЗагрузитьНажатие(Элемент) Для Каждого СтрокаТЧ Из Таблица Цикл СпрФЛ = Справочники.ФизическиеЛица; Если СпрФЛ.НайтиПоНаименованию(СтрокаТЧ.FIO) = 0 Тогда ТекФЛ = СоздатьФЛ(СпрФЛ, СтрокаТЧ); Иначе ТекФЛ = СпрФЛ.ТекущийЭлемент(); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
22
antoneus
22.04.14
✎
15:26
|
Если СпрФЛ.НайтиПоНаименованию(СтрокаТЧ.FIO) = 0
это не семёрка таки |
|||
23
dft2014
22.04.14
✎
15:37
|
(22) Что не так?
|
|||
24
Enders
22.04.14
✎
15:41
|
а она разве не пустую ссылку возвращает или неопределено, если не находит?
Откуда 0 то?) в Сп гляньте |
|||
25
Torquader
22.04.14
✎
15:45
|
Последний раз, когда писал загрузку из Excel на УФ делал в два этапа - первый этап - создание Excel на клиенте и загрузка данных из него в массив (простые типы - только то, что есть в Excel), на втором этапе массив отправляется на сервер, где из него уже начинают формироваться объекты в базе.
|
|||
26
dft2014
22.04.14
✎
15:48
|
(25) У меня ЗУП, платформа 8.2.
|
|||
27
dft2014
22.04.14
✎
15:49
|
(24) Переписала, все равно не создает новых:
Функция СоздатьФЛ(СпрФЛ, ТекСтрока) СпрФЛ = Справочники.ФизическиеЛица.СоздатьЭлемент(); СпрФЛ.Наименование = ТекСтрока.FIO; СпрФЛ.ИНН = ТекСтрока.INN; СпрФЛ.Записать(); КонецФункции Процедура ЗагрузитьНажатие(Элемент) Для Каждого СтрокаТЧ Из Таблица Цикл ФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(СокрЛП(СтрокаТЧ.FIO),Истина); Если ФЛ <> Справочники.ФизическиеЛица.ПустаяСсылка() Тогда ТекФЛ = СоздатьФЛ(ФЛ, СтрокаТЧ); Иначе Сообщить(СтрокаТЧ.FIO); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
28
dft2014
22.04.14
✎
15:51
|
Нашла ошибку!!!
Вместо: Если ФЛ <> Справочники.ФизическиеЛица.ПустаяСсылка() Тогда Надо было: Если ФЛ = Справочники.ФизическиеЛица.ПустаяСсылка() Тогда |
|||
29
Enders
22.04.14
✎
15:53
|
Ну и кстати, зачем вы передаёте параметр ФЛ, в процедуру СоздатьФЛ? Если в ней же этот параметр и меняете?
Передавайте только строчку. |
|||
30
Eugene_life
22.04.14
✎
15:54
|
(0) Я бы посоветовал в данном случае не обработку писать, а загружать через Загрузку из табличного документа. Можно в выражении написать код, который создаст не достающих
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |