Имя: Пароль:
1C
1С v8
v8: Неправильное чтение из Екселя
,
0 Boudybuilder
 
15.10.12
14:28
Попытка
       Excel     = Новый COMОбъект("Excel.Application");
       WB         = Excel.Workbooks.Open(ИсточникФайла);
       WS         = WB.Worksheets(1);//указываем номер листа - 1
       arr     = WS.UsedRange.Value;
       WB.Close(0);
   Исключение
       Предупреждение("Внимание! Файл не открыт."+Символы.ПС+"Попробуйте открыть и пересохранить данный файл программой Эксель.");
       Возврат;
   КонецПопытки;
   //Узнаём данные выходные данные об листе ексель    
   МассивКолонок = arr.Выгрузить();
   колКол = МассивКолонок.ВГраница();
   колСтр = МассивКолонок.Получить(0).Количество();
   //
   ТабПоле.Колонки.Добавить("Номер", ,"Номер").Ширина=5;  //Добавим новый столбец номер строки
   Для кол = 0 По колКол Цикл
       назКолМК = "Колонка"+(кол+2);    //Сообщить("наз "+имяКолМК);
       имяКолМК = назКолМК;              //Сообщить("имя "+имяКолМК);
       ТабПоле.Колонки.Добавить(назКолМК, Новый ОписаниеТипов("Строка"), имяКолМК).Ширина=20;  //имя-колонка1, шапка-КолИмя
   КонецЦикла;
   //
   ЭлементыФормы.ТабПоле.СоздатьКолонки();
   //Вставляем необходимое колличество колонок строк в ТабПоле
   Для новСтрока = 1 По колСтр Цикл
       новСтр = ТабПоле.Добавить();
       номСтр = ТабПоле.Индекс(новСтр);
       новСтр.Установить(0,номСтр+1);
   КонецЦикла;
   //Заполняем ТЗ
   столбец =1;
   Для Каждого Колонка Из МассивКолонок Цикл
       СтолбецИмя = ТабПоле.Колонки.Получить(столбец).Имя; //Сообщить("-"+СтолбецИмя);
       ТабПоле.ЗагрузитьКолонку(Колонка,СтолбецИмя);//табельный номер
       столбец =столбец+1;
   КонецЦикла;


Даная процедура почему то поле в прасе с кодом 83526 загружает как 83 526... Как этого избежать?
1 Boudybuilder
 
15.10.12
14:29
Код я для примера написал...
И в то же время из других прайсов может считать без пробела...
2 Aprobator
 
15.10.12
14:29
Формат(ТвоеЗначение, "ЧГ=0")
3 Aprobator
 
15.10.12
14:30
хотя в чем проблема то? Цена - число, а 83 526 всего лишь его представление вывода.
4 Boudybuilder
 
15.10.12
14:30
Смотрел в самом прайсе , в одном формат числовой , а в другом общий. Можно переделать на общий и в том. А как то чтоб уже автоматически избегало эту проблему?
5 Balonbl4
 
15.10.12
14:30
(2) Опередил=)
6 Aprobator
 
15.10.12
14:30
дык это не проблема.
7 Aprobator
 
15.10.12
14:32
можно даже в формате ячейки указать в макете. Только вот нафиг? Разделение то специально сделано для большей читаемости.
8 Heckfy
 
15.10.12
14:32
Как вариант, НПП заменить.
9 Ахиллес
 
15.10.12
14:33
100500 жертва неразрывного пробела :-)
(4) В (2) Самое правильное. Одинэс всегда при преобразовании числа к строке разделитель разрядов вставляет. Везде, где такое преобразование есть везде формат вставляй.
10 Aprobator
 
15.10.12
14:33
а млин тут код, а не цена, тогда 2 тебе поможет.
11 Aprobator
 
15.10.12
14:34
(90 ну если такое везде надо, то можно региональными установками базы подкрутить.
12 Boudybuilder
 
15.10.12
14:36
(7) Зачем мне код разделять? А потом с базы по коду как искать? Если в прайсе без пробела а базе с пробелом...
13 Aprobator
 
15.10.12
14:37
(12) да поправился в (10) уже. Твое решение в (2).
14 Boudybuilder
 
15.10.12
14:39
Для Каждого Колонка Из МассивКолонок Цикл
       СтолбецИмя = ТабПоле.Колонки.Получить(столбец).Имя; //Сообщить("-"+СтолбецИмя);

       ТабПоле.ЗагрузитьКолонку(Формат(Колонка, "ЧГ=0"),СтолбецИмя);//табельный номер

       столбец =столбец+1;
   КонецЦикла;



Тогда так сделать?
15 КуплюКровать
 
15.10.12
14:41
еще вариант стрзаменить("ляялля", символы.нпп,""). но это если другие не катят, на крайняк
16 Масянька
 
15.10.12
14:42
Как правило (из моей практики), когда грузишь из Excel'я - лучше всегда преобразовывать формат и использовать СокрЛП().
17 Ахиллес
 
15.10.12
14:44
(11) Юзеры придут и морду набьют. Им то в отчётах такого не надо.
18 Boudybuilder
 
15.10.12
14:44
(16) Тогда Ваще так ?!

ТабПоле.ЗагрузитьКолонку(СокрЛП(Формат(Колонка, "ЧГ=0")),СтолбецИмя);

Так правильно будет?
19 Масянька
 
15.10.12
14:46
(18) Мда, понедельник - день тяжелый......

СокрЛП - для текста.
Формат - для даты и чисел.
И вообще, экспериментируй.
20 Ахиллес
 
15.10.12
14:46
(18) Нормалёк. Ток чтоб эту фигню не городить везде, сделай себе функцию, которая будет возвращать тебе строку в нужном тебе формате.
21 Масянька
 
15.10.12
14:47
+(20) Послушай умного мужика.
22 Boudybuilder
 
15.10.12
14:48
Ништяк,братишъ! Щас опробуем. ;)
23 Масянька
 
15.10.12
14:49
(22) Натюрлих :)))))
24 Boudybuilder
 
15.10.12
14:49
{Обработка.ФанЗаполнениеРегистраНоменклатураКонтрагента.Форма.Форма.Форма(427)}: Ошибка при вызове метода контекста (ЗагрузитьКолонку)
       ТабПоле.ЗагрузитьКолонку(СокрЛП(Формат(Колонка, "ЧГ=0")),СтолбецИмя);
по причине:
Несоответствие типов (параметр номер '1')
25 Boudybuilder
 
15.10.12
14:50
Без этого конечно низзя! :(
26 HeroShima
 
15.10.12
14:52
Как дети малые...
27 Boudybuilder
 
15.10.12
14:53
ТабПоле.ЗагрузитьКолонку(СокрЛП(Формат(Колонка, "ЧГ=0")),СтолбецИмя);  

Тогдв что тут за глюк с параметром 1 ?
28 Ахиллес
 
15.10.12
14:55
(27) Я тя понимаю, тебе очень хочется пописдить на мисте, но почитай всё таки синтаксис помощник.
29 Boudybuilder
 
15.10.12
15:00
Мне бы ответ...
30 Aprobator
 
15.10.12
15:07
посмотри в конце книжки.
31 hhhh
 
15.10.12
15:11
(29) формат не берет всю колонку, надо каждое число по отдельности фигачить. В цикле.
32 Boudybuilder
 
15.10.12
15:11
Это понятно. Но мне сейчас решение нужно.
Куда мне это СокрЛП(Формат(, "ЧГ=0")) подставить в этой (1) процедуре?
33 Boudybuilder
 
15.10.12
15:12
(31) Понятно. Спасибо...
Но это будет долго...
34 Boudybuilder
 
15.10.12
15:25
Для Каждого ТекСтр Из СписокНоменклатуры Цикл
       ТекСтр.КодНоменклатурыКонтрагента = Формат(ТекСтр.КодНоменклатурыКонтрагента, "ЧГ=0");
   КонецЦикла;

Попробовал так , но чтото не помагает...
35 НЕА123
 
15.10.12
15:29
в описание типов колонки добавь число.

ну, на крайняк тут был совет с НПП.
36 Boudybuilder
 
15.10.12
15:34
ТекСтр.КодНоменклатурыКонтрагента = СтрЗаменить(ТекСтр.КодНоменклатурыКонтрагента," ","");

Так не фурычит. Если вместо пробела символ , то меняет. А что , символы не удаляет?
37 Boudybuilder
 
15.10.12
15:34
тоесть не ищет?
38 Boudybuilder
 
15.10.12
15:34
пробелы
39 Boudybuilder
 
15.10.12
15:38
СтрЗаменить(ТекСтр.КодНоменклатурыКонтрагента,Символы.НПП,"");
Вот выход из положения!


Спасибо всем за внимание!

Извините что отобрал время за такой пустяк.
40 НЕА123
 
15.10.12
15:39
Новый ОписаниеТипов("Строка, Число",
            Новый КвалификаторыЧисла(64, 5, ДопустимыйЗнак.Любой),
            Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))
41 НЕА123
 
15.10.12
15:40
(39)
не кошерно.
42 Aprobator
 
15.10.12
16:02
песец.  Час на то чтобы увидеть, что тип колонки строка.
Ошибка? Это не ошибка, это системная функция.