Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) DBF. Создание нового документа без 1С (число прочтений - 12131 )
Александр Тихонов
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
DBF. Создание нового документа без 1С
30. Октября 2008 :: 00:04
Печать  
База DBF. Необходимо не залазея в 1с создать новый документ. Не подчинен и подчиненных не имеет. При создании документа 1с'кой filemon показал, что изменяются файлы: 1SJOURN.DBF, DH776.DBF (документ), DT776.DBF (его табличная часть), 1SUIDCTL.DBF (толком не понял, что это), 1SDNLOCK.DBF (толком не понял, что это). Ну и сооветственно их индексные файлы.
Тестирую работу запросов внутри 1с. Делаю так:
1) Получаю ID последнего документа и его номер
Код
Выбрать все
стрЗапрос="
	|SELECT
	|  journal.iddoc as MAXID,
	|  journal.docno as MAXDOCNO
	|FROM
	|  1sjourn as journal
	|WHERE
	|  journal.iddoc = (SELECT max(temp_journal.iddoc) FROM 1sjourn as temp_journal)
	|"; 


Далее ID из 36 в 10, инкремент, обратно в 36. А Номер документа просто инкрементирую. Добавлюя запись в журнал:
Код
Выбрать все
стрЗапрос = "
	|INSERT INTO
	|  1sjourn SED,ISMARK,ACTCNT,VERSTAMP,DS1019)
	|VALUES   O,0,:ISMARK,:ACTCNT,:VERSTAMP,0)
	|"; 


Добавляю запись в таблицу документов:
Код
Выбрать все
стрЗапрос = "
	|INSERT INTO
	|  DH776 (IDDOC,SP770,SP826)
	|VALUES  (:IDDOC,:SP770,'')
	|"; 


Добавляю записи в таблицу табличной части документа циклом:
Код
Выбрать все
стрЗапрос = "
		|INSERT INTO
		|  DT776 (IDDOC,LINENO,SP771,SP958)
		|VALUES  (:IDDOC,:LINENO,:SP771,0)
		|"; 


Если выполнить пару раз, вроде все нормально. Если раз 100, то в полном журнале документов пустота, в журнале именно этого документа записи есть, но в этих документах табличная часть пуста.
Удаляю индексные файлы 1SJOURN.CDX, DH776.CDX, DT776.CDX. Захожу монопольно - восстанавливаю их. Записи везде появляются.

И так, вопрос: что я забыл сделать или делаю не так?
Читал про "не забудьте про блокировки и транзакции". Но не нашел каким образом про них не забыть.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #1 - 30. Октября 2008 :: 05:40
Печать  
Насколько я понимаю DBF - строку подключения в студию Улыбка
  
Наверх
IP записан
 
Александр Тихонов
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #2 - 30. Октября 2008 :: 06:01
Печать  
leshik писал(а) 30. Октября 2008 :: 05:40:
Насколько я понимаю DBF - строку подключения в студию Улыбка

пожалуйста:
Код
Выбрать все
Соединение = "
	|   Provider=VFPOLEDB.1;
	|   SET Deleted=Yes;
	|   SourceType=DBF;
	|   Null=Yes;
	|   Exclusive=No;
	|   Data Source=" + КаталогИБ()+ ";
	|   Mode=ReadWrite;
	|   Extended Properties="";
	|   User ID="";
	|   Password="";
	|   Mask Password=False;
	|   Collating Sequence=RUSSIAN;
	|   DSN=""
	|"; 

  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #3 - 30. Октября 2008 :: 06:25
Печать  
Код
Выбрать все
Collating Sequence=MACHINE; 


не поможет?
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #4 - 30. Октября 2008 :: 06:54
Печать  
1SDNLOCK.DBF - хранение зарезервированных номеров документов, кодов справочников.
т.е. когда создаешь документ/элемент справочника при включенной автонумерации появляется новый номердок/код. он вычисляется по приницу - макс(изЖурналаДокументов/Справочника,1SDNLOCK.DBF-по данному виду метаданных)
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #5 - 30. Октября 2008 :: 08:04
Печать  
JohnyDeath писал(а) 30. Октября 2008 :: 06:25:
Код
Выбрать все
Collating Sequence=MACHINE; 


не поможет?


+1
Ну сколько раз нужно написать что в файлах CDX стоит сортировка MACHINE ???

P.S. И файл 1SCRDOC нужно обновлять, и 1SDNLOCK отслеживать
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #6 - 30. Октября 2008 :: 09:37
Печать  
>>1SUIDCTL.DBF (толком не понял, что это)

Вот оттуда и нужно получать последний IDDOC (в записи где тип нулевой)
И туда же записывать новый!!!

ЗЫ. Ой, шо то мне сцыкотно как-то....
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #7 - 30. Октября 2008 :: 09:46
Печать  
самый лучший способ изучения - SQL Profiler Улыбка
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
Александр Тихонов
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #8 - 31. Октября 2008 :: 07:39
Печать  
Изменил определение последнего ID документа на:
Код
Выбрать все
стрЗапрос="
	|SELECT
	| jouruid.MaxID as LASTID
	|FROM
	| 1SUIDCTL as jouruid
	|WHERE
	| jouruid.TypeID = '   0'
	|"; 



А определение номера последнего документа на:
Код
Выбрать все
стрЗапрос="
	|SELECT
	|  max(mdocno) as LASTDOCNO
	|FROM
	|(
	|  SELECT max(docno) as mdocno FROM 1sjourn as journal WHERE journal.dnprefix = '       776        '
	|    UNION
	|  SELECT max(docno) as mdocno FROM 1sdnlock as curdoc WHERE curdoc.dnprefix = '       776        '
	|) as uniontables
	|"; 



Соответственно, после получения нового ID обновляю:
Код
Выбрать все
стрЗапрос="
	|UPDATE
	|  1SUIDCTL
	|SET
	|  MaxID = :IDDOC
	|WHERE
	|  TypeID = '   0'
	|"; 



Поменял в строке подключения на MACHINE. Не помогло, все равно приходится грохать индексные файлы.
  
Наверх
 
IP записан
 
Александр Тихонов
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #9 - 31. Октября 2008 :: 07:44
Печать  
kiruha писал(а) 30. Октября 2008 :: 08:04:
И файл 1SCRDOC нужно обновлять...

Дык подчиненных нет и он сам (документ) никому не подчинен. И filemon говорит, что в 1SCRDOC ничего не пишется при создании нового нужного мне документа.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #10 - 31. Октября 2008 :: 08:22
Печать  
Как то подозрительно мало
Цитата:
|стрЗапрос = "
     |INSERT INTO
     |  DH776 (IDDOC,SP770,SP826)
     |VALUES  (:IDDOC,:SP770,'')
     |";


что, 2 реквизита в шапке? Часом не пропускаешь ?
Поставь
Код
Выбрать все
|   Null=No; 

для проверки
  
Наверх
 
IP записан
 
Александр Тихонов
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #11 - 01. Ноября 2008 :: 00:11
Печать  
kiruha писал(а) 31. Октября 2008 :: 08:22:
Как то подозрительно мало. что, 2 реквизита в шапке? Часом не пропускаешь ?

Ну да всего два, и столбцов в таблице три (в Фоксе), на всякий случай поставил - не помогло.

Какие-то проблемы с индексами, млин...
  
Наверх
 
IP записан
 
Александр Тихонов
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #12 - 01. Ноября 2008 :: 01:00
Печать  
Заметил один косяк в запросе на добавление записи в журнал:
Код
Выбрать все
стрЗапрос = "
	|INSERT INTO
	|  1sjourn SED,ISMARK,ACTCNT,VERSTAMP,DS1019)
	|VALUES   O,0,:ISMARK,:ACTCNT,:VERSTAMP,0)
	|"; 



Я дважды обновляю IDDOCDEF и DNPREFIX и того вместо 13 параметров, обновляю 15. Как-то я наляпал, но не думал, что Фокс такое пропустит.
К сожалению, исправление не помогло...
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #13 - 01. Ноября 2008 :: 07:51
Печать  
Что й то не ладно в королевстве.
1.Последний драйвер http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA...
2. Set Deleted закомментировать

3.Проверка Fox- а
Добавляешь документы прямыми.
Проверяешь
Код
Выбрать все
Select * FROM 1SJOURN as жур where жур.id=:NewId  


Для новых докуметов с новыми NewId .
Если работает - с Fox и запросами все норм, проблема в 1С.
Иначе - проблема в прямых запросах.
  
Наверх
 
IP записан
 
Александр Тихонов
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #14 - 02. Ноября 2008 :: 05:57
Печать  
kiruha писал(а) 01. Ноября 2008 :: 07:51:
Проверяешь
Код
Выбрать все
Select * FROM 1SJOURN as жур where жур.id=:NewId  

Я так понял, вы имеете ввиду не жур.id, а жур.IDDOC

1 - скачал, установил
2 - закомментировал
3 - документ находит
Результат тот же, увы. Буду добавлять документ через COM...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать