BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 14 15 16 17 18 19 20 21 22 23 24 След.
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
При такой конструкции в сети на 10 пользователей Вы точно совершенно две одинаковые записи не получите.
Мы говорим о механизме записи: я не проверял точность индексного ключа и т.п.

Ну, чтож, давайте проверим. (Хотя при чем тут индекс).

Для этого возьмем функцию, создающую Н\Н с заполнением нескольких полей. Ту, которую рассмотрели ранее:
Код
STATIC PROCEDURE CreateNewProduct()
Local sNewNNumReal:=Space(13)
 SET ORDER TO TAG TAG_NNum
 DbGoBottom()
 sNewNNumReal:=mlabel->nnum
 if(sNewNNumReal==AllTrim(sNewNNumReal))
 if(.NOT.(IfAllChar(sNewNNumReal)))
 WHILE Mlabel->(DBSEEK(UPPER(" "+sNewNNumReal)))
sNewNNumReal:=InCreaseOne(MLABEL->NNUM)
 ENDDO 
 Mlabel->(ADDREC())
 Mlabel->NNUM:=sNewNNumReal
 Mlabel->GRUP:="00001"
 Mlabel->NAME:="Новая"
 Mlabel->FULLNAME:="Новая полное"
 Mlabel->ORD_POLICY:=1
 Mlabel->ID_LABEL:=StepPlus()
 Mlabel->mdim:="0000000000000000001040"
 Mlabel->( F_DBUNLOCK() )
 endif 
 endif
return

Функции, которая использует ф-я создани ном-ры приведу ниже.

Теперь, используем эту функции в нашей спецфункции:
Код
StartTest()
STATIC PROCEDURE StartTest()
Local Temp_I:=0
Local dStart,dEnd
dBpUSH()
dStart:=Time()
If (DbF()=="MLABEL")
    For Temp_i:=1 to 20000
      CreateNewProduct()
    NEXT
ENDIF
dEnd:=TIME()
SayAndWait("Время старта "+Var2Char(dStart)+" время окончания"+Var2Char(dEnd))
DbPop()
RETURN


Будет выводиться время начала и время окончания работы спецф-ии.
Подготовим справ номенклатуры. Для этого удалим там все записи, создадим запись под номером "0000000000001"(Этого изначально требует работа со справочником) в группе "00001". У нас запущено одно окно.
1. Запускаем спецфункцию. (Создадим 20к записей для "веса").
2. Запускаем 2е окно и как можно быстрее запускаем в обоих окнах спецфункцию.
Результат записываем. Вот что получилось у меня(МИН:СЕК):
1.10:50 - 11:08. Dbf Viewer показывает 20001 запись. Н\Н Последней 20001.
2. 1е окно: 13:23 - 13:59
2е окно: 13:24 - 14:00
Результат: Dbf Viewer показывает 60001 запись. Н\Н Последней 42276.

Проведем 2й раз опыт (подгтовка справочника, реиндексация).
1.33:07 - 33:21. Dbf Viewer показывает 20001 запись. Н\Н Последней 20001.
2. 1е окно: 34:20 - 34:57
2е окно: 34:21 - 34:58
Результат: Dbf Viewer показывает 60001 запись. Н\Н Последней 42103.
Результат, в общем-то плачевный. Получилось, что около 18000 записей дублируют номера. (Хотя один раз получился результат с дубляжом порядка 500 записей, там был немного др алгоритм, но принцип проверки тот же.).
Теперь рассмотрим причину, по которой такое происходит. Обратимся к куску кода:
Цитата

WHILE Mlabel->(DBSEEK(UPPER(" "+sNewNNumReal)))
sNewNNumReal:=InCreaseOne(MLABEL->NNUM)

ENDDO
Mlabel->(ADDREC())
Mlabel->NNUM:=sNewNNumReal
Mlabel->GRUP:="00001"
Mlabel->NAME:="Новая"
Mlabel->FULLNAME:="Новая полное"
Mlabel->ORD_POLICY:=1
Mlabel->ID_LABEL:=StepPlus()
Mlabel->mdim:="0000000000000000001040"
Mlabel->( F_DBUNLOCK() )

Жирным выделением отметил место где начинается "критический" код и где он заканчивается. Если разделить эти участки кода от одновременного исполнения - то никаких ошибок не будет. Как это сделать сейчас?
Естественно "заморозить" процесс я не могу. Однако, можно поступить по-идиотски, а именно разделить его так:
Цитата

Do While (.NOT.(lUnique).AND.(nJ<1000))
TRY
USE (sPath) NEW Alias TEmp
lUnique:=.T.
SELECT ("MLABEL")
SET ORDER TO TAG TAG_NNum
CATCH oErr
nJ+=1
end
enddo
//правильнее еще сделать проверку на велич счетчика.
WHILE Mlabel->(DBSEEK(UPPER(" "+sNewNNumReal)))
sNewNNumReal:=InCreaseOne(MLABEL->NNUM)

ENDDO
Mlabel->(ADDREC())
Mlabel->NNUM:=sNewNNumReal
Mlabel->GRUP:="00001"
Mlabel->NAME:="Новая"
Mlabel->FULLNAME:="Новая полное"
Mlabel->ORD_POLICY:=1
Mlabel->ID_LABEL:=StepPlus()
Mlabel->mdim:="0000000000000000001040"
Mlabel->( F_DBUNLOCK() )
Close Temp

Имея такой инструмент, можно было бы вообще отказаться от проверки и переделать алгоритм, но посмотрим что получиться при таком коде.
Результаты:
1. 14:21 - 14:39. Записей 20001, Н\Н последней 20001. Все верно.
2. 1е окно 15:28 - 16:27
2е окно 15:29 - 16:28
Результат: Записей - 60001, номер последней записи 60001. А это значит, что не допущено ни единой ошибки!!!!

Код
Function IncreaseOne(cString)
Local nLength:=0
Local cIncreased:=""
Local nPosition:=0 //Цифра - разряд
nLength:=len(cString)
cIncreased:=stuff(cString,1,nLength-1,"")
If(IsDigit(cIncreased))
nPosition:=Val(cIncreased)
if(nPosition==9)
 if(nLength==1)
cIncreased:=""// нужен сЛУЧАЙНЫЙ СИМВОЛ
 else
nPosition:=0
cIncreased:=IncreaseOne(stuff(cString,nLength,nLength,""))
if(.NOT.(cIncreased==""))
cString:=cIncreased+Var2Char(nPosition)
else
cString:=""
endif
 endif
else
nPosition+=1
cString:=stuff(cString,nLength,nLength,Var2Char(nPosition))
endif
else
nPosition:=0
cIncreased:=IncreaseOne(stuff(cString,nLength,nLength,""))
if(.NOT.(cIncreased==""))
cString:=cIncreased+Var2Char(nPosition)
else
cString:=""
endif
endif
return cString

Function IfAllChar(cString)
Local bIfNotNumExist:=.T.
Local nLen:=len(cString),temp_i:=0,temp_j:=0
if (nLen!=0)
While(bIfNotNumExist)
 if(IsDigit(cString))
bIfNotNumExist:=.F.
 else
cString:=Stuff(cString,1,1,"")
 endif
enddo
endif
return bIfNotNumExist
//Измененная ф-я создания:
STATIC PROCEDURE CreateNewProduct()
Local sNewNNumReal:=Space(13)
Local lUnique:=.F.
Local nJ:=1,oErr
Local sPath:=LoadPath()+"TEST\BOM_def"
 SET ORDER TO TAG TAG_NNum
 DbGoBottom()
 sNewNNumReal:=mlabel->nnum
 if(sNewNNumReal==AllTrim(sNewNNumReal))
 if(.NOT.(IfAllChar(sNewNNumReal)))
Do While (.NOT.(lUnique).AND.(nJ<1000))
 TRY
USE (sPath) NEW Alias TEmp
lUnique:=.T.
SELECT ("MLABEL")
SET ORDER TO TAG TAG_NNum
 CATCH oErr
nJ+=1
 end
enddo
 WHILE Mlabel->(DBSEEK(UPPER(" "+sNewNNumReal)))
sNewNNumReal:=InCreaseOne(MLABEL->NNUM)
 ENDDO 
 Mlabel->(ADDREC())
 Mlabel->NNUM:=sNewNNumReal
 Mlabel->GRUP:="00001"
 Mlabel->NAME:="Новая"
 Mlabel->FULLNAME:="Новая полное"
 Mlabel->ORD_POLICY:=1
 Mlabel->ID_LABEL:=StepPlus()
 Mlabel->mdim:="0000000000000000001040"
 Mlabel->( F_DBUNLOCK() )
 Close Temp
 endif 
 endif
return
//В качестве "Блокирующего" файла 
//взял BOM_def, он у нас все 
//равно пуст. Файл обязательно
// должен присутствовать в папке TEST!!!!!!
Изменено: Саак Шахламджян - 26.08.2008 15:07:44
Ошибка в реестре спецификаций при удалении
 
Описанное выше не является ошибкой? Или не воспроизводится? Или пользователь не имеет право так поступать?
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
В плане самой записи вроде как верно, в плане логики - это Ваше решение...тут не сужу...
Что касается cNnum+=1 посмотрю - я это написал как вариант необычности харбора :)
В БЭСТ-4 ?1+"1" в отладчике показывает "2"
Дальше не экспериментировал, но обратил Внимание что работает...

Значит ли это, что такая "конструкция" исключает возможность возникновения 2х записей с одним и тем же Н\Н (При использовании по сети такой спецфункции, разумеется)?

Вы, кажется так предлагали:
Код
SET ORDER TO TAG TAG_NNum 
DbGoBottom() 
sNewNNumReal:=mlabel->nnum
if(sNewNNumReal==AllTrim(mlabel->nnum)) 
if(.NOT.(IfAllChar(AllTrim(sNewNNumReal))))
WHILE Mlabel->(DBSEEK(UPPER(" "+sNewNNumReal))) 
sNewNNumReal:=InCreaseOne(MLABEL->NNUM) 
ENDDO 
Mlabel->(ADDREC()) 
Mlabel->NNUM:=sNewNNumReal 
Mlabel->GRUP:="00001" 
Mlabel->NAME:="Новая" 
Mlabel->FULLNAME:="Новая полная" 
Mlabel->ORD_POLICY:=1 
Mlabel->ID_LABEL:=StepPlus() 
Mlabel->mdim:="0000000000000000001040" 
Mlabel->( F_DBUNLOCK() ) 
bIsCreated:=.T. 
else 
bIsCreated:=.F. 
endif 
else 
bIsCreated:=.F. 
endif 
Изменено: Саак Шахламджян - 26.08.2008 08:32:02
Какой командой получить путь к папкам Windows для временных файлов?
 
Цитата
nordk пишет:
Посмотрите на переменную GlobalTmpPath
она Вас устроит ?

Да, более чем, спасибо!
Вопрос по блокировке записей.
 
StepPlus() использовать нужно, уже посмотрел.
Таким образом, используя AddRec() и проверку на неповторяемость номера, получаем:
Код
 SET ORDER TO TAG TAG_NNum
 DbGoBottom()
 if(mlabel->nnum==AllTrim(mlabel->nnum))
 if(.NOT.(IfAllChar(AllTrim(mlabel->nnum))))
 sNewNNumReal:=InCreaseOne(MLABEL->NNUM)
 WHILE Mlabel->(DBSEEK(UPPER(" "+sNewNNumReal)))
sNewNNumReal:=InCreaseOne(MLABEL->NNUM)
 ENDDO 
 Mlabel->(ADDREC())
 Mlabel->NNUM:=sNewNNumReal
 Mlabel->GRUP:="00001"
 Mlabel->NAME:="Новая"
 Mlabel->FULLNAME:="Новая полная"
 Mlabel->ORD_POLICY:=1
 Mlabel->ID_LABEL:=StepPlus()
 Mlabel->mdim:="0000000000000000001040"
 Mlabel->( F_DBUNLOCK() )
 bIsCreated:=.T.
 else
bIsCreated:=.F.
 endif 
 else
 bIsCreated:=.F.
 endif

cNnum+=1 к строкам неприменимо, не хочет работать.
В коде создается "пустая" Н\ед, понятно, что нужно заполнить больше полей (таких как ед измерения, даты), чтобы не загромождать я их опустил.
Верно?
Изменено: Саак Шахламджян - 25.08.2008 18:53:03
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
программирование_в_БЭСТ-4.chm

Честно говоря описания ф-ий не так подробны как хотелось бы. Попутно Вопросы конкретно по AddRec().
1. Чем она существенно отличается от Append BLANK, кроме того, что делает блокировку, чем она лучше?
2. Что возвращает эта функция?
3. StepPlus() для уник поля надо делать или нет?
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
Саак простите - я в БЭСТ-5 у себя тоже что-то не нашел привычный раздел...
У Вас есть БЭСТ-4 или возможность скачать его ? - там есть help по программированию с описаниями внутренних функций БЭСТа....

У меня по Б-4 есть следующие файлы:
help4plus.chm
help4plus.chw
spb4+.chm
spb406.chm
spb407.chm
spb4010.chm
spb4048.chm
spb40366.chm
программирование_в_БЭСТ-4.chm
Какой именно файл описывает ф-ии БЭСТ'а?

Обычно, если чего-то "явно не хватало" (чисто интуитивно) читал help4plus.chm, но 99% по Б-5 хелп изучал. Что именно я должен Хорошо знать?
Возможность скачать есть.
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
Насчет одновременности сделайте проверку по индексному ключу перед записью и запись и посадите 5 человек и жмите на счет 3 одновременно и попробуйте получить 2 одинаковых записи...

А проверку по-Вашему делать так:
Код
SET ORDER TO TAG TAG_NNum 
Do while (.NOT.(lUnique))
 DbGoBottom()
 sNextNNUM:=InCreaseOne(MLABEL->NNUM)
 SEEK (sNextNNUM)
 if .NOT.(Found())
   lUnique:=.T.
 endif
enddo
Какой командой получить путь к папкам Windows для временных файлов?
 
В Windows есть папки для хранения временных файлов. "Переменные среды", как они названы в Windows. Там есть 2 типа: Системные и для Интеренет. Разработчики используют для Интернет:
Например, TEMP, лежащая по пути %USERPROFILE%\Local Settings\Temp (Обычно это "c:\Documents and settings\"+(sWindowsUserName)+"\Local Settings\Temp")
Есть ли команда, позволяющая определить данный путь?
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
Во-первых применяйте ADDREC() Вы все-таки не в свои таблицы писать собрались...
Во-вторых DBPUSH() делайте либо в начале, либо откройте свой алиас и он Вам вообще не нужен.
И я бы применил для проверки где-нить перед непосредственной записью в поле DBSEEK() по номенклатурному номеру если так переживаю за уникальность и если бы нашел то сделал бы еще +1 и все и ADDREC() и все запись создана и никаких семафоров и даром не надо.

Этот DbPush вообще лишний, я его убрал, этот код просто не раз дописывал и часто не было времени убрать лишнее, оставлял, так сказать и соображений "совместимости". Об AddRec() вообще впервые слышу (в описании его нет :( ). То что не всвои - испоьзую StepPlus(), если Вы об этом. По поводу повторной проверки также думал. Проблема не в том, что там такой номер может быть. При сортировке Н\Н по порядку при условии, что истинно для всех записей Len(AllTrim(Malbel->NNUM)==13) и нет символов в номерах (я позже сделаю контроль за этим)
Последний номер+1 просто не может существовать - это лишняя проверка. Проблема только в том, что 2 пользователя могут одновременно получить этот самый последний номер. Но это опять как я вижу.
Изменено: Саак Шахламджян - 25.08.2008 15:32:59
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
Не видя исходного кода Ваши опасения понять не могу...
Для меня очень простая и обычная задача (в плане записи в таблицы)

В идеале должно быть так:
Код
1. Select MLABEL
2. SET ORDER TO TAG TAG_NNum
3. DbGoBottom()
4. sLastNNum:=Alltrim(mlabel->nnum)
5.DBPUSH("mlabel","MLABEL","",{sRealProductGrup,sRealProductGrup})
6.if(mlabel->nnum==AllTrim(mlabel->nnum))
7.if(.NOT.(IfAllChar(AllTrim(mlabel->nnum))))
8.sNewNNumReal:=IncreaseOne(sLastNNum)
9. Создание Новой номенклатуры Append BLANK'ом со значениями из переменных памяти.
закрытие IF'ов, dbpop()


if(mlabel->nnum==AllTrim(mlabel->nnum)) стоит т.к. у нас договоренность, что поле Н\Н заполнено полностью, все 13ть символов. IfAllChar() - возвращает .T. если нет ни одной цифры в символьном Н\Н. (Раньше была DoesCharExist(), т.к была договоренность использовать в Н\Н только цифры, но пользователи нарушают)
IncreaseOne() - Увеличивает на 1 число, записанное в виде символьной строки, символы-неЦифры заменяются нулями, и игнорируются как разряд.
В принципе, можно было бы выложить код, правда если Вам не страшно читать кучу мусора. Это первое, что я написал. Да и на самом деле у меня сейчас идет создание новоё Н\Н путем COPY TO И APPEND From - надо переделать.

Точно таким же образом идет создание в MLABEL2 ZAPAS\MLABAL и со спецификациями. (Сам принцип присвоения следующего номера)
Изменено: Саак Шахламджян - 25.08.2008 15:07:08
Статус "Черновой" у заказа.
 
Как я понял по полю STATUS определяется тип заказа. Если статус==3, то это "Заявки на продажу", там собственно дат производства нет.
Поле STATUS1 определяет черновик\чистовик.
Теперь, если мы формируем заказ прямо из прайс-листа (спецфункцией), самому заказу в поле СТАТУС запишем 3, а поле СТАТУС1 оставим пустым, то создасться Заказ продажи черновой, верно?
Далее, оттуда (из заказ продаж) при переводе в сводники нужно будет поменять СТАТУС на 4ку, а статус1 на 1, так ли это?
Далее, задать даты конечного изготовления конкретных изделий в строках заказа (rbookm). При этом дата окончания работ (которую заполняем при набивании сводника) должна быть позднее последнего ОКПП, как и даты изготовления иделий.
Подскажите, пожалуйста,какие поля еще необходимо учесть при таком переводе?
Статус "Черновой" у заказа.
 
Нет возможности создать предварительный(черновой) Сводный заказ. (Их убрали начиная, кажется с СП7)
Очень нужен "Черновой" заказ. Полез в описание полей real\rbook о полях STATUS, STATUS1, STATUS2 толком ничего не написано.
Нам надо реализовать:
Создается черновой заказ (в нем естесственно даты изготовления изделий указаны быть не должны). Полсе того как заказ прошел фин контроль, пользователь может его перевести в статус нормальный, или к запуску.
1. Возможно ли в rbook сделать строки, не попадающие в ОКПП?
(Имеется ввиду хранить информацию о черновом варианте заказа в той же таблице, что и все без "последствий")

2. Возможно ли в rbookm (тут строки заказов храняться) сделать строки без дат изготовления? (Будет ли Б-5 на это ругаться?)

(Если ответ утвердительный можно бы тогда написаить спецфункцию, формирующую заказ прямо из прайс-листа)
Поэтому полями STATUS и интересуюсь.
Изменено: Саак Шахламджян - 25.08.2008 13:24:58
Не удаётся установить SP9 на рабочей базе., Ошибка старта сервера приложений!
 
Цитата
Сергей Павличенко пишет:
Добрый вечер!




Цитата

Денис пишет:
А какая у вас ОС?
Буквально вчера ставил SP9 на наш терминальный сервер demo.bestnet.ru
ОС Windows 2003 Server +SP2, все вроде до этого ставилось нормально, но с SP9 тоже пока не выгрузил процесс установка до конца не прошла.
Проблема в том, что ошибка плавающая и стабильно отловить не получается. Постараемся к SP10 разобраться.
С уважением,
С.Павличенко

Мне кажется, что такие проблемы возникли, когда мы Б-5 установили из дистрибутива СП1-СП6. Когда я ставил БЭСТ из обычного дистрибутива, устанавливая по очереди СПаки (в одном из которых, кажется и был обновленный драйвер ключа) то СП9 установился нормально. Поэтому я и удивился, когда не смог поставить СП9 на рабочей машине. К стати дистриб СП1-СП6 выдает какую-то ошибку в момент после указания файла лицензий, что-то, вроде "Функция такая-то вернула код ошибки 87" 2 раза.
Сводник можно удалить после фомирования ОКПП, БЭСТ-5 3.4 СП 9
 
Самое интересное, что строки сводного заказа удалить нельзя, если войти в сводный заказ, который уже попал в ОКПП. А вот сам сводный заказ удалить можно!!!
Хотя уже неважно, написали спецфункцию.
Изменено: Саак Шахламджян - 25.08.2008 09:30:37
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
ну и нет тут ничего сложного.
Заблокировали номенклатуру - сделали.
Разблокировали

и так далее по каждой табличке раздельно.
Ну что тут такого ?


А у меня перед созданием чего либо берется н\номер и код последней записи (по индесу), вот я и опасаюсь, как бы не вышло так, что этот номер последней записи не получили бы одновременно 2 пользователя один и тот же. И получиться 2 записи с одним номером.
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
Создали запись - в товарах, запомнили,
создали запись в материалах запомнили.
В записи материалов заполняем поле по заполненному коду в товарах.
Причем тут одновременно на некольских машинах ??
Ну будут разные номера в материалах и товарах и что ?
Нет смысла писать везде в один момент времени.
Для этого в справочнике поле есть для связки..
Разрывайте как хотите по времени работу операции 1 от операции 2 и от операции 3. И причем тут в этот же момент пытаться делать спецификацию. И причем тут разные компьютеры ???

И главное зачем это делать программно - я вот например очень не уверен что такой объект как спецификацию Вы грамотно повторите по правилам БЭСТа и считаю такие объекты надо делать инструментом БЭСТа и если его нет объяснять и просить чтобы были... А Вы еще вероятно потом эту базу будете в сервис-центр подсовывать в случае непонятных ошибок - найдите их...

Вы начните с описания задачи..а то судя по всему к ее реализации Вы подходите вообще не с той стороны...
Давайте рассмотрим задачу и как Вы хотите построить принцип ее реализации....


Без проблем!!! Просто то, о чем я говорю уже реализовано. Возник Вопрос только об одновременном использовании и я удивляюсь почему только сейчас(сам виноват).

Задача такая:
Есть типовое изделие. Это такое изделие, которое описанно формулами. Формулами описан расход материалов на это изделие. Подставив конкретные значения в формулы - получаем расход материалов в числах на конкретное изделие. Грубо говоря, расчетная спецификация (к стати этот тип зарезервирован разработчиками, это к делу не относиться).
Для того, чтобы описать такое изделие пользователь должен задать формулы. Действия пользователя в Б-5:
1. Создает Н\Н в производстве.
2. Создает обычную спецификацию на него с "нулевым" расходом материалов. Указывает маршрут изделия (операции).
3. Создает Н\Н в продажах, связывает ном номера.
4. После этого Пользователь задает математические формулы для расчеты материалов (в текстовом файле с именем, который является кодом спецификации) и из реестра спецификаций вызывает спецфункцию "Задать формулы расчета". После этого формулы берутся из .txt файла, проверяются на синтаксис Б-5.

5.Задает количество переменных в формулах, наименования параметров, допустимые пределы.
6. Формулы переписываются в отдельную таблицу, где и хранятся.


Затем, если ему необходимо изделие данного типа, опеределенных размеров, которого еще нет, он нажимает на кнопочку "создать". Вот она-то как раз и выполняет те 4ре дейтсвия, которые я описал.
Для этого Спецфункция открывает таблицу с формулами, считает расход материалов, копирует номенклатурные номера, спецификацию, задавая лишь новые значения, названия и параметры.
Перед созданием идет еще и проверка на то, а не создано ли изделие таких размеров до этого.

Вот, наверное, вся задача. Хотя мог чего-то и забыть. Это сейчас есть, работает не самым лучшим образом (код можно оптимизировать и оптимизировать, да еще вдобавок он без классов), но уже работает.

З.Ы. Разумеется есть и действия как удалить формулы, проверить формулы, сделав тестовый расчет изделия в .txt файл, все сразу с ходу не опишу.
Изменено: Саак Шахламджян - 22.08.2008 19:09:26
Вопрос по блокировке записей.
 
Цитата
nordk пишет:
Тогда бы весь БЭСТ был покрыт семафорами.
InitList четко отслеживает уникальность по индексному ключу и перед записью не дает вам делать 2 одинаковые записи даже при работе 100 пользователей а не то что двух :))

С огромным удовльствием готов от них отказаться. Тогда подскажите как быть?
Действия:
1. Создаем Н\Н в sclad\Mlabel
2. Создаем Н\Н в zapas\Mlabel
3. Создаем Спецификацию на 2.
( Таблицы BOM, BOM_INV, BOP_OP)
4. Создаем сзвязь между 2 и 1( или тоже самое, что и Изменяем2).
Условие1:
Либо все 4ре действия выполняются, либо не выполняется ни одно из них.
Условие2:
Исключение одновременного выполнения действий 1-4 на разных машинах.
Изменено: Саак Шахламджян - 22.08.2008 18:07:44
Вопрос по блокировке записей.
 
Есть спецфункция, создающая автоматически по запросу пользователя:
Номенклатурную единицу в отделе продаж, Номенклатурную единицу в производстве, спецификацию на неё и задаёт связь между двумя Н\Н. Н\Нра и код спецификации присваивается следующий по списку. В такой ситуации если 2 пользователя будут работать с этой спец-ей может получиться один и тот же номер (у чего-либо).
Здесь как раз было бы неплохо использовать семафор, сигнализирующий 2му пользователю о работе со спецфункцией.
(Вариант проверить перед записью существование номера мне кажется неподходящим)
Проблема с индексом., У Mlabel в SCLAD есть индекс TAG_RAZMER с ним проблема.
 
Цитата
nordk пишет:
Начните с переиндексации, потом убедитесь что индекс есть в таблице, затем поиск делауте через UPPER() - работает 100%


Угу, поставил UPPER все работает!!! Спасибо.
(Индексацию делал)
Проблема с индексом., У Mlabel в SCLAD есть индекс TAG_RAZMER с ним проблема.
 
В Mlabel торговли (\SCLAD) есть индекс TAG_RAZMER , UPPER(STATUS+RAZMER).
Поиском по нему не находится.
Например ищу строку:
" "+"100x100x100". Не находит.
Даже не работает такое:
Код
Goto 250//В отладчике поля 250й записи видны
stemp:=MLaBEL->STATUS+MLABEL->RAZMER
//Присвоилось " 100x100              "-26 символов.
DbPush("MLABEL","TAG_RAZMER","",{"UPPER(STATUS+RAZMER)",stemp,stemp})


После того как ставлю скоб - пусто. Устал биться. В чем проблема, подскажите, пожалуйста.
Изменено: Саак Шахламджян - 22.08.2008 11:46:42
Написание ТЗ.
 
На своём предприятии столкнулся с такой проблемой:
Заказчик : - Надо написать программу.
Сис админ: - Какую, для чего?
З: - Чтобы производство учитывалось.
С: - А что нужно учитывать?
З: - Ну, чтобы всё работало!!!

Наверняка, с таким сталкиваются повсеместно. Выход - написание документов, в которых указано, что должно быть реализовано, в т.ч. и ТЗ. Честно говоря уже давно таким не занимался. Кто и как документально согласовывает с заказчиком, то, что ему нужно, чтобы потом не быть "крайним". Конкретно при работе с внедрением БЕСТ в производство.
Уверен, что целиком ТЗ детального как такового нет, не существует, но все же как-то подтверждает З чего он хочет. Как поступать, чем руководствоваться при написании таких документов, м\б, что-нибудь почитать?
Изменено: Саак Шахламджян - 21.08.2008 10:52:15
Требуется работа с EXEL файлами из Б-5
 
Цитата
Саак Шахламджян пишет:
Пример на старом форуме нашёл ( Считать данные из Excel'я ), но не получается даже "запустить" Exel :(
На oApp := CreateObject( "Excel.Application" ) ругань, что нет такой функции, явно упускаю что-то важное и простое из виду...

Вопрос снят, нашёл пример для Б-5 (CreateObject в Б5).
Думается, вопросов будет больше по тому самому скриптовому языку VB (да и вообще по классу Excel.Application), там чистый VB? Можно, в принципе уже начинать искать описание синтаксиса этого языка и пользоваться ими или лучше все же дергать куски из примеров, приведенных на форумах?
Изменено: Саак Шахламджян - 21.08.2008 01:16:43
Требуется работа с EXEL файлами из Б-5
 
Пример на старом форуме нашёл (Считать данные из Excel'я), но не получается даже "запустить" Exel :(
На oApp := CreateObject( "Excel.Application" ) ругань, что нет такой функции, явно упускаю что-то важное и простое из виду...
Требуется работа с EXEL файлами из Б-5
 
Цитата
nordk пишет:
Ну да - тогда посмотрите как мы открываем и работаем с Exel на старом форуме есть пример.Потом по образцу и подобию трансформируйте макросы Excel в харбор...Когда непонятно что вернет та или иная запись ее можно пробовать в отладчике в командном окне - если не отрабатывает (некорректен синтаксис и т.п., то будет писать что не знаю такой объект - что-то типа)и еще для плагина не забудьте подключить excel.ch

Спасибо! Буду ковырять!
Страницы: Пред. 1 ... 14 15 16 17 18 19 20 21 22 23 24 След.