|
как загрузить в один документ "счет на оплату покупателю"-данные из 3 разных dbf | ☑ | ||
---|---|---|---|---|
0
Taffy
04.06.12
✎
11:42
|
Когда выгружались все данные в один dbf делала так:
ДБФ = Новый XBase; ДБФ.ОткрытьФайл(ПутьКФайлу); ДБФ.Кодировка=КодировкаXBase.OEM; //Проверка на наличие записей Если ДБФ.КоличествоЗаписей() = 0 Тогда Сообщить("Файл данных пуст"); ДБФ.ЗакрытьФайл(); //Возврат КонецЕсли; //Переходим на первую строку файла ДокСчет=Документы.СчетНаОплатуПокупателю; ДБФ.Первая(); ПредыдущийНомер = 0; Док=Неопределено; Пока Истина Цикл //Создадим новый документ ТекущийНомер=ДБФ.NUMBERD; Дата=ДБФ.DATE; Если ТекущийНомер <> ПредыдущийНомер Тогда //записываем предыдущий документ Если Док<>Неопределено тогда Док.Записать(); КонецЕсли; Если ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата)=ДокСчет.ПустаяСсылка() тогда //переходим к следующему документу Док = ДокСчет.СоздатьДокумент(); НовыйДокумент=Истина; Док.Номер= СокрЛП(ДБФ.NUMBERD); Док.Дата = Дата; Док.Организация = Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); Док.ВалютаДокумента =Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VALD)); Док.Контрагент=Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(ДБФ.KONTR)); Док.СтруктурнаяЕдиница = Справочники.БанковскиеСчета.НайтиПоНаименованию(СокрЛП(ДБФ.NAMEBS)); ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); ДоговорКонтрагента.Владелец = Док.Контрагент.Ссылка; ДоговорКонтрагента.Наименование = СокрЛП(ДБФ.NAMED); ДоговорКонтрагента.Номер = СокрЛП(ДБФ.NUMBER); ДоговорКонтрагента.ВидДоговора = Вычислить("Перечисления.ВидыДоговоровКонтрагентов."+СокрЛП(ДБФ.VID)); ДоговорКонтрагента.Дата = СокрЛП(ДБФ.DATED); ДоговорКонтрагента.ВалютаВзаиморасчетов=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL)); ДоговорКонтрагента.Организация =Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); ДоговорКонтрагента.Записать(); Док.ДоговорКонтрагента=ДоговорКонтрагента.Ссылка; Док.КратностьВзаиморасчетов=1; //Док.Записать(); Банк= Справочники.Банки.СоздатьЭлемент(); //Банк.КоррСчет=СокрЛП(ДБФ.KORS); //Банк.Код=СокрЛП(ДБФ.BIK); Банк.Наименование=СокрЛП(ДБФ.NAMEB); Банк.Записать(); БанкСчет=Справочники.БанковскиеСчета.СоздатьЭлемент(); БанкСчет.Владелец=Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); БанкСчет.Банк=Справочники.Банки.НайтиПоКоду(ДБФ.BIK); БанкСчет.Наименование=СокрЛП(ДБФ.NAMEBS); БанкСчет.ВалютаДенежныхСредств=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL)); //БанкСчет.НомерСчета=СокрЛП(ДБФ.COUNT); Банк.Записать(); БанкСчет.Записать(); иначе ДокСсылка=ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата); Док=ДокСсылка.ПолучитьОбъект(); НовыйДокумент=Ложь; КонецЕсли; КонецЕсли; //Заполним табличную часть "Товары" ТекНоменклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); Если НовыйДокумент тогда НоваяСтрока=Док.Товары.Добавить(); НоваяСтрока.Номенклатура=ТекНоменклатура; иначе НайденныеСтроки=Док.Товары.НайтиСтроки(Новый Структура("Номенклатура",ТекНоменклатура)); Если НайденныеСтроки.Количество()>0 тогда НоваяСтрока=НайденныеСтроки[0]; иначе НоваяСтрока=Док.Товары.Добавить(); НоваяСтрока.Номенклатура=ТекНоменклатура; КонецЕсли; Конецесли; //НоваяСтрока.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); НоваяСтрока.ЕдиницаИзмерения= Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(СокрЛП(ДБФ.ED)); НоваяСтрока.Количество=СокрЛП(ДБФ.KOL); НоваяСтрока.Цена=СокрЛП(ДБФ.PRICE); НоваяСтрока.СтавкаНДС=СокрЛП(ДБФ.NDS); //Заполним табличную часть "Оплачено" ТекПлатежное=СокрЛП(ДБФ.NDOK); Если НовыйДокумент тогда НоваяОплачено= Док.Оплата.Добавить(); НоваяОплачено.НомерДокумента=ТекПлатежное; иначе НайденныеСтроки=Док.Оплата.НайтиСтроки(Новый Структура("НомерДокумента",ТекПлатежное)); //НоваяОплачено= Док.Оплата.Добавить(); Если НайденныеСтроки.Количество()>0 тогда НоваяОплачено=НайденныеСтроки[0]; иначе НоваяОплачено= Док.Оплата.Добавить(); НоваяОплачено.НомерДокумента=ТекПлатежное; КонецЕсли; КонецЕсли; НоваяОплачено.ДатаОплаты=СокрЛП(ДБФ.DATEO); НоваяОплачено.Сумма=СокрЛП(ДБФ.SUM); //НоваяОплачено.НомерДокумента=СокрЛП(ДБФ.NDOK); //Заполним табличную часть "Отгружено" ТекНоменклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); Если НовыйДокумент тогда НоваяОтгружено= Док.Отгрузка.Добавить(); НоваяОтгружено.Номенклатура=ТекНоменклатура; иначе НайденныеСтроки=Док.Отгрузка.НайтиСтроки(Новый Структура("Номенклатура",ТекНоменклатура)); Если НайденныеСтроки.Количество()>0 тогда НоваяОтгружено=НайденныеСтроки[0]; иначе НоваяОтгружено=Док.Отгрузка.Добавить(); НоваяОтгружено.Номенклатура=ТекНоменклатура; КонецЕсли; конецЕсли; НоваяОтгружено.ДатаОтгрузки=СокрЛП(ДБФ.DATEOT); НоваяОтгружено.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); НоваяОтгружено.Количество=СокрЛП(ДБФ.KOL); НоваяОтгружено.Цена=СокрЛП(ДБФ.PRICE); НоваяОтгружено.Сумма=СокрЛП(ДБФ.SUMOT); //КонецЕсли; //иначе // ДокСсылка=ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата); // Док=ДокСсылка.ПолучитьОбъект(); //КонецЕсли; Если Не ДБФ.Следующая()Тогда Прервать; КонецЕсли; ПредыдущийНомер = ТекущийНомер; КонецЦикла; //записываем последний док Если Док<>Неопределено тогда Док.Записать(); КонецЕсли; |
|||
1
vicof
04.06.12
✎
11:43
|
без фотки - никак
|
|||
2
Taffy
04.06.12
✎
11:50
|
фотка кода?
|
|||
3
Азат
04.06.12
✎
11:52
|
(2) ага, топлесс-кодинг
|
|||
4
Wern
04.06.12
✎
11:54
|
А в чем проблема то? открыть три дбфки и загрузить то что нужно.
|
|||
5
Жан Пердежон
04.06.12
✎
12:02
|
(4) impossible!!!
|
|||
6
zva
04.06.12
✎
12:12
|
(0) А в чем проблема? Считать последовательно из каждой dbf нужные данные в ТЗ (может несколько ТЗ), выложить фотку, загрузить данные из ТЗ в один документ
|
|||
7
mirosh
04.06.12
✎
12:14
|
(0) если такая проблема - считать из трех разных dbf, то вот тебе ссылка на утилиту, которая "склеивает" разные dbf-файлы в один (ищет по схожим колонкам).
http://it-konsultant.ru/pumpdbf.html |
|||
8
sapphire
04.06.12
✎
12:16
|
Пипец.... что вы пишите?!
Надо использовать ADO для доступа к dbf. Надо знать структуру таблиц. (7) Нафиг не нужно, можно использовать UNION ALL |
|||
9
Taffy
04.06.12
✎
12:24
|
так как правильнее сделать ?подскажите пожалуйста
|
|||
10
mehfk
04.06.12
✎
12:26
|
(9) Зайти в ЛК и нажать "фотография".
|
|||
11
sapphire
04.06.12
✎
12:26
|
(9)
1. Выяснить структуру таблиц dbf. 2. Написать код загрузки из таблиц через ADO. |
|||
12
sapphire
04.06.12
✎
12:27
|
(0) dbf предоставляет внешний контрагент или генерит какая-то своя система?
|
|||
13
Taffy
04.06.12
✎
12:34
|
1.структура таблиц выяснена
|
|||
14
Taffy
04.06.12
✎
12:35
|
из Галактики выгружаются данные в dbf.своя система
|
|||
15
Taffy
04.06.12
✎
12:46
|
:)поняла про фото
|
|||
16
shuhard
04.06.12
✎
13:23
|
(8) + 1
|
|||
17
Taffy
04.06.12
✎
13:33
|
есть варианты еще кроме как через ADO??
|
|||
18
shuhard
04.06.12
✎
13:35
|
(17) до фига
|
|||
19
Taffy
04.06.12
✎
13:46
|
можете подсказать?
|
|||
20
sapphire
04.06.12
✎
13:55
|
(17) ADO - всего лишь способ доступа к данным.
Неужели непонятно, что таблицы связаны по ключу и необходимо использовать запрос, а не бегать курсором по таблицам. Как вариант считайте Dbf файлы XBase-ом в таблицы значений, поместите эти таблицы запросом во временные таблицы. Использую язык запросов получите агрегированнные данные создаваемых документов. |
|||
21
sapphire
04.06.12
✎
13:57
|
(17) Также можно использовать индексы XBase для ускорения.
Если Вы понимаете, что и в какой таблице лежит, то непонятно в чем проблема? |
|||
22
Taffy
04.06.12
✎
14:09
|
поняла.спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |