|
Загрузка из Excel | ☑ | ||
---|---|---|---|---|
0
Масянька
03.08.23
✎
11:42
|
День добрый!
Загрузка из файла Excel. Не выходит каменный цветок... &НаКлиенте Процедура Загрузить(Команда) Если (НЕ ПроверкаКаталога()) Тогда Возврат; КонецЕсли; КолВоСтрок = ФайлВПорядке(); Если (КолВоСтрок > 0) Тогда Файл = Новый Файл(Объект.КаталогСФайлом); Сообщить("! - " + Файл + " / " + Объект.КаталогСФайлом); ДвоичныеДанные = Новый ДвоичныеДанные(Объект.КаталогСФайлом); ЗагрузитьДанные(ДвоичныеДанные, Файл.Расширение); КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Загрузка окончена."); КонецПроцедуры &НаСервере Процедура ЗагрузитьДанные(ДвоичныеДанные, Расширение) ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение); ДвоичныеДанные.Записать(ФайлEXCELНаСервере); ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере, СпособЧтенияЗначенийТабличногоДокумента.Текст); УдалитьФайлы(ФайлEXCELНаСервере); //вывод в таблицу значений ПЗ = Новый ПостроительЗапроса; ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область()); ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять; ПЗ.ЗаполнитьНастройки(); ПЗ.Выполнить(); ТаблицаЗначений = ПЗ.Результат.Выгрузить(); Объект.СписокДанных.Загрузить(ТаблицаЗначений); //СоздатьСамДокумент(ДатаДохода, МассивДанных); КонецПроцедуры В табличном документе на форме появляются пустые строки с номерами. Номеров всего 689, а в файле строк 43. Что не так? Спасибо. |
|||
1
Масянька
03.08.23
✎
11:43
|
Сообщалка выводит:
! - Файл / D:\1С\_Рабочие базы\ЗУП\СоцПрограмма\Список Голубая бездна.xlsx |
|||
2
Ногаминебить
03.08.23
✎
11:48
|
А ексель нормальный, без извращений? Табличка и ничего лишнего? Я б еще имена столбцов в первой строке задал как Т1,Т2,Т3...
|
|||
3
Одинист
03.08.23
✎
11:50
|
1. Табличный документ попробовать Показать/ таблицу значений вывести через «Сообщить».
2. Прочитать данные по строкам/ячейкам. |
|||
4
Масянька
03.08.23
✎
11:51
|
||||
5
Масянька
03.08.23
✎
11:51
|
(3) 1. Что показать? Табдок на форме.
2. Как? |
|||
6
Одинист
03.08.23
✎
12:00
|
(5) 1. Вот этот ТабличныйДокумент = Новый ТабличныйДокумент
2. Примерно так: ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Текст); мВысотаТабличногоДокумента = ТабДок.ВысотаТаблицы; // Обход строк табличного документа и заполнение таблицы значений Для Строка = 2 По мВысотаТабличногоДокумента Цикл НоваяСтр = ТЗизТабДока.Добавить(); НоваяСтр.Наименование = ПолучитьСодержаниеЯчейки(ТабДок, Строка, 1); НоваяСтр.Код = ПолучитьСодержаниеЯчейки(ТабДок, Строка, 2); КонецЦикла; Функция ПолучитьСодержаниеЯчейки(пТабличныйДокумент, Строка, Колонка) Если Колонка = 0 Тогда Возврат ""; КонецЕсли; мСодержание = пТабличныйДокумент.Область("R" + Формат(Строка,"ЧГ=") + "C" + Формат(Колонка,"ЧГ=")).Текст; Возврат СокрЛП(мСодержание); КонецФункции |
|||
7
Гипервизор
03.08.23
✎
12:00
|
(5) ТабличныйДокумент.Показать(), да и отладка есть.
И посмотреть, может что-то криво прочиталось. Отсюда и дальше думать, что можно подкрутить. |
|||
8
Масянька
03.08.23
✎
12:10
|
(6)
ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере, СпособЧтенияЗначенийТабличногоДокумента.Текст); мВысотаТабличногоДокумента = ТабличныйДокумент.ВысотаТаблицы; ТЗизТабДока = Новый ТаблицаЗначений; ТЗизТабДока.Колонки.Вставить("Сотрудник"); ТЗизТабДока.Колонки.Вставить("Результат"); // Обход строк табличного документа и заполнение таблицы значений Для Строка = 2 По мВысотаТабличногоДокумента Цикл НоваяСтр = ТЗизТабДока.Добавить(); НоваяСтр.Сотрудник = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 1); НоваяСтр.Результат = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 2); КонецЦикла; Несоответствие типов (параметр номер '1') {ВнешняяОбработка.ЗагрузкаДоходовВНатуральнойФорме.Форма.Форма.Форма(155)}:ТЗизТабДока.Колонки.Вставить("Сотрудник"); {ВнешняяОбработка.ЗагрузкаДоходовВНатуральнойФорме.Форма.Форма.Форма(131)}:ЗагрузитьДанные(ДвоичныеДанные, Файл.Расширение); по причине: Несоответствие типов (параметр номер '1') |
|||
9
Гипервизор
03.08.23
✎
12:12
|
(8) Почитайте в СП про метод Вставить(). Сначала идёт индекс колонки.
|
|||
10
Масянька
03.08.23
✎
12:17
|
(9) Как скажете, господин 🙂
мВысотаТабличногоДокумента = ТабличныйДокумент.ВысотаТаблицы; ТЗизТабДока = Новый ТаблицаЗначений; ТЗизТабДока.Колонки.Вставить(1,"Сотрудник"); ТЗизТабДока.Колонки.Вставить(2, "Результат"); // Обход строк табличного документа и заполнение таблицы значений Для Строка = 2 По мВысотаТабличногоДокумента Цикл НоваяСтр = ТЗизТабДока.Добавить(); НоваяСтр.Сотрудник = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 1); НоваяСтр.Результат = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 2); сообщить("3 - " + НоваяСтр.Сотрудник + " / " + НоваяСтр.Результат); КонецЦикла; Сообщалка выводит значения (то, что в файле) всех строк, а потом еще кучу пустых. На форме (в табличном документе) без изменений - пусто. |
|||
11
Гипервизор
03.08.23
✎
12:21
|
(10) Отсюда не видно, что и куда вы загружаете. Состав и типы совпадают у Объект.СписокДанных и ТЗизТабДока?
|
|||
12
Масянька
03.08.23
✎
12:26
|
(11) Вроде, да.
мВысотаТабличногоДокумента = ТабличныйДокумент.ВысотаТаблицы; ТЗизТабДока = Новый ТаблицаЗначений; ТЗизТабДока.Колонки.Вставить(1,"Код"); ТЗизТабДока.Колонки.Вставить(2,"Сотрудник"); ТЗизТабДока.Колонки.Вставить(3, "Результат"); // Обход строк табличного документа и заполнение таблицы значений Для Строка = 2 По мВысотаТабличногоДокумента Цикл НоваяСтр = ТЗизТабДока.Добавить(); НоваяСтр.Код = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 1); НоваяСтр.Сотрудник = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 2); НоваяСтр.Результат = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 3); сообщить("3 - " + НоваяСтр.Сотрудник + " / " + НоваяСтр.Результат); КонецЦикла; https://postimg.cc/XXjRk1Gz Первые две - строка, третья - число |
|||
13
Гипервизор
03.08.23
✎
12:35
|
(12) А у вас в ТЗ какого типа колонки? Судя по ПолучитьСодержаниеЯчейки, всегда возвращается строковое значение.
|
|||
14
Ногаминебить
03.08.23
✎
13:30
|
(4) Я не это имел в виду. Картинку содержимого екселя (ну хотя бы верхушку).
И выше уже писали - под отладкой смотреть надо. |
|||
15
Масянька
03.08.23
✎
13:45
|
(13)
мВысотаТабличногоДокумента = ТабличныйДокумент.ВысотаТаблицы; ТЗизТабДока = Новый ТаблицаЗначений; ТЗизТабДока.Колонки.Вставить(1,"Код", Новый ОписаниеТипов("Строка")); ТЗизТабДока.Колонки.Вставить(2,"Сотрудник", Новый ОписаниеТипов("Строка")); ТЗизТабДока.Колонки.Вставить(3, "Результат", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2))); // Обход строк табличного документа и заполнение таблицы значений Для Строка = 2 По мВысотаТабличногоДокумента Цикл НоваяСтр = ТЗизТабДока.Добавить(); НоваяСтр.Код = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 1); НоваяСтр.Сотрудник = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 2); НоваяСтр.Результат = ПолучитьСодержаниеЯчейки(ТабличныйДокумент, Строка, 6); сообщить("3 - " + НоваяСтр.Сотрудник + " / " + НоваяСтр.Результат + " / " + ТипЗнч(НоваяСтр.Сотрудник) + " / " + ТипЗнч(НоваяСтр.Результат)); КонецЦикла; В сообщалке (типы) - строка, число. |
|||
16
Масянька
03.08.23
✎
13:46
|
(14) Отладка у меня не работает (внешняя обработка).
Верхушка - https://postimg.cc/0zzSHXCf |
|||
17
arsik
03.08.23
✎
13:47
|
(15) Да хватит уже мучать ТЗ. Просто выведи на форму этот табличный документ и посмотри в чем косяк.
|
|||
18
arsik
03.08.23
✎
13:48
|
(17) Ну или просто сохрани в файл и открой.
|
|||
19
Гипервизор
03.08.23
✎
13:49
|
(16) А в чём проблема с отладкой внешней обработки?
|
|||
20
Масянька
03.08.23
✎
13:56
|
(18) ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере, СпособЧтенияЗначенийТабличногоДокумента.Текст);
ТабличныйДокумент.Записать("D:\1.mxl"); Нету файла. |
|||
21
Масянька
03.08.23
✎
13:56
|
(19) Не знаю. Не работает и всё.
|
|||
22
Гипервизор
03.08.23
✎
14:08
|
(20) Так код на сервере выполняется, там и ищите.
(21) Отладка на сервере включена? |
|||
23
Ногаминебить
03.08.23
✎
14:14
|
(16) Это самая верхняя строка? После нее сразу начинаются данные? Лист только один? Убрать фильтры, подвалы и прочее, переименовать все колонки на гарантированно уникальные названия.
|
|||
24
Масянька
03.08.23
✎
14:17
|
(22) Нашла 🙂
В файле mxl есть данные (как в Excel). Где отладку посмотреть? |
|||
25
arsik
03.08.23
✎
14:44
|
(24) Значит у тебя проблема в процедуре ПолучитьСодержаниеЯчейки()
|
|||
26
Масянька
03.08.23
✎
14:47
|
(23) Лист один. Убрала фильтр, удалила строки после данных = на форме всего 42 строки (как в Excel), но пустые.
Где инфа? 😣😣😣😣😣😣😣😣😣😣😣😣 |
|||
27
Масянька
03.08.23
✎
14:49
|
+ (26) В файле mxl - копия Excel.
|
|||
28
Масянька
03.08.23
✎
14:58
|
Мужики!
Спасибо! Всё получилось! PS Правда, простейшая операция (загрузка из Excel) превратилась (легким движением руки).... Кстати, можно рекомендовать, как задачу на собеседовании. |
|||
29
Гипервизор
03.08.23
✎
15:11
|
(28) Ни в коем случае не пишите подробности о проблеме. )
|
|||
30
arsik
03.08.23
✎
15:14
|
+(25) Блин только сейчас заметил. Содержание - ??? СодержаниеЯчейки - ???
Однаэс? |
|||
31
Масянька
03.08.23
✎
15:39
|
(29) Я не делала табличный документ, а сразу в ТЗ и по ТЗ заполнять док-т.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |