Елена Болоничева пишет:
Не понятно как можно скопировать не туда. В инструкции все написано. И сервер для чистоты пытались перегружать. Вообще с хф 19-21 куча проблем. Если бы у одних клиентов была бы эта проблема. У одних хф 21 встал, так выгрузка ПФ не работает. В общем занимаемся шаманством.
А вот в этом предприятии наверно придется с 0 ставить. Только это большая проблема. 60 баз. Подскажите тогда как обойтись наименьшим временем переустановки?
Если SP19 встал нормально, то при установке 20-21 вот этот файл программа не может открыть (если хозрасчетная база):
...Server\Data\servicepack\SP23\HOTFIX\20\BASE\HB\MODIFY\SALARY\szv4.dbf
Посмотрите есть ли он сейчас в серверной части, если ли права на эти папку, проверьте не ридонли он, может вирус-антивирус не дает открыть файл...
Судя по логу, ошибка у клиента происходит в момент установки хотфикса на базу, не находится файл dbf в нужной папке для хотфикса. Видимо, что-то не туда скопировали, когда копировали хотфикс на сервер.
Татьяна Яковлева пишет:
Ну спасибо, "утешили"... Меня этот вариант никак не устраивает, хотелось бы как-нибудь обойтись малой кровью, разобравшись с базой
Картинки вернула, обрезала лишнее
Похоже, у вас отсутствует или запорчена таблица
...\Server\Data\DBF\Base_hd\SALARY\NP\stag.dbf
Скопируйте из другой базы (или из демо), проиндексируйтесь с восстановлением целостности.
Елена Корнилова пишет:
Мы и не делаем на одну партию несколько приходов. Нужно поменять только цену.
Клавиши попробовать можно, только наверное сначала на резервной копии.
Цены нужно менять простому бухгалтеру перед формированием счет-фактуры поставщика, если менеджер сделал ошибку. Всех подряд пускать в себестоимость не хочется...
Самое смешное раньше правили цены без проблем, сейчас меня атакуют.
2. Скопировать все файлы и подпапки из папки Client\* .* в папку Client\*.* на каждой рабочей станции.
Запустить на каждой рабочей станции файл client\bin\_client_bin.exe, который распакует на каждой
рабочей станции необходимые компоненты, после чего этот файл (client\bin\_client_bin.exe) удалить.
Кто это придумал, это саботаж, вредительство или тонкий юмор? У нескольких моих клиентов 10, 25, 36, 40 рабочих мест.
Много раз просили делать нормальные обновления, с механизмом установок как у SP. Чуть улучшили ситуацию с Hotfix-сами и снова вернулись в ужасное прошлое. Не дружелюбный интерфейс. Сотрудники нашей фирмы в очередной раз разочарованы. Разочарование от продукта входит в привычку.
Добрый день!
Поскольку этот хотфикс затронул системные компоненты, мы не смогли сделать обновления автоматическими (с сервера). Это касается только данного конкретного хотфикса.
Андрей Мейзер пишет:
Хотелось бы все-таки услышать мнение разработчиков по этому у.
Пробовал различными утилитами изменить описание индексов, но они честно ругаются на некорректность индексного файла для этой таблицы. И это все-таки я считаю не по программированию для БЭСТ, а по некорректной структуре баз данных.
Доброе утро!
Структура БД БЭСТ-4 проектировалась исходя из возможностей харбора, поэтому при попытках работы с внешними провайдерами могут быть нюансы. Что касается данных конкретных индексных выражений (их несколько в банке) - поправим в ближайшем пакете.
dm пишет:
В заказах на услуги по Alt-B можно задать комментарий к строке номенклатуры, но он не запоминается . - как его сохранить после редактирования?
Проверил, работает. Если CTRL-ENTER в конце нажать (внизу в подсказке написано)
<cSubString> is a character or a character string whose position in <cString> is determined.
<cString>
<cString> is the character string searched.
<nStartPos>
The optional numeric parameter <nStartPos> defines the position within <cString> to start the search from. It defaults to 1.
Return
At() searches the character string <cString> from the beginning (left) and returns the position of <cSubString> as an integer numeric value. When <cSubString> is not found in <cString> , the return value is zero.
Description
The character function At() determines the first position of a character substring within another character string. <cString> is searched from the left. The counterpart of At() is the function RAt(), which searches a character string from the right (starting at the end) and determines the position of the last occurrence of a character substring within a string. The $ operator is also similar and tests whether a character substring is contained in a string.
The functions At() and RAt() are often used with the functions SubStr(), Left() and Right() to perform character string operations.
cColHead:={" Дата Номер НАИМЕНОВАНИЕ Кол-во Цена Сумма Заказчик"}
cCurProc:={||"2"}
aBlockCols:={{{||FIELD->tek_data},0}, ;
{{||FIELD->tek_nomer},9}, ;
{{||LEFT(FIELD->NAME,16)},16}, ;
{{||STR(FIELD->kol,5)},33}, ;
{{||STR(FIELD->cena,9,2)},39}, ;
{{||STR(FIELD->summa,9,2)},49}, ;
{{||STR(FIELD->name_p,4)},59}}
Где-то есть ошибка, вообще как работает aBlockCols
Функция STR() - преобразует число в строку, в случае символьного поля (name_p) она не нужна, поэтому последняя строка может быть такая:
{{||FIELD->name_p},59}} или если не полностью (например вывести только 15 симворов
{{||LEFT(FIELD->name_p,15)},59}}
Николай Иванов пишет:
В системах БЭСТ самым решительным образом отвергается возможность «пообъектного формирования складских цен», когда учетная цена одной и той же номенклатурной позиции может быть разной на разных складах.
Не вводите людей в заблуждение. В БЭСТ-5 это реализовано.
Станислав Кубиковский пишет:
Опять та же проблема, документы приходят но в некоторых накладных позиции с товаром отсутствует "наименование", с закупочными накладными не пришли партии, на филиале все нормально. Сделал предложенную вами прошлый раз процедуру, все пришло. Сколько это может продолжаться?
Это может продолжаться вечно, если где-то сбой в данных (либо в центре либо в филиале). Его надо локализовать и исправить. Можно попробовать выполнить процедуру восстановления целостности (специальные режимы). Написал также в личку.
"У нас проблема: в картотеке не правильно был подсчитан накопленный износ (нет 1 месяца 2009г)и СПИ показывает на 1 месяц неправильно-сделали восстановление целостности данных-сейчас показывает в накопленном износе только износ 2010г.,а износа 2009г. нет. и СПИ показывает меньше(было 11 мес.,показывает 3 мес.,а должно быть 12+3=15 (пятнадцать)).Что нам делать???Ответьте как можно скорее -1 квартал закрываем! "
Решили восстановить данные из архива от 06.04.2010г.Запустили на восстановление-программа написала,что восстановление прошло -и запросила восстановление серверной части -подвердили-вылетела ошибка-закрыли БЭСТ-по новой заходим в БЭСТ -не пускает -выдает сообщение: "Не правильно введен пароль"(если admin)и далее ошибку выдает(если как пользователь):"SQL:Column'IDROLE'is not found" Что случилось?? Что нам делать???
Добрый день!
Похоже что-то запортилось в серверной части. По возможности, заархивируйте ее любым архиватором ( папку Server\Data\Pro без архивов *.ace - для экономии места) и выложите на FTP
krssu пишет:
Вот кусок из rtl.bdll, объекта TXMLNode:
TXMLNODE NEW A HBCLASS __CLS_PARAM ADDMULTIDATA A ADDMETHOD A TXMLNODE_NEW ADDINLINE A HBXML_NODE_CLONE HBXML_NODE_CLONE_TREE HBXML_NOD E_UNLINK TXMLNODE_NEXTINTREE
Добрый день!
Так очень трудоемко :-)
Мы всегда готовы поделиться исходниками (особенно с большим удовольствием для тех кто в этом понимает):
Код
#include "hbclass.ch"
#include "fileio.ch"
#include "hxml.ch"
#DEFINE CRLF CHR(13)+CHR(10)
/*
* CLASS DEFINITION
* HXMLNode
*/
CLASS HXMLNode
DATA title
DATA type
DATA aItems INIT {}
DATA aAttr INIT {}
METHOD New( cTitle, type, aAttr )
METHOD Add( xItem )
METHOD GetAttribute( cName )
METHOD SetAttribute( cName,cValue )
METHOD Save( handle,level )
METHOD Find( cTitle,nStart )
ENDCLASS
METHOD New( cTitle, type, aAttr, cValue ) CLASS HXMLNode
IF cTitle != Nil ; ::title := cTitle ; ENDIF
IF aAttr != Nil ; ::aAttr := aAttr ; ENDIF
::type := Iif( type != Nil , type, HBXML_TYPE_TAG )
IF cValue != Nil
::Add( cValue )
ENDIF
Return Self
METHOD Add( xItem ) CLASS HXMLNode
Aadd( ::aItems, xItem )
Return xItem
METHOD GetAttribute( cName ) CLASS HXMLNode
Local i := Ascan( ::aAttr,{|a|a[1]==cName} )
Return Iif( i==0, Nil, ::aAttr[ i,2 ] )
METHOD SetAttribute( cName,cValue ) CLASS HXMLNode
Local i := Ascan( ::aAttr,{|a|a[1]==cName} )
IF i == 0
Aadd( ::aAttr,{ cName,cValue } )
ELSE
::aAttr[ i,2 ] := cValue
ENDIF
Return .T.
METHOD Save( handle,level ) CLASS HXMLNode
Local i, s, lNewLine
s := Space(level*2) + '<'
IF ::type == HBXML_TYPE_COMMENT
s += '!--'
ELSEIF ::type == HBXML_TYPE_CDATA
s += '![CDATA['
ELSEIF ::type == HBXML_TYPE_PI
s += '?' + ::title
ELSE
s += ::title
ENDIF
IF ::type == HBXML_TYPE_TAG .OR. ::type == HBXML_TYPE_SINGLE
FOR i := 1 TO Len( ::aAttr )
s += ' ' + ::aAttr[i,1] + '="' + HBXML_Transform1(::aAttr[i,2]) + '"'
NEXT
ENDIF
IF ::type == HBXML_TYPE_COMMENT
s += '-->' + CRLF
ELSEIF ::type == HBXML_TYPE_PI
s += '?>' + CRLF
ELSEIF ::type == HBXML_TYPE_SINGLE
s += '/>' + CRLF
ELSEIF ::type == HBXML_TYPE_TAG
s += '>'
IF Len(::aItems) == 1 .AND. Valtype(::aItems[1]) == "C" .AND. ;
Len(::aItems[1]) + Len(s) < 1000
lNewLine := .F.
ELSE
s += CRLF
lNewLine := .T.
ENDIF
ENDIF
IF handle >= 0
FWrite( handle,s )
ENDIF
FOR i := 1 TO Len( ::aItems )
IF Valtype( ::aItems[i] ) == "C"
IF handle >= 0
IF ::type == HBXML_TYPE_CDATA
FWrite( handle, ::aItems[i] )
ELSE
FWrite( handle, HBXML_Transform1( ::aItems[i] ) )
ENDIF
ELSE
IF ::type == HBXML_TYPE_CDATA
s += ::aItems[i]
ELSE
s += HBXML_Transform1( ::aItems[i] )
ENDIF
ENDIF
ELSE
s += ::aItems[i]:Save( handle, level+1 )
ENDIF
NEXT
IF handle >= 0
IF ::type == HBXML_TYPE_TAG
FWrite( handle, Iif(lNewLine,Space(level*2),"") + '</' + ::title + '>' + CRLF )
ELSEIF ::type == HBXML_TYPE_CDATA
FWrite( handle, ']]>' + CRLF )
ENDIF
ELSE
IF ::type == HBXML_TYPE_TAG
s += Iif(lNewLine,Space(level*2),"") + '</' + ::title + '>' + CRLF
ELSEIF ::type == HBXML_TYPE_CDATA
s += ']]>' + CRLF
ENDIF
Return s
ENDIF
Return ""
METHOD Find( cTitle,nStart,block ) CLASS HXMLNode
Local i
IF nStart == Nil
nStart := 1
ENDIF
DO WHILE .T.
i := Ascan( ::aItems,{|a|Valtype(a)!="C".AND.a:title==cTitle},nStart )
IF i == 0
EXIT
ELSE
nStart := i
IF block == Nil .OR. Eval( block,::aItems[i] )
Return ::aItems[i]
ELSE
nStart ++
ENDIF
ENDIF
ENDDO
Return Nil
/*
* CLASS DEFINITION
* HXMLDoc
*/
CLASS HXMLDoc INHERIT HXMLNode
METHOD New( encoding )
METHOD Read( fname )
METHOD ReadString( buffer ) INLINE ::Read( ,buffer )
METHOD Save( fname,lNoHeader )
METHOD Save2String() INLINE ::Save()
ENDCLASS
METHOD New( encoding ) CLASS HXMLDoc
IF encoding != Nil
Aadd( ::aAttr, { "version","1.0" } )
Aadd( ::aAttr, { "encoding",encoding } )
ENDIF
Return Self
METHOD Read( fname,buffer ) CLASS HXMLDoc
Local han
IF fname != Nil
han := FOpen( fname, FO_READ )
IF han != -1
hbxml_GetDoc( Self,han )
FClose( han )
ENDIF
ELSEIF buffer != Nil
hbxml_GetDoc( Self,buffer )
ELSE
Return Nil
ENDIF
Return Self
METHOD Save( fname,lNoHeader ) CLASS HXMLDoc
Local handle := -2
Local cEncod, i, s
IF fname != Nil
handle := FCreate( fname )
ENDIF
IF handle != -1
IF lNoHeader == Nil .OR. !lNoHeader
IF ( cEncod := ::GetAttribute( "encoding" ) ) == Nil
cEncod := "UTF-8"
ENDIF
s := '<?xml version="1.0" encoding="'+cEncod+'"?>'+CRLF
IF fname != Nil
FWrite( handle, s )
ENDIF
ELSE
s := ""
ENDIF
FOR i := 1 TO Len( ::aItems )
s += ::aItems[i]:Save( handle, 0 )
NEXT
IF fname != Nil
FClose( handle )
ELSE
Return s
ENDIF
ELSE
MessageBox("Не могу записать файл "+fname)
ENDIF
Return .T.
FUNCTION CutExten( fname )
LOCAL i
RETURN IIF( ( i := RAT( '.', fname ) ) = 0, fname, SUBSTR( fname, 1, i - 1 ) )
FUNCTION FilExten( fname )
LOCAL i
RETURN IIF( ( i := RAT( '.', fname ) ) = 0, "", SUBSTR( fname, i + 1 ) )
FUNCTION FilePath( fname )
LOCAL i
RETURN IIF( ( i := RAT( '\', fname ) ) = 0, ;
IIF( ( i := RAT( '/', fname ) ) = 0, "", LEFT( fname, i ) ), ;
LEFT( fname, i ) )
FUNCTION CutPath( fname )
LOCAL i
RETURN IIF( ( i := RAT( '\', fname ) ) = 0, ;
IIF( ( i := RAT( '/', fname ) ) = 0, fname, SUBSTR( fname, i+1 ) ), ;
SUBSTR( fname, i+1 ) )
STATIC FUNCTION HBXML_Transform1(x)
IF VALTYPE(x)=="C"
IF EMPTY(x)
x:=SPACE(1)
ENDIF
ELSEIF x==NIL
x:=""
ELSEIF VALTYPE(x)=="N"
x:=ALLTRIM(STR(x))
ELSEIF VALTYPE(x)=="D"
x:=DTOS(x)
ELSEIF VALTYPE(x)=="L"
x:=IF(x,"T","F")
ENDIF
RETURN HBXML_Transform(x)
krssu пишет:
Здравствуйте, Константин, спасибо за ответ. Исправляем недочеты: БЭСТ 5 3.4 СП 23.11, хозрасчет, терминал.
Цитата
nordk пишет:
Я так подозреваю Вы кусок кода из БЭСТ-4 в БЭСТ-5 переносите?
Возникла необходимость напрямую выгрузить данные в Excel, минуя дизайнер отчетов. Поэтому поискали по форуму примеры и попробовали к своей задаче применить, только почему-то не получается.
Код
WIN32_OLEINITIALIZE()
TRY
oApp := olecreateobject( "Excel.Application" ) //попытка создать объект Excel
CATCH
Return .F. <------- отладчик всё время переходит в эту точку и прекращает процедуру.
END
oApp:Visible := .F.
Даже не знаем, почему такая ситуация, может причина в терминальной сессии? Установлен Офис 2000.
Добрый день!
Попробуйте вот так:
oApp := CreateHbOleObject( "Excel.Application" )
12 июня на территории поля «Красный пахарь» прогремит салют международного музыкального фестиваля «Рок Над Волгой»! Среди участников фестиваля – Легенда хард-рока, британская группа Deep Purple, легенды российского рока «Машина Времени», «Алиса», «Чайф», Кипелов, Вячеслав Бутусов и «Юпитер», «Аквариум», а так же «Сплин», «Король и Шут», Пелагея.
БЭСТОВЦЫ, я давно уже говорил что если проводить аналогию между ПО и музстилями, то мы явные рокеры .
Кто-нибудь планирует посетить фестиваль в этом году? В прошлом году это был отличный праздник.