| 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: |   |  
				| 
 |  
				| Хм .gif)  А чья задача то?
   Код опубликуй, обсудим всем миром.
 в хэлпах что идут к бэсту описано вкратце Программирование в среде БЭСТ-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 |  | 
	
		|  | 
	
		|  |