|
Загрузка из dbf в 1с | ☑ | ||
---|---|---|---|---|
0
pv94384
10.08.11
✎
09:49
|
Хочу выгрузить данные из файла dbf в 1с, написал обработку, но она почему-то не работает... При нажатии кнопки "Выполнить" выдает сообщение "Не смогли открыть базу". В чем причина?
Процедура КнопкаВыполнитьНажатие(Кнопка) База = Новый XBase; База.Кодировка=КодировкаXBase.OEM; База.ОткрытьФайл("C:\Users\Владимир\Desktop\1C_Отчеты, обработки, запросы\09-01CH.dbf"); Если База.Открыта() тогда Предупреждение("База Открыта",2); База.Первая(); Счетчик = 1; Пока Не База.ВКонце() Цикл Чеки = Справочники.Чеки.СоздатьОбъект(); СтрокиЧеков = Справочники.СтрокиЧеков.СоздатьЭлемент(); Чеки.Дата = СокрЛП(База.ПолучитьЗначениеПоля("TIME_CH")); Чеки.СуммаСкидки = СокрЛП(База.ПолучитьЗначениеПоля("SKIDKA")); Чеки.СуммаНал = СокрЛП(База.ПолучитьЗначениеПоля("NAL")); Чеки.Сумма = СокрЛП(База.ПолучитьЗначениеПоля("SUMMA")); Чеки.Записать(); База.Следующая(); счетчик = счетчик + 1; КонецЦикла; Иначе Предупреждение("Не смогли открыть базу!!!",2); КонецЕсли; База.ЗакрытьФайл(); КонецПроцедуры |
|||
49
Kreont
10.08.11
✎
10:54
|
(43) Такой код можешь выполнить, и посмотреть на результат?
Процедура КнопкаВыполнитьНажатие(Кнопка) База = Новый XBase; База.Кодировка=КодировкаXBase.OEM; База.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH.dbf"); Если База.Открыта() тогда База.Первая(); Сообщить(СокрЛП(База.ПолучитьЗначениеПоля("TIME_CH"))); КонецЦикла; Иначе Предупреждение("Не смогли открыть базу!!!",2); КонецЕсли; База.ЗакрытьФайл(); КонецПроцедуры |
|||
50
pv94384
10.08.11
✎
10:55
|
(45) Точка останова пролетает...
|
|||
51
pv94384
10.08.11
✎
10:57
|
(49) отсутствует начало цикла
|
|||
52
Vladal
10.08.11
✎
10:57
|
Я лепил обмен через ДБФ и пример из СП очень даже работает.
// Максимальное значение поля COST xB.Первая(); МаксСтоимость = 0 ; Пока Не xB.ВКонце() Цикл Если xB.COST > МаксСтоимость Тогда МаксСтоимость = xB.COST; КонецЕсли; xB.Следующая(); КонецЦикла; |
|||
53
Vladal
10.08.11
✎
10:58
|
(49) Всё правильно? Конец цикла внутри Если???
Если База.Открыта() тогда ... Сообщить(СокрЛП(База.ПолучитьЗначениеПоля("TIME_CH"))); КонецЦикла; Иначе ... КонецЕсли; |
|||
54
Kreont
10.08.11
✎
10:58
|
+(49) Ух и написал :)
Правильно так: Процедура КнопкаВыполнитьНажатие(Кнопка) База = Новый XBase; База.Кодировка=КодировкаXBase.OEM; База.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH.dbf"); Если База.Открыта() тогда База.Первая(); Пока Не База.ВКонце() Цикл // <== пропустил 1 :) Сообщить(СокрЛП(База.ПолучитьЗначениеПоля("TIME_CH"))); База.Следующая(); / <== пропустил 2 :) КонецЦикла; Иначе Предупреждение("Не смогли открыть базу!!!",2); КонецЕсли; База.ЗакрытьФайл(); КонецПроцедуры |
|||
55
Wobland
10.08.11
✎
10:59
|
(40) КоличествоЗаписей()=3 и одновременно ВКонце()=Истина? ползут по пустыне три черепашки
(53) ну лишнего скопипастил человек |
|||
56
Vladal
10.08.11
✎
10:59
|
(47) +(0) Ага. И русские буквы. Я лечил заключением пути к файлу в кавычки - если вдруг при выборе файла попадет длинная строка или пробел, xBase на нём спотыкается.
|
|||
57
Kreont
10.08.11
✎
10:59
|
(46) насчет кода чужого я неверующий :))))
|
|||
58
pv94384
10.08.11
✎
11:00
|
(54) Выводит данные из столбца время
|
|||
59
Kreont
10.08.11
✎
11:01
|
(58) Ну наконец то :)
|
|||
60
Vladal
10.08.11
✎
11:01
|
Если не решишь, я вечерком тебе скину свою обработку - тупая выгрузка и загрузка справочника в ДБФ.
Интерфейс, кстати, тоже такой, как и на скрине ;) |
|||
61
Wobland
10.08.11
✎
11:01
|
(58) так что ж ты нам мозх любишь, что в цикл не заходит?
|
|||
62
Kreont
10.08.11
✎
11:03
|
+(61) Я уже не раз замечал что нормальный способ для многих не через отладчик, а через Сообщить() что б развеять все неясности :)))
|
|||
63
Wobland
10.08.11
✎
11:04
|
куда катится мир... Сообщить() вместо точки останова
|
|||
64
pv94384
10.08.11
✎
11:04
|
(61) так а почему он точки останова в нем не видит? Хоть все строки отметь...
И вопрос остается в том, почему данные не записываются в справочник? |
|||
65
Vladal
10.08.11
✎
11:04
|
ИМХО, конструкция База.ПолучитьЗначениеПоля("TIME_CH") громоздкая.
Удобнее так: База.Cod_CH, База.Time_Ch, База.Vozvrat и т.д. |
|||
66
Vladal
10.08.11
✎
11:05
|
(64) А сеанс Предприятия подключен к Отладчику? Меню отладка - Подключение
|
|||
67
lubja
10.08.11
✎
11:05
|
а я уж думала там мистика какая-то... записи, но сразу ВКонце()...
|
|||
68
lubja
10.08.11
✎
11:05
|
*3 записи
|
|||
69
Генератор
10.08.11
✎
11:06
|
а какого типа реквизиты у справочника? строка?
|
|||
70
Wobland
10.08.11
✎
11:06
|
(64) ну сделай
Попытка Чек.Записать(); Сообщить("Чек "+Чек+" записан"); Исключение Соощить(ОписаниеОшибки()); Сообщить("Чек "+Чек+" не записан"); |
|||
71
pv94384
10.08.11
✎
11:07
|
(66) всё подключено, раньше же пользовался.. Ещё раз перепроверил
|
|||
72
Wobland
10.08.11
✎
11:08
|
(69) имхо пофих. ругнулся бы на ошибку преобразования, ТС бы заметил. А если преобразование проходит, то и записываться должно несмотря на возможную ересь в данных
|
|||
73
lubja
10.08.11
✎
11:08
|
(70) без попытки ругнулось бы страшно...
|
|||
74
pv94384
10.08.11
✎
11:08
|
(69) тип число
|
|||
75
lubja
10.08.11
✎
11:09
|
(74) все число?! и дата? :)
|
|||
76
Wobland
10.08.11
✎
11:09
|
(73) я больше для ОписаниеОшибки() предложил
|
|||
77
Wobland
10.08.11
✎
11:10
|
(74) красавец! СокрЛП в числовой реквизит
|
|||
78
Генератор
10.08.11
✎
11:10
|
все-таки проверь на наличие элементов с незаполненными реквизитами
|
|||
79
pv94384
10.08.11
✎
11:11
|
(77) в любом случае ошибку бы выдавал
|
|||
80
Wobland
10.08.11
✎
11:12
|
(79) если работает, это не говорит о ясности в голове. что по поводу (70)?
|
|||
81
pv94384
10.08.11
✎
11:14
|
(70)(80) чек записан
|
|||
82
lubja
10.08.11
✎
11:17
|
(81) тогда почему у тя возник вопрос, раз чек записан?
|
|||
83
pv94384
10.08.11
✎
11:18
|
(82) обновляю справочник, его там нет
|
|||
84
Wobland
10.08.11
✎
11:19
|
странно, не 86й...
(82) автор его просто не видит. отборы там всякие, иерархические просмотры... |
|||
85
lubja
10.08.11
✎
11:19
|
(83) в списке справочника никаких отборов не стоит?
|
|||
86
Wobland
10.08.11
✎
11:20
|
(83) узнай код у свежезаписанного элемента, упорядочи список по коду, сними иерархический просмотр, отключи отборы и ищи
|
|||
87
pv94384
10.08.11
✎
11:26
|
Всё дело в отборах, Спасибо!
(60) Жду обработку на [email protected] |
|||
88
Vladal
10.08.11
✎
11:41
|
(87) Ок.
|
|||
89
pv94384
10.08.11
✎
12:48
|
B еще такой вопрос: Как загрузить 2 файла дбф сразу?
|
|||
90
ДенисЧ
10.08.11
✎
12:50
|
(89) Сначала один, потом другой :-0
|
|||
91
pv94384
10.08.11
✎
12:53
|
Сделал так
База.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH.dbf"); База.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH_.dbf"); Пишет перед выполнением операции нужно закрыть базу |
|||
92
Wobland
10.08.11
✎
12:54
|
(91) а что по этому поводу думат Капитан Очевидность?
|
|||
93
pv94384
10.08.11
✎
12:56
|
(92) Наверное то, что я у базы забыл единичку приписать ))
|
|||
94
Kreont
10.08.11
✎
12:56
|
(90) :))
(91) Сначала выпей что есть в старом стакане "База", а потом доливай :) |
|||
95
pv94384
10.08.11
✎
13:04
|
Следущий вопрос: Две базы дбф "Чеки" и "СтрокиЧеков" с общими полями "KOD_CH" и "CHECK_ID". Как мне сделать, чтобы строки чеков присваивались нужному чеку?
|
|||
96
Wobland
10.08.11
✎
13:05
|
загрузить в ТЗ и соединить запросом? хотя правильный ответ: юзать ТЧ
|
|||
97
pv94384
10.08.11
✎
13:07
|
(96)А конкретнее? Может есть где кусок кода?
|
|||
98
Wobland
10.08.11
✎
13:09
|
твоя структура метаданных уникальна. ещё никто и никогда под такое не писал
|
|||
99
pv94384
10.08.11
✎
13:13
|
(98) О да ) Сам офигеваю )
Ну так что по делу? |
|||
100
Нуф-Нуф
10.08.11
✎
13:14
|
100
|
|||
101
palpetrovich
10.08.11
✎
13:16
|
(99) пилять, это как раз по-делу и есть!
выбрось нафик свою конфу и пойди уже наконец почитай книжки |
|||
102
pv94384
10.08.11
✎
13:18
|
(101) В любом случае книжки без практики ничто... Кстати книги под рукой..
|
|||
103
palpetrovich
10.08.11
✎
13:19
|
(102) у тебя что, конфа на одних справочниках?
|
|||
104
pv94384
10.08.11
✎
13:26
|
(103) Конфа - обычная УТ, просто добавлено пару справочников, документов, ...
Так как мне соединить Чеки со строками чеков? |
|||
105
Wobland
10.08.11
✎
13:29
|
или тупо: читаешь чек из 1го файла, ищешь по (ид_чека?) во втором файле
|
|||
106
Wobland
10.08.11
✎
13:30
|
+(105) индексировать, конечно, надо будет
|
|||
107
pv94384
10.08.11
✎
13:42
|
(106) Опять же хотелось бы увидеть кусок подходящего кода или ссылку на то, как работает индексирование
|
|||
108
Wobland
10.08.11
✎
13:45
|
(107) в СП. я когда-то делал, но искать лениво. могу и не найти ещё
|
|||
109
palpetrovich
10.08.11
✎
14:00
|
(104) че, в обычной УТ нет документа ЧекККМ? ...не верю!
я вот не пойму, тебе такая конфа досталась или ты сам допиливал? и еще - ты там кто по должности? |
|||
110
pv94384
10.08.11
✎
14:03
|
(109) Да вот буквально вчера принесли конфу... эти справочники в ней были...
По должности - человек, который не хочет зря терять время и решил поднатаскать себя решая небольшие задачки... |
|||
111
palpetrovich
10.08.11
✎
14:07
|
(110) вон оно че михалыч, вон оно че :)
...ну посмотри, там наверняка СтрокиЧеков подчинен справочнику "Чеки" |
|||
112
Wobland
10.08.11
✎
14:08
|
(111) если некто придумал делать из чеков справочник, не факт, что он знает о подчинённости справочников
|
|||
113
Wobland
10.08.11
✎
14:09
|
это ж додуматься надо было - ТЧ хранить в отдельном справочнике!
|
|||
114
palpetrovich
10.08.11
✎
14:09
|
(112) та да, там видать случай запущенный :)
|
|||
115
pv94384
10.08.11
✎
14:11
|
(111) Да, владелец Справочник.Чеки
|
|||
116
Wobland
10.08.11
✎
14:17
|
(115) у него Владелец есть - твой чек
|
|||
117
palpetrovich
10.08.11
✎
14:20
|
(115) ну стало-быть нужно искать по владельцу - и если не нашел - создавать, а если нашел - думать что с ним делать
кста, а это точно 8-ка? что за фигня: Чеки = Справочники.Чеки.СоздатьОбъект(); |
|||
118
Wobland
10.08.11
✎
14:22
|
(117) судя по картинке 8.1
в (10) уже нет СоздатьОбъект(), ошибся товарищ |
|||
119
pv94384
10.08.11
✎
14:32
|
Изменил немного на
Процедура КнопкаВыполнитьНажатие(Кнопка) База = Новый XBase; База.Кодировка=КодировкаXBase.OEM; База.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH.dbf"); База1 = Новый XBase; База1.Кодировка=КодировкаXBase.OEM; База1.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH_.dbf"); Если База.Открыта() тогда Предупреждение("База открыта"); База.Первая(); Пока Не База.ВКонце() Цикл Чеки = Справочники.Чеки.СоздатьЭлемент(); СтрокиЧеков = Справочники.СтрокиЧеков.СоздатьЭлемент(); СтрокиЧеков.Владелец = Чеки; Чеки.Дата = Дата(ТекущаяДата()); Чеки.СуммаСкидки = СокрЛП(База.ПолучитьЗначениеПоля("SKIDKA")); Чеки.СуммаНал = СокрЛП(База.ПолучитьЗначениеПоля("NAL")); Чеки.Сумма = СокрЛП(База.ПолучитьЗначениеПоля("SUMMA")); Чеки.НомерЧекаККМ = СокрЛП(База.ПолучитьЗначениеПоля("CHECK_N")); СтрокиЧеков.Количество = СокрЛП(База.ПолучитьЗначениеПоля("KOL")); СтрокиЧеков.Цена = СокрЛП(База.ПолучитьЗначениеПоля("CENA")); СтрокиЧеков.Сумма = СокрЛП(База.ПолучитьЗначениеПоля("SUMMA")); СтрокиЧеков.Записать(); Чеки.Записать(); База.Перейти(); КонецЦикла; Иначе Предупреждение("Не смогли открыть базу!!!",2); КонецЕсли; База.ЗакрытьФайл(); Если База1.Открыта() тогда Предупреждение("База1 открыта"); База1.Первая(); Пока Не База1.ВКонце() Цикл Чеки = Справочники.Чеки.СоздатьЭлемент(); СтрокиЧеков = Справочники.СтрокиЧеков.СоздатьЭлемент(); СтрокиЧеков.Владелец = Чеки; СтрокиЧеков.Количество = База.ПолучитьЗначениеПоля("KOL"); СтрокиЧеков.Цена = СокрЛП(База.ПолучитьЗначениеПоля("CENA")); СтрокиЧеков.Сумма = СокрЛП(База.ПолучитьЗначениеПоля("SUMMA")); СтрокиЧеков.Записать(); База.Перейти(); КонецЦикла; Иначе Предупреждение("Не смогли открыть базу1!!!",2); КонецЕсли; База1.ЗакрытьФайл(); КонецПроцедуры теперь пишет "Ошибка при вызове метода контекста (ПолучитьЗначениеПоля): Перед выполнением операции установите объект на запись СтрокиЧеков.Количество = СокрЛП(База.ПолучитьЗначениеПоля("KOL"));" Нападайте ))) |
|||
120
Wobland
10.08.11
✎
14:33
|
База1 сделай во второй половине как минимум
|
|||
121
pv94384
10.08.11
✎
14:36
|
(120) Сделал, ошибка та же
|
|||
122
Wobland
10.08.11
✎
14:37
|
(121) опять начинается...
|
|||
123
pv94384
10.08.11
✎
14:38
|
(122) что?
|
|||
124
borozavr
10.08.11
✎
14:44
|
Из СП
xB.Первая(); Пока Истина Цикл xB.Очистить(); xB.Записать(); Если Не xB.Следующая() Тогда Прервать; КонецЕсли; КонецЦикла; вывод - используй следующая() |
|||
125
pv94384
10.08.11
✎
14:52
|
Заменил, подредактировал.... Пишет "Перед выполнением операции нужно открыть базу", хотя до этого выдает сообщение "База открыта"
Процедура КнопкаВыполнитьНажатие(Кнопка) База = Новый XBase; База.Кодировка=КодировкаXBase.OEM; База.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH.dbf"); Если База.Открыта() тогда Предупреждение("База открыта"); База.Первая(); Пока Не База.ВКонце() Цикл Чеки = Справочники.Чеки.СоздатьЭлемент(); Чеки.Дата = Дата(ТекущаяДата()); Чеки.СуммаСкидки = СокрЛП(База.ПолучитьЗначениеПоля("SKIDKA")); Чеки.СуммаНал = СокрЛП(База.ПолучитьЗначениеПоля("NAL")); Чеки.Сумма = СокрЛП(База.ПолучитьЗначениеПоля("SUMMA")); Чеки.НомерЧекаККМ = СокрЛП(База.ПолучитьЗначениеПоля("CHECK_N")); Чеки.Записать(); База.Следующая(); КонецЦикла; Иначе Предупреждение("Не смогли открыть базу!!!",2); КонецЕсли; База.ЗакрытьФайл(); База1 = Новый XBase; База1.Кодировка=КодировкаXBase.OEM; База1.ОткрытьФайл("C:\Users\Владимир\Desktop\DBF\09-01CH_.dbf"); Если База1.Открыта() тогда Предупреждение("База1 открыта"); База1.Первая(); Пока Не База1.ВКонце() Цикл Чеки = Справочники.Чеки.СоздатьЭлемент(); СтрокиЧеков = Справочники.СтрокиЧеков.СоздатьЭлемент(); // СтрокиЧеков.Владелец = Чеки; СтрокиЧеков.Количество = База1.ПолучитьЗначениеПоля("KOL"); СтрокиЧеков.Цена = СокрЛП(База1.ПолучитьЗначениеПоля("CENA")); СтрокиЧеков.Сумма = СокрЛП(База1.ПолучитьЗначениеПоля("SUMMA")); СтрокиЧеков.Записать(); База1.Следующая(); КонецЦикла; Иначе Предупреждение("Не смогли открыть базу1!!!",2); КонецЕсли; База1.ЗакрытьФайл(); КонецПроцедуры |
|||
126
Wobland
10.08.11
✎
14:55
|
кстати, не думал ещё, что будешь делать, когда прочитаешь чек уже имеющийся?
а по коду вроде ж нормально всё |
|||
127
Kreont
10.08.11
✎
14:57
|
(125) А может стоит то все впихнуть в ф-ю, что б не дублировать код, ООП все таки ;)
ИмпортЧеков(ИмяФайла) |
|||
128
Wobland
10.08.11
✎
14:58
|
(127) у него в одном файле шапки, в другом ТЧ. поля разные
|
|||
129
pv94384
10.08.11
✎
15:00
|
(126) Буду думать как соединить Чеки со СтрокамиЧеков...
В коде выдает строку СтрокиЧеков.Количество = База1.ПолучитьЗначениеПоля("KOL"); Расположение базы проверил... всё нормально, но тем не менее ошибка присутствует |
|||
130
palpetrovich
10.08.11
✎
15:00
|
(129) вот, набросал мадлехо
ТЗ_Чек = Новый("ТаблицаЗначений"); ТЗ_Чек.Колонки.Добавить("KOD_CH"); ТЗ_Чек.Колонки.Добавить("CHECK_ID"); ТЗ_Чек.Колонки.Добавить("SUMMA"); // остальные поля База = Новый XBase("C:\Users\Владимир\Desktop\DBF\09-01CH.dbf"); База.Кодировка=КодировкаXBase.OEM; База.Первая(); Пока Не База.ВКонце() Цикл НоваяСтрока = ТЗ_Чек.Добавить(); НоваяСтрока.KOD_CH = База.KOD_CH; НоваяСтрока.CHECK_ID = База.CHECK_ID; НоваяСтрока.SUMMA = База.SUMMA; // остальные поля База.Следующая(); КонецЦикла; База.ЗакрытьФайл(); ТЗ_Строки = Новый("ТаблицаЗначений"); ТЗ_Строки.Колонки.Добавить("KOD_CH"); ТЗ_Строки.Колонки.Добавить("CHECK_ID"); ТЗ_Строки.Колонки.Добавить("SUMMA"); // остальные поля База1 = Новый XBase("C:\Users\Владимир\Desktop\DBF\09-01CH_.dbf"); База1.Кодировка=КодировкаXBase.OEM; База1.Первая(); Пока Не База1.ВКонце() Цикл НоваяСтрока = ТЗ_Строки.Добавить(); НоваяСтрока.KOD_CH = База1.KOD_CH; НоваяСтрока.CHECK_ID = База1.CHECK_ID; НоваяСтрока.SUMMA = База1.SUMMA; // остальные поля База1.Следующая(); КонецЦикла; База1.ЗакрытьФайл(); СпрЧеков = Справочники.Чеки; СпрСтрокиЧеков = Справочники.СтрокиЧеков; Для инд=0 по ТЗ_Чек.Количество()-1 Цикл ТекСтрокаЧек = ТЗ_Чек.Получить(инд); НайденнаяСсылка = СпрЧеков.НайтиПоРеквизиту("КодЧека", ТекСтрока.KOD_CH); // реквизит КодЧека может называться по другому, смотри сам Если НЕ НайденнаяСсылка = СпрНоменклатура.ПустаяСсылка() Тогда Сообщить("Чек с кодом " + ТекСтрока.KOD_CH + "уже есть в базе, пропускаю"); Продолжить; КонецЕсли; НовыйОбъектЧек = Справочники["Чеки"].СоздатьЭлемент(); НовыйОбъектЧек.КодЧека = ТекСтрокаЧек.KOD_CH; НовыйОбъектЧек.ЧекИД = ТекСтрокаЧек.CHECK_ID; НовыйОбъектЧек.Сумма = ТекСтрокаЧек.SUMMA; // остальные поля НовыйОбъектЧек.Записать(); Сообщить("Создан чек " + НовыйОбъектЧек); Отбор = Новый Структура(); Отбор.Вставить("KOD_CH",ТекСтрока.KOD_CH); Отбор.Вставить("CHECK_ID",ТекСтрока.CHECK_ID); Строки = ТЗ_Строки.НайтиСтроки(Отбор); КвоСтрок = Строки.Количество()-1; Для инд1=0 по КвоСтрок Цикл ТекСтрока = Строки.Получить(инд1); НайденныеСтрокиЧеков = СпрСтрокиЧеков.НайтиПоРеквизиту("КодЧека", Строки.KOD_CH, , НовыйОбъектЧек.Ссылка); Если НайденныеСтроки = СпрСтрокиЧеков.ПустаяСсылка() Тогда НовыйОбъектСтрокиЧеков = Справочники["СтрокиЧеков"].СоздатьЭлемент(); НовыйОбъектСтрокиЧеков.Владалец = НовыйОбъектЧек.Ссылка; НовыйОбъектСтрокиЧеков.КодЧека = ТекСтрока.KOD_CH; НовыйОбъектСтрокиЧеков.ЧекИД = ТекСтрока.CHECK_ID; НовыйОбъектСтрокиЧеков.Сумма = ТекСтрока.SUMMA; // остальные поля НовыйОбъектСтрокиЧеков.Записать(); Сообщить("Созданы строки чеков " + НовыйОбъектСтрокиЧеков); Иначе // обновить, ничего не делать ... думай сам КонецЕсли; КонецЦикла; КонецЦикла; |
|||
131
Wobland
10.08.11
✎
15:03
|
я требую пива для palpetrovich
|
|||
132
pv94384
10.08.11
✎
15:06
|
(130) Спасибо, но содержит ряд неопределенных переменных, чтобы самому не насочинять, спрошу здесь: Что под ними подразумевал автор?
{Форма.Форма(66,64)}: Переменная не определена (ТекСтрока) НайденнаяСсылка = СпрЧеков.НайтиПоРеквизиту("КодЧека", <<?>>ТекСтрока.KOD_CH); // реквизит КодЧека может называться по другому, смотри сам {Форма.Форма(69,39)}: Переменная не определена (ТекСтрока) Сообщить("Чек с кодом " + <<?>>ТекСтрока.KOD_CH + "уже есть в базе, пропускаю"); {Форма.Форма(82,33)}: Переменная не определена (ТекСтрока) Отбор.Вставить("KOD_CH",<<?>>ТекСтрока.KOD_CH); {Форма.Форма(83,35)}: Переменная не определена (ТекСтрока) Отбор.Вставить("CHECK_ID",<<?>>ТекСтрока.CHECK_ID); {Форма.Форма(68,35)}: Переменная не определена (СпрНоменклатура) Если НЕ НайденнаяСсылка = <<?>>СпрНоменклатура.ПустаяСсылка() Тогда {Форма.Форма(89,18)}: Переменная не определена (НайденныеСтроки) Если <<?>>НайденныеСтроки = СпрСтрокиЧеков.ПустаяСсылка() Тогда |
|||
133
palpetrovich
10.08.11
✎
15:08
|
(132) не проверял, замени где ругается на ТекСтрокаЧек, а СпрНоменклатура на СпрЧеков
|
|||
134
palpetrovich
10.08.11
✎
15:08
|
..у меня-то нет таких справочников как у тебя :)
|
|||
135
palpetrovich
10.08.11
✎
15:11
|
ТЗ_Чек = Новый("ТаблицаЗначений");
ТЗ_Чек.Колонки.Добавить("KOD_CH"); ТЗ_Чек.Колонки.Добавить("CHECK_ID"); ТЗ_Чек.Колонки.Добавить("SUMMA"); // остальные поля База = Новый XBase("C:\Users\Владимир\Desktop\DBF\09-01CH.dbf"); База.Кодировка=КодировкаXBase.OEM; База.Первая(); Пока Не База.ВКонце() Цикл НоваяСтрока = ТЗ_Чек.Добавить(); НоваяСтрока.KOD_CH = База.KOD_CH; НоваяСтрока.CHECK_ID = База.CHECK_ID; НоваяСтрока.SUMMA = База.SUMMA; // остальные поля База.Следующая(); КонецЦикла; База.ЗакрытьФайл(); ТЗ_Строки = Новый("ТаблицаЗначений"); ТЗ_Строки.Колонки.Добавить("KOD_CH"); ТЗ_Строки.Колонки.Добавить("CHECK_ID"); ТЗ_Строки.Колонки.Добавить("SUMMA"); // остальные поля База1 = Новый XBase("C:\Users\Владимир\Desktop\DBF\09-01CH_.dbf"); База1.Кодировка=КодировкаXBase.OEM; База1.Первая(); Пока Не База1.ВКонце() Цикл НоваяСтрока = ТЗ_Строки.Добавить(); НоваяСтрока.KOD_CH = База1.KOD_CH; НоваяСтрока.CHECK_ID = База1.CHECK_ID; НоваяСтрока.SUMMA = База1.SUMMA; // остальные поля База1.Следующая(); КонецЦикла; База1.ЗакрытьФайл(); СпрЧеков = Справочники.Чеки; СпрСтрокиЧеков = Справочники.СтрокиЧеков; Для инд=0 по ТЗ_Чек.Количество()-1 Цикл ТекСтрокаЧек = ТЗ_Чек.Получить(инд); НайденнаяСсылка = СпрЧеков.НайтиПоРеквизиту("КодЧека", ТекСтрокаЧек.KOD_CH); // реквизит КодЧека может называться по другому, смотри сам Если НЕ НайденнаяСсылка = СпрЧеков.ПустаяСсылка() Тогда Сообщить("Чек с кодом " + ТекСтрока.KOD_CH + "уже есть в базе, пропускаю"); Продолжить; КонецЕсли; НовыйОбъектЧек = Справочники["Чеки"].СоздатьЭлемент(); НовыйОбъектЧек.КодЧека = ТекСтрокаЧек.KOD_CH; НовыйОбъектЧек.ЧекИД = ТекСтрокаЧек.CHECK_ID; НовыйОбъектЧек.Сумма = ТекСтрокаЧек.SUMMA; // остальные поля НовыйОбъектЧек.Записать(); Сообщить("Создан чек " + НовыйОбъектЧек); Отбор = Новый Структура(); Отбор.Вставить("KOD_CH",ТекСтрокаЧек.KOD_CH); Отбор.Вставить("CHECK_ID",ТекСтрокаЧек.CHECK_ID); Строки = ТЗ_Строки.НайтиСтроки(Отбор); КвоСтрок = Строки.Количество()-1; Для инд1=0 по КвоСтрок Цикл ТекСтрока = Строки.Получить(инд1); НайденныеСтрокиЧеков = СпрСтрокиЧеков.НайтиПоРеквизиту("КодЧека", Строки.KOD_CH, , НовыйОбъектЧек.Ссылка); Если НайденныеСтрокиЧеков = СпрСтрокиЧеков.ПустаяСсылка() Тогда НовыйОбъектСтрокиЧеков = Справочники["СтрокиЧеков"].СоздатьЭлемент(); НовыйОбъектСтрокиЧеков.Владалец = НовыйОбъектЧек.Ссылка; НовыйОбъектСтрокиЧеков.КодЧека = ТекСтрока.KOD_CH; НовыйОбъектСтрокиЧеков.ЧекИД = ТекСтрока.CHECK_ID; НовыйОбъектСтрокиЧеков.Сумма = ТекСтрока.SUMMA; // остальные поля НовыйОбъектСтрокиЧеков.Записать(); Сообщить("Созданы строки чеков " + НовыйОбъектСтрокиЧеков); Иначе // обновить, ничего не делать ... думай сам КонецЕсли; КонецЦикла; КонецЦикла; |
|||
136
palpetrovich
10.08.11
✎
15:13
|
млин, замени
Сообщить("Чек с кодом " + ТекСтрока.KOD_CH + "уже есть в базе, пропускаю"); на Сообщить("Чек с кодом " + ТекСтрокаЧек.KOD_CH + "уже есть в базе, пропускаю"); |
|||
137
pv94384
10.08.11
✎
15:15
|
Уже заменил
{Форма.Форма(55)}: Поле объекта не обнаружено (KOD_CH) НоваяСтрока.KOD_CH = База1.KOD_CH; |
|||
138
palpetrovich
10.08.11
✎
15:18
|
(137) ты-же сам говорил что в обоих файлах присутствуют KOD_CH и CHECK_ID
|
|||
139
pv94384
10.08.11
✎
15:22
|
(138) так и есть http://s001.radikal.ru/i196/1108/bb/77443f4667c0.jpg
|
|||
140
palpetrovich
10.08.11
✎
15:24
|
(139) ты хоть сам смотри немного, там KOD_CH_ вообще-то
надеюсь сам код поправишь :) |
|||
141
newman379
14.08.11
✎
21:13
|
Ребята помогите. Загружаю данные из файла dbf в 1с. Грузиться нормально, но только с 3 строки, а нужно со второй. В чем причина?
|
|||
142
вовочка
15.08.11
✎
05:37
|
а через ADO, не лучще сделать? Запросом?
|
|||
143
Rie
15.08.11
✎
05:44
|
(141) А как грузишь? И почему "со второй", а не с первой?
|
|||
144
newman379
15.08.11
✎
11:25
|
на первой строчке наименование полей, поэтому нужно со второй
|
|||
145
Wobland
15.08.11
✎
11:25
|
(144) строчки у тебя в экселе, а в ДБФ - заголовок
|
|||
146
Wobland
15.08.11
✎
11:26
|
и вторая "строчка" поэтому равна первой записи
|
|||
147
palpetrovich
15.08.11
✎
11:29
|
(141) newman379 = pv94384 ? :)
|
|||
148
newman379
15.08.11
✎
13:37
|
спасибо за помощь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |