|
Запись в DBFфайл | ☑ | ||
---|---|---|---|---|
0
ВежливаяТварь
09.08.12
✎
09:50
|
Добрый день столкнулся с весьма мистической проблемой. Есть DBF файл я в него сохраняю остатки на начало дня в периоде месяца. Проблема в том что остатки на некоторые дни он записывает правильно а некоторые нет. Например: сохраняю период месяц, за 28 число он сохраняет не правильный остаток. Проверяю запрос который вытягивает остаток за этот день- все правильно. Сохраняю только 28 число в DBF правильный остаток. Не подскажите в чем загадка.
Код:Процедура ЭкспортОстатковНаНачДняВЛокальнойКодировке() ЗапросОстатковНаНачДняЛокКод=Новый Запрос; ЗапросОстатковНаНачДняЛокКод.Текст="ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Склад.Код КАК Wareh_Code, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Код КАК Code, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование, | ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК Stock, | ТоварыНаСкладахОстаткиИОбороты.Период КАК Date |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, , ) КАК ТоварыНаСкладахОстаткиИОбороты |ГДЕ | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Ссылка В ИЕРАРХИИ(&ВыгружаемаяНоменклатура) | И ТоварыНаСкладахОстаткиИОбороты.Склад В(&Склад)"; ЗапросОстатковНаНачДняЛокКод.УстановитьПараметр("ВыгружаемаяНоменклатура", ВыгружаемаяНоменклатура); ЗапросОстатковНаНачДняЛокКод.УстановитьПараметр("ДатаНач", ДатаНач); ЗапросОстатковНаНачДняЛокКод.УстановитьПараметр("ДатаКон", ДатаКон); ЗапросОстатковНаНачДняЛокКод.УстановитьПараметр("Склад", СписокСкладов); РезультатЗапросаОстатковНаНачДняЛокКод=ЗапросОстатковНаНачДняЛокКод.Выполнить(); Если РезультатЗапросаОстатковНаНачДняЛокКод.Пустой() Тогда Возврат; КонецЕсли; ПутьКФайлу=ПутьСохраненияТаблиц+"\ARSTOCK.DBF"; ФайлОстНаНачДняЛокКод=Новый XBase; Попытка ФайлОстНаНачДняЛокКод.ОткрытьФайл(ПутьКФайлу); ФайлОстНаНачДняЛокКод.ОчиститьФайл(); Исключение Сообщить("Файл таблицы остатков на начало дня (локальная кодировка) не найдён"); Логи.ДобавитьСтроку("ОШИБКА Таблица остатков на начало дня: ошибка при выгрузке "+ОписаниеОшибки()); Возврат; КонецПопытки; РезультатЗапросаОстатковНаНачДняЛокКод=РезультатЗапросаОстатковНаНачДняЛокКод.Выбрать(); Пока РезультатЗапросаОстатковНаНачДняЛокКод.Следующий() Цикл ФайлОстНаНачДняЛокКод.Добавить(); ФайлОстНаНачДняЛокКод.Wareh_Code=РезультатЗапросаОстатковНаНачДняЛокКод.Wareh_Code; ФайлОстНаНачДняЛокКод.LocalCode=РезультатЗапросаОстатковНаНачДняЛокКод.Code; ФайлОстНаНачДняЛокКод.Stock=РезультатЗапросаОстатковНаНачДняЛокКод.Stock; ФайлОстНаНачДняЛокКод.Date=Формат(РезультатЗапросаОстатковНаНачДняЛокКод.date,"ДФ=yyyyMMdd"); ФайлОстНаНачДняЛокКод.Записать(); КонецЦикла; ФайлОстНаНачДняЛокКод.ЗакрытьФайл(); Логи.ДобавитьСтроку("Таблица остатков на начало дня: выгружена успешно"); Сообщить ("Таблица остатков на начало дня: выгружена успешно"); КонецПроцедуры |
|||
1
Wobland
09.08.12
✎
09:52
|
а зачем ты дату как строку записываешь?
|
|||
2
Wobland
09.08.12
✎
09:53
|
да и Записать() в цикле вроде как лишнее
|
|||
3
Нуф-Нуф
09.08.12
✎
09:54
|
1. зачем тебе остатки и обороты, если у тебя только остатки пишутся
2. условия склад и номенклатура лучше перенести в параметры виртуальной таблицы 3. лучше отдельным запросом получить таблицу номенклатуры по условию в иерархии, и эту таблицу засунуть как условие в параметры виртуальной таблицы п.2 и 3 как рекомендации к оптимизации запроса |
|||
4
ВежливаяТварь
09.08.12
✎
09:57
|
(1) не совсем понял на счет строки
(2) То есть можно и не записывать каждую строку можно потом один раз записать поставить и все запишется? (3) В простых остатках я не нашёл как период поставить |
|||
5
Wobland
09.08.12
✎
09:59
|
(4) 1. ФайлОстНаНачДняЛокКод.Date=Формат() - присваиваешь строку. дбф понимает тип данных дата, только я не помню, как с этим правильно работать
2. именно это я и хотел сказать. проверь 3. что такое начальный остаток за период (с-по)? |
|||
6
ВежливаяТварь
09.08.12
✎
10:02
|
(5) 3. Нужно записать остаток товара на начало каждого дня в указанном периоде
|
|||
7
Wobland
09.08.12
✎
10:03
|
(6) Формат() свой глянь в отладчике на всякий случай
|
|||
8
ВежливаяТварь
09.08.12
✎
10:04
|
(5) 2. Нет он тогда записывает только последнюю строку
|
|||
9
Wobland
09.08.12
✎
10:04
|
(8) буду знать ;)
|
|||
10
ВежливаяТварь
09.08.12
✎
10:08
|
(7) Да формат переводит в строку. Но там в тз написано дату подавать виды ггггММдд
|
|||
11
Wobland
09.08.12
✎
10:11
|
(10) тз тзой, а что кушает дбф? таки строку должен по ТЗ?
|
|||
12
ВежливаяТварь
09.08.12
✎
10:23
|
В ТЗ ничего не указано по повду строка или дата, сказано лишь что вид должен быть ггггММдд
|
|||
13
ВежливаяТварь
09.08.12
✎
10:28
|
Не может быть связано со скоростью записи?
|
|||
14
Wobland
09.08.12
✎
10:46
|
(12) ну я хз. сделай дополнительно Сообщить() свой формат() и сравни с содержимым файла. может, ты просто данные не так интерпретируешь
(13) нет. |
|||
15
ВежливаяТварь
09.08.12
✎
11:26
|
(14) ок Сейчас попробую. Спасибо.
|
|||
16
ptiz
09.08.12
✎
12:03
|
ОстаткиИОбороты не выдают остатки на день, в котором не было движений по этому складу и номенлклатуре
|
|||
17
ptiz
09.08.12
✎
12:03
|
и как же этого иногда не хватает :(
|
|||
18
ВежливаяТварь
09.08.12
✎
17:57
|
(16) понял сейчас проверю,
|
|||
19
ВежливаяТварь
09.08.12
✎
17:58
|
(16)+ Но когда я формирую остатки и обороты за один день, то все в порядке получается.
|
|||
20
ВежливаяТварь
09.08.12
✎
18:36
|
(16) по ходу прав. Если брать период 1-2 число или 2-3, то остатки выводятся правильные а если 1-3 то остатки за 2 число слегка уменьшены.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |