| View previous topic :: View next topic | 
	
	
		| Author | Message | 
	
		| c_systems 
 
  
 Joined: 26 Jun 2003
 Posts: 20
 Location: Наталья
 Occupation: Комплексные системы
 Interests: Челябинск
 
 | 
			
				|  Posted: 15 Jun 2007 13:01    Post subject: Урок 203. Пример для начинающих. |   |  
				| 
 |  
				| Описание задачи: Требуется в накладной прихода при оприходовании собственной продукции (только некоторые операции в одном конкретном виде движения) в момент ввода количества (веса) запрашивать перед этим дополнительно "Вес брутто" и "Вес тары", а вычисленную разницу - "Вес нетто" сохранять в поле "количество". "Вес брутто" и "Вес нетто" также сохранять в базе с последующей возможностью просмотра и модификации.
 С чего начать?
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| nordk 
 
 
 Joined: 27 Jun 2005
 Posts: 1000
 Location: Горбунов Константин
 Occupation: БЭСТ-Партнер
 Interests: СПб
 
 | 
			
				|  Posted: 15 Jun 2007 14:26    Post subject: |   |  
				| 
 |  
				| Начнем с того как это будем делать. Предлагаю идти через новое событие "прайс-лист ".
 Сделайте простенький плагин.
 Пусть он ничего не делает только выводит сообщение, скажем "ОК".
 Дальше в нужном Вам виде движения подвесьте этот плагин
 по CTRL-F5 на событие "прайс-лист".
 Дальше внутри накладной попробуйте зайти в картотеку товаров и увидите что Ваш плагин выполнился. Таким образом убедитесь в том,
 что Вы в этом месте подвесив свое решение получите свой механизм ввода в накладн
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| c_systems 
 
  
 Joined: 26 Jun 2003
 Posts: 20
 Location: Наталья
 Occupation: Комплексные системы
 Interests: Челябинск
 
 | 
			
				|  Posted: 15 Jun 2007 16:47    Post subject: |   |  
				| 
 |  
				| 1. непонятно "событие прайс-лист" Если я из реестра делаю Ctrl-F5 мне предлагается вызов: "по требованию", "вход в д-т", "проверка док-та", "запись", "перед удалением", "после удаления" , "вход в реестр", "позиционир.Ctrl-F7", "позиционир.Shift-F7" и "картотека товаров".
 И почему употребляете тогда отпугивающее словосочетание "прайс-лист"
  ? 
 2.Если навесить плагин на "картотеку" - он вызывается только когда в настройке вида движения стоит "раскрывать картотеку-да", "запрашивать группу -да"
 У клиентов все настроено как "раскрывать картотеку -нет", для их специфики это очень удобно.
 И как быть?
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| nordk 
 
 
 Joined: 27 Jun 2005
 Posts: 1000
 Location: Горбунов Константин
 Occupation: БЭСТ-Партнер
 Interests: СПб
 
 | 
			
				|  Posted: 15 Jun 2007 17:29    Post subject: |   |  
				| 
 |  
				| Вобщем-то это единый механизм с заказами. Там картотеку называют прайс-листом и собственно файл с исходным текстом так звучит. А называется это картотека товаров в модуле "Товары". Простите за неточность формулировки
 По поводу раскрывать картотеку да - это действительно так.
 По поводу групп - от этого параметра не зависит.
 Вы разрешаете открывать картотеку только в определенном виде движения и использоваться это будет для ввода в том, виде как
 вы это хотите реализовать при нажатии ALT-F4/
 На стандартной работе по F4 это совершенно никак не сказывается.
 И потом у Вас не картотека будет раскрываться а будет запускаться Ваша программа по вводу расхода как Вам надо. Поэтому почему этот
 параметр кого-то должен пугать от того что он включен для
 конкретного вида движения (повторяю) ?
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| c_systems 
 
  
 Joined: 26 Jun 2003
 Posts: 20
 Location: Наталья
 Occupation: Комплексные системы
 Interests: Челябинск
 
 | 
			
				|  Posted: 16 Jun 2007 12:07    Post subject: |   |  
				| 
 |  
				| Все, разобралась - я не сообразила про ALT-F4 и включила в настройке виде движения "раскрывать картотеку" Сообщение выдается. Что дальш
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| nordk 
 
 
 Joined: 27 Jun 2005
 Posts: 1000
 Location: Горбунов Константин
 Occupation: БЭСТ-Партнер
 Interests: СПб
 
 | 
			
				|  Posted: 16 Jun 2007 18:16    Post subject: |   |  
				| 
 |  
				| Теперь на это событие будем писать свой интерфейс ввода строк. Необходимо для себя решить в каком виде Вы хотите это делать:
 по типу раскрытой картотеки или просто что-то вроде строк как в накладной и ввод построчно через F4 или еще как.
 То есть требуется описание того, как Вы хотите осуществлять ввод стро
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| c_systems 
 
  
 Joined: 26 Jun 2003
 Posts: 20
 Location: Наталья
 Occupation: Комплексные системы
 Interests: Челябинск
 
 | 
			
				|  Posted: 18 Jun 2007 16:29    Post subject: |   |  
				| 
 |  
				| Желательно ввод без раскрывания картотеки, как стандартный ввод по F4, чтоб окошко так же выглядело - там и строка пустая есть для моих двух доп.параметров. Но хотелось бы услышать - а как проще, в смысле объемности и сложности плагина?
 
 P.S.Временно уезжаю, смогу продолжить ч-з несколько дне
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| nordk 
 
 
 Joined: 27 Jun 2005
 Posts: 1000
 Location: Горбунов Константин
 Occupation: БЭСТ-Партнер
 Interests: СПб
 
 | 
			
				|  Posted: 18 Jun 2007 19:45    Post subject: |   |  
				| 
 |  
				| Да без разницы. Тогда сделайте плагин с таким набором действий:
 Создаете временный файл
 Если некий массив например aStroki не пуст, то в этом
 файле создаете строки по элементам массива.
 Описание массива было в другой теме. тут
 Дальше откройте этот файл Инитлистом
 и сделайте его заполнение по F4 нужным Вам образом.
 Текст получившийся размещайте сюда.
 Если в таком объеме сложно - давайте делать по частя
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| c_systems 
 
  
 Joined: 26 Jun 2003
 Posts: 20
 Location: Наталья
 Occupation: Комплексные системы
 Interests: Челябинск
 
 | 
			
				|  Posted: 27 Jun 2007 17:54    Post subject: |   |  
				| 
 |  
				| Конечно по частям. Итак:
 
 function main()
 LOCAL cFile,aStroki,cHd
 cFile := GlobalTmpPath+"cEdit.txt"
 altd()
 if file(cFile)
 erase(cFile)
 endif
 cHd:=fcreate(cFile)
 
 if cHd<>-1
 aStroki:=array(18)
 //массив нужно инициализировать или обращаться к какому-
 //то существующему?
 
 Ini_cFile(cHd,aStroki)
 else
 Alert('Невозможно создать временный файл!')
 endif
 
 fclose(cHd)
 
 return 100
 // Что нужно возвращать?
 // В описании написано .T. или .F. - но так не работает, выдается
 //ошибка "алиас MKART не существует"
 
 
 
 function Ini_cFile(lFile,lArr)
 lArr[1]:=space(29)
 lArr[2]:=space(5)
 str2File(lArr[1],lFile,.T.)
 str2File(lArr[2],lFile,.T.)
 str2File('Вот и все',lFile,.T.)
 
 return lArr
 
 Пока так, итак уже вопросы появились.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| nordk 
 
 
 Joined: 27 Jun 2005
 Posts: 1000
 Location: Горбунов Константин
 Occupation: БЭСТ-Партнер
 Interests: СПб
 
 | 
			
				|  Posted: 28 Jun 2007 14:39    Post subject: |   |  
				| 
 |  
				| Ну чтож начинаем разбор полетов 
 
  	  | c_systems wrote: |  	  | Конечно по частям. Итак:
 
 [color=red]function main()
 LOCAL cFile,aStroki,cHd
 | 
 
 В этом месте никто не мешает
 
 а строгий размер в харборе вещь не обязательная
 Дальше в начале программы надо применить aSaveSet и aSaveSetKey() а в конце RestSetKey() и RestSet() с описанием в HELP познакомьтесь плз
 
 
  	  | Code: |  	  | cFile := GlobalTmpPath+"cEdit.txt" | 
 Вот здесь непонятно почему текстовый файл создаете.
 Надо бы DBF наверно
 
 
  	  | Quote: |  	  | //массив нужно инициализировать или обращаться к какому- //то существующему?
 | 
 Я Вам Выше ссылку дал про существующий массив и его формат
 Нажмите на слово "тут"
   
 [
  	  | Code: |  	  | return 100[/color] // Что нужно возвращать?
 // В описании написано .T. или .F. - но так не работает, выдается
 //ошибка "алиас MKART не существует"
 | 
 
 Возвращайте NIL
 Ошибка скорее всего связана с тем что Вы алиас умудряетесь
 сместить и RestSet поможе
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| c_systems 
 
  
 Joined: 26 Jun 2003
 Posts: 20
 Location: Наталья
 Occupation: Комплексные системы
 Interests: Челябинск
 
 | 
			
				|  Posted: 28 Jun 2007 17:50    Post subject: |   |  
				| 
 |  
				|  	  | nordk wrote: |  	  | 
  	  | Code: |  	  | cFile := GlobalTmpPath+"cEdit.txt" | 
 Вот здесь непонятно почему текстовый файл создаете.
 Надо бы DBF наверно
 
 | 
 ОБъясните дальнейший принцип работы: почему DBF, DBF какой структуры? Из ваших коротких ответов и слишком большого из без комментариев урока по ссылке ничего не понятно.
 
 
  	  | nordk wrote: |  	  | Я Вам Выше ссылку дал про существующий массив и его формат
 Нажмите на слово "тут"
   | 
 Я ссылку смотрела. Вы видимо что-то недоговариваете или неточно излагаете, т.к. мне читающей ваши объяснения много чего непонятно - как обращаться к массиву? Зачем вообще создаем aStroki если есть aGlobvars да еще и временный dbf?
   
 
 Пока исправила так:
 function main()
 LOCAL cFile,cHd,aSet,aSetKey
 LOCAL aStroki:={}
 aSet:=SAVESET()
 aSetKey:=SAVESETKEY()
 
 cFile := GlobalTmpPath+"cEdit.dbf"
 altd()
 if file(cFile)
 erase(cFile)
 endif
 cHd:=fcreate(cFile)
 if cHd<>-1
 aStroki:=array(1
   Ini_cFile(cHd,aStroki)
 else
 Alert('Невозможно создать временный файл!')
 endif
 fclose(cHd)
 
 RESTSETKEY(aSetKey)
 RESTSET(aSet)
 
 return NIL
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| nordk 
 
 
 Joined: 27 Jun 2005
 Posts: 1000
 Location: Горбунов Константин
 Occupation: БЭСТ-Партнер
 Interests: СПб
 
 | 
			
				|  Posted: 28 Jun 2007 18:08    Post subject: |   |  
				| 
 |  
				| Ок, начинаем сначала. 1.Нам нужен свой интерфейс ввода данных.
 В этом интерфейсе мы будем набирать строки, а стало
 быть уодбно применить стандартный InitList
 InitList работает на DBF - стало быть нам нужен dbf.
 Время ушло но насколько я помню Вам нужны доп.поля,
 которые в стандартном массиве отсутствуют - их будем хранить
 в своем массиве.
 
 Основной массив не aGlobVars - я вроде писал в теме, что
 потом переделали на aGlobWork (Точно не помню надо в отладчике
 взглянуть).
 Общая направленность такая:
 Делаем свой интерфейс ввода. По окончании ввода все данные
 из него через массив возвращаем в стандартную накладную.
 Если накладная уже была не пустой - берем из нее в свой интерфейс
 существующее. Недостающие параметры сохраняем при записи в mdocm, а до этого храним в своем массиве.
 
 По общему пути решения так понятно или все равно не до конца ?
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| c_systems 
 
  
 Joined: 26 Jun 2003
 Posts: 20
 Location: Наталья
 Occupation: Комплексные системы
 Interests: Челябинск
 
 | 
			
				|  Posted: 29 Jun 2007 14:47    Post subject: |   |  
				| 
 |  
				| По общему пути понятно. По массиву еще раз - мне нужны два доп.поля - вес общий и вес тары, значит  dbf создавать только с двумя числовыми полями?
 
 и в моем фрагменте aStroki:={18} тоже не нужо получается...
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| nordk 
 
 
 Joined: 27 Jun 2005
 Posts: 1000
 Location: Горбунов Константин
 Occupation: БЭСТ-Партнер
 Interests: СПб
 
 | 
			
				|  Posted: 01 Jul 2007 21:03    Post subject: |   |  
				| 
 |  
				| Нет не правильно. DBF- файл должен содержать информацию из массива по ссылке плюс Ваши 2 поля. Ваш массив пока оставьте омжет в нем Ваши поля будем хранить - пока неясно, но он и не мешает.
 В основном массиве обратите внимание что первый элемент по своей структуре содержит информацию сразу несколький полей таблицы.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| c_systems 
 
  
 Joined: 26 Jun 2003
 Posts: 20
 Location: Наталья
 Occupation: Комплексные системы
 Interests: Челябинск
 
 | 
			
				|  Posted: 02 Jul 2007 14:06    Post subject: |   |  
				| 
 |  
				| Текст основной пр-мы: function main()
 LOCAL cFile,cHd,aSet,aSetKey,resalias
 LOCAL aStroki:={}
 aSet:=SAVESET()
 aSetKey:=SAVESETKEY()
 resalias:=alias()
 
 cFile := GlobalTmpPath+"cEdit.dbf"
 altd()
 if file(cFile)
 erase(cFile)
 endif
 cHd:=dbcreate(cFile,{{'tovar','C',29,0},;
 {'ed','C',5,0},;
 {'Kol' ,'N',19,4},;
 {'cena' ,'N',19,8},;
 {'kol0','N',19,4},;
 {'ves','N',19,4},;
 {'tara','N',19,4}})
 dbusearea(.t.,,cFile,'cEdit',.t.)
 select cEdit
 //  if cHd<>-1
 aStroki:=array(1
   Ini_cFile(aStroki)
 //  else
 //     Alert('Невозможно создать временный файл!')
 //  endif
 
 cEdit->(dbclosearea())
 
 RESTSETKEY(aSetKey)
 RESTSET(aSet)
 select(resalias)
 
 return NIL
 Тут вопрос - как проверить что dbf нормально создался? cHd всегда NIL...
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		|  |