Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как отредактировать движения документов по регистрам остатков? (число прочтений - 12448 )
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Как отредактировать движения документов по регистрам остатков?
14. Сентября 2011 :: 06:41
Печать  
Как реализовать такую задачу?
  • Выбрать все движения по регистру
  • Удалить все движения
  • Написать новые движения под документы (список док-тов из п.1)

Все нужно сделать не перепроводя документы. FAQ почитал, ничего для себя по этим 3м пунктам не почерпнул.
Киньте пожалуйста примеры запросов для каждого из пунктов.
Структура регистра: Измерения Контрагент, БухСчет, Договор, Валюта Ресурсы Сумма, ВалСумма
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #1 - 14. Сентября 2011 :: 09:11
Печать  
Если "штатненько", без запроса, то так:
примерчик
а так, просто delete + insert, или update, если только изменить что-то.
Тока потом еще итоги надо пересчитывать один хрен.
Можно тоже, прямым запросом.
  
Наверх
 
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #2 - 14. Сентября 2011 :: 09:18
Печать  
Eprst писал(а) 14. Сентября 2011 :: 09:11:
Если "штатненько", без запроса, то так:
<..cut..>
а так, просто delete + insert, или update, если только изменить что-то.
Тока потом еще итоги надо пересчитывать один хрен.
Можно тоже, прямым запросом.


Привет, Ёпрст! Спасибо, посмотрю.
P.S. Сменю пожалуй отображаемый ник Улыбка
  
Наверх
ICQ  
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #3 - 27. Сентября 2011 :: 08:15
Печать  
Помогите с запросом INSERT.
Например нужно вставить запись в регистр остатков РегХ (измерение "Х" - справочник.контрагенты, ресурс - "сумма")

Как записать такой запрос, установить параметры и регистратор (документ к которому подколоть это движение) ?
  
Наверх
ICQ  
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #4 - 27. Сентября 2011 :: 08:25
Печать  
удалось угадать таблицу и получить её структуру и данные Улыбка

Код
Выбрать все
	Ком			= oledb.СоздатьКоманду();
	ТекстСКЛ	= "SELECT	*
	|	FROM
	|	$Регистр.Взаиморасчеты as Vzr";
	х = Ком.ВыполнитьИнструкцию(ТекстСКЛ);
	тзф.Загрузить(х);
 



Можно пробовать делать INSERT теперь
  
Наверх
ICQ  
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #5 - 27. Сентября 2011 :: 08:59
Печать  
а почему так ничего не выбирает, х = 0, а описание ошибки пустое?

Код
Выбрать все
	RS		= СоздатьОбъект("ODBCRecordSet");
	RS.УстБД1С();
	ТекстСКЛ	= "SELECT	*
	|	FROM
	|	$Регистр.Взаиморасчеты as Vzr";
	х = RS.Выполнить(ТекстСКЛ);
	Сообщить(х);
	Сообщить(RS.ПолучитьОписаниеОшибки());
	RS.ПолучитьРезультатыВ_ТЗ(тзф)
 



ВыполнитьИнструкцию() и Открыть() ведут себя так же Печаль
  
Наверх
ICQ  
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #6 - 27. Сентября 2011 :: 12:01
Печать  
надо было вот так
Код
Выбрать все
	ODBCDB		= СоздатьОбъект("ODBCDataBase");
	ODBCDB.ПрисоединитьИБ(КаталогИБ());

	RS		= СоздатьОбъект("ODBCRecordSet");
	RS.УстБД(ODBCDB);
	ТекстСКЛ	= "SELECT	*
	|	FROM
	|	$Регистр.Взаиморасчеты as Vzr";
	х = RS.ВыполнитьИнструкцию(ТекстСКЛ);
	RS.ПолучитьРезультатыВ_ТЗ(х);
	тзф.Загрузить(х);
 


+ скачать VFPODBC
Решение найдено на ODBCdatabase вообще работает с Provider=VFPOLEDB.1
  
Наверх
ICQ  
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #7 - 27. Сентября 2011 :: 12:39
Печать  
а можно делать запрос, не зная имен колонок, а только по порядку?
например
Код
Выбрать все
	ТекстСКЛ	= "SELECT	 1	as [Контрагент $Справочник.Контрагенты]
	|	FROM
	|	$Регистр.Взаиморасчеты as Vzr";
 



вместо

Код
Выбрать все
	ТекстСКЛ	= "SELECT	 sp16782	as [Контрагент $Справочник.Контрагенты]
	|	FROM
	|	$Регистр.Взаиморасчеты as Vzr";
 


?


И как типизировать поле iddoc ?
Код
Выбрать все
	ТекстСКЛ	= "SELECT	iddoc	as [Регистратор $Документ.*]
	|	FROM
	|	$Регистр.Взаиморасчеты as Vzr";
 



В таком виде получаю State 42000, native 200, message [Microsoft][ODBC Visual FoxPro Driver]Syntax error.

А вот в таком как ни странно, получаю что хочу на первый взгляд, причем там не только БанковскаяВыписка, все типы решены
Код
Выбрать все
	ТекстСКЛ	= "SELECT	iddoc	as [Регистратор $Документ.БанковскаяВыписка]
	|	FROM
	|	$Регистр.Взаиморасчеты as Vzr";
 

  
Наверх
ICQ  
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #8 - 28. Сентября 2011 :: 07:42
Печать  
пробовал типизировать регистратора так
Код
Выбрать все
	ТекстСКЛ	= "SELECT	 *	FROM $Регистр.Взаиморасчеты as Vzr
	|LEFT JOIN 1Sjourn  as X ON	Vzr.iddoc =  X.iddoc";
 


за 25 мин 4 Гб сожрано оперативы, прервал.
ЧЯДНТ ?
  
Наверх
ICQ  
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #9 - 28. Сентября 2011 :: 08:35
Печать  
Удалось. Время выполнения хорошее, типизирует.  Очень довольный
Код
Выбрать все
	ТекстСКЛ	= "SELECT	 journ.iddoc as [Doc $Документ], journ.idDocDef AS Doc_Kind	FROM	$Регистр.Взаиморасчеты as Vzr
	|LEFT JOIN 1Sjourn as journ ON vzr.iddoc = journ.IDDOC";
 


Взято с Помогите с типизацией документа по журналу..., не могу понять как ее сделать
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #10 - 29. Сентября 2011 :: 04:28
Печать  
тут
http://www.1cpp.ru/forumfiles/Attachments/mod_002.zip
и тут
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411

большинство ответов на твои вопросы
  
Наверх
 
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #11 - 29. Сентября 2011 :: 06:09
Печать  
Eprst писал(а) 29. Сентября 2011 :: 04:28:
тут
http://www.1cpp.ru/forumfiles/Attachments/mod_002.zip и тут http://www.1cpp.ru/forum/YaBB.pl?num=1148038411 большинство ответов на твои вопросы

Спасибо, очень хороший FAQ. Но теперь у меня другие проблемы (займусь после обеда). INSERT не удается.
Код
Выбрать все
	ТекстСКЛ	= "INSERT INTO	 $Регистр.Взаиморасчеты
	|	осрочки,Сумма,ВалСумма,НомПров)
	|	VALUES
	|	(?,?,?,?,?,?,?,?,?,?,?,?)
	|";
	RS.Подготовить(ТекстСКЛ);
				Пока Движения.ПолучитьСтроку() = 1 Цикл
					//rs.ДобПараметр(1, DBType, Len, Prec)
					rs.УстПараметр(1,тзДокИд.DocID);//ДокИД
					rs.УстПараметр(2,0);//НомСтрДок =
					rs.УстПараметр(3,Движения.НомерСтроки);//НомДвиж
					rs.УстПараметр(4,?(Движения.ПриходРасход="+", 0, 1));//ПриходРасход
					rs.УстПараметр(5,Движения.Контрагент);//Контрагагент
					rs.УстПараметр(6,Движения.БухСчет);//БухСчет
					rs.УстПараметр(7,Движения.Договор);//Договор
					rs.УстПараметр(8,Движения.Валюта);//Валюта
					rs.УстПараметр(9,ТекущаяДата());//ДатаПросрочки
					rs.УстПараметр(10,Движения.Сумма);//Сумма
					rs.УстПараметр(11,Движения.ВалСумма);//ВалСумма
					rs.УстПараметр(12,Движения.НомерПроводки);//НомПров
					Если RS.Выполнить(ТекстСКЛ) = 0 Тогда
						х = 0/0;
					КонецЕсли;
					Сообщить("ок");
				КонецЦикла;
 


ПостроитьПараметры() почему то возвращало 0, начал переделывать под ДобПараметр(), позднее продолжу
  
Наверх
ICQ  
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #12 - 14. Октября 2011 :: 07:46
Печать  
Код
Выбрать все
	ODBCDB	= СоздатьОбъект("ODBCDataBase");
	ODBCDB.ПрисоединитьИБ(КаталогИБ());
	RS		= СоздатьОбъект("ODBCRecordSet");
	RS.УстБД(ODBCDB);	  //lineno,actno,debkred,sp16782,sp16783,sp16784,sp16852,sp16785,sp16853,sp16787
	ТекстСКЛ	= "INSERT INTO	 $Регистр.Взаиморасчеты
	|	осрочки,Сумма,ВалСумма,НомПров)
	|	VALUES
	|	(?,?,?,?,?,?,?,?,?,?,?,?)
	|";
	Сообщить("Подготовить: " + Строка(RS.Подготовить(ТекстСКЛ)));

	rs.ДобПараметр(1,	14, 21, 0);	//ДокИД
	rs.ДобПараметр(2,	14, 21, 0);//НомСтрДок =
	rs.ДобПараметр(3,	14, 21, 0);//НомДвиж
	rs.ДобПараметр(4,	14, 21, 0);//ПриходРасход
	rs.ДобПараметр(5,	14, 21, 0);//Контрагагент
	rs.ДобПараметр(6,	14, 21, 0);//БухСчет
	rs.ДобПараметр(7,	14, 21, 0);//Договор
	rs.ДобПараметр(8,	14, 21, 0);//Валюта
	rs.ДобПараметр(9,	14, 21, 0);//ДатаПросрочки
	rs.ДобПараметр(10,	14, 21, 0);//Сумма
	rs.ДобПараметр(11,	14, 21, 0);//ВалСумма
	rs.ДобПараметр(12,	14, 21, 0);//НомПров
...

				Движения.ВыбратьСтроки();
				Пока Движения.ПолучитьСтроку() = 1 Цикл

					rs.УстПараметр(1,тзДокИд.DocID);//ДокИД
					rs.УстПараметр(2,0);//НомСтрДок =
					rs.УстПараметр(3,Движения.НомерСтроки);//НомДвиж
					rs.УстПараметр(4,?(Движения.ПриходРасход="+", 0, 1));//ПриходРасход
					rs.УстПараметр(5,Движения.Контрагент);//Контрагагент
					rs.УстПараметр(6,Движения.БухСчет);//БухСчет
					rs.УстПараметр(7,Движения.Договор);//Договор
					rs.УстПараметр(8,Движения.Валюта);//Валюта
					rs.УстПараметр(9,ТекущаяДата());//ДатаПросрочки
					rs.УстПараметр(10,Движения.Сумма);//Сумма
					rs.УстПараметр(11,Движения.ВалСумма);//ВалСумма
					rs.УстПараметр(12,Движения.НомерПроводки);//НомПров
					Если RS.Выполнить(ТекстСКЛ) = 0 Тогда
						Сообщить(". " + rs.ПолучитьОписаниеОшибки());  // State HYC00, native 0, message [Microsoft][ODBC Visual FoxPro Driver]Driver not capable
						х = 0/0;
					КонецЕсли;
					Сообщить("ок");
				КонецЦикла;

 


Какого х#ра?? State HYC00, native 0, message [Microsoft][ODBC Visual FoxPro Driver]Driver not capable


Как вставить движения в регистр остатков? DBF
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #13 - 14. Октября 2011 :: 07:53
Печать  
ага, зачет.
Фоксовый провайдер использовать вестимо.
  
Наверх
 
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #14 - 14. Октября 2011 :: 08:01
Печать  
Eprst писал(а) 14. Октября 2011 :: 07:53:
ага, зачет.
Фоксовый провайдер использовать вестимо.


Ответь пожалуйста так, что бы я понял что делать, что бы вставить эти движения в регистр наконец то  Ужас
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #15 - 14. Октября 2011 :: 08:05
Печать  
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/24#24

прочитай хоть, сперва.
  
Наверх
 
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #16 - 14. Октября 2011 :: 08:22
Печать  
Eprst писал(а) 14. Октября 2011 :: 08:05:
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/24#24

прочитай хоть, сперва.


читал много раз, что делать? Драйвер не тот что ли?
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #17 - 14. Октября 2011 :: 08:33
Печать  
какой догадливый.
Ты же говоришь, что читал ?!
Улыбка)
Код
Выбрать все
	База = СоздатьОбъект("OLEDBData");
    Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
	Рез = База.Соединение(Соединение);
	Запрос = База.СоздатьКоманду();
	Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
	Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
	Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
	Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");// Отключили блокировки
	//Запрос.Выполнить("EXECSCRIPT('SET EXCLUSIVE  ON')");
	ТекстЗапроса ="
	|insert into
	|$Справочник.Контрагенты
	|Select *
	|From
	|$Справочник.Контрагенты  Контрик
	|Where Контрик.id =:ВыбКонтрагент";
	Запрос.УстановитьТекстовыйПараметр("Контрик", Клиентос);
	Запрос.ВыполнитьИнструкцию(ТекстЗапроса); 

  
Наверх
 
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #18 - 14. Октября 2011 :: 08:41
Печать  
а с ODBCDataBase, ODBCRecordSet мне не судьба работать, раз DBF база ?
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #19 - 14. Октября 2011 :: 08:44
Печать  
Нет.
Он для sql заточен.
  
Наверх
 
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #20 - 14. Октября 2011 :: 08:50
Печать  
Спасибо, не знал. Буду выкручивается через него, чем он мне не понравился сначала - не помню. ODBCRecordSet побогаче методами показался.
  
Наверх
ICQ  
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #21 - 14. Октября 2011 :: 13:41
Печать  
Код
Выбрать все
ТекстСКЛ	= "DELETE FROM	 $Регистр.Взаиморасчеты WHERE iddoc IN ?"; 



как правильно передать массив?

Код
Выбрать все
	docs = "";
	RS.УложитьСписокОбъектов(сзДоки, docs);
	ТекстСКЛ	= "DELETE FROM	 $Регистр.Взаиморасчеты WHERE iddoc IN (SELECT Val FROM "+docs+")";
	Сообщить("/// " + docs);
	Если RS.Выполнить(ТекстСКЛ) = 0 Тогда
		х = 0/0;
	КонецЕсли;
 



Вроде и ошибок нет, но и движения не удалились.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #22 - 14. Октября 2011 :: 14:42
Печать  
Ну , что написал, то и получил..
Улыбка

Код
Выбрать все
ТекстЗапроса="
|DELETE FROM	 $Регистр.Взаиморасчеты WHERE iddoc IN (select val from :СписокДоков)";

врСписок="";
Запрос.УложитьСписокОбъектов(ТвойСписокСДокументами, врСписок);
Запрос.УстановитьТекстовыйПараметр("СписокДоков", врСписок);
Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
 

  
Наверх
 
IP записан
 
nop
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Местоположение: Украина, Харьков
Зарегистрирован: 14. Сентября 2011
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #23 - 14. Октября 2011 :: 16:41
Печать  
вот оно как подсовывать имя таблицы. Роль ":" не понял, все равно спасибо, Ёпрст. В Вс попробую

P.S. Ухты, я стал юным членом! Я снова молод!
  
Наверх
ICQ  
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #24 - 28. Октября 2011 :: 13:47
Печать  
при работе с OleDbCommand

УложитьСписокОбъектов() создает dbf  файл в базе, со случайным наименованием. это наименование присваивается переменной, переданной в метод, т.е. текст запроса м.сформировать только после применения метода
  
Наверх
ICQ  
IP записан
 
Faith No More
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 27. Марта 2012
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #25 - 27. Марта 2012 :: 10:31
Печать  
Стоит задача:
  • удалить движения документа по определённому регистру;
  • записать на их место новые;
  • откорректировать таблицу итогов регистра с учётом предыдущих двух действий с таблицей движений.


Затруднение вызывает выполнение 3-го пункта. Задача заключается в постоянном выполнении таких действий параллельно с работой пользователей. Поэтому пересчёт итогов - не решение.

Подскажите, плиз.

Спасибо.
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #26 - 27. Марта 2012 :: 10:53
Печать  
Если dbf, и вставить надо несколько движений всего, то лучше использовать какой то вьювер (WdbfView) и в нем вставить, при этом получив желаемые ИД предварительно из 1С через MetaDataWork.
  
Наверх
IP записан
 
Faith No More
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 27. Марта 2012
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #27 - 27. Марта 2012 :: 10:58
Печать  
Пардон, забыл написать: база в варианте SQL.
Удалить/Вставить - тут вопросов нет, примеров на эту тему достаточно.
Мне нужно, чтобы это удаление/вставка, которое я сделаю в таблице движений, была корректно отражена в таблице итогов. Как это организовать?

pvase писал(а) 27. Марта 2012 :: 10:53:
Если dbf, и вставить надо несколько движений всего, то лучше использовать какой то вьювер (WdbfView) и в нем вставить, при этом получив желаемые ИД предварительно из 1С через MetaDataWork.

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #28 - 27. Марта 2012 :: 12:23
Печать  
Faith No More писал(а) 27. Марта 2012 :: 10:31:
Стоит задача:
  • удалить движения документа по определённому регистру;
  • записать на их место новые;
  • откорректировать таблицу итогов регистра с учётом предыдущих двух действий с таблицей движений.


Затруднение вызывает выполнение 3-го пункта. Задача заключается в постоянном выполнении таких действий параллельно с работой пользователей. Поэтому пересчёт итогов - не решение.

Подскажите, плиз.

Спасибо.

А можете обосновать саму задачу ?
Вы идете как бы против логики 1с-приложения и поэтому в такой постановке задачи очень много подводных камней.
наихудшее что Вы можете получить при решении Вашей задачи нарушение логической целостности данных
ps ну и может вынести Ваш вопрос в отдельную ветку?
  
Наверх
 
IP записан
 
Faith No More
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 27. Марта 2012
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #29 - 27. Марта 2012 :: 12:39
Печать  
Я согласен, что камней - много.

Задача следующая: поддерживать актуальность взаиморасчётов в режиме реального времени. Сейчас просрочка и прочие данные, которые можно получить из этого раздела учёта, справедливы только утром, после ночного перепроведения базы. Если в течение дня меняли задним числом документы, просрочка может стать неактуальной.
Т.е. нужно в течение дня перепроводить цепочки документов. Чтоб не вешать базу и не утыкаться в "Документ заблокирован...", хочу попробовать рассчитывать движения и писать их в регистр, не трогая документы.

Z1 писал(а) 27. Марта 2012 :: 12:23:
Faith No More писал(а) 27. Марта 2012 :: 10:31:
Стоит задача:
  • удалить движения документа по определённому регистру;
  • записать на их место новые;
  • откорректировать таблицу итогов регистра с учётом предыдущих двух действий с таблицей движений.


Затруднение вызывает выполнение 3-го пункта. Задача заключается в постоянном выполнении таких действий параллельно с работой пользователей. Поэтому пересчёт итогов - не решение.

Подскажите, плиз.

Спасибо.

А можете обосновать саму задачу ?
Вы идете как бы против логики 1с-приложения и поэтому в такой постановке задачи очень много подводных камней.
наихудшее что Вы можете получить при решении Вашей задачи нарушение логической целостности данных
ps ну и может вынести Ваш вопрос в отдельную ветку?

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #30 - 27. Марта 2012 :: 12:46
Печать  
Faith No More писал(а) 27. Марта 2012 :: 12:39:
Я согласен, что камней - много.

Задача следующая: поддерживать актуальность взаиморасчётов в режиме реального времени. Сейчас просрочка и прочие данные, которые можно получить из этого раздела учёта, справедливы только утром, после ночного перепроведения базы. Если в течение дня меняли задним числом документы, просрочка может стать неактуальной.
Т.е. нужно в течение дня перепроводить цепочки документов. Чтоб не вешать базу и не утыкаться в "Документ заблокирован...", хочу попробовать рассчитывать движения и писать их в регистр, не трогая документы.

Z1 писал(а) 27. Марта 2012 :: 12:23:
Faith No More писал(а) 27. Марта 2012 :: 10:31:
Стоит задача:
  • удалить движения документа по определённому регистру;
  • записать на их место новые;
  • откорректировать таблицу итогов регистра с учётом предыдущих двух действий с таблицей движений.


Затруднение вызывает выполнение 3-го пункта. Задача заключается в постоянном выполнении таких действий параллельно с работой пользователей. Поэтому пересчёт итогов - не решение.

Подскажите, плиз.

Спасибо.

А можете обосновать саму задачу ?
Вы идете как бы против логики 1с-приложения и поэтому в такой постановке задачи очень много подводных камней.
наихудшее что Вы можете получить при решении Вашей задачи нарушение логической целостности данных
ps ну и может вынести Ваш вопрос в отдельную ветку?


Так Вы по любому будете упираться
"Документ заблокирован..." ну и тем более вешать базу.
У меня  похожая задача сделана так
отсрочки вынесены в отдельный регистр.
Регистр не зависит ни от каких последовательностей
ночью он разноситься по оплатам. Если что-то надо срочно закрыть днем то запускается таже самая ночная обработка только с установленным конкретным клиентом ( остальных клиентов пропускаем).
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #31 - 27. Марта 2012 :: 12:59
Печать  
Ну, если ничего не писать самому - то так, например:

Примерчик


чорт, я это ужо советовал в первом посте Печаль

ЗЫ: а итоги можешь и сам толкать - алгоритм известный
Олег Садовников, например, на мисте выкладывал, как он у себя итоги толкает при своём ручном проведении
  
Наверх
 
IP записан
 
Faith No More
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 27. Марта 2012
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #32 - 27. Марта 2012 :: 15:06
Печать  
Z1: вешать не буду, т.к. двину только 1 регистр с заранее рассчитанными движениями. Остальные затратные по времени расчёты - остатков товаров и пр. - делать будет не нужно.
Eprst: за Садовникова - спасибо, поищу.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #33 - 27. Марта 2012 :: 15:28
Печать  
Faith No More писал(а) 27. Марта 2012 :: 15:06:
Z1: вешать не буду, т.к. двину только 1 регистр с заранее рассчитанными движениями. Остальные затратные по времени расчёты - остатков товаров и пр. - делать будет не нужно.

Так Вам на время даже записи Ваших движений ra и пересчета
rg ( а вот это уже серьезно и тем более если Вы пересчитывать rg будете на 1с ) нужно будет устанавливать монопольную блокировку на _1sjourn и на ra и rg  ну и как следсвтие выигрыш будет практически нулевой по сравнению со стандартным проведением (т.к. база и так уже нагружена если была бы не нагружена то и задача такая не встала бы )

пост написан из предположения что работаете в стандартной по 1с системе блокировок.
  
Наверх
 
IP записан
 
Faith No More
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 27. Марта 2012
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #34 - 27. Марта 2012 :: 15:42
Печать  
Нет, немного иначе: я заранее, без блокировок и транзакций посчитаю - какие движения мне нужно сделать, положу их в ТЗ, и останется только прочитать ТЗ и двинуть регистр.

Z1 писал(а) 27. Марта 2012 :: 15:28:
Faith No More писал(а) 27. Марта 2012 :: 15:06:
Z1: вешать не буду, т.к. двину только 1 регистр с заранее рассчитанными движениями. Остальные затратные по времени расчёты - остатков товаров и пр. - делать будет не нужно.

Так Вам на время даже записи Ваших движений ra и пересчета
rg ( а вот это уже серьезно и тем более если Вы пересчитывать rg будете на 1с ) нужно будет устанавливать монопольную блокировку на _1sjourn и на ra и rg  ну и как следсвтие выигрыш будет практически нулевой по сравнению со стандартным проведением (т.к. база и так уже нагружена если была бы не нагружена то и задача такая не встала бы )

пост написан из предположения что работаете в стандартной по 1с системе блокировок.

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #35 - 27. Марта 2012 :: 16:07
Печать  
Faith No More писал(а) 27. Марта 2012 :: 15:42:
Нет, немного иначе: я заранее, без блокировок и транзакций посчитаю - какие движения мне нужно сделать, положу их в ТЗ, и останется только прочитать ТЗ и двинуть регистр.

Z1 писал(а) 27. Марта 2012 :: 15:28:
Faith No More писал(а) 27. Марта 2012 :: 15:06:
Z1: вешать не буду, т.к. двину только 1 регистр с заранее рассчитанными движениями. Остальные затратные по времени расчёты - остатков товаров и пр. - делать будет не нужно.

Так Вам на время даже записи Ваших движений ra и пересчета
rg ( а вот это уже серьезно и тем более если Вы пересчитывать rg будете на 1с ) нужно будет устанавливать монопольную блокировку на _1sjourn и на ra и rg  ну и как следсвтие выигрыш будет практически нулевой по сравнению со стандартным проведением (т.к. база и так уже нагружена если была бы не нагружена то и задача такая не встала бы )

пост написан из предположения что работаете в стандартной по 1с системе блокировок.


так после того как вы просчитали (и даже во время Вашего счета)
и только собираетесь открыть кто-то другой ( другая сессия ) может
открыть док и двинуть этот регистр тогда Ваша ТЗ будет содержать
уже неверные данные и по всем периодам которые есть в ывшей ТЗ,
получите неправильные данные в rg.

Еще пример пока Вы считаете другая ссесия (т.к. к моменту окончания расчета может быть даже и ничего не будет заблокировано)  может отменить (или пометить на удаление ) проведение документ двигающий Ваш rg.
Результат тот же что и в предыдущем параграфе.
  
Наверх
 
IP записан
 
Faith No More
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 27. Марта 2012
Пол: Мужской
Re: Как отредактировать движения документов по регистрам остатков?
Ответ #36 - 27. Марта 2012 :: 16:21
Печать  
Согласен, скользкий путь.
Однако, факт того, что кто-то перепровёл этот или другой документ по этому клиенту, будет автоматически зафиксирован, и программа повторит процесс с самого раннего документа.

Z1 писал(а) 27. Марта 2012 :: 16:07:
Faith No More писал(а) 27. Марта 2012 :: 15:42:
Нет, немного иначе: я заранее, без блокировок и транзакций посчитаю - какие движения мне нужно сделать, положу их в ТЗ, и останется только прочитать ТЗ и двинуть регистр.

Z1 писал(а) 27. Марта 2012 :: 15:28:
Faith No More писал(а) 27. Марта 2012 :: 15:06:
Z1: вешать не буду, т.к. двину только 1 регистр с заранее рассчитанными движениями. Остальные затратные по времени расчёты - остатков товаров и пр. - делать будет не нужно.

Так Вам на время даже записи Ваших движений ra и пересчета
rg ( а вот это уже серьезно и тем более если Вы пересчитывать rg будете на 1с ) нужно будет устанавливать монопольную блокировку на _1sjourn и на ra и rg  ну и как следсвтие выигрыш будет практически нулевой по сравнению со стандартным проведением (т.к. база и так уже нагружена если была бы не нагружена то и задача такая не встала бы )

пост написан из предположения что работаете в стандартной по 1с системе блокировок.


так после того как вы просчитали (и даже во время Вашего счета)
и только собираетесь открыть кто-то другой ( другая сессия ) может
открыть док и двинуть этот регистр тогда Ваша ТЗ будет содержать
уже неверные данные и по всем периодам которые есть в ывшей ТЗ,
получите неправильные данные в rg.

Еще пример пока Вы считаете другая ссесия (т.к. к моменту окончания расчета может быть даже и ничего не будет заблокировано)  может отменить (или пометить на удаление ) проведение документ двигающий Ваш rg.
Результат тот же что и в предыдущем параграфе.

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