Java скрипт - связь спецификации накладной и плана снабжения

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение zna »

Serg, 3 замечания, коротко:
1. Перед добавлением новой связи objacct надо проверить, а не существует ли уже она:
Objacct.toIshod(тут параметры);
if (Objacct.getFirst() != 0)
{
Тут и создаёте Objacct
}

2. При поиске связей и создании удобно использовать объекты- так проще и красивей. Объект- запись в mnplan и katsopr (надо спозиционироваться на нужных записях), см. метод FindSvyaz на скрине.

3. Спецификации связей не создавал (для моих задач хватает и заголовков)- заморочно, но при необходимости сделал бы так:
3.1. Вручную создаёшь спецификацию связи;
3.2. Смотришь в журнале, что система создала: видишь две записи- 1-я во 2-й панели, 2-я - в 3-й пенели;
3.3. Повторяешь эти действия в JS. Думаю, полезно будет замечание 2.
Serg7907
Постоянный обитатель
Сообщения: 127
Зарегистрирован: 06 июл 2007, 18:25
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение Serg7907 »

Спасибо! Учту ваши замечания. По п.3: я выбираю объект "Спецификация таблицы связей" и выбираю для него метод "Создать новую связь" (кроме использования метода, я к сожалению не знаю других способов создания записей в таблице). А у него 4 параметра, и какие значения выбирать, не понятно(((
Создаю вручную спецификацию связи, разница в записях для 2-й и 3-й панели в следующих полях:
TYPENORM: 2 панель - значение 0; 3 панель - 1
TYPEED: 0; 1
TYPEOBJ: 0; 31
COBJECT: 0; ссылка на план
CSPOBJACC:0; ссылка на OBJACC
Serg7907
Постоянный обитатель
Сообщения: 127
Зарегистрирован: 06 июл 2007, 18:25
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение Serg7907 »

Ребят, вот текст скрипта.

MnPlan.setPosition(CurPlan());
var cTmp;
SpMnPlan.toMnPlan(MnPlan.nrecmnplan);
for(SpMnPlan.getFirst(); ResultOfNavigation; SpMnPlan.getNext())
{
cTmp = SpMnPlan.cizd;
KatMc.setPosition(cTmp);
SpSopr.toMC(101, KatMc.nrecmc);
for(SpSopr.getFirst(); ResultOfNavigation; SpSopr.getNext());
{KatSopr.setPosition(SpSopr.csopr);
ObjAcc.InsertObjAcc(44,KatSopr.nreckatsopr,29,MnPlan.nrecmnplan);
ObjAcc.rewrite();

SpObjAcc.CreateSpObjAcc(ObjAcc.nrecobjacc,45, SpSopr.nrecspsopr, toSpSopr, SpMnPl.nrec);// здесь все корректно работает, вытаскивает в среднюю панель МЦ из накладной
SpObjAcc.CreateSpObjAcc(MnPlan.nrecmnplan,31, SpMnPlan.nrec, toSpPlanSnab, SpMnPl.nrec);// не работает, а нижнюю панель не вытаскивает спецификацию из плана
SpObjAcc.rewrite();
}
}

Суть проблемы: в плане снабжения на вкладке "Входящие документы" вытаскивается в верхнюю панель документ, вытаскивается в среднюю панель позиции входящего документа, а в нижнюю панель НЕ вытаскиваются позиции текущего документа (плана снабжения).
Вот неработающая строка из скрипта: SpObjAcc.CreateSpObjAcc(MnPlan.nrecmnplan,31, SpMnPlan.nrec, toSpPlanSnab, SpMnPl.nrec)
CreateSpObjAcc - это метод "Создать новую связь (с указанием заголовка)" для объекта SpObjAcc - Спецификация таблицы связей.

Как вытащить корректно в нижнюю панель спецификацию плана снабжения?
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение Zver »

SpObjAcc.CreateSpObjAcc(MnPlan.nrecmnplan,31, SpMnPlan.nrec, toSpPlanSnab, SpMnPl.nrec)
Не могли бы Вы привести описание метода SpObjAcc.CreateSpObjAcc? Там, если не изменяет память, 4 а не 5 параметров.

Навскидку, подозрительным кажется параметр 31, возможно стоит использовать константу аналогичную toSpPlanSnab, возможно toMnfZakaz
Строка из файла:
toMnfZakaz = 17; // потребности /пр. заказ /ObjAcct.TypeObj
Программист-самоучка
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение zna »

Zver писал(а):
SpObjAcc.CreateSpObjAcc(MnPlan.nrecmnplan,31, SpMnPlan.nrec, toSpPlanSnab, SpMnPl.nrec)
Не могли бы Вы привести описание метода SpObjAcc.CreateSpObjAcc? Там, если не изменяет память, 4 а не 5 параметров.

Навскидку, подозрительным кажется параметр 31, возможно стоит использовать константу аналогичную toSpPlanSnab, возможно toMnfZakaz
Строка из файла:
toMnfZakaz = 17; // потребности /пр. заказ /ObjAcct.TypeObj
Для объекта SpObjAcc есть несколько методов: "Создать новую связь" - 4 параметра и "Создать новую связь (с указанием заголовка)"- 5 параметров. Автор выбрал 2-й метод- это правильно. Хотя можно попробовать и "Создать новую связь (используя объекты)" - полагаю, что создаст запись во 2-й панели.
Похоже, чтобы добавить связь в 3-ю, нижнюю панель, надо создать новую запись в SpObjAcc и потом модифицировать её так, чтобы она попала в 3-ю панель. Как модифицировать-см. п.3 в моём предыдущем посте.

Только зачем эти связи по спецификациям, так и не пойму. Мной сделана масса задач на JS, всегда обходился связями по заголовкам.
Serg7907
Постоянный обитатель
Сообщения: 127
Зарегистрирован: 06 июл 2007, 18:25
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение Serg7907 »

Итак, что же получается. Использую метод Создать новую связь (с указанием заголовка) -там 5 параметров.
Когда выполняется скрипт с таким блоком:

ObjAcc.InsertObjAcc(44,KatSopr.nreckatsopr,29,MnPlan.nrecmnplan);
ObjAcc.rewrite();
SpObjAcc.CreateSpObjAcc(ObjAcc.nrecobjacc,45, SpSopr.nrecspsopr, toSpSopr, SpMnPl.nrec);
SpObjAcc.rewrite();

Корректно заполняются верхняя панель (подтягиваем накладную) и средняя панель (спецификация накладной)
http://114.r.photoshare.ru/01141/00ae35 ... e53a66.jpg
Смотрю журнализацию, вижу, что создается запись в ObjAcc и 2 записи в SpObjAcc, модифицируется 1 запись в ObjAcc и 1 запись в SpObjAcc
http://114.r.photoshare.ru/01141/00ae35 ... c76f9f.jpg
Для записи в SpObjAcc создаются такие значения:
http://114.r.photoshare.ru/01141/00ae35 ... 427d29.jpg

Теперь хочу модифицировать вторую строку в SpObjAcc, добавляю в скрипт строку:
SpObjAcc.CreateSpObjAcc(ObjAcc.nrecobjacc,31, toSpPlanSnab,SpMnPlan.nrec, SpMnPl.nrec); запись не модифицируется.
Если создавать вручную эту запись, вот такие значения заполняются для записи в SpObjAcc:
http://114.r.photoshare.ru/01141/00ae35 ... 46aca2.jpg
Самое главное, заполняются поля TYPEOBJ=31 и COBJECT, равное nrec таблицы SPMNPL (спецификация плана). Как модифицировать запись так, чтоб заполнились эти поля. Я так понимаю, когда они заполнятся, запись должна попасть в нижнюю панель.
Моя конструкция SpObjAcc.CreateSpObjAcc(ObjAcc.nrecobjacc,31, toSpPlanSnab,SpMnPlan.nrec, SpMnPl.nrec) запись не модифицирует, хотя вроде все ссылки в конструкции есть.
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение zna »

Serg7907 писал(а): ...
Теперь хочу модифицировать вторую строку в SpObjAcc, добавляю в скрипт строку:
SpObjAcc.CreateSpObjAcc(ObjAcc.nrecobjacc,31, toSpPlanSnab,SpMnPlan.nrec, SpMnPl.nrec); запись не модифицируется.
...
Этой строкой Вы не модифицируете, а создаёте новую строку. Модификация же делается так: для текущей позиции спецификации связи: SpObjAcc.PoleN := 555; SpObjAcct.rewrite(). Похоже, что надо для связи в 3-й панели делать ссылку на связь во 2-й панели, поищите поле типа SpObjAcc.cSpObjAcc.
Serg7907
Постоянный обитатель
Сообщения: 127
Зарегистрирован: 06 июл 2007, 18:25
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение Serg7907 »

В таблице SpObjAcc создаются 2 строки, одна из них модифицируется - это запись для средней панели (спецификация накладной)
Чтобы модифицировать вторую запись, я так понимаю, нужно воспользоваться конструкцией SpObjAcc.PoleN := 555. Можно ли в двух словах объяснить про эту конструкцию, и как она сможет модифицировать нужные мне поля?
Насчет поля SpObjAcc.cSpObjAcc-действительно ссылка там есть.
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение zna »

Вы создали связь во 2-й панели. Нашли её nrec. Далее создали ещё одну запись, которую хотите в 3-ю панель поместить. Полагаю, что Вам надо для этого что-то вроде:

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

SpObjAcc.cSpObjAcc = nrec;
SpObjAcc.rewrite();
Serg7907
Постоянный обитатель
Сообщения: 127
Зарегистрирован: 06 июл 2007, 18:25
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение Serg7907 »

Спасибо, так сделал, запись модифицировалась. Но по-прежнему, в 3 панель ничего не попало. Я полагаю из-за того, что нужно еще модифицировать поле cobject в таблице SpObjAcc (это ссылка на nrec записи в таблице SPMNPL "Спецификация плана") - сейчас это поле пустое, и поле typeobj в таблице SpObjAcc - поставить значение 31.
Как изменить значение поля typeobj, я знаю - для объекта SpObjAcc есть поле документа "Тип связи", его явно зададим "31".
А вот как заполнить поле cobject - это вопрос. Для объекта SpObjAcc ничего из предложенных полей не нашел. Может Вы подскажите?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение edward_K »

чтобы не гадать - getifccurrentfieldname на нижней панели.
Serg7907
Постоянный обитатель
Сообщения: 127
Зарегистрирован: 06 июл 2007, 18:25
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение Serg7907 »

edward_K писал(а):чтобы не гадать - getifccurrentfieldname на нижней панели.
Наверно, не так меня поняли. Есть таблица SPOBJACC, в ней поле cobject, которое мне нужно модифицировать.
А есть объект "Спецификация таблицы связей" на вкладке "Свойства" в настройке алгоритма. И для этого объекта настраиваются поля документа. Так вот, среди них я не нашел такого поля, которое бы было равно значению cobject таблицы SPOBJACC.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение edward_K »

я могу вам привести вам вьюху фейса. К сожалению он там встроенный и значение параметров вам так просто не вычислить - тока конфигуратором. Наскока помню в зависимости от режима там подымаются разные bounds. Но искать как называется влом. Лет 5 назад я вроде добавлял vip алгоритмом.
Serg7907
Постоянный обитатель
Сообщения: 127
Зарегистрирован: 06 июл 2007, 18:25
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение Serg7907 »

edward_K писал(а):я могу вам привести вам вьюху фейса. К сожалению он там встроенный и значение параметров вам так просто не вычислить - тока конфигуратором. Наскока помню в зависимости от режима там подымаются разные bounds. Но искать как называется влом. Лет 5 назад я вроде добавлял vip алгоритмом.
Будьте добры ,если можно скиньте на электронку erd_vit@mail.ru
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java скрипт - связь спецификации накладной и плана снабж

Сообщение zna »

Serg7907 писал(а):... Так вот, среди них я не нашел такого поля, которое бы было равно значению cobject таблицы SPOBJACC.
Пробуйте свойства SpObjAcc.Ссылка на позицию спецификации (откуда) или SpObjAcc.Ссылка на позицию спецификации (куда).
Ответить