Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) DBF. Создание нового документа без 1С (число прочтений - 12206 )
Александр Тихонов
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 записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #15 - 04. Ноября 2008 :: 10:37
Печать  
Раз после убиения CDX все проявляется - значит, все делаешь правильно. Значит, фокспра косячит - портит индексы.
Вывод - не пользовать форкспру.
Я бы попробовал через 1sqlite (а вдруг поможет), если не поможет - по через ОЛЕПечаль
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #16 - 04. Ноября 2008 :: 15:26
Печать  
classic писал(а) 04. Ноября 2008 :: 10:37:
Раз после убиения CDX все проявляется - значит, все делаешь правильно. Значит, фокспра косячит - портит индексы.
Вывод - не пользовать форкспру.
Я бы попробовал через 1sqlite (а вдруг поможет), если не поможет - по через ОЛЕПечаль


Ну пользователей Fox -  поболе нескольких сот тысяч и не портит - а тут вдруг косячит.
Ну ну.
« Последняя редакция: 04. Ноября 2008 :: 21:01 - kiruha »  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #17 - 04. Ноября 2008 :: 21:59
Печать  
Вообщем не полинился - простой тест
добавляем справочник Новый1 - все по умолчанию чтобы народ не напрягался
Код
Код
Выбрать все
Процедура Выполнить()			 // Замер 5

	глОлеДБ = СоздатьОбъект("OLEDBData");
	Рез=глОлеДБ.Соединение("
	|Provider=VFPOLEDB.1;
//	|Deleted=Yes;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""");
	запрос=глОлеДБ.СоздатьКоманду();
	Для ИИ=1 По 300 Цикл

		стрЗапрос = "
		|INSERT INTO
		|  $Справочник.Новый1 (ID,CODE,DESCR,ISMARK,VERSTAMP)
		|VALUES  ('123456"+ИИ+"','"+ИИ+"','sdasdsad','','')
		|";
			тз = запрос.ВыполнитьИнструкцию(стрЗапрос);
	КонецЦикла;
КонецПроцедуры 



Смотрю из 1С - все нормально добавилось.
Что я делаю не так?
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #18 - 05. Ноября 2008 :: 06:08
Печать  
вот я не знаю как на INSERT а вот на UPDATE (программная смена родителя например) в 1С начинаются проблемы

я в свое время программно менял родителя у справочников
и форма списка 1С отказывалась показывать корректно изменения (не могу тему найти  Смущённый)

потом я начал искать возможность перестроить индексы программно и вот что тогда получилось http://www.1cpp.ru/forum/YaBB.pl?num=1187687024/9#9

Улыбка так что кое-какие грабли имеются - но до конца я тогда исследования не провел
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #19 - 05. Ноября 2008 :: 07:51
Печать  
lustin писал(а) 05. Ноября 2008 :: 06:08:
вот я не знаю как на INSERT а вот на UPDATE (программная смена родителя например) в 1С начинаются проблемы

я в свое время программно менял родителя у справочников
и форма списка 1С отказывалась показывать корректно изменения (не могу тему найти  Смущённый)

потом я начал искать возможность перестроить индексы программно и вот что тогда получилось http://www.1cpp.ru/forum/YaBB.pl?num=1187687024/9#9

Улыбка так что кое-какие грабли имеются - но до конца я тогда исследования не провел


В коде автора особой необходимости в UPDATE нет - пусть сначала проверит с INSERT ом,
чтобы исключить влияние двойных ошибок.

Потом посмотрим с UPDATE - возможно проблема с кэшем или необх. монопольным захватом таблицы на изменение.
  
Наверх
 
IP записан
 
Александр Тихонов
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #20 - 05. Ноября 2008 :: 23:28
Печать  
kiruha писал(а) 04. Ноября 2008 :: 21:59:
Смотрю из 1С - все нормально добавилось.
Что я делаю не так?

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


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #21 - 06. Ноября 2008 :: 01:18
Печать  
Создаю новый документ с реквизитами новый1 - строка, новый2 - число, в табличной части: новый3 - строка, новый4 - число. Все остальное по-умолчанию.

Далее тест:
Код
Выбрать все
Процедура Тест()
	Перем LASTID, LASTDN, DOCN, ЧЧ,ММ,СС;
	Перем vIDJOURNAL,vIDDOC,vIDDOCDEF,vTIME,vDNPREFIX,vDOCNO;

	глОлеДБ = СоздатьОбъект("OLEDBData");
	Рез=глОлеДБ.Соединение("
	|Provider=VFPOLEDB.1;
//	|Deleted=Yes;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""");  
                
	DOCN=Строка(1553); //смотрю в DD для нового документа DH1553
	vDNPREFIX = Прав("          " + DOCN + "        ",18);
	vIDDOCDEF = Прав(_IdToStr(DOCN),4);

	Для ДокНомер=1 по 200 Цикл
		стрЗапрос="
		|SELECT
		| jouruid.MaxID as LASTID
		|FROM
		| 1SUIDCTL as jouruid
		|WHERE
		| jouruid.TypeID = '   0'
		|";
	   	Запрос = глОлеДБ.СоздатьКоманду();
		таблID = Запрос.ВыполнитьИнструкцию(стрЗапрос);
		LASTID = таблID.ПолучитьЗначение(1,"LASTID");
		Запрос.Закрыть();

		стрЗапрос="
		|SELECT
		|  max(mdocno) as LASTDOCNO
		|FROM
		|(
		|  SELECT max(docno) as mdocno FROM 1sjourn as journal WHERE journal.dnprefix = :DNPREF
		|    UNION
		|  SELECT max(docno) as mdocno FROM 1sdnlock as curdoc WHERE curdoc.dnprefix = :DNPREF
		|) as uniontables
		|";  
		Запрос = глОлеДБ.СоздатьКоманду();
		Запрос.УстановитьТекстовыйПараметр("DNPREF",vDNPREFIX);
		таблID = Запрос.ВыполнитьИнструкцию(стрЗапрос);
		LASTDN = таблID.ПолучитьЗначение(1,"LASTDOCNO");
		Запрос.Закрыть();

		ТекущееВремя(ЧЧ,ММ,СС);
		vIDJOURNAL = "   0";
		vIDDOC     =  _IdToStr(_StrToId(Лев(LASTID,6))+1) + "   ";
		vTIME      =  _IdToStr((ЧЧ*3600+ММ*60+СС)*10000);
		vDOCNO     = Прав("     " + Строка(Число(LASTDN)+1) + "     ",10);

		стрЗапрос="
		|UPDATE
		|  1SUIDCTL
		|SET
		|  MaxID = :IDDOC
		|WHERE
		|  TypeID = '   0'
		|";
		Запрос = глОлеДБ.СоздатьКоманду();
		Запрос.УстановитьТекстовыйПараметр("IDDOC",vIDDOC);
	 	Запрос.Выполнить(стрЗапрос);
		Запрос.Закрыть();

		стрЗапрос = "
		|INSERT INTO
		|  1sjourn ( IDJOURNAL, IDDOC, IDDOCDEF,APPCODE,  DATE,   TIME, DNPREFIX, DOCNO,CLOSED,ISMARK,   ACTCNT, VERSTAMP,DS1019)
		|VALUES    (:IDJOURNAL,:IDDOC,:IDDOCDEF,      0,DATE(),  :TIME,:DNPREFIX,:DOCNO,     0,    ' ','     0', '     0',     0)
		|";
		Запрос = глОлеДБ.СоздатьКоманду();
		Запрос.УстановитьТекстовыйПараметр("IDJOURNAL",vIDJOURNAL);
		Запрос.УстановитьТекстовыйПараметр("IDDOC",vIDDOC);
		Запрос.УстановитьТекстовыйПараметр("IDDOCDEF",vIDDOCDEF);
		Запрос.УстановитьТекстовыйПараметр("TIME",vTIME);
		Запрос.УстановитьТекстовыйПараметр("DNPREFIX",vDNPREFIX);
		Запрос.УстановитьТекстовыйПараметр("DOCNO",vDOCNO);
		Запрос.Выполнить(стрЗапрос);
		Запрос.Закрыть();

		стрЗапрос = "
		|INSERT INTO
		|  DH1553 (IDDOC,SP1554,SP1555)
		|VALUES  (:IDDOC,'Строка'," + Строка(ДокНомер) + ")
		|";
		Запрос = глОлеДБ.СоздатьКоманду();
		Запрос.УстановитьТекстовыйПараметр("IDDOC",vIDDOC);
		Запрос.Выполнить(стрЗапрос);
		Запрос.Закрыть();

		Для н=1 По 5 Цикл
			стрЗапрос = "
			|INSERT INTO
			|  DT1553 (IDDOC,LINENO,SP1556,SP1557)
			|VALUES  (:IDDOC," + Строка(н) + ",'" + ("Строка" + Строка(н)) + "'," + Строка(ДокНомер+н) + ")
			|";

			Запрос = глОлеДБ.СоздатьКоманду();
			Запрос.УстановитьТекстовыйПараметр("IDDOC",vIDDOC);
			Запрос.Выполнить(стрЗапрос);
			Запрос.Закрыть();
		КонецЦикла;
	КонецЦикла;

	Сообщить("Проверить...");
КонецПроцедуры 

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


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #22 - 06. Ноября 2008 :: 01:19
Печать  
В полном журнале видит документы, при открытии поля в документах пусты. Грохаю DH1553.CDX и DT1553.CDX. Данные появляются...
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #23 - 06. Ноября 2008 :: 08:02
Печать  
Покажи функцию _IdToStr
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #24 - 06. Ноября 2008 :: 08:21
Печать  
Alex_Bob писал(а) 06. Ноября 2008 :: 08:02:
Покажи функцию _IdToStr


Встроенная функция 1С
Перевод чисел в 36-ю систему счисления и обратно.
http://www.kb.mista.ru/article.php?id=451
Как определить ID документа
http://www.sinor.ru/~my1c/knowhow/get_id.html
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #25 - 07. Ноября 2008 :: 10:57
Печать  
Провел тест
Новый документ Новый1, реквизит табличной части Новый1, реквизит шапки Новый2
тип строка 10
Код
Выбрать все
//*******************************************
 Процедура Тест()
	Перем LASTID, LASTDN, DOCN, ЧЧ,ММ,СС;
	Перем vIDJOURNAL,vIDDOC,vIDDOCDEF,vTIME,vDNPREFIX,vDOCNO;

	глОлеДБ = СоздатьОбъект("OLEDBData");
	Рез=глОлеДБ.Соединение("
	|Provider=VFPOLEDB.1;
//	|Deleted=Yes;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""");

	Для ДокНомер=3501 по 4500 Цикл


		Запрос = глОлеДБ.СоздатьКоманду();


		стрЗапрос = "
		|INSERT INTO
		|  1sjourn ( IDJOURNAL, IDDOC, IDDOCDEF,APPCODE,  DATE,   TIME, DNPREFIX, DOCNO,CLOSED,ISMARK,   ACTCNT, VERSTAMP)
		|VALUES    (:IDJOURNAL,:IDDOC,:IDDOCDEF,	0,DATE(),  :TIME,:DNPREFIX,:DOCNO,     0,    ' ','     0', '     0')
		|";
		vIDJOURNAL="   0";
		vIDDOC="12345"+ДокНомер;
		vIDDOCDEF="14FS";

		ТекущееВремя(ЧЧ,ММ,СС);
		//vIDJOURNAL = "   0";
		//vIDDOC     =  _IdToStr(_StrToId(Лев(LASTID,6))+1) + "   ";
		vTIME	=  _IdToStr((ЧЧ*3600+ММ*60+СС)*10000);

	//	vTIME="7QM7YO";
		vDNPREFIX="    52408	  ";
		vDOCNO=СокрЛП(ДокНомер);


		Запрос.УстановитьТекстовыйПараметр("IDJOURNAL",vIDJOURNAL);
		Запрос.УстановитьТекстовыйПараметр("IDDOC",vIDDOC);
		Запрос.УстановитьТекстовыйПараметр("IDDOCDEF",vIDDOCDEF);
		Запрос.УстановитьТекстовыйПараметр("TIME",vTIME);
		Запрос.УстановитьТекстовыйПараметр("DNPREFIX",vDNPREFIX);
		Запрос.УстановитьТекстовыйПараметр("DOCNO",vDOCNO);
		Запрос.Выполнить(стрЗапрос);


		стрЗапрос = "
		|INSERT INTO
		|  $Документ.Новый1  (IDDOC,SP52410)
		|VALUES  (:IDDOC,'" + Строка(ДокНомер) + "')
		|";

		Запрос.УстановитьТекстовыйПараметр("IDDOC",vIDDOC);
		Запрос.Выполнить(стрЗапрос);


		Для н=1 По 5 Цикл
			стрЗапрос = "
			|INSERT INTO
			|  DT52408 (IDDOC,LINENO,SP52409)
			|VALUES  (:IDDOC," + Строка(н) + ",'абв')
			|";


			Запрос.УстановитьТекстовыйПараметр("IDDOC",vIDDOC);
			Запрос.Выполнить(стрЗапрос);

		КонецЦикла;
	КонецЦикла;

	Сообщить("Проверить...");
КонецПроцедуры  



Все нормально.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #26 - 07. Ноября 2008 :: 11:25
Печать  
Даже с одним id лепил несколько вставок.
В принципе это неправильно но никаких критических ошибок не возникает - в табличной части
появляется несколько строк с одинаковым номером строки, в журнале - несколько документов с одинаковым id.
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #27 - 07. Ноября 2008 :: 13:21
Печать  
Мне тоже стало интересно. У меня результаты похожи на результаты автора ветки - индексный файл 1sjourn.cdx после теста не обновился, файлы dh***.cdx и dt***.cdx обновились, но структура файла не похожа на ту, что получается после переиндексации.
foxpro oledb провайдер 9.0 sp2
1c релиз 25, SQL
1cpp 2.0.3.3 и 3.0.15 без разницы
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #28 - 07. Ноября 2008 :: 14:32
Печать  
Alex_Bob писал(а) 07. Ноября 2008 :: 13:21:
Мне тоже стало интересно. У меня результаты похожи на результаты автора ветки - индексный файл 1sjourn.cdx после теста не обновился, файлы dh***.cdx и dt***.cdx обновились, но структура файла не похожа на ту, что получается после переиндексации.
foxpro oledb провайдер 9.0 sp2
1c релиз 25, SQL
1cpp 2.0.3.3 и 3.0.15 без разницы


У автора ветки ровно наоборот - 1sjourn.cdx обновился - а табличная часть нет.
Какая то тонкость - хотелось бы выловить.
В коде ?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #29 - 07. Ноября 2008 :: 17:08
Печать  
kiruha писал(а) 07. Ноября 2008 :: 14:32:
Alex_Bob писал(а) 07. Ноября 2008 :: 13:21:
Мне тоже стало интересно. У меня результаты похожи на результаты автора ветки - индексный файл 1sjourn.cdx после теста не обновился, файлы dh***.cdx и dt***.cdx обновились, но структура файла не похожа на ту, что получается после переиндексации.
foxpro oledb провайдер 9.0 sp2
1c релиз 25, SQL
1cpp 2.0.3.3 и 3.0.15 без разницы


У автора ветки ровно наоборот - 1sjourn.cdx обновился - а табличная часть нет.
Какая то тонкость - хотелось бы выловить.
В коде ?

Может есть еще графы отбора и общие реквизиты которые тоже надо учитывать.
  
Наверх
 
IP записан
 
Александр Тихонов
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 17
Зарегистрирован: 26. Октября 2008
Re: DBF. Создание нового документа без 1С
Ответ #30 - 10. Ноября 2008 :: 06:22
Печать  
kiruha писал(а) 07. Ноября 2008 :: 11:25:
в табличной части появляется несколько строк с одинаковым номером строки, в журнале - несколько документов с одинаковым id.

Работает в точности как у Вас. А вы мой тест не пробовали?
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: DBF. Создание нового документа без 1С
Ответ #31 - 19. Ноября 2008 :: 07:01
Печать  
kiruha писал(а) 04. Ноября 2008 :: 15:26:
Ну пользователей Fox -  поболе нескольких сот тысяч и не портит - а тут вдруг косячит.
Ну ну.

Пользователи фокса, небось, пользуют штатный формат баз данных фокса. А в 1С используется другой - codebase. Я думаю, что проблема именно в реализации чтения/записи индексов фокспром. Читает эти индексы она нормально, а записать забывает.
Кстати, у фокса есть кеширование записи или что-нибудь в этом роде? Его можно отключить?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #32 - 19. Ноября 2008 :: 08:05
Печать  
classic писал(а) 19. Ноября 2008 :: 07:01:
kiruha писал(а) 04. Ноября 2008 :: 15:26:
Ну пользователей Fox -  поболе нескольких сот тысяч и не портит - а тут вдруг косячит.
Ну ну.

Пользователи фокса, небось, пользуют штатный формат баз данных фокса. А в 1С используется другой - codebase. Я думаю, что проблема именно в реализации чтения/записи индексов фокспром. Читает эти индексы она нормально, а записать забывает.
Кстати, у фокса есть кеширование записи или что-нибудь в этом роде? Его можно отключить?


На INSERT привел тест - отрабатывает нормально. Видимо проблема в UPDATE
- не проверял как отрабатывается (возможно нужен ли монопольный захват таблиц?)

Отключение буфера чтения
Код
Выбрать все
Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
 


Этот код проверен.
Штатная команда
Код
Выбрать все
Запрос.Выполнить("EXECSCRIPT('SET SQLBUFFERING  OFF')");  


выпоняет другие функции

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: DBF. Создание нового документа без 1С
Ответ #33 - 19. Ноября 2008 :: 08:16
Печать  
Чтобы проверить, что дело не в буфере, можно перед каждым использованием
запроса(Запрос.ВыполнитьИнструкцию) рвать ссесию и создават ее заново,
т.е. выполнять
Код
Выбрать все
глОлеДБ = СоздатьОбъект("OLEDBData");
Рез=глОлеДБ.Соединение("
	|Provider=VFPOLEDB.1;
//	|Deleted=Yes;
	|Null = Yes;
	|Exclusive = No;
	|SourceType = DBF;
	|Data Source=" + КаталогИБ() + ";
	|Mode=ReadWrite;
	|Extended Properties="""";
	|User ID="""";
	|Password="""";
	|Mask Password=False;
	|Collating Sequence=MACHINE;
	|DSN=""""");
Запрос = глОлеДБ.СоздатьКоманду();

 

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать