powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вывод номенклатурного номера
11 сообщений из 11, страница 1 из 1
Вывод номенклатурного номера
    #32463186
_Mikle_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица около 4000 записей. Каждому чертежу в ней соответствует семизначный номенклатурный номер. И на каком-то чертеже прога выводит сообщение об ошибке. Как мне узнать, на каком номенклатурном произошел затык??
Можно ли что-то типа

Код: plaintext
On error wait window  "Номенклатурный номер = " +nnom


NNOM - переменная символьная, в которой хранится номенклатурный номер.
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32463227
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И на каком-то чертеже прога выводит сообщение об ошибке

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

MessageBox('Ошибка при вводе номенклатуры ' + MyTab.nNom)

Лично мне представляется неправильным делать универсальный обработчик ошибки. Ты же выполняешь действия в какой-то форме. Вот в этой форме и ставь контроль на нужный объект (TextBox.Valid(), Click на кнопке "Сохранить" и т.п.)
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32463283
_Mikle_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if prte1#'*'
* Топливо считается как процент от зарплаты
TP=ROUND(ZO*TOPL1,3)
else
....
endif
Вот эту переменую он у меня и теряет. Но не всегда, а только 1 раз. И MessageBox() сюда не воткнуть.
Эта прога вызывается при нажатии кнопки "Обновить". Т.е. можно обрабатывать Click на кнопке и туда MessageBox() ?
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32463683
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. ты "потерял" переменную и хочешь посмотреть где? Так для этого существует отладчик (Debugger).

А потеря переменной связана, как правило, с областью видимости. Если область видимости не объявлена явно, то любая созданная в программе переменная имеет область видимости PRIVATE.

Типичная ошибка выглядит примерно так:

Procedure Prog1
MyVar = 1
?MyVar
do Prog2
?MyVar
return

Procedure Prog2
MyVar=2
return

Здесь произошло следующее:

-) На команде MyVar = 1 FoxPro определил, что переменной с таким именем раньше не существовало. Создал новую переменную с областью видимости PRIVATE и присвоил ей значение 1

-) Внутри процедуры Prog2 на команде MyVar=2 FoxPro определил, что переменная MyVar уже существует и имеет область видимости Private, т.е. в данном случае "видна" из процедуры Prog2. Поэтому, вместо создания новой переменной была использована ранее существовавшая переменная MyVar и ей изменили значение

-) После возврата в процедуру Prog1 оказалось, что значение переменной MyVar уже изменено.

Поэтому, чтобы избежать подобных недоразумений обязательно явно указывай область видимости переменных. В приведенном примере проблему можно решить если написать:

Procedure Prog2
LOCAL MyVar
MyVar=2
return
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32463945
_Mikle_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта переменная больше нигде не участвует, хотя подпрограммы есть. Просто скорее всего кто-то из пользователей попортил базу и стер какую-то номенклатуру из справочника. Мне надо узнать какую.
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32464528
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, что-то ты не договариваешь.

Откуда вообще берется эта переменная?
Каким образом факт наличия (отстуствия) записи может повлиять на наличие переменной? Заметь, не на содержание, а на ее существование!

Т.е. где-то у тебя ошибка в логике программы.
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32464542
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще иногда может помочь
try...catch...finally
- естественно, если эта конструкция есть в используемой версии VFP.

Но только в случае, когда программных логических ошибок точно уже нет, и может возникнуть только незапланированная ошибка по аппаратным причинам или по причинам нарушения целостности данных.
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32464829
_Mikle_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую объяснить точнее:

Есть справочник сырья, справочник номенклатуры. Из справочника номенклатуры по определенному условию выбирается нное количество записей и заносится в TABLE1, из которой запоминаем ном.номер и ищем в справочнике сырья. Так вот, этот ном.номер должен быть в справочнике сырья, а кокого-то нет. Мне надо узнать какого.
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32464901
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку TABLE1 - часть справочника номенклатуры, то, по большому счету, TABLE1 нас не интересует. Т.е. так: есть два справочника и потерялось соответствие между ними. А поле для связи называется "номенклатурный номер"... Тогда возьми справочник номенклатур, установи SET RELATION по полю "номенклатурный номер" со справочником сырья и дай для начала BROWSE FOR EOF("<сырье>") - вот оно и покажет записи, которые есть в номенклатурах, но нет в сырье...
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32465023
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
SELECT * FROM справочник_номенклатуры
WHERE ном_номер NOT IN (SELECT ном_номер FROM справочник_сырья)

Получишь ВСЕ записи из справочника номенклатуры на которые нет ссылки в справочнике сырья.

Правда, при большом количестве записей такой запрос будет выполняться достаточно долго. Если есть индекс по ном_номеру в таблице справочник_сырья, то поиск можно ускорить примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE CURSOR NoNomer (ном_номер C( 10 ))
SELECT справочник_номенклатуры
SCAN FOR SEEK(ном_номер, "справочник_сырья" , "TAG ном_номер" )=.F.
     INSERT INTO NoNomer VALUES (ном_номер)
ENDSCAN

SELECT NoNomer
BROWSE NOWAIT
...
Рейтинг: 0 / 0
Вывод номенклатурного номера
    #32466341
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как логическое продолжение второго варианта :)
SELECT * FROM справочник_номенклатуры WHERE !SEEK(справочник_номенклатуры.ном_номер,"справочник_сырья","TAG ном_номер")
WBR, Igor
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вывод номенклатурного номера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]