Тема: Генератор обозначений

Добрый день!
Пытаются настроить работу генератора обозначений. При показе формы запускается функция GeneratorGetValue, получая из журнала свободное или новое значение.
Далее при нажатии на кнопку полученное значение должно записываться в журнал (метод GeneratorAddJournal) и использоваться (метод GeneratorUseValue), то есть быть уже не в состоянии "свободен".
Возникли проблемы:
1. Методы GeneratorGetValue и GeneratorAddJournal не отрабатываются нужным образом, то есть при свободных номерах система создает новый номер (при этом может даже дублировать существующий номер)
2. Метод GeneratorUseValue не снимает галочку с зарегистрированного обозначения, что оно свободно.

Код использования брал из Ваших примеров. В чем может быть дело?

Re: Генератор обозначений

Настройки самого генератор покажите. Должно быть выбор из журнала, чтобы по вашим алгоритмам работал.

(изменено: vitaly576, 5 марта 2022 09:26:49)

Re: Генератор обозначений

Генератор обозначений
В каких случаях какие настройки должны применяться?

Re: Генератор обозначений

Тип использования должен быть Выбор из журнала.

Тогда можно заполнить журнал своими значениями свободными (чтобы не завадать руками можно использовать свой алгоритм через АПИ:
https://help.technologics.ru/7.9/TCSAPI … rnal_9.htm
https://help.technologics.ru/7.9/TCSAPI … alue_9.htm.

Далее система будет использовать их сама либо можно использовать через вызов:
https://help.technologics.ru/7.9/TCSAPI … alue_9.htm
https://help.technologics.ru/7.9/TCSAPI … alue_9.htm

Описание настроек https://help.technologics.ru/7.9/TCSHelp/_56.htm

(изменено: vitaly576, 5 марта 2022 12:50:41)

Re: Генератор обозначений

Спасибо.

Re: Генератор обозначений

Новое - просто инкрементирует генератор.
свободное - ищет свободный номер, и если не нашла - использует генератор (чтобы исключить дырки в нумерации).

все это совместно с %NUMBER% работает.

Журнал - просто ищется свободное значение в журнале.

Re: Генератор обозначений

Честно сказать, не понимаю почему не правильно был выбран тип "Использовать свободное или новое"?
По логике ведь все правильно:
1. при открытии формы - посмотреть в журнале свободный номер или если его нет, то создать новый номер.
2. при нажатии на кнопку - добавить сгенерированный номер в журнал и присвоить ему свойство "Занят"

Re: Генератор обозначений

Да вроде так и работает.
Но если вы журнал сами заполняете, то правильнее тип соответствующий поставить.
А если нет - то можно проще работать (без журнала).

Re: Генератор обозначений

Может тут просто недопонимание?

Вам работа с журналом нужно только если вы хотите САМИ генерировать обозначения, и наши алгоритмы вам никак не подходят.

Если вы полльзутесь нашими, то надо просто получить значение генератора и сказать что вы его использовали (если это в АПИ делаете, в системе автоматически работает). Все! с журналом работа тут не нужна.
Или в АПИ можно использовать вот такой метод тогда (если вы просто создаете записи используя настройки справочника) - https://help.technologics.ru/7.9/TCSAPI … sEx2_9.htm

Re: Генератор обозначений

Вот как мы используем настроенный в программе генератор (из расширения создание производственного заказа)

    On Error Resume Next
    Err.Clear
    TCSApp.Manufacturing.ProductionBOM.CancelChanges
    TCSApp.Manufacturing.ProductionBOM.CreateNew
    TCSApp.Manufacturing.ProductionBOM.p_NAME.AsString = Form.c_edName.Text
    TCSApp.Manufacturing.ProductionBOM.p_REM.AsString = Form.c_edRem.Text
    TCSApp.Manufacturing.ProductionBOM.p_RELEASE_DATE.AsDate = Form.c_edDataE.Date
    if Form.c_edDataS.Date<>0 then  TCSApp.Manufacturing.ProductionBOM.p_LAUNCH_DATE.AsDate = Form.c_edDataS.Date
    Call TCSApp.Manufacturing.ProductionBOM.SaveChangesEx2( Array( "Default" ), Null )
    TCSApp.Manufacturing.ProductionBOM.CancelChanges
    If Err Then
      Call TCSApp.ShowDetailedErrorMessage( "Ошибка при создании ПСп:" & Form.c_edPsp.Text, Err.Description )
      Exit Function
    End If

Re: Генератор обозначений

Этот код я видел на форуме.
Удалил метод GeneratorAddJournal - заработало, теперь для значения устанавливается признак "занят".
Но! Все равно система присваивает всегда новое значения, а не ищет свободное.
В настройках разумеется стоит "Использовать свободное или новое".

Re: Генератор обозначений

В настройках разумеется стоит "Использовать свободное или новое".

Поставьте Выбор из журнала если вы сами журнал значениями заполняете. Тогда отключится наш алгоритм генереации.

Re: Генератор обозначений

Олег Зырянов пишет:

В настройках разумеется стоит "Использовать свободное или новое".

Поставьте Выбор из журнала если вы сами журнал значениями заполняете. Тогда отключится наш алгоритм генереации.

Нет, тут все правильно. Нужно, чтобы система сама генерировала значения.
Не понимаю, почему при свободных номерах добавляется новый номер.

Re: Генератор обозначений

А свободный номер сгенерирован нами?

Re: Генератор обозначений

Олег Зырянов пишет:

А свободный номер сгенерирован нами?

Да.

Re: Генератор обозначений

Киньте вид журнала тогда хоть (можно выгрузить данные)

Re: Генератор обозначений

Не понял, какой вид журнала Вас интересует?
Код получения записи в генераторе:

   if Form.c_CheckBoxGen.checked = true then
       call theApp.GeneratorGetValue("Обозначения ТП (сварка)", 0, False, Empty, Empty, valueId, valuegen)
      Form.c_Note.text = "Сварка" & valuegen
   else
      Form.c_Note.text = "Сварка"
   end if

Генератор обозначений
Может быть я ошибаюсь, но по-видимому не отрабатывается ключ MakeJournal у функции GeneratorGetValue. Согласно документации при False система должна получить следующее свободное значение.

Re: Генератор обозначений

Добрый день!

vitaly576 пишет:

1. Методы GeneratorGetValue и GeneratorAddJournal не отрабатываются нужным образом, то есть при свободных номерах система создает новый номер (при этом может даже дублировать существующий номер)
2. Метод GeneratorUseValue не снимает галочку с зарегистрированного обозначения, что оно свободно.

  Dim valueId, valuegen
'Получаем свободное значение или создаем новое. Новое значение блокируется на 5 минут, за это время его нужно использовать иначе оно станет свободным. 
'Если в журнале есть свободное значение созданное более 5 минут назад, то оно будет использовано.
  call theApp.GeneratorGetValue("Обозначения ТП (сварка)", 0, False, Empty, Null, valueId, valuegen)
'Используем значение (сбрасывается флаг "свободен")
  call theApp.GeneratorUseValue(valueId, valuegen, Empty, Empty, Empty)

(изменено: vitaly576, 10 марта 2022 12:01:13)

Re: Генератор обозначений

Виктор Бебякин пишет:

'Получаем свободное значение или создаем новое. Новое значение блокируется на 5 минут, за это время его нужно использовать иначе оно станет свободным.
'Если в журнале есть свободное значение созданное более 5 минут назад, то оно будет использовано.

Все встало на свои места. Про 5 минут нигде не было информации. Спасибо за уточнение!
А с какой целью сделано время 5 минут?

Re: Генератор обозначений

Еще есть вопрос. В журнале значений генератора есть поля Объект - тип и наименование.
Как им присвоить программно значения?

Re: Генератор обозначений

А с какой целью сделано время 5 минут?

Время на работу со значением генератора (время между взял значение и применил его). Пока зашито в коде.


В журнале значений генератора есть поля Объект - тип и наименование.
Как им присвоить программно значения?

тут не все так просто будет. Это должны быть объекты зарегистрированные в системе. В АПИ пока эта часть закрыта, где посмотреть тоже не подскажу даже. Скажите что вас интерисует, подскажем что написать (если есть такой объект). Но полностью он все равно через АПИ не заработает возможно.

Re: Генератор обозначений

Олег Зырянов пишет:

Скажите что вас интерисует, подскажем что написать (если есть такой объект).

Системные генераторы используем для регистрации технологических процессов.
Пока в раздумьях что туда лучше заносить: или номенклатуру на которую создан ТП, или документ в архиве.
В целом при создании ТП все эти данные можно получить (я имею ввиду ID, обозначение, наименование)

Re: Генератор обозначений

ObjectType: "Документ", ObjectId: Идентификатор документа
ObjectType: "Версия документа", ObjectId: Идентификатор версии документа
ObjectType: "Номенклатура", ObjectId: Идентификатор номенклатуры
ObjectType: "Технрология", ObjectId: Идентификатор версии техпроцесса
ObjectType: "Спецификация", ObjectId: Идентификатор версии спецификации.

Но это не проверялось ни разу, так как не все открыто в АПИ. Просто заготовка есть (пока не документированная).

Re: Генератор обозначений

Попробовал. Получается данные поля отображаются в виде текстовых строк и с ними потом работать нельзя.
Поле "Тип объекта" программно заполнилось (присвоили id номенклатуры), но пр этом "Наименование" номенклатуры не присвоилось (поле пустое).

Re: Генератор обозначений

Ну там есть нюансы, так как в АПИ не все есть. Если номеклатура где то в системе пройдет (через наши функции), то скорее всего наименование ее там появится. Но в любом случае ID вам ее там вроде доступно (для отчетов каких либо)