![]() |
![]() |
|
Чтение данных из листа Excel | ☑ | ||
---|---|---|---|---|
0
jq
25.07.06
✎
14:24
|
Что для этого нужно - создать обработку или процедуру?
|
|||
1
Волшебник
25.07.06
✎
14:25
|
можно даже функцию
|
|||
2
Бригадир 1С
25.07.06
✎
14:26
|
(0) СОМОбъект
|
|||
3
jq
25.07.06
✎
14:27
|
А как создать COM Объект? Sub COM()... ???
|
|||
4
dimoff
25.07.06
✎
14:32
|
Эксель = new COMОбъект("Excel.Application");
Эксель.Workbooks.Add(Путь); Лист = Эксель.Worksheets(1); |
|||
5
jq
25.07.06
✎
14:35
|
А где это писать, в обработке?
И куда тогда вставлять Sub COM() Dim trade As Object Dim Элемент As Object Set obj = CreateObject("V8.ComConnector") Set trade = obj.Connect ("File=""c:\InfoBases\Trade"";Usr=""Director"";") Rem создаем документ Set Документ = trade.Документы.Приходная.СоздатьДокумент() Rem получаем данные из листа Set Контрагент = trade.Справочники.Контрагенты.НайтиПоНаименованию(Application.Cells(1, 2).Value) НомерДокумента = Application.Cells(2, 2).Value Дата = Application.Cells(3, 2).Value Rem записываем полученные данные в документ Документ.Контрагент = Контрагент Документ.Дата = Дата Документ.Номер = НомерДокумента Номер = 6 'Первая строка табличной части НомерСтроки = Application.Cells(Номер, 1).Value Rem в последней строке табличной части будет символ # While НомерСтроки <> "#" Rem получаем данные из листа Set Номенклатура = trade.Справочники.Номенклатура.НайтиПоНаименованию(Application.Cells(Номер, 2).Value) Количество = Application.Cells(Номер, 5).Value Цена = Application.Cells(Номер, 6).Value Сумма = Application.Cells(Номер, 7).Value Rem записываем полученные данные в строку табличной части Set Строка = Документ.Товары.Добавить() Строка.Номенклатура = Номенклатура Строка.Количество = Количество Строка.Цена = Цена Строка.Сумма = Сумма Номер = Номер + 1 НомерСтроки = Application.Cells(Номер, 1).Value Wend Документ.Записать End Sub |
|||
6
АдамДжанавар
25.07.06
✎
14:39
|
(4) Неправильно.
Было: Эксель = new COMОбъект("Excel.Application"); Эксель.Workbooks.Add(Путь); Лист = Эксель.Worksheets(1); Надо: Эксель = new COMОбъект("Excel.Application"); Книга=Эксель.Workbooks.Add(Путь); Лист = Книга.Worksheets(1); |
|||
7
jq
25.07.06
✎
16:26
|
Так как насчет (5)? Или это вообще не в тему?
|
|||
8
jq
25.07.06
✎
16:51
|
Не понял ?
|
|||
9
MikleV
25.07.06
✎
17:05
|
(8) ну чего непонятно.. в (5) вызов и работа с 1С из ёкселя.
тебе наоборот... |
|||
10
jq
25.07.06
✎
17:18
|
(9)Нет это как-раз мне и надо, это пример из книжки, только вот там не написано, куда это вставлять, и как потом обращаться???
|
|||
11
Mort
25.07.06
✎
17:22
|
В * вставь.
В приложение на VB. |
|||
12
jq
25.07.06
✎
17:24
|
(11)А где я его возьму? Я же в 1С
|
|||
13
MikleV
25.07.06
✎
17:24
|
(10) это макрос.. экселевский.. куда вставлять -в документ ексёль.
(там редактор VB есть) обращаться.. хм. GetComObject("testfile.xls",) - в СП посморти ПолучитьКомОбъект. а потом. млин. не помню как макрос запустить. мож кто и подскажет. а, да, проще(понятнее для меня. имхо) было бы это из 1С сделать. |
|||
14
MikleV
25.07.06
✎
17:27
|
Ex = New COMObject("Excel.Application");
Ex.Workbooks.Open(Путь); Ex.Visible = 1; ТекЛист=Ex.WorkSheets(1); Для Ячейка = 1 по 400 цикл Если НЕ ТекЛист.Cells(Ячейка,1).Value = Неопределено тогда Сообщить(Строка(ТекЛист.Cells(Ячейка,1).Value)); Карта = Справочники.Номенклатура.НайтиПоКоду(ИзЧислаВСтроку(ТекЛист.Cells(Ячейка,1).Value)); Если Карта.Пустая() тогда Сообщить(" Пустой элемент " + ТекЛист.Cells(Ячейка,1)); иначе Объект = Карта.ПолучитьОбъект(); Объект.ОсновнойПоставщик = ОсновнойКлиент; Объект.Записать(); конецесли; конецесли; конеццикла; я думаю что проще так.. |
|||
15
dimoff
25.07.06
✎
17:27
|
(6) В чем же разница, милый?
|
|||
16
Добрый
25.07.06
✎
17:28
|
(12) А где ты взял код из (5)?
|
|||
17
Добрый
25.07.06
✎
17:30
|
(16)Вопрос снят, из книжки...
|
|||
18
jq
25.07.06
✎
17:37
|
(16)Это листинг из книги v8: v8: Купил книгу "Профессиональная разработка в системе 1С: предприятие 8"
(13)Не пойму зачем мне макросы? Мне ведь надо это из 1С сделать, так вроде в книжке написано |
|||
19
jq
25.07.06
✎
17:38
|
(14)Это, как я понимаю, на 1С написано? А где это писать, в процедуре модуля (какого)или еще где?
|
|||
20
MikleV
25.07.06
✎
17:40
|
автор опять Питросянить начинаешь..
(19) ну сделай обработку.. в Процедуру КнопкаВыполнитьНажатие() в модуле формы запихни этот код.. |
|||
21
Scooter
25.07.06
✎
17:41
|
это для тебя?
OFF: 2 jq, что там с твоей книжкой поменял? |
|||
22
jq
25.07.06
✎
17:59
|
Сделал как в (20), а там такое...
Sub <<?>>COM() {Обработка.Обработка1.Форма.Форма(27,55)}: Ожидается символ ';' Rem в последней строке табличной части будет символ #<<?>> {Обработка.Обработка1.Форма.Форма(28,26)}: Ожидается ключевое слово 'Цикл' ('Do') While НомерСтроки <> "#"<<?>> Чего не так? |
|||
23
MikleV
25.07.06
✎
18:00
|
(22) я говорил про код из (14).. не забудь там путь к файлу указать..
|
|||
24
jq
25.07.06
✎
18:01
|
Аааа, а почему мой код не катит?
|
|||
25
MikleV
25.07.06
✎
18:06
|
(24) да патаму что твой код написан на языке VISUAL BASIC!!!!!!!!!!!!! и для его исполнения нужна среда , которая поддерживает этот язык.. у тебя же блокнот команды 1С не исполняет..
|
|||
26
smaharbA
25.07.06
✎
20:48
|
Восьмерочники, у вас есть сейф массивы, вам сам бог велел за одну строку данные с листа в 1С передавать (уж если в 7.7 показывал как, то в 8 подавно должно)
|
|||
27
Моха Лёхов
25.07.06
✎
20:50
|
(26) Покажи как в 8-ке, плз.
|
|||
28
ШтушаКутуша
25.07.06
✎
21:02
|
(15) во-1-х: я тебе не "милый" (впрочем,ахтунгам закон не писан)
во-2-х: экземляр может остаться в памяти и...видел висящие процессы? ну про дефрагментацию,про сборку "мусора" памяти,наверное и не стоить говорить, ты по моему далек от мысли. |
|||
29
smaharbA
25.07.06
✎
21:04
|
(27) восьмерку не знаю, но вот как весь лист передать в массив...
arr=WS.UsedRange.Value 'и все могу в семерке написать... |
|||
30
Моха Лёхов
25.07.06
✎
21:05
|
(29) Напиши на 7-ке, я переведу :).
(28) Надо говорить: "Какой я тебе милый, с*ка?" :) |
|||
31
ШтушаКутуша
25.07.06
✎
21:06
|
(30.2) Ок.Понял.
|
|||
32
smaharbA
25.07.06
✎
21:07
|
В семерке нет такого массива, но можно исхитриться...
... Процедура Сформировать2() scr=СоздатьОбъект("MSScriptControl.ScriptControl"); scr.language="javascript"; scr.timeout=-1; oExcel=СоздатьОбъект("Excel.Application"); WB=oExcel.Workbooks.Open("C:\Клиенты.xls"); scr.addobject("WS",WB.Worksheets(1)); arr=scr.eval("new VBArray(WS.UsedRange.Value)"); WB.Close(0); Для л=arr.lbound(1) По arr.ubound(1) Цикл Для к=arr.lbound(2) По arr.ubound(2) Цикл Сообщить(arr.getItem(к,л)); КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
33
ШтушаКутуша
25.07.06
✎
21:07
|
+31 хотя,накуа говорить? и так же видать
|
|||
34
smaharbA
25.07.06
✎
21:08
|
+(32) может и не проканает сейфмасив, но почемубы не попробовать
|
|||
35
ШтушаКутуша
25.07.06
✎
21:09
|
(32) Отлично:век-живи,век-учись!
Я про вот это:"arr=scr.eval("new VBArray(WS.UsedRange.Value)");" Помоему остроумно. |
|||
36
ШтушаКутуша
25.07.06
✎
21:10
|
(34) должно прокатить,ведь safe массивы именно для COM и разработаны.
|
|||
37
Моха Лёхов
25.07.06
✎
21:23
|
(33) Типа "Ахтунга по каментам видно"? (народная поговорка) :)
(32) Ща попробую, отпишусь. |
|||
38
Моха Лёхов
25.07.06
✎
21:23
|
+ а (32) Тянет на книгу знаний, если прокатит :).
|
|||
39
ШтушаКутуша
25.07.06
✎
21:28
|
(38) Пожалуй.
|
|||
40
ШтушаКутуша
25.07.06
✎
21:32
|
(37.1) Пожалуй.
|
|||
41
Моха Лёхов
25.07.06
✎
21:55
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
МС = Новый COMОбъект("MSScriptControl.ScriptControl"); МС.language="javascript"; МС.timeout=-1; ЕА = Новый COMОбъект("Excel.Application"); Книга = ЕА.Workbooks.Open(Путь); МС.addobject("WS",Книга.Worksheets(1)); Масс = МС.eval("new VBArray(WS.UsedRange.Value)"); Книга.Close(0); Для Инд1 = Масс.lbound(1) По Масс.ubound(1) Цикл Для Инд2 = Масс.lbound(2) По Масс.ubound(2) Цикл Сообщить(Масс.getItem(Инд2, Инд1)); КонецЦикла; КонецЦикла; КонецПроцедуры {Форма.Форма(11)}: Метод объекта не обнаружен (lbound) Для Инд1 = Масс.lbound(1) По Масс.ubound(1) Цикл |
|||
42
Моха Лёхов
25.07.06
✎
21:56
|
В чем могут быть грабли?
|
|||
43
Моха Лёхов
25.07.06
✎
22:00
|
Зря я наверное на руссий перевел, запутал только
|
|||
44
Моха Лёхов
25.07.06
✎
22:02
|
scr = Новый COMОбъект("MSScriptControl.ScriptControl");
|
|||
45
Моха Лёхов
25.07.06
✎
22:03
|
(44) Эта строка смущает
|
|||
46
ШтушаКутуша
25.07.06
✎
22:03
|
ИМХО: lbound,может иметь 2 параметра
|
|||
47
Моха Лёхов
25.07.06
✎
22:03
|
(46) Можно подробнее?
|
|||
48
Моха Лёхов
25.07.06
✎
22:05
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
scr = Новый COMОбъект("MSScriptControl.ScriptControl"); scr.language="javascript"; scr.timeout=-1; oExcel=Новый COMОбъект("Excel.Application"); WB=oExcel.Workbooks.Open(Путь); scr.addobject("WS",WB.Worksheets(1)); arr=scr.eval("new VBArray(WS.UsedRange.Value)"); WB.Close(0); Для л=arr.lbound(1) По arr.ubound(1) Цикл Для к=arr.lbound(2) По arr.ubound(2) Цикл Сообщить(arr.getItem(к,л)); КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
49
smaharbA
25.07.06
✎
22:06
|
В восьмерке не пойдет такой код, там надо попробовать просто сразу в массив передать без МССкриптКонтрол
|
|||
50
smaharbA
25.07.06
✎
22:08
|
в восьмерке покакимто причинам Евал возвращает не объект, а в семерке объект
|
|||
51
Моха Лёхов
25.07.06
✎
22:08
|
(49) Почему не пойдет? Причина?
|
|||
52
Моха Лёхов
25.07.06
✎
22:09
|
(50) Возвращает сом-объект, смотрел
|
|||
53
smaharbA
25.07.06
✎
22:10
|
В семерке этот код даже с последующим заполнением ТЗ быстрее чем адо начиная тысяч с 5 строк
|
|||
54
Моха Лёхов
25.07.06
✎
22:12
|
(53) Тут дело в чем-то другом.
|
|||
55
Моха Лёхов
25.07.06
✎
22:13
|
СОМ он и в Африке СОМ.
|
|||
56
smaharbA
25.07.06
✎
22:17
|
Не знаю причину, но и scr.Eval("new Enumerator(GetObject('winmgmts:win32_process').instances_())") возвращает не енумератор (покрайне мере народ так говорит), но тут и ненадо енумерат, а вот с получением данных из екселя нужно передавать в массив
может в 8 проста проканает Масс=Лист.UsedRange.Value |
|||
57
Моха Лёхов
25.07.06
✎
22:20
|
(56) Ща попробую
|
|||
58
Моха Лёхов
25.07.06
✎
22:25
|
oExcel=Новый COMОбъект("Excel.Application");
WB=oExcel.Workbooks.Open(Путь); WS = WB.Worksheets(1); arr = WS.UsedRange.Value; WB.Close(0); Для л=arr.lbound(1) По arr.ubound(1) Цикл Для к=arr.lbound(2) По arr.ubound(2) Цикл Сообщить(arr.getItem(к,л)); КонецЦикла; КонецЦикла; Пишет, что arr - COMSafeArray |
|||
59
Моха Лёхов
25.07.06
✎
22:26
|
Но метод lbound не видит
|
|||
60
smaharbA
25.07.06
✎
22:26
|
Ну все, тогда тебе и лбоунды не нужны, попробуй работать синтакисом восьмерки
|
|||
61
Моха Лёхов
25.07.06
✎
22:28
|
(60) Как с массивом?
|
|||
62
smaharbA
25.07.06
✎
22:30
|
Ну да, как с COMSafeArray, там ведь наверно можно опредилить его размерность ?
|
|||
63
Моха Лёхов
25.07.06
✎
22:32
|
Йес!!!
|
|||
64
Моха Лёхов
25.07.06
✎
22:32
|
Поперло!!!
|
|||
65
Моха Лёхов
25.07.06
✎
22:33
|
Ща код нарисую!!!
|
|||
66
smaharbA
25.07.06
✎
22:35
|
Тока при малых объемах, это не очч быстро, а при больших может заткнуться, но 40000 строк на 20 столбцов секунды за 3 выдергивает, но потом в массиве надо уж искать, но если к примеру ексель файл "нормирован" то самое оно, чем елозить по строкам и столбцам...
Да там массив выходит типа набок положенный, можно и транспонировать(тоже метод екселя), но никчему - затраты времени... |
|||
67
smaharbA
25.07.06
✎
22:45
|
Кстати - и обратно также можно...
типа НачальнаяЯчейка="A1"; КонечнаяЯчейка=ШиринаМассива*ВысотаМассива; //:) незнаю как обозвать Диапазон=Лист.Range(НачальнаяЯчейка+":"+КонечнаяЯчейка); Диапазон.Value=Ексель.application.WorksheetFunction.Transpose(Массив); ... Тока тут Массив как положено должен быть, не "набокулежащим" |
|||
68
smaharbA
25.07.06
✎
22:48
|
Вернее так
... Диапазон=Лист.Range(Лист.Cells(1,1),Лист.Cells(ШиринаМассива,ВысотаМассива)); /// Ну в общем смысл чтобы диапазон равный размеру массива задать |
|||
69
Моха Лёхов
25.07.06
✎
22:50
|
oExcel=Новый COMОбъект("Excel.Application");
WB=oExcel.Workbooks.Open(Путь); WS = WB.Worksheets(1); arr = WS.UsedRange.Value; WB.Close(0); Для л=arr.GetLowerBound(0) По arr.GetUpperBound(0) Цикл Для к=arr.GetLowerBound(1) По arr.GetUpperBound(1) Цикл Сообщить(arr.GetValue(л, к)); КонецЦикла; КонецЦикла; |
|||
70
Моха Лёхов
25.07.06
✎
22:51
|
(69) - рабочий код :)
|
|||
71
Моха Лёхов
25.07.06
✎
22:51
|
В книгу знаний!!!
|
|||
72
jq
26.07.06
✎
10:03
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Excel = New COMОбъект("Excel.Application"); Excel.Workbooks.Open("C:\Documents and Settings\Рабочий стол\Книга1.xls"); Excel.Visible = 1; ТекЛист = Excel.WorkSheets(1); Для Ячейка = 1 По 400 Цикл Если Не ТекЛист.Cells(Ячейка,1).Value = Неопределено Тогда Сообщить(Строка(ТекЛист.Cells(Ячейка,1).Value)); Карта = Справочники.Контрагенты.НайтиПоКоду(ИзЧислаВСтроку(ТекЛист.Cells(Ячейка,1).Value)); Если Карта.Пустая() Тогда Сообщить(" Пустой элемент " + ТекЛист.Cells(Ячейка,1)); Иначе Объект = Карта.ПолучитьОбъект(); Объект.Контрагент = Контрагент; Объект.Записать(); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры Выдает ошибки: {Обработка.Обработка1.Форма.Форма(18,37)}: Переменная не определена (Контрагент) Объект.Контрагент = <<?>>Контрагент; {Обработка.Обработка1.Форма.Форма(12,57)}: Процедура или функция с указанным именем не определена (ИзЧислаВСтроку) Карта = Справочники.Контрагенты.НайтиПоКоду(<<?>>ИзЧислаВСтроку(ТекЛист.Cells(Ячейка,1).Value)); Что это еще за процедура <<?>>ИзЧислаВСтроку??? Что за слово карта - его нет в синтакс-помощнике??? Почему пишим НайтиПоКоду, а не НайтиПоНаименованию??? |
|||
73
jq
26.07.06
✎
10:33
|
up
|
|||
74
Andrey_spb
26.07.06
✎
10:42
|
"Что за слово карта - его нет в синтакс-помощнике???"
:))) |
|||
75
Andrey_spb
26.07.06
✎
10:45
|
ИзЧислаВСтроку убери вобще или напиши Строка()...
Карта - элемент справочника Контрагенты... |
|||
76
MikleV
26.07.06
✎
10:48
|
ого.. малацца. вот это наизобретали..
(72) ну убери..чё за слово.. одно - функция, второе - элемент справочника.. а по наименованию ты сам искать будешь.) если они у тебя уникальны.. |
|||
77
jq
26.07.06
✎
10:51
|
Так откуда у меня возьмется эл-т справочника Карта, если у меня его нет?
|
|||
78
MikleV
26.07.06
✎
10:52
|
(77) млин.. я тебе в качестве примера привёл отрезок кода..
чтобы ты потом сделал из него свой рабочий код.. тут ребята вон описали альтернативный способ.. чего тибе исчо не хватает? |
|||
79
jq
26.07.06
✎
10:57
|
Теперь вроде ясно
|
|||
80
jq
26.07.06
✎
12:22
|
Не ясно только что за слово Cells, приходится догадываться :)
Вот что получилось: Excel = Новый COMОбъект("Excel.Application"); Excel.Workbooks.Open("C:\Documents and Settings\berezin\Рабочий стол\Книга1"); Excel.Visible = 1; ТекЛист=Excel.WorkSheets(1); Документ = Документы.Приходная.СоздатьДокумент(); Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекЛист.Cells(1, 2).Value); НомерДокумента = ТекЛист.Cells(2, 2).Value; Дата = ТекЛист.Cells(3, 2).Value; Документ.Контрагент = Контрагент; Документ.Дата = Дата; Документ.Номер = НомерДокумента; Номер = 6; // 'Первая строка табличной части НомерСтроки = ТекЛист.Cells(Номер, 1).Value; Пока НомерСтроки <> "#" Цикл Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекЛист.Cells(Номер, 2).Value); Количество = ТекЛист.Cells(Номер, 5).Value; Цена = ТекЛист.Cells(Номер, 6).Value; Сумма = ТекЛист.Cells(Номер, 7).Value; Строка = Документ.Товары.Добавить(); Строка.Номенклатура = Номенклатура; Строка.Количество = Количество; Строка.Цена = Цена; //Строка.Сумма = Сумма Номер = Номер + 1; НомерСтроки = ТекЛист.Cells(Номер, 1).Value; КонецЦикла; Документ.Записать(); Ошибка: Поле объекта не обнаружено (Приходная) Документ = Документы.Приходная.СоздатьДокумент(); Я чего-то не пойму, какое поле не обнаружено? Приходная - это новый док-т, кот. я создаю. И еще интерестно, когда я нажимаю выполнить, сначала открывается мой док-т Excel, как запретить это открытие, ведь оно нигде не прописано? |
|||
81
asady
26.07.06
✎
12:29
|
(80) Если в редакторе после слова Документы поставить точку, то появится список. Есть ли в этом списке слово "Приходная"? Ответь
|
|||
82
jq
26.07.06
✎
12:31
|
Нету, я хочу его создать
|
|||
83
Andrey_spb
26.07.06
✎
12:32
|
(80) Cells - ячейки, хотя это по-моему и из кода понятно...
|
|||
84
Andrey_spb
26.07.06
✎
12:33
|
(82) Хочешь - создай!
|
|||
85
asady
26.07.06
✎
12:34
|
(82) Похоже автор не понимает разницы между метаданными и данными.
Автор ты хочешь создать новый объект метаданных или данных? |
|||
86
Andrey_spb
26.07.06
✎
12:36
|
А вобще, прочитай для начала Радченко, например, чем такие вопросы задавать... И пользы больше будет, чем на форуме сидеть...
|
|||
87
jq
26.07.06
✎
12:44
|
(86) Так ведь так в книжке написано
Опять запутали - метаданные, данные... Я даже и не знал об этом. Напишите вкратце, тогда быть может разберусь! |
|||
88
jq
26.07.06
✎
12:46
|
Или надо сначала вручную создать документ с реквизитами, а потом все остальное в него запихивать, как в коде??? Так?
|
|||
89
jq
26.07.06
✎
13:13
|
В цикле:
Пока НомерСтроки <> "#" Цикл Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекЛист.Cells(Номер, 2).Value); Количество = ТекЛист.Cells(Номер, 3).Value; Цена = ТекЛист.Cells(Номер, 4).Value; // Сумма = ТекЛист.Cells(Номер, 7).Value; Строка = Документ.Товары.Добавить(); Строка.Номенклатура = Номенклатура; Строка.Количество = Количество; Строка.Цена = Цена; // Строка.Сумма = Сумма Номер = Номер + 1; // НомерСтроки = ТекЛист.Cells(Номер, 1).Value; КонецЦикла; выдает ошибку:Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x800a03ec) Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекЛист.Cells(Номер, 2).Value); Что это значит? И что это за слово "Номер" в ТекЛист.Cells(Номер, 2).Value??? |
|||
90
jq
26.07.06
✎
13:25
|
up
|
|||
91
asady
26.07.06
✎
13:26
|
(90) ответь на (85)
|
|||
92
Andrey_spb
26.07.06
✎
13:28
|
(87) Не те ты книжки читаешь... Так ты не чему не научишься...
|
|||
93
Andrey_spb
26.07.06
✎
13:29
|
Ну а ошибка потому что в Номер чего-то не того передаешь
|
|||
94
MikleV
26.07.06
✎
13:30
|
ааа.. я в ужосе.. под столом;)
|
|||
95
jq
26.07.06
✎
13:37
|
Блин, не знаю, я хочу создать новый документ - что это данные или метаданные?
|
|||
96
Andrey_spb
26.07.06
✎
13:39
|
(95) Ну если ты хочешь создать документ которого ещё нет в конфигурации то это метаданные...
|
|||
97
jq
26.07.06
✎
13:40
|
Что это за слово "Номер" в ТекЛист.Cells(Номер, 2).Value???
В отоладчике выяснил, что у меня не проходит следующую строку. Написано: Номер = 6; Номер = Номер + 1; Должно быть 6+1=7 строка, 7+1=8 ..., а у меня получается 61, 611, 6111 и еще парочка, а затем ошибка |
|||
98
Andrey_spb
26.07.06
✎
13:42
|
Номер - это номер ячейки по вертикали
|
|||
99
jq
26.07.06
✎
13:42
|
(96)Я уже создал документ вручную, добавил реквизиты и табл. часть с реквизитами. Тогда мне теперь строчку Документ = Документы.Приходная.СоздатьДокумент(); заменить на док-т.открыть() ???
|
|||
100
asady
26.07.06
✎
13:43
|
(100) 100
|
|||
101
Andrey_spb
26.07.06
✎
13:43
|
(97) Сделай так: Номер = Число(Номер) + 1;
|
|||
102
asady
26.07.06
✎
13:43
|
(101) Ветку в юмор, автора в школу!
|
|||
103
jq
26.07.06
✎
13:44
|
(98)А (Номер, 1) - это будет 6+1=7 или 61???
|
|||
104
Andrey_spb
26.07.06
✎
13:44
|
(102) вот-вот и я о том же...
|
|||
105
jq
26.07.06
✎
13:45
|
Да лучше помогли бы разобраться, а не смеяться! Я в книжках этого не нашел
|
|||
106
Andrey_spb
26.07.06
✎
13:45
|
(103) чиво?
|
|||
107
jq
26.07.06
✎
13:45
|
см. (97)
|
|||
108
Andrey_spb
26.07.06
✎
13:49
|
Откуда ты вобще это номер берешь? из Экселя что-ли?
|
|||
109
MikleV
26.07.06
✎
13:50
|
(103) ужоснах.. автор, ты когда за компьютер садишься вилку из розетки выдергивай..
|
|||
110
MikleV
26.07.06
✎
13:51
|
+(109) никак это не будет, это 6 это строка, 1 - столбец..
|
|||
111
jq
26.07.06
✎
13:59
|
Это я понял, просто сейчас ступил.
А почему у меня Номер = Номер + 1 выводит бредятину? |
|||
112
jq
26.07.06
✎
14:01
|
Если сделать как в (101), тогда ошибка Ошибка при получении значения атрибута контекста (Value): Неизвестная ошибка
Количество = ТекЛист.Cells(Номер, 3).Value; Ничего не пойму! |
|||
113
MikleV
26.07.06
✎
14:03
|
(112)Количество = Число(ТекЛист.Cells(Номер, 3).Value);
у тебя в этой ячейке либо пустое значение.. либо.. |
|||
114
jq
26.07.06
✎
14:11
|
Там не пустое значение
|
|||
115
jq
26.07.06
✎
14:16
|
(113)Преобразование значения к типу Число не может быть выполнено
Количество = Число(ТекЛист.Cells(Номер, 3).Value); |
|||
116
Andrey_spb
26.07.06
✎
14:20
|
(114) а ты говоришь не пустое...
|
|||
117
Andrey_spb
26.07.06
✎
14:21
|
И вобще давай уже целиком текст, а то не понятно ничего...
|
|||
118
jq
26.07.06
✎
14:30
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Excel = Новый COMОбъект("Excel.Application"); Excel.Workbooks.Open("C:\Documents and Settings\berezin\Рабочий стол\Книга1"); Excel.Visible = 1; ТекЛист=Excel.WorkSheets(1); Документ = Документы.Документ1.СоздатьДокумент(); Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекЛист.Cells(1, 2).Value); НомерДокумента = ТекЛист.Cells(2, 2).Value; Дата = ТекЛист.Cells(3, 2).Value; Документ.Контрагент = Контрагент; Документ.Дата = Дата; Документ.Номер = НомерДокумента; Номер = 6; НомерСтроки = ТекЛист.Cells(Номер, 1).Value; Пока НомерСтроки <> "#" Цикл Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекЛист.Cells(Номер, 2).Value); Количество = ТекЛист.Cells(Номер, 3).Value; Цена = ТекЛист.Cells(Номер, 4).Value; // Сумма = ТекЛист.Cells(Номер, 7).Value; Строка = Документ.Товары.Добавить(); Строка.Номенклатура = Номенклатура; Строка.Количество = Количество; Строка.Цена = Цена; // Строка.Сумма = Сумма Номер = Номер + 1; НомерСтроки = ТекЛист.Cells(Номер, 1).Value; КонецЦикла; Документ.Записать(); КонецПроцедуры Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x800a03ec) НомерСтроки = ТекЛист.Cells(Номер, 1).Value; |
|||
119
Andrey_spb
26.07.06
✎
14:35
|
Зачем вобще НомерСтроки брать из Excel?
|
|||
120
jq
26.07.06
✎
14:37
|
Так в книжке написано, а как иначе?
|
|||
121
Andrey_spb
26.07.06
✎
14:38
|
Я так понимаю там таблица с товарами, ну и сделай цикл типа:
КолС=ТекЛист.UsedRange.SpecialCells(11).Row; Для н=6 По КолС Цикл КонецЦикла; |
|||
122
jq
26.07.06
✎
14:39
|
Эээ, а можно по русски
|
|||
123
Andrey_spb
26.07.06
✎
14:41
|
(122) Ну чего ещё по-русски тебе?!
|
|||
124
Andrey_spb
26.07.06
✎
14:43
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Excel = Новый COMОбъект("Excel.Application"); Excel.Workbooks.Open("C:\Documents and Settings\berezin\Рабочий стол\Книга1"); Excel.Visible = 1; ТекЛист=Excel.WorkSheets(1); Документ = Документы.Документ1.СоздатьДокумент(); Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекЛист.Cells(1, 2).Value); НомерДокумента = ТекЛист.Cells(2, 2).Value; Дата = ТекЛист.Cells(3, 2).Value; Документ.Контрагент = Контрагент; Документ.Дата = Дата; Документ.Номер = НомерДокумента; КолС=ТекЛист.UsedRange.SpecialCells(11).Row; Для Номер=6 По КолС Цикл Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекЛист.Cells(Номер, 2).Value); Количество = ТекЛист.Cells(Номер, 3).Value; Цена = ТекЛист.Cells(Номер, 4).Value; // Сумма = ТекЛист.Cells(Номер, 7).Value; Строка = Документ.Товары.Добавить(); Строка.Номенклатура = Номенклатура; Строка.Количество = Количество; Строка.Цена = Цена; // Строка.Сумма = Сумма КонецЦикла; Документ.Записать(); КонецПроцедуры |
|||
125
MikleV
26.07.06
✎
14:43
|
(123) UsedRange.SpecialCells(11).Row; бугага.. не, это песня а не тема.)
|
|||
126
jq
26.07.06
✎
14:44
|
Чего это за UsedRange.SpecialCells? По-русски как?
|
|||
127
Andrey_spb
26.07.06
✎
14:45
|
(125) Непонял?
|
|||
128
Andrey_spb
26.07.06
✎
14:45
|
(126) Количество строк это...
|
|||
129
MikleV
26.07.06
✎
14:47
|
(127) да это так.. он тибе попросил по - русски написать команду vb..ну а мине смешно стало.)
|
|||
130
jq
26.07.06
✎
14:47
|
UsedRange? и SpecialCells?
|
|||
131
jq
26.07.06
✎
14:47
|
(129)Ну да, а то не понятно
|
|||
132
Andrey_spb
26.07.06
✎
14:48
|
(129) а-а-а...
|
|||
133
Andrey_spb
26.07.06
✎
14:48
|
Чего непонятно? Говорю же, количество строк!
|
|||
134
Andrey_spb
26.07.06
✎
14:49
|
+ в Экселе...
|
|||
135
jq
26.07.06
✎
14:50
|
А русскими выражениями это не пишется что-ли?
|
|||
136
Andrey_spb
26.07.06
✎
14:52
|
(129) Блин! Я с тобой согласен!
|
|||
137
jq
26.07.06
✎
14:53
|
Стоп! (121)Этот цикл не катит: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Для Номер=6 По КолС Цикл |
|||
138
Andrey_spb
26.07.06
✎
14:55
|
(135) Тебе всё-таки для начала надо чего-нибудь попроще почитать, что бы вобще иметь хотя бы общее представление о программировании...
|
|||
139
MikleV
26.07.06
✎
14:55
|
(136):)
(137) КолС=ТекЛист.UsedRange.SpecialCells(11).Row; //вот здесь вставь сообщить("" + КолС); //вот здесь вставь Для Номер=6 По КолС Цикл |
|||
140
Andrey_spb
26.07.06
✎
14:56
|
(137) Где ты там сравнение увидел вобще?!
|
|||
141
jq
26.07.06
✎
14:59
|
(139)Таже ошибка + сообщение "10" - чего это означает?
(140)В том-то и дело, что я его не вижу, это выдала программа, - типа ошибка. |
|||
142
Andrey_spb
26.07.06
✎
15:03
|
(141) Чё-то ты темнишь...
|
|||
143
jq
26.07.06
✎
15:07
|
Все так и есть, как пишу. Процедура (124) дает ошибку (137) на строку Для Номер=6 По КолС Цикл. И с добавлением (139) тоже самое
|
|||
144
MikleV
26.07.06
✎
15:11
|
(143) ошибка не там..
Excel = Новый COMОбъект("Excel.Application"); Excel.Workbooks.Open("C:\Documents and Settings\berezin\Рабочий стол\Книга1"); Excel.Visible = 1; ТекЛист=Excel.WorkSheets(1); КолС=ТекЛист.UsedRange.SpecialCells(11).Row; Для Номер=6 По КолС Цикл КонецЦикла; не думаю что здесь есть ошибки. |
|||
145
jq
26.07.06
✎
15:12
|
А чего программа тогда сюда ссылается?
|
|||
146
MikleV
26.07.06
✎
15:13
|
Excel = Новый COMОбъект("Excel.Application");
Excel.Workbooks.Open("C:\Documents and Settings\berezin\Рабочий стол\Книга1"); Excel.Visible = 1; ТекЛист=Excel.WorkSheets(1); КолС=ТекЛист.UsedRange.SpecialCells(11).Row; Для Номер=6 По КолС Цикл КонецЦикла; вот так что, тоже ошибка?! |
|||
147
jq
26.07.06
✎
15:18
|
Специально проверил - тоже ошибка!
|
|||
148
Andrey_spb
26.07.06
✎
15:18
|
Excel=Новый COMОбъект("Excel.Application");
Книга=Excel.Workbooks.Open(C:\Documents and Settings\berezin\Рабочий стол\Книга1.xls); ТекЛист=Книга.Worksheets(1); КолС=ТекЛист.UsedRange.SpecialCells(11).Row; Документ = Документы.Документ1.СоздатьДокумент(); Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ТекЛист.Cells(1, 2).Value); НомерДокумента = ТекЛист.Cells(2, 2).Value; Дата = ТекЛист.Cells(3, 2).Value; Документ.Контрагент = Контрагент; Документ.Дата = Дата; Документ.Номер = НомерДокумента; Для Номер=6 По КолС Цикл Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекЛист.Cells(Номер, 2).Value); Количество = ТекЛист.Cells(Номер, 3).Value; Цена = ТекЛист.Cells(Номер, 4).Value; Строка = Документ.Товары.Добавить(); Строка.Номенклатура = Номенклатура; Строка.Количество = Количество; Строка.Цена = Цена; КонецЦикла; Документ.Записать(); |
|||
149
Andrey_spb
26.07.06
✎
15:21
|
+ И Эксель вобще-то закрывать нужно, когда считаешь данные... А то у тебя Экселей в процессах висит наверно уже туева хуча...
|
|||
150
jq
26.07.06
✎
15:23
|
А как их закрыть, я уже спрашивал
|
|||
151
jq
26.07.06
✎
15:24
|
(148)Снова эта ошибка
|
|||
152
MikleV
26.07.06
✎
15:24
|
(150)xl.Quit();
|
|||
153
Andrey_spb
26.07.06
✎
15:26
|
(151) А ты где это вобще всё пишешь?
|
|||
154
Andrey_spb
26.07.06
✎
15:26
|
+ А там нету случайно реквизита Номер?
|
|||
155
MikleV
26.07.06
✎
15:27
|
(154)нда. телепат однако)
|
|||
156
jq
26.07.06
✎
15:29
|
Пишу в модуле формы обработки, реквизиты только в форме док-та
|
|||
157
Andrey_spb
26.07.06
✎
15:30
|
(156) И у обработки нету реквизита Номер?
|
|||
158
jq
26.07.06
✎
15:30
|
Excel.Quit(); не закрывает его
|
|||
159
jq
26.07.06
✎
15:30
|
(157)Нету, а разве надо?
|
|||
160
jq
26.07.06
✎
15:31
|
+(159)Вру, есть Номер, Контрагент и Дата
|
|||
161
Andrey_spb
26.07.06
✎
15:31
|
(159) В том-то и дело что не надо...
|
|||
162
Andrey_spb
26.07.06
✎
15:33
|
(160) И Номер наверно ещё какого-нибудь ссылочного типа... Удали его нах!
|
|||
163
jq
26.07.06
✎
15:34
|
Теперь: Ошибка при вызове метода контекста (Записать): Не задана дата документа
Документ.Записать(); Может и реквизит Дата удалить? |
|||
164
Andrey_spb
26.07.06
✎
15:37
|
(163) :)) Удали и обработку удали и конфигуратор закрой и никогда больше не открывай!!!
|
|||
165
Andrey_spb
26.07.06
✎
15:40
|
Дату не судьба задать?
Дата = ТекЛист.Cells(3, 2).Value; // вот здесь в ячейке пусто |
|||
166
jq
26.07.06
✎
15:40
|
Или надо написать типа дата=получитьТекДату?
|
|||
167
Andrey_spb
26.07.06
✎
15:41
|
(166) Ну напиши Дата=ТекущаяДата(); И не парь мозги...
|
|||
168
MikleV
26.07.06
✎
15:43
|
у тебя чего в ячейке ТекЛист.Cells(3, 2).Value;?
у тебя вообще в ёкселе дата документа есть? |
|||
169
jq
26.07.06
✎
15:46
|
Есть дата- 3 строка, 2 колонка
|
|||
170
jq
26.07.06
✎
15:49
|
Хе-хе, работает, только почему-то количество и цены записались, а номенклатура -нет
|
|||
171
MikleV
26.07.06
✎
15:57
|
(169) в каком формате?
|
|||
172
jq
26.07.06
✎
16:01
|
Тип - спр.ссылка.номенклатура
|
|||
173
Andrey_spb
26.07.06
✎
16:03
|
(172) Ну ё-моё! Ну не находит по твоим наименованиям ничего в спр.
|
|||
174
Andrey_spb
26.07.06
✎
16:04
|
А вобще прислушайся к совету в (164)
|
|||
175
jq
26.07.06
✎
16:05
|
А контрагент тоже не записался. Такое впечатление, что записываются только числа, строки - нет
|
|||
176
MikleV
26.07.06
✎
16:08
|
(175) ну посморти значение в ёкселе..код контрагента..
какой он, числовой, строковый.. потом значение кода в 1с.. и поимёшь.. |
|||
177
jq
26.07.06
✎
16:17
|
Вот так правильно
Процедура КнопкаВыполнитьНажатие(Кнопка) Excel = Новый COMОбъект("Excel.Application"); Excel.Workbooks.Open("C:\Documents and Settings\berezin\Рабочий стол\Книга1"); Excel.Visible = 1; ТекЛист=Excel.WorkSheets(1); Документ = Документы.Документ1.СоздатьДокумент(); Контрагент = (ТекЛист.Cells(1, 2).Value); НомерДокумента = ТекЛист.Cells(2, 2).Value; Дата = ТекЛист.Cells(3, 2).Value; Документ.Контрагент = Контрагент; Документ.Дата = ТекущаяДата(); Документ.Номер = НомерДокумента; Номер = 6; НомерСтроки = ТекЛист.Cells(Номер, 1).Value; Пока НомерСтроки <> "#" Цикл Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ТекЛист.Cells(Номер, 2).Value); Количество = ТекЛист.Cells(Номер, 3).Value; Цена = ТекЛист.Cells(Номер, 4).Value; // Сумма = ТекЛист.Cells(Номер, 7).Value; Строка = Документ.Товары.Добавить(); Строка.Номенклатура = Номенклатура; Строка.Количество = Количество; Строка.Цена = Цена; // Строка.Сумма = Сумма Номер = Номер + 1; НомерСтроки = ТекЛист.Cells(Номер, 1).Value; КонецЦикла; Документ.Записать(); Excel.Quit(); Документ.Открыть(); КонецПроцедуры |
|||
178
jq
27.07.06
✎
10:22
|
Здесь все просто - в Excele тип строка, у реквизита тоже.
Интересует еще такой вопрос, как быть, если в документе тип у поля - Спр.Ссылка.Организации, а в Excele - строка. И соответственно не происходит записи. |
|||
179
MikleV
27.07.06
✎
10:23
|
найди организацию в 1с по значению того реквизита, который у тебя в строке Excel.
|
|||
180
jq
27.07.06
✎
10:25
|
Не понял. У меня вообще пустая база.
|
|||
181
Andrey_spb
27.07.06
✎
10:30
|
(180) Ну а чего ж ты хочешь?!! Если у тебя база пустая?
|
|||
182
MikleV
27.07.06
✎
10:31
|
(180) Создай Организацию.. в справочнике Организации..ручками.
|
|||
183
jq
27.07.06
✎
10:32
|
Так я хочу из Excel все записать в док-т Оприходование товаров
|
|||
184
MikleV
27.07.06
✎
10:35
|
(183) ты на какую оргнизацию приходовать собрался.. которой нет?
ну сделай так.. Справочники.организации.СоздатьОбъект(); |
|||
185
Andrey_spb
27.07.06
✎
10:35
|
(183) Ну..., а в док. ОприходованиеТоваров реквизит Организация - это СправочникСсылка.Организации? Вот и проверяй есть ли элемент с таким Наименованием или Кодом, по чему ты там ищешь? Нет так добавляй....
|
|||
186
jq
27.07.06
✎
10:42
|
Справочники.организации.СоздатьОбъект("Организация1"); Так?
А потом так? Организация = ТекЛист.Cells(1, 2).Value;) Если Организация из Спр.организации тогда... Или так? Организация = Спр.Организации.НайтиПоНаименованию(Строка(ТекЛист.Cells(1, 2).Value)); |
|||
187
MikleV
27.07.06
✎
10:45
|
Организация = ТекЛист.Cells(1, 2).Value;)
ВремОрг = Справочники.организации.НайтиПОРеквизиту("ТвойРеквизит",Организация); Если ВремОрг.Пустая() тогда Справочники.Организации.СоздатьОбъект(); Конецесли; |
|||
188
jq
27.07.06
✎
10:48
|
ВремОрг - это что значит - временная организация?
Глупый вопрос: реквизит - который у док-та, да? |
|||
189
MikleV
27.07.06
✎
10:51
|
тьху..
Организация = ТекЛист.Cells(1, 2).Value;) Если Справочники.организации.НайтиПОРеквизиту("ТвойРеквизит",Организация).Пустая() тогда Справочники.Организации.СоздатьОбъект(); Конецесли; рекизит который есть у элемента справочника организации. его значение у тебя в ячейке xl. |
|||
190
jq
27.07.06
✎
11:22
|
(189)Опять пишет про несоответствие типов
|
|||
191
Stilet
27.07.06
✎
12:00
|
(190) Твоя ошибка не в коде по большому счету, а в отсуствии понимания 8.0 как таковой. Тебе могут ответить на кучу вопросов, но пока ты не поймешь разница , скажем между ссылкой,объектом и менеджером документа - ты просто не врубишься в код. Да и вообще - начни с концепции - регистры,движения и пр..
|
|||
192
jq
27.07.06
✎
12:03
|
Справочники.Организации.СоздатьОбъект(); ничего не создается, какие параметры должны быть?
|
|||
193
MikleV
27.07.06
✎
12:17
|
Организация = ТекЛист.Cells(1, 2).Value;)
Если Справочники.организации.НайтиПОРеквизиту("ТвойРеквизит",Организация).Пустая() тогда Нов = Справочники.Организации.СоздатьОбъект(); Нов.Реквизит1 = бла- бла - бла; -- -- Нов.Записать(); Конецесли; автор.. стыдно должно быть. это не верх программирования и не сложный вопрос.. почитай чего - нить, в самом деле.. |
|||
194
Эфиоп
27.07.06
✎
14:53
|
Как создать новый файл Эксель и сохранить его с произвольным именем?
|
|||
195
MikleV
27.07.06
✎
14:55
|
получитьCOMобъект.. в СП посмотри..
|
|||
196
Эфиоп
27.07.06
✎
15:13
|
File = ПолучитьCOMОбъект("C:\123.xls","Excel.Application");
Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: Интерфейс не поддерживается |
|||
197
Эфиоп
27.07.06
✎
15:14
|
+196 (195)так она хочет обратиться уже к имеющемуся файлу, а мне нужен новый.
|
|||
198
Andrey_spb
27.07.06
✎
15:18
|
(197) 100 раз уже было...
Excel = Новый COMОбъект("Excel.Application"); Книга=Excel.Workbooks.Add(); |
|||
199
Эфиоп
27.07.06
✎
15:21
|
(198) Епта, я сохранить не могу с именем файла!!!
(195), (198) Смотрите (194)! |
|||
200
MikleV
27.07.06
✎
15:22
|
(197)File = ПолучитьCOMОбъект(,"Excel.Application");
|
|||
201
MikleV
27.07.06
✎
15:24
|
(199) Книга.SavaAs("C:\sdfsdf.xls");
|
|||
202
jq
27.07.06
✎
15:24
|
(193)Ошибка при вызове метода контекста (Записать): Операция не выполнена!
Нов.Записать(); Служебное сообщение:Перед записью в элементе справочника "Номенклатура" необходимо заполнить "базовая единица"! Откуда эта баз. единица, если эл-т справочника создается новый??? Кстати, а где определить имя этого нового эл-та в (193)? |
|||
203
MikleV
27.07.06
✎
15:24
|
(199)Книга.SaveAs("sdf.xls");
|
|||
204
Эфиоп
27.07.06
✎
15:26
|
(200) ПитсдеТЗ! ты сам Синтаксис читал? Там даже екземпл есть, вот он:
// Получение объекта COM, соответствующего файлу Таб = ПолучитьCOMОбъект("C:\DATA\DATA.XLS"); // Создание нового экземпляра объекта Таб = ПолучитьCOMОбъект("", "Excel.Application"); // Получение активного объекта Таб = ПолучитьCOMОбъект( , "Excel.Application"); |
|||
205
MikleV
27.07.06
✎
15:26
|
(202) в поиск. это я объяснять не буду.. и думаю никто не будет.. тема уже столько раз обсуждалась..
Справочники.ЕдиницыИзмерения.. откуда бы ещё ей взятся |
|||
206
Эфиоп
27.07.06
✎
15:26
|
(203) Ща посмотрю
|
|||
207
MikleV
27.07.06
✎
15:28
|
(204) чё ты орёшь как потерпевший.. кавычки забыл. это да.
|
|||
208
jq
27.07.06
✎
15:28
|
(205)Я создаю новый эл-т справочника и не добавляю такой реквизит (ед.измерения), почему же программа на него ссылается?
|
|||
209
Andrey_spb
27.07.06
✎
15:31
|
(208) Смотри в модуле объект ПриЗаписи()
|
|||
210
Andrey_spb
27.07.06
✎
15:34
|
а это новый файл в Экселе:
Excel = Новый COMОбъект("Excel.Application"); Книга=Excel.Workbooks.Add(); Книга.SaveAs(ИмяФайла); Зачем получать СОМОбъект? Это извращение какое-то... |
|||
211
MikleV
27.07.06
✎
15:37
|
(208) потому что у валенков должна быть единица измерения штуки.. ты ж их как то хранить будешь.. или кг.. какая разница.. главное чтобы она была(ед изм.)
т.е. как происходит - при создании элемента справочника надо ещё создавать и единицу измерения. |
|||
212
jq
27.07.06
✎
15:39
|
Написал Нов.БазоваяЕдиницаИзмерения = "шт";, а все-равно таже ошибка
|
|||
213
MikleV
27.07.06
✎
15:39
|
(210) сам ты извращенец)) а методом Новый COMObject ты чего делаешь?
Новый COMObject("Excel.Application"); и GetCOMObject("","Excel.Application") думаю что они равноценны.. |
|||
214
MikleV
27.07.06
✎
15:40
|
(212) я ж говорю.. клиника..
Нов.БазоваяЕдиницаИзмерения - тип - ссылка на элемент справочника единицы измерения.. |
|||
215
jq
27.07.06
✎
15:51
|
Так что-ли?
Код = ТекЛист.Cells(Номер, 1).Value; Ссылка = Справочники.Номенклатура.НайтиПоКоду(Код); Если Ссылка.Пустая() Тогда Нов = Справочники.Номенклатура.СоздатьЭлемент(); Нов.Код = Код; Нов.Наименование = ТекЛист.Cells(Номер, 2).Value; БазЕдИзм = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); Нов.БазоваяЕдиницаИзмерения = БазЕдИзм; Нов.Записать(); |
|||
216
jq
27.07.06
✎
15:58
|
Вернее так
Код = ТекЛист.Cells(Номер, 1).Value; Ссылка = Справочники.Номенклатура.НайтиПоКоду(Код); Если Ссылка.Пустая() Тогда Нов = Справочники.Номенклатура.СоздатьЭлемент(); Нов.Код = Код; Нов.Наименование = ТекЛист.Cells(Номер, 2).Value; БазЕдИзм = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); БазЕдИзм.Наименование = "шт"; Нов.БазоваяЕдиницаИзмерения = БазЕдИзм; Нов.Записать(); Все-равно пишет, что баз.ед.изм не задана |
|||
217
Эфиоп
27.07.06
✎
16:06
|
А как создать каталог, в который запишется файл?
|
|||
218
MikleV
27.07.06
✎
16:07
|
(216) нда..я тебя малясь дезинформировал.. суть от этого не меняестся.. тип у БазовойЕдиницыИзмерения элемент справочника КлассификаторЕдиницИзмерения..кстати, он скорее всего уже создан.. посморти в пользовательском режиме.. если нет, создай..
|
|||
219
Andrey_spb
27.07.06
✎
16:14
|
(217) Например так:
СоздатьКаталог("C:\Temp"); |
|||
220
jq
27.07.06
✎
16:20
|
Точно, у БазовойЕдиницыИзмерения тип СправочникСсылка.КлассификаторЕдиницИзмерения, и этот эл-т уже создан.
Так как тогда вытянуть оттуда ед.изм., совсем запутался? БазЕдИзм = Справочники.КлассификаторЕдиницИзмерения; БазЕдИзм.Наименование = "шт"; Нов.БазоваяЕдиницаИзмерения = БазЕдИзм; Так? |
|||
221
MikleV
27.07.06
✎
16:21
|
(220) БазЕдИзм = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
|
|||
222
Andrey_spb
27.07.06
✎
16:22
|
БазЕдИзм=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
// можно так, если она там уже есть конечно... |
|||
223
Andrey_spb
27.07.06
✎
16:22
|
(221) опередил....
|
|||
224
jq
27.07.06
✎
16:46
|
Хех, я думал будет группа, а получился список.
|
|||
225
jq
27.07.06
✎
17:23
|
Только что все работало.
Добавил НомГруппа = Справочники.НоменклатурныеГруппы.СоздатьГруппу("Основная"); Нов.НоменклатурнаяГруппа = НомГруппа; Нов.Код = "001"; Пишет, что много фактических параметров. А каких именно? |
|||
226
MikleV
27.07.06
✎
17:27
|
(225)СоздатьГруппу (CreateFolder)
Синтаксис: СоздатьГруппу() Возвращаемое значение: Тип: СправочникОбъект. Описание: Создает новую группу справочника. Пример: НовыйОбъект = Справочники["Контрагенты"].СоздатьГруппу(); НовыйОбъект.Наименование = "Покупатели"; НовыйОбъект.Записать(); вот скажи мне.. где там написано что в метод СоздатьГруппу можно передавать параметр |
|||
227
jq
28.07.06
✎
14:30
|
СсылкаНомГр = Справочники.НоменклатурныеГруппы;
Если СсылкаНомГр.ПустаяСсылка() Тогда НомГр = Справочники["Номенклатура"].СоздатьГруппу(); НомГр.Наименование = "Основная"; НомГр.Записать(); КонецЕсли; Ошибка: Преобразование значения к типу Булево не может быть выполнено Если СсылкаНомГр.ПустаяСсылка() Тогда До того, как добавил условие если...тогда - все работало, а теперь нет, в чем дело? |
|||
228
Andrey_spb
28.07.06
✎
14:34
|
А это по твоему на чё ссылка: СсылкаНомГр?
|
|||
229
jq
28.07.06
✎
14:49
|
Не, вот так
Пока НомерСтроки <> "#" Цикл КодНомГр = Справочники.НоменклатурныеГруппы; СсылкаНомГр = Справочники.НоменклатурныеГруппы.НайтиПоКоду(КодНомГр); Если СсылкаНомГр.Пустая() Тогда НомГр = Справочники["Номенклатура"].СоздатьГруппу(); НомГр.Наименование = "Основная"; НомГр.Записать(); КонецЕсли; Почему-то создается сразу две одинаковые группы, из-за чего это? И почему, если группа уже создана,то создается еще и еще, в условии же сказано: Если СсылкаНомГр.Пустая...? |
|||
230
jq
28.07.06
✎
15:06
|
up
|
|||
231
MikleV
28.07.06
✎
15:11
|
КодНомГр = Справочники.НоменклатурныеГруппы; - это чего такое
\|/ СсылкаНомГр = Справочники.НоменклатурныеГруппы.НайтиПоКоду(КодНомГр); |
|||
232
jq
28.07.06
✎
15:16
|
Ну, типа я ищу по коду.
|
|||
233
jq
28.07.06
✎
15:18
|
А как тогда проверить есть ли такая группа или нет?
|
|||
234
Andrey_spb
28.07.06
✎
15:18
|
(232) Ну типа и ищи по коду, а ты чё делаешь? КодНомГр = Справочники.НоменклатурныеГруппы;
|
|||
235
jq
28.07.06
✎
15:26
|
Так я вроде так и делаю
СсылкаНомГр = Справочники.НоменклатурныеГруппы.НайтиПоКоду(XYZ); А что тогда писать вместо "XYZ"? |
|||
236
mx-daemon
28.07.06
✎
15:59
|
(69) В указанном случае перебор лучше осуществлять
с помощью цикла Для Каждого (For Each) |
|||
237
MikleV
28.07.06
✎
16:00
|
(235) ЗНАЧЕНИЕ..
а Справочники.НоменклатурныеГруппы; - это Справочник в целом.. вернее, ссылка на справочник.. |
|||
238
jq
28.07.06
✎
16:07
|
(237)Так где я возьму значение, если такой группы еще нет. Я же ее создать хочу
|
|||
239
MikleV
28.07.06
✎
16:13
|
(238) бери код из екселя.. если код группы неважен поставь автонумерацию в справочнике и не мучайся.
|
|||
240
jq
28.07.06
✎
16:23
|
Автонумерация стоит, тогда вообще становится непонятно, как проверять ссылку на пустоту. А почему у меня две группы создаются???
|
|||
241
MikleV
28.07.06
✎
16:33
|
Пока НомерСтроки <> "#" Цикл
КодНомГр = Справочники.НоменклатурныеГруппы; СсылкаНомГр = Справочники.НоменклатурныеГруппы.НайтиПоКоду(КодНомГр); Если СсылкаНомГр.Пустая() Тогда НомГр = Справочники["Номенклатура"].СоздатьГруппу(); НомГр.Наименование = "Основная"; НомГр.Записать(); КонецЕсли; НомерСтроки - вот и создаётся 2..(в цикле две итерации) искать уже созданную? либо по коду либо по одному из реквизитов.. |
|||
242
jq
28.07.06
✎
16:39
|
Где две итерации? СоздатьГруппу написано 1 раз. Надо что-ли вне цикла это писать? И еще, когда код доходит до 9, то пишет: код не уникален
|
|||
243
MikleV
28.07.06
✎
16:56
|
(242) скажи мне , сколько у тебя строк с группами в файле xl?
|
|||
244
jq
31.07.06
✎
10:40
|
КодНомГр = Справочники.НоменклатурныеГруппы;
СсылкаНомГр = Справочники.НоменклатурныеГруппы.НайтиПоКоду(КодНомГр); Если СсылкаНомГр.Пустая() Тогда НомГр = Справочники["Номенклатура"].СоздатьГруппу(); НомГр.Наименование = "Основная"; НомГр.Записать(); КонецЕсли; Пока НомерСтроки <> "#" Цикл Код = ТекЛист.Cells(Номер, 1).Value; Ссылка = Справочники.Номенклатура.НайтиПоКоду(Код); Если Ссылка.Пустая() Тогда Нов = Справочники.Номенклатура.СоздатьЭлемент(); Нов.Код = Код; Нов.Наименование = ТекЛист.Cells(Номер, 2).Value; Нов.НаименованиеПолное = ТекЛист.Cells(Номер, 3).Value; ..... Нов.НоменклатурнаяГруппа = НомГр.Наименование; Нов.Записать(); КонецЕсли; Почему у меня в форме списка в колонку НоменклатурнаяГруппа не записывается название группы??? Что не так? |
|||
245
jq
31.07.06
✎
11:35
|
up
|
|||
246
Эфиоп
04.08.06
✎
14:01
|
Если это:
файл = Новый ComОбъект("Excel.Application") - COM соединение, тогда как создать OLE соединение? |
|||
247
Zoomer
04.08.06
✎
14:29
|
(246) файл = Новый ComОбъект("Excel.Application") - это OLE. COM используется тогда, когда вызываемое приложение заточено под COM. Да и принципиальная разница у этих интерфейсов небольшая.
|
|||
248
bahti78
09.08.06
✎
13:53
|
я не умею програмировать на 1 с как быстро научиться програмировать бесплатно
|
|||
249
Geza
09.08.06
✎
14:15
|
(248) Убей себя и родись заново.
Дешево, но результат не гарантирован |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |