обработка данных из двух дбф файлов
27.06.2012
08:53
#1
"Подскажите, пожалуйста! Как правильно загрузить данные из двух дбф файлов. у меня он очень долго обрабатывает и не выводит сообщение "Сообщить(ДБФС.AMOUNT + " нашли!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");", хотя данные такие должны быть.
ДБФ = Новый XBase;
ДБФС = Новый XBase;
ДБФ.ОткрытьФайл(ВыбФайлНакл,,Истина);
ДБФС.ОткрытьФайл(ВыбФайлСостав, , Истина);
СтарНомер = """";
ПервыйРаз = 1;
Записать = Ложь;
Для НК = 1 По ДБФ.КоличествоЗаписей() Цикл
Для Н = 1 По ДБФС.КоличествоЗаписей() Цикл
ДБФС.Перейти(Н);
ДБФ.Перейти(НК);
ОбработкаПрерыванияПользователя();
ДБФ.ID = "801164878";
Кол = ДБФ.ID;
Если Кол = ДБФС.NI_ID Тогда
Сообщить(ДБФС.AMOUNT + " нашли!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
ИначеЕсли НЕ Кол = ДБФС.NI_ID Тогда
Сообщить(ДБФС.NI_ID);
КонецЕсли;
КонецЦикла;"
ДБФ = Новый XBase;
ДБФС = Новый XBase;
ДБФ.ОткрытьФайл(ВыбФайлНакл,,Истина);
ДБФС.ОткрытьФайл(ВыбФайлСостав, , Истина);
СтарНомер = """";
ПервыйРаз = 1;
Записать = Ложь;
Для НК = 1 По ДБФ.КоличествоЗаписей() Цикл
Для Н = 1 По ДБФС.КоличествоЗаписей() Цикл
ДБФС.Перейти(Н);
ДБФ.Перейти(НК);
ОбработкаПрерыванияПользователя();
ДБФ.ID = "801164878";
Кол = ДБФ.ID;
Если Кол = ДБФС.NI_ID Тогда
Сообщить(ДБФС.AMOUNT + " нашли!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
ИначеЕсли НЕ Кол = ДБФС.NI_ID Тогда
Сообщить(ДБФС.NI_ID);
КонецЕсли;
КонецЦикла;"
27.06.2012
08:59
#2
"- Где вторый цикл заканчивыается и вообще зачем 2 цикла
- Зачем ДБФ.ID = "801164878"; ? Не проще сразу сравнивать с "801164878" ?
- Условие в ИначеЕсли вообще абсурдное, потому как все равно сюда попадет если первое не отработает."
- Зачем ДБФ.ID = "801164878"; ? Не проще сразу сравнивать с "801164878" ?
- Условие в ИначеЕсли вообще абсурдное, потому как все равно сюда попадет если первое не отработает."
27.06.2012
09:14
#3
"Это не весь цикл (конец второго не попал в копирование, но он есть), как можно обойтись без второго цикла, чтобы найти значение из ДБФС? По 3 возможно так условие писать:
Если Кол = ДБФС.NI_ID Тогда
Сообщить(ДБФС.AMOUNT + " нашли!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
ИначеЕсли
Сообщить(ДБФС.NI_ID);
КонецЕсли;"
Если Кол = ДБФС.NI_ID Тогда
Сообщить(ДБФС.AMOUNT + " нашли!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
ИначеЕсли
Сообщить(ДБФС.NI_ID);
КонецЕсли;"
27.06.2012
09:23
#5
Необходимо из двух дбф файлов (соединяемых по ID) создать документы, пока я пытаюсь найти первый дбф основной, через него мне нужно получить данные из дбфс, пока я хочу для первого значения из дбф получить количество в дбфс.
27.06.2012
09:32
#6
А если их сначала загнать в таблицу значений, а уже потом обрабатывать? И подружись наконец то с Синтаксис-Помощником, он замечательный парень!
27.06.2012
09:37
#7
пытаюсь, с июля пойду на курсы мне их порекомендовал Денис(МСК), надеюсь лучше будет, а пока надо как - то так, в таблицу значений я перегоняла номенклатуру и контрагентов из других дбф файлов, а из этих мне нужно создать уже документы, или удобнее будет через таблицу значений?
27.06.2012
10:37
#9
Наташик опять феерично колдует... 
Делай так:
- Переноси данные из ДБФС в таблицу значений (создаешь ТЗ, поля соответствующие полям ДБФС).
- Устанавливай индекс в ТЗ по полю, в котором у тебя хранится значение из поля ID.
- Выполняй обход записей ДБФ в цикле, создавай документы (с заполнением данных "шапки" документа) и находи соответствующие строки по ID в ТЗ (с помощью метода ТЗ "НайтиСтроки()").
- Внутри первого цикла выполняй обход массива найденных в п.3 строк и заполняй строки документа.
Делай так:
- Переноси данные из ДБФС в таблицу значений (создаешь ТЗ, поля соответствующие полям ДБФС).
- Устанавливай индекс в ТЗ по полю, в котором у тебя хранится значение из поля ID.
- Выполняй обход записей ДБФ в цикле, создавай документы (с заполнением данных "шапки" документа) и находи соответствующие строки по ID в ТЗ (с помощью метода ТЗ "НайтиСтроки()").
- Внутри первого цикла выполняй обход массива найденных в п.3 строк и заполняй строки документа.
Читают тему
(гостей: 1)