|
Загрузка из DBF В бух 8,3 | ☑ | ||
---|---|---|---|---|
0
Arutynov
04.09.14
✎
16:06
|
Есть код загрузки.
БД = Новый XBase; БД.Кодировка = КодировкаXBase.OEM; БД.ОткрытьФайл(Объект.ВыбрФайл); Если БД.Открыта()=0 Тогда Сообщить( "Плохой dbf-файл!"); Возврат; КонецЕсли; Если БД.Первая()=0 Тогда Сообщить("Ошибка файла dbf - сбой!!!!!!"); КонецЕсли; Таб = Новый("ТаблицаЗначений"); Таб.Колонки.Добавить("Numb"); Таб.Колонки.Добавить("Date"); Таб.Колонки.Добавить("Klkod"); Таб.Колонки.Добавить("Klname"); Таб.Колонки.Добавить("Tkod"); Таб.Колонки.Добавить("Tvname"); Таб.Колонки.Добавить("Bei"); Таб.Колонки.Добавить("Kol"); Таб.Колонки.Добавить("INN"); Таб.Колонки.Добавить("NDS"); Таб.Колонки.Добавить("Cena"); Таб.Колонки.Добавить("Summa"); Пока Не БД.ВКонце() Цикл НоваяСтрока = Таб.Добавить(); НоваяСтрока.Numb =БД.Numb; НоваяСтрока.Date =БД.Date; НоваяСтрока.Klkod =БД.Klkod; НоваяСтрока.Klname =БД.Klname; НоваяСтрока.Tkod =БД.Tkod; НоваяСтрока.Tvname =БД.Tvname; НоваяСтрока.Bei =БД.Bei; НоваяСтрока.Kol =БД.Kol; НоваяСтрока.INN =БД.INN; НоваяСтрока.NDS =БД.NDS; НоваяСтрока.Cena =БД.Cena; НоваяСтрока.Summa =БД.Summa; НоваяСтрока.INN =БД.INN; БД.Следующая(); КонецЦикла; Таб.Сортировать("Numb"); НачатьТранзакцию(); Буф=""; Для каждого Стрк из Таб цикл Если буф<>Стрк.Numb тогда новыйТовар=Документы.РеализацияТоваровУслуг.СоздатьДокумент(); новыйТовар.Номер=Стрк.Numb; новыйТовар.Дата=стрк.Date; новыйТовар.ВидОперации=перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия; Организация=Справочники.Организации.НайтиПоКоду("00-000001"); новыйТовар.Организация=Организация; новыйТовар.Контрагент=Справочники.Контрагенты.НайтиПоКоду(стрк.Klkod); новыйТовар.ДоговорКонтрагента=новыйТовар.Контрагент.ОсновнойДоговорКонтрагента; новыйТовар.ПодразделениеОрганизации=Справочники.ПодразделенияОрганизаций.НайтиПоКоду("00-000001"); новыйТовар.ТипЦен=Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("00-000001"); новыйТовар.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643"); новыйТовар.СуммаВключаетНДС=Истина; новыйТовар.СпособЗачетаАвансов=перечисления.СпособыЗачетаАвансов.Автоматически; новыйТовар.СчетУчетаРасчетовПоАвансам = ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным; новыйТовар.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.РасчетыСПокупателями; новыйТовар.Склад=Справочники.Склады.НайтиПоКоду("00-000001"); СтрокаТч=новыйТовар.Товары.Добавить(); СтрокаТч.Номенклатура=Справочники.Номенклатура.НайтиПоКоду(стрк.Tkod); СтрокаТч.ЕдиницаИзмерения=СтрокаТч.Номенклатура.ЕдиницаИзмерения; СтрокаТч.СтавкаНДС=СтрокаТч.Номенклатура.СтавкаНДС; СтрокаТч.Количество=Стрк.Kol; СтрокаТч.Цена=Стрк.Cena; СтрокаТч.Сумма=Стрк.Summa; СтрокаТЧ.СчетУчета=ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"); СтрокаТЧ.СчетДоходов=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1"); СтрокаТЧ.СчетРасходов=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1"); СтрокаТЧ.СчетУчетаНДСПоРеализации=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03"); СтрокаТЧ.СуммаНДС=Число(СокрЛП(стрк.NDS)); новыйТовар.Комментарий=Стрк.Klkod+" "+стрк.Klname; новыйТовар.Записать(); Буф=Стрк.Numb; Сообщить(Строка(новыйТовар.Дата)+" Создан рнк №"+строка(новыйТовар.Номер)); Иначе СтрокаТч=новыйТовар.Товары.Добавить(); СтрокаТч.Номенклатура=Справочники.Номенклатура.НайтиПоКоду(стрк.Tkod); СтрокаТч.ЕдиницаИзмерения=СтрокаТч.Номенклатура.ЕдиницаИзмерения; СтрокаТч.СтавкаНДС=СтрокаТч.Номенклатура.СтавкаНДС; СтрокаТч.Количество=Стрк.Kol; СтрокаТч.Цена=Стрк.Cena; СтрокаТч.Сумма=Стрк.Summa; СтрокаТЧ.СчетУчета=ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"); СтрокаТЧ.СчетДоходов=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1"); СтрокаТЧ.СчетРасходов=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1"); СтрокаТЧ.СчетУчетаНДСПоРеализации=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03"); СтрокаТЧ.СуммаНДС=Число(СокрЛП(стрк.NDS)); новыйТовар.Записать(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); БД.ЗакрытьФайл(); Все загружает, только очень долго. Скорее всего что-то делаю не так. |
|||
1
Garykom
гуру
04.09.14
✎
16:10
|
(0) "Таб = Новый("ТаблицаЗначений");"
WTF?! |
|||
2
Arutynov
04.09.14
✎
16:11
|
Создал таблицу значений, что не так
? |
|||
3
fmrlex
04.09.14
✎
16:12
|
Все что ты ищешь по кодам-константам можно найти ДО цикла.
|
|||
4
fmrlex
04.09.14
✎
16:13
|
(1) Оно работает ))
|
|||
5
Arutynov
04.09.14
✎
16:18
|
(3) сейчас попробую, но когда писал так в толстом клиенте все быстро работало
|
|||
6
fmrlex
04.09.14
✎
16:22
|
(0) + еще для бухии посмотри есть процедурки в общих модулях для заполнения счетов учета.
Ну и потоково создаешь документы... сам понимаешь это занимает некоторое время. |
|||
7
Arutynov
04.09.14
✎
16:24
|
Я думал есть более логичный способ создания документа с DBF
|
|||
8
_fvadim
04.09.14
✎
16:27
|
замер сделать - поглядеть узкие места.
если не критично создание всех документов разом - выкинуть транзакцию. и да, (3) сделать в первую очередь. |
|||
9
fmrlex
04.09.14
✎
16:27
|
(7) Ну куда уж логичнее. Просто ты часто теребишь базу.
|
|||
10
Garykom
гуру
04.09.14
✎
16:38
|
(2) ЭЭЭ тогда убери "новыйТовар.Записать();" после каждой строки
|
|||
11
Garykom
гуру
04.09.14
✎
16:39
|
(10)+ и вообще перепиши КРАСИВО! А то с этом ничче не понять и криво пашет.
|
|||
12
_fvadim
04.09.14
✎
16:42
|
(11) необязательно.
можно всё выделить и нажать alt+shift+F |
|||
13
Garykom
гуру
04.09.14
✎
16:43
|
(11) Начни с этого:
КоличествоЗаписей = БД.КоличествоЗаписей(); Для НомерЗаписи=1 По КоличествоЗаписей Цикл БД.Перейти(НомерЗаписи); КонецЦикла; (12) Не в этом проблема не форматирования а содержание кривое |
|||
14
Garykom
гуру
04.09.14
✎
16:46
|
(13) И продолжи сделай функцию СоздатьДокумент(Параметры)
и можно для удобства читаемости функцию ДобавитьСтрокуВТовары(СсылкаДокумент, ПараметрыСтроки) |
|||
15
Garykom
гуру
04.09.14
✎
16:47
|
(14) и будет у тебя КРАСИВЫЙ и ЛЕГКОЧИТАЕМЫЙ код, в котором ЛЕГКО найти ошибки и дописать...
|
|||
16
Garykom
гуру
04.09.14
✎
16:48
|
(14) да не обязательно "СсылкаДокумент" лучше не сохранять а передавать сам "ДокументОбъект"
|
|||
17
Arutynov
04.09.14
✎
16:50
|
Спасибо, сейчас осмысляю вами предложенное
|
|||
18
_fvadim
04.09.14
✎
16:51
|
(16)
осталось сказать когда следующий урок и озвучить домашнее задание :) |
|||
19
Arutynov
04.09.14
✎
16:53
|
Да главное чтоб у ученика все получилось!
|
|||
20
Garykom
гуру
04.09.14
✎
17:10
|
(17)(19) так суть то простая все что можно выносить в отдельные процедуры/функции
(даже если они будут 1 раз всего вызываться) и общий код будет состоять по сути из вызовов этих процедур/функций ЗЫ и для каждой процедуры/функции сверху краткий коммент что делает, что на входе/выходе |
|||
21
Garykom
гуру
04.09.14
✎
17:11
|
(20)+ зато потом очень удобно, если новая задача подобна тем что уже делал, просто процедуру/функцию копи/пасте и чуток исправить ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |