|
Как свернуть или удалить колонки в ТЗ? | ☑ | ||
---|---|---|---|---|
0
Luhtas
05.05.12
✎
04:13
|
Доброго дня.
Подскажите пожалуйста: Есть ТЗ загруженная из Excel, в ней много колонок с пустым значением -Тип строка (""). Как можно свернуть ТЗ, убрав эти колонки или удалить? Никак не могу победить? |
|||
1
Злопчинский
05.05.12
✎
04:14
|
в 7.7 было ТЗ.УдалитьКолонку(ИдентификаторИлиНомерКолонки)
|
|||
2
Luhtas
05.05.12
✎
04:32
|
(1) Я борюсь с 8.2, в 8.2 такого нет, только удалить строку.
|
|||
3
Luhtas
05.05.12
✎
04:48
|
+(0)Вот такой код дает ошибку: "Метод объекта не обнаружен (Индекс)". Хотя в СП есть описание, как быть?
Для Каждого Кол ИЗ ТЗ.Колонки Цикл Если Кол.Заголовок="" Тогда Кол.Удалить(Кол.Индекс(Кол)); КонецЕсли; КонецЦикла; |
|||
4
Cube
05.05.12
✎
04:55
|
Да всё работает:
ТаблицаЗначений = Новый ТаблицаЗначений; Для Сч = 1 По 10 Цикл ТаблицаЗначений.Колонки.Добавить("Колонка_" + Сч); КонецЦикла; Сообщить("В ТЗ " + ТаблицаЗначений.Колонки.Количество() + " колонок"); ТаблицаЗначений.Колонки.Удалить(5); Сообщить("В ТЗ " + ТаблицаЗначений.Колонки.Количество() + " колонок"); ТаблицаЗначений.Колонки.Удалить(ТаблицаЗначений.Колонки.Найти("Колонка_2")); Сообщить("В ТЗ " + ТаблицаЗначений.Колонки.Количество() + " колонок") |
|||
5
Luhtas
05.05.12
✎
04:58
|
(4) Во как!?
|
|||
6
Luhtas
05.05.12
✎
05:44
|
(4) Ну не то немного, в колонках есть пустые значения (""). Как найти такую колонку и получить ее индекс? Чтобы удалить такую колонку?
|
|||
7
Cube
05.05.12
✎
06:08
|
(6) Что, совсем думать сам не хочешь?... Эх ты... На, пользуйся:
ТаблицаЗначений = Новый ТаблицаЗначений; Для Сч = 1 По 10 Цикл НаименованиеКолонки = ?(Сч = 3 ИЛИ Сч = 8, "", "Колонка_" + Сч); ТаблицаЗначений.Колонки.Добавить(НаименованиеКолонки, , НаименованиеКолонки); КонецЦикла; Сообщить("В ТЗ " + ТаблицаЗначений.Колонки.Количество() + " колонок"); НомерКолонки = 1; Пока НомерКолонки <= ТаблицаЗначений.Колонки.Количество() Цикл ТекущаяКолока = ТаблицаЗначений.Колонки[НомерКолонки - 1]; Если ПустаяСтрока(ТекущаяКолока.Заголовок) Тогда ТаблицаЗначений.Колонки.Удалить(ТекущаяКолока); Иначе НомерКолонки = НомерКолонки + 1; КонецЕсли; КонецЦикла; Сообщить("В ТЗ " + ТаблицаЗначений.Колонки.Количество() + " колонок"); |
|||
8
Wobland
05.05.12
✎
06:10
|
(7) ему, похоже, надо по пустым значениям удалять, а не по заголовку ;)
|
|||
9
Luhtas
05.05.12
✎
06:22
|
(8) Да, пытаюсь удалить ту колонку, которая содержит пустое значение выгруженное из Excel, т.е. "".
(7) Про заголовок не подумал. Спасибо! |
|||
10
Wobland
05.05.12
✎
06:26
|
(9) про заголовок ты ещё в (3) подумал (?). задача неясна
|
|||
11
Luhtas
05.05.12
✎
06:31
|
(10) Что-то получается с Заголовком. Но не совсем то что хочется.
По задачу: делаю выгрузку счета из Excel в ТЧ документа. В Счете есть пустые столбцы (колонки). Они попадают в ТЗ. Хочу очистить ТЗ от пустых колонок, так чтобы шла номенклатура, едИзмереия,Количество, Цена. Все. Дальше из ТЗ уже выгружать в ТЧ приходной. |
|||
12
Cube
05.05.12
✎
06:33
|
(11) Взять из Excel только нужные колонки не судьба?
|
|||
13
Luhtas
05.05.12
✎
06:40
|
(12) К сожалению не могу, слабак в этом деле, ТЗ хоть как-то понимаю, а чтобы из Excel взять нужные, это пока звездолет.
|
|||
14
Cube
05.05.12
✎
06:41
|
(13) Ну так показывай код загрузки из Excel, поможем!
|
|||
15
Wobland
05.05.12
✎
06:41
|
(11) я даже больше скажу: пустых колонок тысячи там. присоединяюсь к (12)
|
|||
16
Wobland
05.05.12
✎
06:45
|
(13) пальцем на нужные можешь показать? или они всякий раз в новом месте?
|
|||
17
Wobland
05.05.12
✎
06:49
|
кстати, вообще зачем ТЗ?
|
|||
18
Luhtas
05.05.12
✎
06:50
|
(16)Нет, они всегда одинаковые.
Обычный счет из 1С из 77 похоже, т.е. бухгалтер его немного адаптирует, удаляет шапку, столбик с номером п/п, но после "наименования" идет очень много пустых столбцов около 25. Далее идет уже количество, потом едИзмерения и цена. Пока получилось вот так очистить ТЗ как Cube советует: НомерКолонки=1; Пока НомерКолонки <= ТЗ.Колонки.Количество() Цикл ТекущаяКолока = ТЗ.Колонки[НомерКолонки - 1]; Если ПустаяСтрока(ТекущаяКолока.Заголовок) Тогда ТЗ.Колонки.Удалить(ТЗ.Колонки.Найти(ТекущаяКолока.Имя)); Иначе НомерКолонки = НомерКолонки + 1; КонецЕсли; Сообщить(ТЗ.Колонки.Количество()); КонецЦикла; |
|||
19
Luhtas
05.05.12
✎
06:53
|
(14) вот такой код:
Функция ПрочитатьТабличныйДокументИзExcel(ИмяФайла, НомерЛистаExcel = 1) xlLastCell = 11; НомерНачальнойСтроки = 1; ВыбФайл = Новый Файл(ИмяФайла); Если НЕ ВыбФайл.Существует() Тогда Сообщить("Файл не существует!"); Возврат Ложь; КонецЕсли; Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ИмяФайла); //Состояние("Обработка файла Microsoft Excel..."); ExcelЛист = Excel.Sheets(НомерЛистаExcel); Исключение Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel."); Возврат ложь; КонецПопытки; Объект.Номенклатура.Очистить(); ТЗ = Новый ТаблицаЗначений; Для ии = 1 По Excel.Cells.SpecialCells(11).Column Цикл Попытка Если ии < 10 Тогда ТЗ.Колонки.Добавить("Кол00"+Строка(ии), ,Excel.ActiveSheet.Cells(1,ии).Value); Иначе ТЗ.Колонки.Добавить("Кол0"+Строка(ии), ,Excel.ActiveSheet.Cells(1,ии).Value); КонецЕсли; Исключение Сообщить("Не удалось добавить колонку"); КонецПопытки; КонецЦикла; КолКолонок = ии - 1; КоличествоСтрок = Excel.Cells.SpecialCells(11).Row; Если НомерНачальнойСтроки < 1 Тогда НомерНачальнойСтроки = 1 КонецЕсли; Для ии = НомерНачальнойСтроки По КоличествоСтрок Цикл стр = ТЗ.Добавить(); Для кол = 1 По КолКолонок Цикл стр[кол-1] = Формат(Excel.ActiveSheet.Cells(ии,кол).Value,"ЧГ=0"); КонецЦикла; //Состояние("Загружено из XLS: "+Строка(ии)+ " из "+Строка(КоличествоСтрок)); КонецЦикла; Excel.Quit(); Возврат ТЗ; КонецФункции // () |
|||
20
Wobland
05.05.12
✎
06:53
|
(18) забей. бери из екселя сразу нужные, раз номера знаешь
Селлс(ров, колумн).Валуе, где колумн - нужные столбцы |
|||
21
Cube
05.05.12
✎
06:53
|
(18) Вываливай свой счет на какую-нибудь фалопомойку (данные можешь изменить), а ссылку давай сюда. Что вилами по воде водить-то...
|
|||
22
Wobland
05.05.12
✎
06:53
|
(19) Для ии = 1 По Excel.Cells.SpecialCells(11).Column Цикл
а нефих по всем подряд идти |
|||
23
Wobland
05.05.12
✎
06:54
|
(21) приступ альтруизма? ;)
|
|||
24
Cube
05.05.12
✎
06:56
|
Кстати, Luhtas, а чем тебе обработка ЗагрузкаДанныхИзТабличногоДокумента с ИТС не нравится? Твою задачу решит на ура.
|
|||
25
Cube
05.05.12
✎
06:57
|
(23) Нет, блин, мы тут все деньги заколачиваем сидим)))
|
|||
26
Luhtas
05.05.12
✎
07:01
|
(24) Громоздкая, я из нее и вытащил саму функцию загрузки, кажись. К тому же она под Управляемые формы не пашет. А конфа в которую загружаю мое творение, на упр. формах.
|
|||
27
Wobland
05.05.12
✎
07:02
|
(26) ты уже понял, что не надо разом все колонки перебирать, а только нужные?
|
|||
28
Cube
05.05.12
✎
07:03
|
(26) Ну, если сложить "конфа в которую загружаю мое творение, на упр. формах" и "слабак в этом деле, ТЗ хоть как-то понимаю, а чтобы из Excel взять нужные, это пока звездолет", то получается смешанное чувство... :)))
|
|||
29
Luhtas
05.05.12
✎
07:07
|
(28) Конфа достаточно простая, могу тоже сбросить, представляет из себя что-то похожее на управление складом, но очень простое со своими нуждами, т.е это не бог весть что. С ТЗ, например только сейчас столкнулся, как в прочем и с выгрузкой из Excel
Вот ссылка на уже адаптированный файл, правда одна строка всего, но зато видна куча этих самых колонок. http://narod.ru/disk/48176914001.0aac9165894063523fc06cde3a952b03/СЧЕТ.xls.html |
|||
30
Luhtas
05.05.12
✎
07:08
|
(27) Это я понял, как реализовать такое?
|
|||
31
Cube
05.05.12
✎
07:09
|
Ну вот же то, что тебе надо:
стр[кол-1] = Формат(Excel.ActiveSheet.Cells(ии,кол).Value,"ЧГ=0"); Немного перефразивовав, получаем: НомерКолонкиНоменклатура = 3; НомерКолонкиСумма = 5; КоличествоСтрок = Excel.Cells.SpecialCells(11).Row; Для НомерСтроки = 1 По КоличествоСтрок Цикл НоваяСтрокаДокумента = МойДокумент.ТабличнаяЧасть.Добавить(); НоваяСтрокаДокумента.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Excel.ActiveSheet.Cells(НомерСтроки, НомерКолонкиНоменклатура).Value); НоваяСтрокаДокумента.Сумма = Формат(Excel.ActiveSheet.Cells(НомерСтроки, НомерКолонкиСумма).Value,"ЧГ=0"); КонецЦикла; |
|||
32
Luhtas
05.05.12
✎
07:10
|
+(29) Вот собственно конфа:
http://narod.ru/disk/48176987001.bd6325769cc9e5300153323e19dacf7b/1Cv8.cf.html |
|||
33
Luhtas
05.05.12
✎
07:15
|
(31) Ага, вот, что-то такое.
Не ясно только с НомерКолонкиНоменклатура=3 - это откуда, всмысле где используем? |
|||
34
Cube
05.05.12
✎
07:17
|
(33) Это ты сам должен туда вписать своё значение. Посмотри в файл и поставь то, что надо.
|
|||
35
Luhtas
05.05.12
✎
07:18
|
(34) Да въехал. Спасибо!
|
|||
36
Luhtas
05.05.12
✎
07:21
|
+(35) С таблицей значений, по твоему примеру, больше нравится, более универсально получилось.
|
|||
37
Cube
05.05.12
✎
07:27
|
(36) Да ты че такое говоришь-то!)) Уж луче, тогда, так:
Для ии = 1 По Excel.Cells.SpecialCells(11).Column Цикл Попытка НаименованиеКолонки = Excel.ActiveSheet.Cells(1,ии).Value); Если ПустаяСтрока(НаименованиеКолонки) Тогда Продолжить; КонецЕсли; ТЗ.Колонки.Добавить("Кол"+Формат(ии, "ЧЦ=3; ЧВН="), ,НаименованиеКолонки; Исключение Сообщить("Не удалось добавить колонку"); КонецПопытки; КонецЦикла; |
|||
38
Cube
05.05.12
✎
07:29
|
+(37) Ошибки сам исправишь))
|
|||
39
Luhtas
05.05.12
✎
07:44
|
(38) Ок, спасибо, попробую сейчас такой вариант тоже реализовать.
Спасибо за участие. Здорово пригодилось. |
|||
40
m-serg74
05.05.12
✎
07:56
|
а
ТаблицаЗначений (ValueTable) Скопировать (Copy) Вариант синтаксиса: Скопировать строки Синтаксис: Скопировать(<Строки>, <Колонки>) Параметры: <Строки> (необязательный) Тип: Массив. Массив строк для копирования. Если не указан, копируются все строки таблицы значений. <Колонки> (необязательный) Тип: Строка. Список колонок для копирования в формате: "Колонка1, Колонка2...". Описание варианта метода: Если указаны строки и колонки, то только они будут скопированы. Если не указаны - то будет создана полная копия таблицы значений. |
|||
41
m-serg74
05.05.12
✎
07:58
|
и по аналогии можно в ТЧ дока твоего ТЧ.Загрузить(
только нужные колонки |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |