| View previous topic :: View next topic   | 
	
	
	
		| Author | 
		Message | 
	
	
		sdv2k
 
 
  Joined: 19 Feb 2002 Posts: 82 Location: Денис
 
 
  | 
		
			
				 Posted: 29 Mar 2005 09:38    Post subject: Групповая замена даты в проводках | 
				     | 
			 
			
				
  | 
			 
			
				Господа, подскажите, как лучше всего организовать замену даты в проводках, отобранных по определенному признаку из книги хоз.операций?
 
Желательно штатными средствами БЭСТа. _________________ = sdv2k = | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		itman
 
  
  Joined: 05 Apr 2002 Posts: 1247 Location: Ильин Е.Ю. Occupation: Cio Interests: Кинель
  | 
		
			
				 Posted: 29 Mar 2005 10:49    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				собери файлик типа:
 
 	  | Code: | 	 		  
 
main->(Reclock())
 
main->dateoper:=date()
 
main->(F_DBUNLOCK())
 
 | 	  
 
размести его в плагинах для того модуля где будешь менять проводки
 
если в главбухе то MAIN.
 
Затем пропиши в спецфункциях
 
отметь проводки для замены и запусти.
 
!!!! Код непроверен !!!!!
 
Сначала протестируй   
 
Вот, вроде бы ничего нештатного, кроме возможных последствий от использования.  
 
PS
 
Замечена небольшая странность при обработке режима после выделения INSертом Если на текущей - все ОК 
 
версия 11,02 | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sdv2k
 
 
  Joined: 19 Feb 2002 Posts: 82 Location: Денис
 
 
  | 
		
			
				 Posted: 29 Mar 2005 11:13    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				А можно как-то автоматизировать выборку группы проводок для замены или это только ручками? _________________ = sdv2k = | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		itman
 
  
  Joined: 05 Apr 2002 Posts: 1247 Location: Ильин Е.Ю. Occupation: Cio Interests: Кинель
  | 
		
			
				 Posted: 29 Mar 2005 11:26    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				чтобы автоматизировать необходимы условия группировки
 
которые уже непосредственно необходимо прописать в логику и сформировать код на запуск в любом инструменте для работы с файлом main.dbf
 
Но !!! если речь идет о нескольких проводках не более 2-3 (зависит от буха))) десятков то проще через плагин. Если же операция более глобальна, то следует "плясать" от источника. | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Яков
 
  
  Joined: 04 Mar 2002 Posts: 618 Location: Яков Occupation: Экстремальная терапия бизнеса Interests: Владивосток
  | 
		
			
				 Posted: 29 Mar 2005 11:49    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | sdv2k wrote: | 	 		  | А можно как-то автоматизировать выборку группы проводок для замены или это только ручками? | 	  
 
 
replace all main.dataoper with "новая дата" for "условие" | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sdv2k
 
 
  Joined: 19 Feb 2002 Posts: 82 Location: Денис
 
 
  | 
		
			
				 Posted: 29 Mar 2005 13:14    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | ЯКОВ wrote: | 	 		   	  | sdv2k wrote: | 	 		  | А можно как-то автоматизировать выборку группы проводок для замены или это только ручками? | 	  
 
 
replace all main.dataoper with "новая дата" for "условие" | 	  
 
 
Очень приятно, что рассказали мне про команду replace    
 
Только вот в плагине она неприменим _________________ = sdv2k = | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sdv2k
 
 
  Joined: 19 Feb 2002 Posts: 82 Location: Денис
 
 
  | 
		
			
				 Posted: 29 Mar 2005 13:24    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | itman wrote: | 	 		  чтобы автоматизировать необходимы условия группировки
 
которые уже непосредственно необходимо прописать в логику и сформировать код на запуск в любом инструменте для работы с файлом main.dbf
 
Но !!! если речь идет о нескольких проводках не более 2-3 (зависит от буха))) десятков то проще через плагин. Если же операция более глобальна, то следует "плясать" от источника. | 	  
 
 
Короче, суть в следующем.
 
В модуле з/п формируются проводки ДТ 30хххх КТ 970101, ДТ 30хххх КТ 970102, с датой ес-сно "последнее число расчетного месяца".
 
Затем необходимо первую группу проводок перенести на месяц вперед, а вторую - на два месяца вперед.
 
Этих проводок может быть сколько угодно (численность у нас порядка 2000 чел.)
 
Как лучше осуществить подобную процедуру?
 
 
P.S. Начальство настаивает на использовании штатных средств БЭСТа. _________________ = sdv2k = | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		itman
 
  
  Joined: 05 Apr 2002 Posts: 1247 Location: Ильин Е.Ю. Occupation: Cio Interests: Кинель
  | 
		
			
				 Posted: 29 Mar 2005 14:06    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Quote: | 	 		  | Только вот в плагине она неприменима. | 	  
 
Применима.
 
плагин примерно по структуре такой (навскидку, могу соврать):
 
Запрос условия
 
сохранение области
 
глобальный replace с необходимыми условиями (придется повозиться)
 
возврат области
 
завершение работы с сообщением результата
 
теоретически можно запускать в любом месте
 
Лучше писать на xHarbour затем компилировать. | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sdv2k
 
 
  Joined: 19 Feb 2002 Posts: 82 Location: Денис
 
 
  | 
		
			
				 Posted: 29 Mar 2005 16:39    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Уважаемый itman!
 
 
Не мог бы ты привести какой-либо рабочий пример на харборе, чтоб вносил изменения в main.dbf?
 
Что-то у меня ни в какую не желает менять содержимое базы, хотя компилируется и отрабатывает вроде без ошибок    _________________ = sdv2k = | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		itman
 
  
  Joined: 05 Apr 2002 Posts: 1247 Location: Ильин Е.Ю. Occupation: Cio Interests: Кинель
  | 
		
			
				 Posted: 30 Mar 2005 07:17    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Хм   
 
А чья задача то?    
 
Код опубликуй, обсудим всем миром.
 
в хэлпах что идут к бэсту описано вкратце Программирование в среде БЭСТ-4+. На примере 2 по замене отпускных цен, можешь сделать свой пример замены даты проводки, по аналогии.
 
Причем на харборе собирать не обязательно. Но никто не запрещает скомпиллировать с отладчиком и пошагово проанализировать ход процесс | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sdv2k
 
 
  Joined: 19 Feb 2002 Posts: 82 Location: Денис
 
 
  | 
		
			
				 Posted: 30 Mar 2005 10:13    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Вот такой код:
 
 	  | Code: | 	 		  PRIVATE date_
 
date_:=DATE()
 
DBPUSH("MAIN")
 
DBGOTOP()
 
DO WHILE !EOF()
 
   MAIN->(RecLock())
 
   MAIN->DATAOPER:=date_
 
   MAIN->(F_DBUnLock())
 
   DBSKIP()
 
ENDDO
 
DBPOP() | 	  
 
Вызываю из реестра хозопераций.
 
Подменяется дата только в текущей записи    При выделении нескольких записей и попытке выполнения плагина вообще вылетает ошибка. А хотелось бы пробежать по всей таблице! _________________ = sdv2k = | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Krosh
 
  
  Joined: 13 Oct 2003 Posts: 97 Location: КИА Occupation: СТ Interests: Москва
  | 
		
			
				 Posted: 30 Mar 2005 14:27    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Уточняющие вопросы:
 
1. Какое условие отбора проводок?
 
2. Как задаётся дата, на которую надо переделать проводки?
 
 
2(sdv2k) 
 
 	  | Quote: | 	 		  Вызываю из реестра хозопераций. 
 
 | 	  
 
Это где  и как?
 
Насколько мне известно на MAIN спец. функция не навешивается. | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sdv2k
 
 
  Joined: 19 Feb 2002 Posts: 82 Location: Денис
 
 
  | 
		
			
				 Posted: 30 Mar 2005 15:56    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Krosh wrote: | 	 		  Уточняющие вопросы:
 
1. Какое условие отбора проводок?
 
2. Как задаётся дата, на которую надо переделать проводки?
 
 | 	  
 
Об условиях отбора я писал выше:
 
 	  | Quote: | 	 		  Короче, суть в следующем. 
 
В модуле з/п формируются проводки ДТ 30хххх КТ 970101, ДТ 30хххх КТ 970102, с датой ес-сно "последнее число расчетного месяца". 
 
Затем необходимо первую группу проводок перенести на месяц вперед, а вторую - на два месяца вперед. 
 
Этих проводок может быть сколько угодно (численность у нас порядка 2000 чел.) 
 
 | 	  
 
Датой будет 25-ое число соответстветствующих месяцев.
 
 
 	  | Krosh wrote: | 	 		  
 
Это где  и как?
 
Насколько мне известно на MAIN спец. функция не навешивается. | 	  
 
Навешивается.
 
Учет хоз.операций -> Книга учета операций -> Ctrl+F5 _________________ = sdv2k = | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Krosh
 
  
  Joined: 13 Oct 2003 Posts: 97 Location: КИА Occupation: СТ Interests: Москва
  | 
		
			
				 Posted: 30 Mar 2005 16:42    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				С условиями понятно. Подразумеваем текущий месяц? Так?
 
 
У нас похоже старая версия БЭСТ,  спец.функций в  	  | Quote: | 	 		  
 
Учет хоз.операций -> Книга учета операций -> Ctrl+F5 | 	   нет.
 
 
Т.к. во всех "удобных" тэгах MAIN.DBF есть дата операции, то при её изменении запись "скачет" в индексе (ПОЭТОМУ ТОЛЬКО ОДНА И МЕНЯЕТ ДАТУ  .
 
Варианты решения: 
 
1. Для продолжения цикла по MAIN.DBF надо возвращаться на нужную запись поиском. (ЭТО НЕ ЕСТЬ ХОРОШО)
 
Самое удобное - использовать поиск по тэгу KT_SCHET - 
 
UPPER(KT_SCHET+KT_CODE)+DTOS(DATAOPER)+"999  "
 
2.  Два раза сделать собственный индекс, например по RECNO(), с вышеуказаннымиусловиями. Тогда не надо будет "прыгать". Просто будет цикл по необходимым записям. (ЭТО ГОРАЗДО ЛУЧШЕ)
  Last edited by Krosh on 30 Mar 2005 16:56; edited 1 time in total | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sdv2k
 
 
  Joined: 19 Feb 2002 Posts: 82 Location: Денис
 
 
  | 
		
			
				 Posted: 30 Mar 2005 16:55    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Версия 11.03 BIN
 
Ну что, есть какие-то соображения? 
 
Очень хочется это осуществить именно из БЭСТа. _________________ = sdv2k = | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		 |