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