|
v7: Загрузка из DBF | ☑ | ||
---|---|---|---|---|
0
DeMi4
09.11.11
✎
11:45
|
Есть файл DBF в котором проиндексирован файл MOL. Для каждого МОЛ есть номенклатура ну три или 10 записей из этого файла надо создать документ Ввод остатков делаю так:
ДокВвОст=СоздатьОбъект("Документ.ВводОстатковТМЦ"); Файл=СоздатьОбъект("XBASE"); Файл.ОткрытьФайл("d:\Work1C\Partii2.DBF","d:\Work1C\Partii2.CDX"); Если Файл.Открыта()=0 Тогда Сообщить ("Не удалось открыть файл"); КонецЕсли; Файл.КодоваяСтраница(1); Файл.Первая(); Индекс=Файл.ТекущийИндекс("IDMOL"); Пока Файл.ВКонце()=0 Цикл Если Файл.MOL=Индекс Тогда Сообщить(Файл.MOL); КонецЕсли; Сообщить(""+Файл.NOMEN+" "+Файл.KOL+" "+Файл.SUMMARUB); КонецЦикла; Файл.ЗакрытьФайл(); Что неправильно? |
|||
1
ДенисЧ
09.11.11
✎
11:46
|
а что неправильно?
|
|||
2
DeMi4
09.11.11
✎
11:47
|
Такое чувство что виснет. Несколько записей выведет и все
|
|||
3
ДенисЧ
09.11.11
✎
11:48
|
А где Следующая() ?
|
|||
4
DeMi4
09.11.11
✎
11:52
|
Как для определенного индекса сделать выгрузку в ТЗ
На ум кроме цикла в цикле ни чего не приходит |
|||
5
Ёпрст
09.11.11
✎
11:58
|
(4) забить на xbase, написать прямой запрос к файлу через фоксовый провайдер, в нём - сделать что угодно и как угодно.
|
|||
6
Dump
09.11.11
✎
12:09
|
С индексами не работал. Всегда загружаю из ДБФ в ТЗ, потом с ТЗ делац что хочешь - сортируй, фильтруй, сворачивай...
|
|||
7
Mikeware
09.11.11
✎
12:19
|
(1) вот это неправильно:
Индекс=Файл.ТекущийИндекс("IDMOL"); Пока Файл.ВКонце()=0 Цикл Если Файл.MOL=Индекс Тогда |
|||
8
Mikeware
09.11.11
✎
12:20
|
(5) Ну куда ему еще и прямые запросы...
|
|||
9
DeMi4
09.11.11
✎
12:22
|
Согласен что это неправильно
Как мне для ндекса получить список номенклатуры |
|||
10
FF
09.11.11
✎
12:27
|
зависает, потому что в цикле нет Файл.Следующая()
|
|||
11
Dump
09.11.11
✎
12:30
|
ДБФЗАР=СоздатьОбъект("XBase");
.... Для СчЗаписейЗар=1 По ДБФЗАР.КоличествоЗаписей() Цикл ДБФЗАР.Перейти(СчЗаписейЗар); ТЗН.НоваяСтрока(); ТЗН.Номенкл=ДБФЗАР.ПолучитьЗначениеПоля("Nomenkl"); ..... КонецЦикла; ДБФЗАР.ЗакрытьФайл(); |
|||
12
miki
09.11.11
✎
12:33
|
(9)у тебя индекс с фильтром?
|
|||
13
DeMi4
09.11.11
✎
12:34
|
Без индекса
|
|||
14
DeMi4
09.11.11
✎
12:35
|
Без фильтра
|
|||
15
СвинТуз
09.11.11
✎
12:37
|
Файл.Первая();
Индекс=Файл.ТекущийИндекс("IDMOL"); гы переставить попробуй |
|||
16
miki
09.11.11
✎
12:37
|
(14)тогда опиши просто словами алгоритм что и как ты хочешь получить от использования индекса?
|
|||
17
Dump
09.11.11
✎
12:48
|
(16) Похоже, ты задал самый сложный вопрос в этой ветке ;-)
|
|||
18
DeMi4
09.11.11
✎
12:57
|
Для каждого склада надо необходимо определить номенклатуру
|
|||
19
Mikeware
09.11.11
✎
12:58
|
(11) 1986?
(15) А почти без разницы. Ему все равно позиционироваться надо. А индекс сработает при первом позиционировании. |
|||
20
Mikeware
09.11.11
✎
12:59
|
(18) Ну и иди по индексу, да собирай номенклатуру, пока индексное поле не изменяется...
|
|||
21
Dump
09.11.11
✎
13:07
|
(19) "1986? " - не понял
|
|||
22
DeMi4
09.11.11
✎
14:58
|
Как сравнить значения первой и второй строки
Тоесть Если например МОЛ 1 строки <> МоЛ 2 строки то то то |
|||
23
Ёпрст
09.11.11
✎
15:00
|
(22) использовать условный оператор Если и операторы не равно (<>)
|
|||
24
DeMi4
09.11.11
✎
15:04
|
Для НС=1 По ТЗ.КоличествоСтрок()Цикл
ТЗ.ПолучитьСтрокуПоНомеру(НС); Вот как на языке будет правильно Если ТЗ.МОЛ<>ТЗ.МОЛИзследующейстроки Тогд конецЕсли КонецЦикла |
|||
25
Ёпрст
09.11.11
✎
15:05
|
(24) ПолучитьЗначение(номерстроки,номерколонки)
или ид колонки, сматри параметры метода в СП |
|||
26
DeMi4
09.11.11
✎
15:12
|
Спасибо я че то пока теряюсь в этом СП
Для НС=1 По ТЗ.КоличествоСтрок()Цикл ТЗ.ПолучитьСтрокуПоНомеру(НС); Если ТЗ.ПолучитьЗначение(НС,2)<>ТЗ.ПолучитьЗначение(НС+1,2) Тогда Сообщить(ТЗ.МОЛ); КонецЕсли; КонецЦикла КонецПроцедуры Вот но что делать с последней строкой Если ТЗ.ПолучитьЗначение(НС,2)<>ТЗ.ПолучитьЗначение(НС+1,2) Тогда {D:\WORK1C\5677.ERT(32)}: Номер за пределами значения! |
|||
27
filh
09.11.11
✎
15:12
|
(24) а запоминать предыдущие значение и сравнивать, не?
|
|||
28
Ёпрст
09.11.11
✎
15:14
|
(26) поставиь условие на граничные условия вестимо, либо через если, либо через Макс
|
|||
29
filh
09.11.11
✎
15:14
|
можно так:
Для НС=1 По ТЗ.КоличествоСтрок()-1 Цикл ТЗ.ПолучитьСтрокуПоНомеру(НС); Если ТЗ.ПолучитьЗначение(НС,2)<>ТЗ.ПолучитьЗначение(НС+1,2) Тогда Сообщить(ТЗ.МОЛ); КонецЕсли; КонецЦикла можно и так: Для НС=2 По ТЗ.КоличествоСтрок() Цикл ТЗ.ПолучитьСтрокуПоНомеру(НС); Если ТЗ.ПолучитьЗначение(НС-1,2)<>ТЗ.ПолучитьЗначение(НС,2) Тогда Сообщить(ТЗ.МОЛ); КонецЕсли; КонецЦикла |
|||
30
filh
09.11.11
✎
15:15
|
(28) да у него банально:
По ТЗ.КоличествоСтрок() и ТЗ.ПолучитьЗначение(НС+1,2) |
|||
31
miki
09.11.11
✎
15:19
|
(24)тебе же уже сказали:
отсортируй по МОЛ'у (или как ты хотел индекс у хэ-базы), получи значение из первой строки (записи), типа эталон и сравнивай со следущими. Как поменялось - меняй эталон и т.д. пока не кончаться данные. |
|||
32
FN
09.11.11
✎
15:20
|
(0) это продолжение Свертка базы ТИС ?
зачем тебе этот дбф вообще? В старой базе делаешь ТЗ (тока ссылки туда не пихай) и ЗначениеВфайл В новой базе ЗначениеИзФайла, Сортировать ("МОЛ") + обход ТЗ и запись... делов на 30 минут |
|||
33
Ёпрст
09.11.11
✎
15:20
|
(31) ты что?! Это же еще про целый метод читать в СП придётся!
Как отсортировать ТЗ.. |
|||
34
DeMi4
09.11.11
✎
16:00
|
помогите еще пожалуйста как сделать чтобы все выполнялось логически
Суть в чем как только мы узнаем что в следующей строке у нас изменится МОЛ то мы записываем документ. |
|||
35
DeMi4
09.11.11
✎
16:00
|
Для НС=1 По ТЗ.КоличествоСтрок()Цикл
ДокВвОст.Новый(); ТЗ.ПолучитьСтрокуПоНомеру(НС); ДокВвОст.Номенклатура=СпрНом.НайтиПоНаименованию(ТЗ.Номенклатура); ДокВвОст.Количество=Тз.Количество; Если ТЗ.ПолучитьЗначение(НС,2)<>ТЗ.ПолучитьЗначение(НС+1,2) Тогда ДокВвОст.Записать(); КонецЕсли; КонецЦикла; Как раскидать |
|||
36
miki
09.11.11
✎
16:03
|
Ну добавь, если условие выполнится, после
ДокВвОст.Записать(); ДокВвОст.Новый(); Еще проверить после выхода из цикла, если надо - записать. А вообще условие Если ТЗ.ПолучитьЗначение(НС,2)<>ТЗ.ПолучитьЗначение(НС+1,2) должно всегда выдавать ошибку на последней строке, что-то_там_не_входит_в_границы. |
|||
37
miki
09.11.11
✎
16:05
|
+ для неотсортированной таблицы можешь получить несколько доков для одного МОЛ'а...
В общем - не зачет. |
|||
38
DeMi4
09.11.11
✎
16:11
|
ТЗ отсартирована Что сделать чтобы ошибку ту не выдавало
|
|||
39
FN
09.11.11
✎
16:17
|
(38)
Пример алгоритма Дано ТЗ: Клиент,Товар,К-во ТекущийКлиент=""; ТЗ.Сортировать("Клиент"); ТЗ.ВыбратьСтроки(); Док=СоздатьОбъект("Документ"); Пока ТЗ.ПолучитьСтроку()=1 Цикл Если ТЗ.Клиент<>ТекущийКлиент тогда Если Док.КоличествоСтрок()>0 тогда Док.записать(); КонецЕсли; Док.Новый(); Док.ДатаДок=Рабочаядата(); .... ТекущийКлиент=ТЗ.Клиент; КонецЕсли; Док.НоваяСтрока() Док.Товар=ТЗ.Товар; Док.Кво=ТЗ.Кво; КонецЦикла; Если Док.КоличествоСтрок()>0 тогда Док.записать(); КонецЕсли; |
|||
40
DeMi4
09.11.11
✎
22:04
|
Почему при записи Дока из обработки в журнале не отображается его цена пока не зайдешь в сам документ и не нажмешь кнопку записать
|
|||
41
Ёпрст
09.11.11
✎
22:06
|
(40) не выбран ТипЦен в шапке дока или, не заполнен еще какой реквизит.
|
|||
42
DeMi4
09.11.11
✎
22:17
|
Нету такого реквизита в ТИС
|
|||
43
Ёпрст
09.11.11
✎
22:19
|
(42) да ну ? всю жизь был в реквизите шапки, в 8 редакции мот и не был - там категории цен были, а вот в 9 редакции всегда был.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |