Имя: Пароль:
1C
1С v8
Как свернуть или удалить колонки в ТЗ?
, ,
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
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
и по аналогии можно в ТЧ дока твоего ТЧ.Загрузить(
только нужные колонки