Страница 1 из 1

Событие cmmakeprih

Добавлено: 14 июн 2013, 14:09
Руслан
У нас есть alter на интерфейс SOPRDOCB. В нем по событию cmmakeprih отрабатывала функция по присваиванию партии... В галактике 9 это событие не отрабатывает. Может кто сталкивался с такой проблемой...

Код: Выделить всё

window EDITSOPR;
	handleEvent
cmMAKEPRIH :
			{
				var bForOrder : boolean;
				bForOrder := TRUE;
				/*
 				00000000000003D6h Формирование ордеров по накладным только в статусе "исполняемый" 1873
				00000000000003D5h Редактирование накладной при наличии складских ордеров 1876
				*/
				if((getfirst tuneval where (( comp(00000000000003D6h) == tuneval.ctune )) and (UserId = tuneval.cuser)) = tsOk )
				{
					case tuneval.STRVAL of
							'да' :
							{
							// проверить документв состоянии "исполняемый"
							//     если да, то проверять на наличие даты по ордерам
							//         если есть, то проверять на наличие разрешения в 1876 на разрешение
							//	           если да, то TRUE
							//	   	       если нет, то FALSE
							//         если нет, то TRUE
							//	   если нет, то FALSE
								if ( katsopr.status = 1 )
								{
									if( datetostr(katsopr.dopr,'DD-MM-YYYY') <> 'ДД-ММ-ГГГГ' )
									{
										if((getfirst tuneval where (( comp(00000000000003D5h) == tuneval.ctune )) and (UserId = tuneval.cuser)) = tsOk )
										case tuneval.STRVAL of
												'разрешать' : {bForOrder := TRUE;}
												'запрещать' : {bForOrder := FALSE;}
											end;
									}
									else if( datetostr(katsopr.dopr,'DD-MM-YYYY') = 'ДД-ММ-ГГГГ' )
									{ bForOrder := TRUE;}
								}
								else {bForOrder := FALSE;}

							}
							'нет' :
							{
							// если да, то проверять на наличие даты по ордерам
							//   если есть, то проверять на наличие разрешения в 1876 на разрешение
							//	   если да, то TRUE
							//	   если нет, то FALSE
								if( datetostr(katsopr.dopr,'DD-MM-YYYY') <> 'ДД-ММ-ГГГГ' )
								{
									if((getfirst tuneval where (( comp(00000000000003D5h) == tuneval.ctune )) and (UserId = tuneval.cuser)) = tsOk )
									case tuneval.STRVAL of
											'разрешать' : {bForOrder := TRUE; }
											'запрещать' : {bForOrder := FALSE;}
										end;
								}
								else if( datetostr(katsopr.dopr,'DD-MM-YYYY') = 'ДД-ММ-ГГГГ' )
								{bForOrder := TRUE; }
							}
						end;
				}

				//if(bForOrder = TRUE)
		        //{
					/*var tempsumval : double;

	  				if (VALUT <> 'руб')
	  				{
	  					RunInterface(L_VAL::CURSVAL, katsopr.cval, -1, katsopr.dprice, 3);
	  					if( getfirst CURSVAL where(( katsopr.cval == cursval.kodvalut and katsopr.dprice == cursval.datval )) = tsOk)
	  						tempsumval := cursval.sumrubl;

	  					// 1 )
	  					Katsopr.Summa := katsopr.SUMVAL * tempsumval;
	  					update current katsopr;

	  					// 2 )
	  					if ( getfirst spsopr where (( katsopr.nrec == spsopr.csopr )) = tsOk )
	  						do
	  						{
	  							if( spsopr.vidsopr = katsopr.vidsopr )
	  							{
	  								spsopr.Price  := spsopr.RVPRICE * tempsumval;
	  								spsopr.Rprice := spsopr.RVPRICE * tempsumval;
	  								update current spsopr;
	  							}
	  						}
	  						while ( getnext spsopr where (( katsopr.nrec == spsopr.csopr )) = tsOk );

	  					// 3 )
	  					if ( getfirst spdocnal where (( katsopr.nrec == spdocnal.cdoc )) = tsOk )
	  						do
	  						{
	  							if( spdocnal.tipdoc = katsopr.vidsopr )
	  							{
	  								spdocnal.VALCURSE := tempsumval;
	  								spdocnal.CROSCURSE := (1/ tempsumval);
	  								update current spdocnal;
	  							}
	  						}
	  						while( getnext spdocnal where (( katsopr.nrec == spdocnal.cdoc )) = tsOk )

	  					// 4 )
	  					if ( getfirst soprhoz where (( katsopr.nrec == soprhoz.csoprdoc and katsopr.vidsopr == soprhoz.tipdoc )) = tsOk )
	  					{
	  						soprhoz.summa := katsopr.SUMVAL * tempsumval;
	  						update current soprhoz;
	  					}

	  					ReReadRecord(#katsopr);
	  					ReReadRecord(#spsopr);
	  					ReReadRecord(#soprhoz);
	  					ReReadRecord(#spdocnal);
	  				}*/
	  				//********************************************************************

					//настройки ('Автоматическое формирование партий перед созданием ордеров') 1504
					//if( (getfirst tuneval where (( comp(281474976715392) == tuneval.ctune )) and (UserId = tuneval.cuser)) = tsOk )
					//{
					//	case tuneval.STRVAL of
					//		'нет' :
					//		{
								//spsopr_party// вызов с помощью SQLD
				var stmt,stmt2 : LongInt;
				var stmt_str,stmt_str2 : LongInt;
				var messageErr,messageErr2 : longint;
				var nresult,nresult2 : string;
				var cKatsoprNrec : comp;
				cKatsoprNrec := comp(0);
				cKatsoprNrec := comp(katsopr.nrec);

				stmt := sqlAllocStmt;
				sqlAddStr(stmt_str, 'select top 1 F_SPSOPR_PARTY(?) from katmc');
				sqlBindParam( stmt, 1, cKatsoprNrec );

				sqlPrepare(stmt, stmt_str);
				sqlFreeStr(stmt_str);

				sqlBindCol(stmt, 1, nresult);
				messageErr := sqlExecute(stmt);
				if(messageErr  = 0)
				{
					while( sqlFetch( stmt ) = tsOk )
					do
					{
						if(nresult = 1)
						{
							ReReadRecord(#spsopr);
							if (inherited::handleEvent(cmMAKEPRIH) = heOK)
							{
												//if IsModified
												//{
								stmt2 := sqlAllocStmt;
								sqlAddStr(stmt_str2, 'select top 1 F_SPSOPR_AFTER(?) from katmc');
								sqlBindParam( stmt2, 1, cKatsoprNrec );
								sqlPrepare(stmt2, stmt_str2);
								sqlFreeStr(stmt_str2);
								sqlBindCol(stmt2, 1, nresult2);
								messageErr2 := sqlExecute(stmt2);
								if(messageErr2  = 0)
								{
									while( sqlFetch( stmt2 ) = tsOk )
									do
									{
										if(nresult2 = 1)
										{
											ReReadRecord(#spsopr);
										}
										else if(nresult2 = 2)
										{
											message('Ошибка в F_SPSOPR_AFTER обратитесь по телефону 4542. Накладная не будет оприходована', Warning);
										}
										else if(nresult2 = 3)
										{
											message('Ошибка в классификации, обратитесь по телефону 91. Накладная не будет оприходована', Warning);
										}
									}
								}
								else message('Звоните по телефону 91 ( номер ошибки: ' + messageErr2 + ' при выполнении функциии F_SPSOPR_AFTER)');
								sqlFreeStmt(stmt2);
								//}
							}
							else
							message ('Ордер не сформировался');
						}
						else if (nresult = 2)
						{
							message('Ошибка классификации МЦ, обратитесь по телефону 4542. Накладная не будет оприходована', Warning);
						}
						else if(nresult = 3)
						{
							message('Ошибка, обратитесь по телефону 91. Накладная не будет оприходована', Warning);
						}
					}
				}
				else message('Звоните по телефону 91 ( номер ошибки: ' + messageErr + ' при проставлении партии)');
				sqlFreeStmt(stmt);
					//		}
					//		'да' : {}
					//	end;
					//}
				//}

				//***********************************************************************


				if ( VALUT <> 'руб' and katsopr.dopr <> katsopr.dprice and datetostr(katsopr.dopr,'DD-MM-YYYY') <> 'ДД-ММ-ГГГГ' )
				message('Дата курса валюты не совпадает с датой ордера!', Warning);
			}

Re: Событие cmmakeprih

Добавлено: 10 июл 2013, 18:07
spark
Руслан писал(а):У нас есть alter на интерфейс SOPRDOCB. В нем по событию cmmakeprih отрабатывала функция по присваиванию партии... В галактике 9 это событие не отрабатывает. Может кто сталкивался с такой проблемой...

Код: Выделить всё

window EDITSOPR;
	handleEvent
cmMAKEPRIH :
			{
				var bForOrder : boolean;
				bForOrder := TRUE;
				/*
 				00000000000003D6h Формирование ордеров по накладным только в статусе "исполняемый" 1873
				00000000000003D5h Редактирование накладной при наличии складских ордеров 1876
				*/
				if((getfirst tuneval where (( comp(00000000000003D6h) == tuneval.ctune )) and (UserId = tuneval.cuser)) = tsOk )
				{
					case tuneval.STRVAL of
							'да' :
							{
							// проверить документв состоянии "исполняемый"
							//     если да, то проверять на наличие даты по ордерам
							//         если есть, то проверять на наличие разрешения в 1876 на разрешение
							//	           если да, то TRUE
							//	   	       если нет, то FALSE
							//         если нет, то TRUE
							//	   если нет, то FALSE
								if ( katsopr.status = 1 )
								{
									if( datetostr(katsopr.dopr,'DD-MM-YYYY') <> 'ДД-ММ-ГГГГ' )
									{
										if((getfirst tuneval where (( comp(00000000000003D5h) == tuneval.ctune )) and (UserId = tuneval.cuser)) = tsOk )
										case tuneval.STRVAL of
												'разрешать' : {bForOrder := TRUE;}
												'запрещать' : {bForOrder := FALSE;}
											end;
									}
									else if( datetostr(katsopr.dopr,'DD-MM-YYYY') = 'ДД-ММ-ГГГГ' )
									{ bForOrder := TRUE;}
								}
								else {bForOrder := FALSE;}

							}
							'нет' :
							{
							// если да, то проверять на наличие даты по ордерам
							//   если есть, то проверять на наличие разрешения в 1876 на разрешение
							//	   если да, то TRUE
							//	   если нет, то FALSE
								if( datetostr(katsopr.dopr,'DD-MM-YYYY') <> 'ДД-ММ-ГГГГ' )
								{
									if((getfirst tuneval where (( comp(00000000000003D5h) == tuneval.ctune )) and (UserId = tuneval.cuser)) = tsOk )
									case tuneval.STRVAL of
											'разрешать' : {bForOrder := TRUE; }
											'запрещать' : {bForOrder := FALSE;}
										end;
								}
								else if( datetostr(katsopr.dopr,'DD-MM-YYYY') = 'ДД-ММ-ГГГГ' )
								{bForOrder := TRUE; }
							}
						end;
				}

				//if(bForOrder = TRUE)
		        //{
					/*var tempsumval : double;

	  				if (VALUT <> 'руб')
	  				{
	  					RunInterface(L_VAL::CURSVAL, katsopr.cval, -1, katsopr.dprice, 3);
	  					if( getfirst CURSVAL where(( katsopr.cval == cursval.kodvalut and katsopr.dprice == cursval.datval )) = tsOk)
	  						tempsumval := cursval.sumrubl;

	  					// 1 )
	  					Katsopr.Summa := katsopr.SUMVAL * tempsumval;
	  					update current katsopr;

	  					// 2 )
	  					if ( getfirst spsopr where (( katsopr.nrec == spsopr.csopr )) = tsOk )
	  						do
	  						{
	  							if( spsopr.vidsopr = katsopr.vidsopr )
	  							{
	  								spsopr.Price  := spsopr.RVPRICE * tempsumval;
	  								spsopr.Rprice := spsopr.RVPRICE * tempsumval;
	  								update current spsopr;
	  							}
	  						}
	  						while ( getnext spsopr where (( katsopr.nrec == spsopr.csopr )) = tsOk );

	  					// 3 )
	  					if ( getfirst spdocnal where (( katsopr.nrec == spdocnal.cdoc )) = tsOk )
	  						do
	  						{
	  							if( spdocnal.tipdoc = katsopr.vidsopr )
	  							{
	  								spdocnal.VALCURSE := tempsumval;
	  								spdocnal.CROSCURSE := (1/ tempsumval);
	  								update current spdocnal;
	  							}
	  						}
	  						while( getnext spdocnal where (( katsopr.nrec == spdocnal.cdoc )) = tsOk )

	  					// 4 )
	  					if ( getfirst soprhoz where (( katsopr.nrec == soprhoz.csoprdoc and katsopr.vidsopr == soprhoz.tipdoc )) = tsOk )
	  					{
	  						soprhoz.summa := katsopr.SUMVAL * tempsumval;
	  						update current soprhoz;
	  					}

	  					ReReadRecord(#katsopr);
	  					ReReadRecord(#spsopr);
	  					ReReadRecord(#soprhoz);
	  					ReReadRecord(#spdocnal);
	  				}*/
	  				//********************************************************************

					//настройки ('Автоматическое формирование партий перед созданием ордеров') 1504
					//if( (getfirst tuneval where (( comp(281474976715392) == tuneval.ctune )) and (UserId = tuneval.cuser)) = tsOk )
					//{
					//	case tuneval.STRVAL of
					//		'нет' :
					//		{
								//spsopr_party// вызов с помощью SQLD
				var stmt,stmt2 : LongInt;
				var stmt_str,stmt_str2 : LongInt;
				var messageErr,messageErr2 : longint;
				var nresult,nresult2 : string;
				var cKatsoprNrec : comp;
				cKatsoprNrec := comp(0);
				cKatsoprNrec := comp(katsopr.nrec);

				stmt := sqlAllocStmt;
				sqlAddStr(stmt_str, 'select top 1 F_SPSOPR_PARTY(?) from katmc');
				sqlBindParam( stmt, 1, cKatsoprNrec );

				sqlPrepare(stmt, stmt_str);
				sqlFreeStr(stmt_str);

				sqlBindCol(stmt, 1, nresult);
				messageErr := sqlExecute(stmt);
				if(messageErr  = 0)
				{
					while( sqlFetch( stmt ) = tsOk )
					do
					{
						if(nresult = 1)
						{
							ReReadRecord(#spsopr);
							if (inherited::handleEvent(cmMAKEPRIH) = heOK)
							{
												//if IsModified
												//{
								stmt2 := sqlAllocStmt;
								sqlAddStr(stmt_str2, 'select top 1 F_SPSOPR_AFTER(?) from katmc');
								sqlBindParam( stmt2, 1, cKatsoprNrec );
								sqlPrepare(stmt2, stmt_str2);
								sqlFreeStr(stmt_str2);
								sqlBindCol(stmt2, 1, nresult2);
								messageErr2 := sqlExecute(stmt2);
								if(messageErr2  = 0)
								{
									while( sqlFetch( stmt2 ) = tsOk )
									do
									{
										if(nresult2 = 1)
										{
											ReReadRecord(#spsopr);
										}
										else if(nresult2 = 2)
										{
											message('Ошибка в F_SPSOPR_AFTER обратитесь по телефону 4542. Накладная не будет оприходована', Warning);
										}
										else if(nresult2 = 3)
										{
											message('Ошибка в классификации, обратитесь по телефону 91. Накладная не будет оприходована', Warning);
										}
									}
								}
								else message('Звоните по телефону 91 ( номер ошибки: ' + messageErr2 + ' при выполнении функциии F_SPSOPR_AFTER)');
								sqlFreeStmt(stmt2);
								//}
							}
							else
							message ('Ордер не сформировался');
						}
						else if (nresult = 2)
						{
							message('Ошибка классификации МЦ, обратитесь по телефону 4542. Накладная не будет оприходована', Warning);
						}
						else if(nresult = 3)
						{
							message('Ошибка, обратитесь по телефону 91. Накладная не будет оприходована', Warning);
						}
					}
				}
				else message('Звоните по телефону 91 ( номер ошибки: ' + messageErr + ' при проставлении партии)');
				sqlFreeStmt(stmt);
					//		}
					//		'да' : {}
					//	end;
					//}
				//}

				//***********************************************************************


				if ( VALUT <> 'руб' and katsopr.dopr <> katsopr.dprice and datetostr(katsopr.dopr,'DD-MM-YYYY') <> 'ДД-ММ-ГГГГ' )
				message('Дата курса валюты не совпадает с датой ордера!', Warning);
			}
Такой толстый код для автоформирования партий?
А стандартный функционал чем не подходит?
"Настройки Галактики \ Логистика \ Документы \ Управление снабжением \ Приходная накладная \ Автоматическое формирование партий при оприходовании"

И обращение к настройкам, как мне кажется, лучше делать через стандартные функции типа boGetTune('MCUSL.AVTOPARTY'), а не через прямое обращение к tuneval.