Имя: Пароль:
1C
1С v8
Загрузка из 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
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
спасибо за помощь