|
v7: Из екселя в 1с | ☑ | ||
---|---|---|---|---|
0
Christina_
11.06.12
✎
10:31
|
Есть внешняя обработка, самая простая, две колонки, товар, сумма, должны заполнится в самый простой документ планирвоание, две колонки, товар, сумма.
Скачала кучу обработок, вроде составила. Выдает ошибку Товар = Excel.Cells(i,Товар).Value; {\\TSCLIENT\D\ПЛАНИРОВАНИЕ.ERT(20)}: : Что может быть за оно? |
|||
1
Tatitutu
11.06.12
✎
10:35
|
(0) смотри что в этой ячейке
|
|||
2
Christina_
11.06.12
✎
10:36
|
в обработке в этой ячейке я задаю номер колонки товара
|
|||
3
Tatitutu
11.06.12
✎
10:37
|
(2) понятно.. весь код в студию
|
|||
4
Christina_
11.06.12
✎
10:38
|
Функция СоздатьMSExcel()
Попытка Excel = СоздатьОбъект("Excel.Application"); Исключение Предупреждение(ОписаниеОшибки()); ВызватьИсключение; КонецПопытки; Возврат Excel; КонецФункции//* //******************************************* Функция Обработка(Excel) ОчиститьОкносообщений(); СПРТовар = Создатьобъект("Справочник.Товары"); ДокПлан = СоздатьОбъект("Документ.Планирование"); ДокПлан.НайтиДокумент(Планир); Для i=1 По Строки Цикл Товар = Excel.Cells(i,Товар).Value; Попытка План = Число(Excel.Cells(i,План).Value); Исключение КонецПопытки; ДокПлан.НоваяСтрока(); ДокПлан.Товар = СПРТовар .ТекущийЭлемент(); ДокПлан.Сумма = план; КонецЦикла; Планир.Записать(); КонецФункции //******************************************* Процедура Сформировать() Excel=СоздатьMSExcel(); Попытка Если Excel.Workbooks.Open(Файл) = 0 Тогда Предупреждение("База не открыта!"); Возврат; Excel.Quit(); КонецЕсли; Исключение Предупреждение(ОписаниеОшибки()); Excel.Quit(); Возврат; КонецПопытки; Обработка(Excel); КонецПроцедуры //******************************************* Процедура ВыбрФайл(ИмяФайла) Перем Каталог; ТипФайла="Файлы Microsoft Excel (*.xls) |*.xls"; Если ФС.ВыбратьФайл(0, ИмяФайла, Каталог, "Выберите файл", ТипФайла)=1 Тогда ИмяФайла=Каталог+ИмяФайла; КонецЕсли; КонецПроцедуры //******************************************* |
|||
5
Christina_
11.06.12
✎
10:39
|
в диалоге обработки: Файл - файл Екселя, Планир - документ, строки - кол-во строк файла, товар - колонка товар, план - колонка плана
|
|||
6
Любопытная
11.06.12
✎
10:41
|
(4) А чему i сначала равно?
|
|||
7
vde69
11.06.12
✎
10:42
|
||||
8
Tatitutu
11.06.12
✎
10:42
|
Прыг-Скок...или из MS EXCEL в 1С (7.7) TiS* (открытый код - бесплатно)
http://infostart.ru/public/83084/ |
|||
9
Christina_
11.06.12
✎
10:45
|
они огромные такие, обраотки..но ок, попробую. спасибо.
|
|||
10
Tatitutu
11.06.12
✎
10:45
|
(7) це 7.7 твоя еще не время
|
|||
11
vde69
11.06.12
✎
10:50
|
(10) при чем тут версия, перевести - 10 минут...
зато там обработаны практически все грабли, да и скачивать ничего не нужно |
|||
12
Christina_
11.06.12
✎
10:59
|
а что в моей не так обработке, не подскажите?
|
|||
13
Tatitutu
11.06.12
✎
11:01
|
(13) ты не ответила на вопрос
Товар у тебя числовой реквизит? чему равен ? |
|||
14
Christina_
11.06.12
✎
11:03
|
Товар = Excel.Cells(i,Товар).Value;
товар1 - это имя товара, просто переменная, товар в скобках, это число, которое я укажу в диалоге ("колонка товара") |
|||
15
vde69
11.06.12
✎
11:03
|
(13) я телепатирую,
у нее в екселе формула, или пустая ячейка |
|||
16
Christina_
11.06.12
✎
11:05
|
у меня в экселе в первой колонке код, во второй наименование товара, в третей
план, мне нужны 2 и 3 |
|||
17
Christina_
11.06.12
✎
11:06
|
(15) нет формул..
|
|||
18
Tatitutu
11.06.12
✎
11:08
|
(14)
еще раз подсказываю Товар = что то (Товар) это что ты хочешь получить а про реквизит ты пишеш что Товар1 т.е Товар = Excel.Cells(i,Товар).Value; см.на ТОВАР |
|||
19
dangerouscoder
11.06.12
✎
11:08
|
(17) Грузи всегда сначала в тз а потом после визуальной проверки принимай решение грузить в док или нет..
|
|||
20
Tatitutu
11.06.12
✎
11:09
|
напиши так
Товар = Excel.Cells(i,НомКолонки).Value; а не Товар = Excel.Cells(i,Товар).Value; |
|||
21
Масянька
11.06.12
✎
11:10
|
Я правильно понимаю, что:
Товар = Excel.Cells(i,Товар).Value; - в первом случае - это одно, а во втором это другое? |
|||
22
Масянька
11.06.12
✎
11:10
|
(20) Я правильно понимаю.....
|
|||
23
Christina_
11.06.12
✎
11:11
|
имя = Excel.Cells(i,Товар).Value; исправила на это
дает новую ошибку Планир.Записать(); {\\TSCLIENT\D\ПЛАНИРОВАНИЕ.ERT(29)}: Не выбран документ! хотя все выбрано |
|||
24
Christina_
11.06.12
✎
11:12
|
(22) правильно, исправила, извините..
|
|||
25
Tatitutu
11.06.12
✎
11:12
|
ДокПлан.Записать();
|
|||
26
Christina_
11.06.12
✎
11:12
|
вот дура..
|
|||
27
Christina_
11.06.12
✎
11:20
|
а можно ли дописать так, чтобы при завершении обработки открывался заполненый документ?
и еще вопрос...обработка работает, если я создаю документ, пустой, а потом при загрузке обработки его выбираю. так должно быть? |
|||
28
dangerouscoder
11.06.12
✎
11:25
|
У тебя переменная - Планир откуда берется?
См. ОткрытьФорму() |
|||
29
Tatitutu
11.06.12
✎
11:30
|
(27)
вместо ДокПлан.НайтиДокумент(Планир); напиши ДокПлан.Новый(); в конце ОткрытьФорму(Докплан.ТекущийДокумент()); |
|||
30
Christina_
11.06.12
✎
11:34
|
(28) неверно написала..нужно не планир, а докплан.
(29) спасибо, сейчас попробую |
|||
31
Christina_
11.06.12
✎
11:41
|
так получилось все..но ничего не заполняет...пишет столько строк сколько задаешь и все пустые...
|
|||
32
Tatitutu
11.06.12
✎
11:47
|
(31) вот это не правильно - не хочешь качать - думай
ДокПлан.Товар = СПРТовар .ТекущийЭлемент(); |
|||
33
Tatitutu
11.06.12
✎
11:48
|
таже ошибка что и товар
План = Число(Excel.Cells(i,План).Value); |
|||
34
Christina_
11.06.12
✎
12:06
|
(33) это исправила уже
|
|||
35
Christina_
11.06.12
✎
12:10
|
(34) это и справила уже, стал заполнять сумму)
(32) мы сначала найти товар должны в справочнике, по коду например, так? |
|||
36
Tatitutu
11.06.12
✎
12:12
|
да
|
|||
37
Christina_
11.06.12
✎
12:13
|
или можно вообще убрать справочник
|
|||
38
Christina_
11.06.12
✎
12:44
|
Функция Обработка()
СПРТовар = СоздатьОбъект("Справочник.Товары"); ДокПлан = СоздатьОбъект("Документ.Планирование"); ДокПлан.Новый(); Попытка Excel = СоздатьОбъект("Excel.Application"); РабочиеКниги=Excel.WorkBooks; ДокКнига=РабочиеКниги.Open(СокрЛП(Файл)); ДокЛист=ДокКнига.Worksheets(1); Исключение Предупреждение(ОписаниеОшибки()); ВызватьИсключение; КонецПопытки; Возврат Excel; Флаг = 0; Ном = НомПер; ОчиститьОкносообщений(); Пока Флаг = 0 Цикл Н = СокрЛП(ДокЛист.Range(СокрЛП(Код) + СокрЛП(Строка(Ном))).Value); Н = "0000" + Н; Н = Прав(Н, 4); Сообщить(Н); Если СПРТовар.НайтиПоКоду(Н) = 0 Тогда Сообщить("Номенклатура на найдена!"); Иначе ДокПлан.НоваяСтрока(); ДокПлан.Товар = СПРТовар.ТекущийЭлемент(); ДокПлан.Сумма = СокрЛП(ДокЛист.Range(СокрЛП(Код) + СокрЛП(Строка(Ном))).Value);; Конецесли; КонецЦикла; ДокПлан.Записать(); ОткрытьФорму(ДокПлан.ТекущийДокумент()); КонецФункции //******************************************* Процедура ВыбрФайл(ИмяФайла) Перем Каталог; ТипФайла="Файлы Microsoft Excel (*.xls) |*.xls"; Если ФС.ВыбратьФайл(0, ИмяФайла, Каталог, "Выберите файл", ТипФайла)=1 Тогда ИмяФайла=Каталог+ИмяФайла; КонецЕсли; КонецПроцедуры //******************************************* вот что получилось у меня... |
|||
39
Ork
11.06.12
✎
12:46
|
(38) Все не читал. Код после Возврат Excel; не выполнится никогда.
|
|||
40
Tatitutu
11.06.12
✎
12:48
|
жесть
|
|||
41
Christina_
11.06.12
✎
12:49
|
(40) понятно
|
|||
42
Tatitutu
11.06.12
✎
12:50
|
все не так , даже описывать не хочу
цикл у тебя будет вечным где флаг сбрасывается в 1 |
|||
43
Ork
11.06.12
✎
12:50
|
+(39)
Вот здесь : Флаг = 0; Ном = НомПер; ОчиститьОкносообщений(); Пока Флаг = 0 Цикл Н = СокрЛП(ДокЛист.Range(СокрЛП(Код) + СокрЛП(Строка(Ном))).Value); Н = "0000" + Н; Н = Прав(Н, 4); Сообщить(Н); Если СПРТовар.НайтиПоКоду(Н) = 0 Тогда Сообщить("Номенклатура на найдена!"); Иначе ДокПлан.НоваяСтрока(); ДокПлан.Товар = СПРТовар.ТекущийЭлемент(); ДокПлан.Сумма = СокрЛП(ДокЛист.Range(СокрЛП(Код) + СокрЛП(Строка(Ном))).Value);; Конецесли; КонецЦикла; Как программа определит, что пора шабашить с циклом и нужно из него выйти? |
|||
44
Christina_
11.06.12
✎
12:51
|
ок. буду разбирать. спасибо.
|
|||
45
Ork
11.06.12
✎
12:54
|
+(43) Точно не скажу. Но по памяти вот эта вот конструкция :
Если ФС.ВыбратьФайл(0, ИмяФайла, Каталог, "Выберите файл", ТипФайла)=1 Тогда ИмяФайла=Каталог+ИмяФайла; КонецЕсли; вернет некорректное имя файла. Вместо (например) "C:\Directory1\filename1.ext" вернет "C:\Directory1filename1.ext" Разница в одном слэше. |
|||
46
Tatitutu
11.06.12
✎
12:55
|
вот это это нужно в аналоги истории
Н = СокрЛП(ДокЛист.Range(СокрЛП(Код) + СокрЛП(Строка(Ном))).Value); Н = "0000" + Н; Н = Прав(Н, 4); |
|||
47
Ork
11.06.12
✎
12:55
|
+(45) Нужно писать : ИмяФайла = Каталог + "\" + ИмяФайла;
Проверь в отладчике или "ИмяФайла" выложи на форму. |
|||
48
dangerouscoder
11.06.12
✎
12:57
|
(44) держи готовую обработку для загрузки в ТЗ
http://help1c.com/faq7/view/544.html |
|||
49
Ork
11.06.12
✎
13:01
|
+(46)
Вот это вот тоже: Пока Флаг = 0 Цикл Н = СокрЛП(ДокЛист.Range(СокрЛП(Код) + СокрЛП(Строка(Ном))).Value); ... ДокПлан.Сумма = СокрЛП(ДокЛист.Range(СокрЛП(Код) + СокрЛП(Строка(Ном))).Value);; КонецЦикла; Мало того, что счетчит адреса нигде не изменяется. Так еще и код товара и сумму ТС умудрилась упаковать в одну ячейку. |
|||
50
Christina_
12.06.12
✎
09:54
|
(49) я это из готовой взяла и под своё переделала..видимо ошиблась с обработкой-примером.
спасибо за советы. |
|||
51
Mikeware
12.06.12
✎
10:12
|
(50) Может, пока не поздно, уйдешь на вдвое большую зарплату?
|
|||
52
Christina_
12.06.12
✎
10:50
|
(51) может оставите своё мнение при себе?
|
|||
53
Mikeware
12.06.12
✎
10:56
|
(52) Почему?
Ваше право его не принимать, но мое право - его озвучивать... |
|||
54
Christina_
12.06.12
✎
11:04
|
(53) каждый раз в любой моей теме?
|
|||
55
Mikeware
12.06.12
✎
11:06
|
(54) Возможно. Потому, что вам темы надо создавать совсем в других форумах
|
|||
56
Christina_
12.06.12
✎
11:06
|
(55)Скажите в каких.
|
|||
57
Christina_
12.06.12
✎
11:07
|
(55) если я вас так раздражаю, вы же модератор, может вам проще будет меня удалить отсюда, чтобы не портить мне настроение каждый раз?
|
|||
58
Mikeware
12.06.12
✎
11:10
|
(56) во всяких там "овуляшках", "журналах лиза" и типа того...
(57) Тут свободная территория. относительно, конечно... вы вправе появляться и веселить нас своими фееричными вопросами. мы вправе комментировать и портить вам настроение.... |
|||
59
Christina_
12.06.12
✎
11:16
|
(58) я только начала изучать 1с. И не думаю, что для новичка мои вопросы фееричны и глупы.
и впредь, к вам большая просьба, я ваше мнение на свой счет уже знаю. не нужно мне о нем больше говорить, пожалуйста. |
|||
60
Christina_
12.06.12
✎
16:59
|
Функция Обработка(Excel)
ОчиститьОкносообщений(); СПРТовар = СоздатьОбъект("Справочник.Товары"); ДокПлан = СоздатьОбъект("Документ.Планирование"); ДокПлан.Новый(); Для i=1 По Строки Цикл имя = Строка(Excel.Cells(i,Товар).Value); Попытка код = Число(Excel.Cells(i,кккк).Value); Исключение КонецПопытки; Попытка сумма = Число(Excel.Cells(i,План).Value); Исключение КонецПопытки; Если СПРТовар.НайтиПоКоду(код,0) = 1 Тогда СПРТовар.НайтиЭлемент(код); Если ПустоеЗначение(код) = 1 Тогда продолжить; КонецЕСли; ДокПлан.НоваяСтрока(); ДокПлан.Товар = СПРТОвар .ТекущийЭлемент(); ДокПлан.Сумма = сумма; Иначе КонецЕсли; КонецЦикла; ДокПлан.Записать(); ОткрытьФорму(ДокПлан.ТекущийДокумент()); КонецФункции вот что у меня в итоге получилось..все заполянет, только почему-то не заполянет наименование. |
|||
61
Christina_
12.06.12
✎
17:01
|
если убираю
Тогда СПРТовар.НайтиЭлемент(код); Если ПустоеЗначение(код) = 1 Тогда продолжить; КонецЕСли; тогда заполняет, то добавляет лишние товары |
|||
62
Amra
12.06.12
✎
17:01
|
(60) Наименование чего?
|
|||
63
Maniac
12.06.12
✎
17:02
|
10000 рублей.
|
|||
64
MishaD
12.06.12
✎
17:03
|
СПРТовар.НайтиЭлемент(код); - это круто
|
|||
65
Christina_
12.06.12
✎
17:16
|
(62) товар..товар не выводит..
|
|||
66
dangerouscoder
12.06.12
✎
17:24
|
Попоробуй вото так -
Если ПустаяСтрока(код) = 1 Тогда Сообщить("Пустой код у "+имя); продолжить; КонецЕСли; Если СПРТовар.НайтиПоКоду(код,0) = 1 Тогда ДокПлан.НоваяСтрока(); ДокПлан.Товар = СПРТОвар .ТекущийЭлемент(); ДокПлан.Сумма = сумма; Иначе Сообщить("Не нашли товар с кодом "+Код); КонецЕсли; |
|||
67
Christina_
12.06.12
✎
17:29
|
(66)получилось...только получается, если в екселе 20 строк товара, ая пишу 22, он последние в последние две строчки добавляет любой товар из справочника.
а так работает, спасибо.. |
|||
68
dangerouscoder
12.06.12
✎
17:32
|
(67) последние строчки в exl как определяешь?
|
|||
69
MishaD
12.06.12
✎
17:36
|
Вообще то он дальше
Если ПустаяСтрока(код) = 1 Тогда Сообщить("Пустой код у "+имя); продолжить; КонецЕСли; не должен проходить, так что лучше попроси полный код |
|||
70
Christina_
12.06.12
✎
17:41
|
Функция Обработка(Excel)
ОчиститьОкносообщений(); СПРТовар = СоздатьОбъект("Справочник.Товары"); ДокПлан = СоздатьОбъект("Документ.Планирование"); ДокПлан.Новый(); Для i=1 По Строки Цикл имя = Строка(Excel.Cells(i,Товар).Value); Попытка код = Число(Excel.Cells(i,кккк).Value); Исключение КонецПопытки; Попытка сумма = Число(Excel.Cells(i,План).Value); Исключение КонецПопытки; Если ПустаяСтрока(код) = 1 Тогда Сообщить("Пустой код у "+имя); продолжить; КонецЕСли; Если СПРТовар.НайтиПоКоду(код,0) = 1 Тогда ДокПлан.НоваяСтрока(); ДокПлан.Товар = СПРТОвар.ТекущийЭлемент(); ДокПлан.Сумма = сумма; Иначе Сообщить("Не нашли товар с кодом "+Код); КонецЕсли; КонецЦикла; ДокПлан.Записать(); ОткрытьФорму(ДокПлан.ТекущийДокумент()); КонецФункции |
|||
71
dangerouscoder
12.06.12
✎
17:48
|
Попытка
код = Число(Excel.Cells(i,кккк).Value); Исключение КонецПопытки; зачем обработка исключения? Для i=1 По Строки Цикл переменная Строки где определена? |
|||
72
Christina_
12.06.12
✎
17:57
|
строки - это количество строк в файле, задаю в диалоге обработки
|
|||
73
Christina_
12.06.12
✎
17:58
|
и если у меня занято 22 строки, но первые две это шапка, я пишу 22, и первые две строчки в документе будут любым товаром из справочника.
|
|||
74
MishaD
12.06.12
✎
17:59
|
для i=3
|
|||
75
Christina_
12.06.12
✎
18:01
|
убрала исключение тоже самое
Функция Обработка(Excel) ОчиститьОкносообщений(); СПРТовар = СоздатьОбъект("Справочник.Товары"); ДокПлан = СоздатьОбъект("Документ.Планирование"); ДокПлан.Новый(); Для i=1 По Строки Цикл имя = Строка(Excel.Cells(i,Товар).Value); код = Число(Excel.Cells(i,кккк).Value); сумма = Число(Excel.Cells(i,План).Value); Если ПустаяСтрока(код) = 1 Тогда Сообщить("Пустой код у "+имя); продолжить; КонецЕСли; Если СПРТовар.НайтиПоКоду(код,0) = 1 Тогда ДокПлан.НоваяСтрока(); ДокПлан.Товар = СПРТОвар.ТекущийЭлемент(); ДокПлан.Сумма = сумма; Иначе Сообщить("Не нашли товар с кодом "+Код); КонецЕсли; КонецЦикла; ДокПлан.Записать(); ОткрытьФорму(ДокПлан.ТекущийДокумент()); КонецФункции |
|||
76
Christina_
12.06.12
✎
18:01
|
почему i=3?
|
|||
77
Christina_
12.06.12
✎
18:01
|
а если файл будет с шапкой в 3 строки?
|
|||
78
Christina_
12.06.12
✎
18:02
|
а если без шапки, то не заполнится все..
|
|||
79
MishaD
12.06.12
✎
18:03
|
ВысотаШапки=3;
Строки=Excel.Sheets(1).Cells.SpecialCells(11).Row; Для i=ВысотаШапки+1 по Строки Цикл |
|||
80
dangerouscoder
12.06.12
✎
18:04
|
Строки=Excel.Sheets(1).Cells.SpecialCells(11).Row; // строка последней ячейки
по поводу шапки добавь на форме реквизит типа число с какой строки начинать читать файл |
|||
81
BlackSeaCat
12.06.12
✎
18:12
|
Пока автор не будет стараться ПОНЯТЬ, что она пишет - у нее будет получаться только г...нокод.
Который, как известно, иногда работает, но чаще... пахнет. Например, после: код = Число(Excel.Cells(i,кккк).Value); проверять ЧИСЛОВОЙ результат функцией ПустаяСтрока() - как раз и дает амбре! |
|||
82
MishaD
12.06.12
✎
18:18
|
девушка тролль. таких тупых не бывает
|
|||
83
Christina_
12.06.12
✎
18:21
|
Функция Обработка(Excel)
ОчиститьОкносообщений(); СПРТовар = СоздатьОбъект("Справочник.Товары"); ДокПлан = СоздатьОбъект("Документ.Планирование"); ДокПлан.Новый(); Для i=номер По Строки Цикл имя = Строка(Excel.Cells(i,Товар).Value); код = Число(Excel.Cells(i,кккк).Value); сумма = Число(Excel.Cells(i,План).Value); Если СПРТовар.НайтиПоКоду(код,0) = 1 Тогда ДокПлан.НоваяСтрока(); ДокПлан.Товар = СПРТОвар.ТекущийЭлемент(); ДокПлан.Сумма = сумма; Иначе Сообщить("Не нашли товар с кодом "+Код); КонецЕсли; КонецЦикла; ДокПлан.Записать(); ОткрытьФорму(ДокПлан.ТекущийДокумент()); КонецФункции вот это работает как надо...номер=номер строки начала чтения файла. (80) спасибо! |
|||
84
Christina_
12.06.12
✎
18:23
|
(82) бывают
|
|||
85
Christina_
12.06.12
✎
18:23
|
(84) всем еще раз спасибо...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |