Страница 1 из 1

Вопрос по коду

Добавлено: Ср май 28, 2014 12:24
nagoran
Добро времени суток.
1-й вопрос такой: как удалять блоки в декларациях? Например, в ЭД-2 Карнет ТИР (транспортный) создаются блоки (граф товарная партия) где каждый блок начинается с № товара. Как в коде скрипта, к примеру, удалить все блоки после 1-го товара.
2-й вопрос правильно ли обращаться так к блоку 2-го товара (ЭД-2 Карнет ТИР(транспортный)), например, к сведению о грузовых местах полю Код:
__Goods_PlacesInfo_PackingCode:=....

Re: Вопрос по коду

Добавлено: Ср май 28, 2014 14:47
rvs
Конкретно в ЭД-2 Карнет ТИР (транспортный) удалить все товары кроме первого в первой товарной партии можно примерно так:
for j:=Doc.NumBlock('\\TIR_Shipment\1\Goods\') downto 2 do
Doc.DeleteBlock('\\TIR_Shipment\1\Goods\' + IntToStr(j));

По второму вопросу 1я товарная партия (TIR_Shipment), 2й товар(Goods), 1я запись о грузовых местах (PlacesInfo), записать поле Код (PackingCode):
Doc.SetFieldEx('\\TIR_Shipment\1\Goods\2\PlacesInfo\1\PackingCode', '1A');

Если нужно получить значение поля, то:
S := Doc.GetFieldEx('\\TIR_Shipment\1\Goods\2\PlacesInfo\1\PackingCode');

Можно посмотреть образцы скриптов в файле DATA\WGTDINFO.DAT

Re: Вопрос по коду

Добавлено: Ср май 28, 2014 15:07
nagoran
так этот код я и пытаюсь разобрать, но я не могу ухватиться за принцип обращения к полям, то он проходит через "__", то через DocX.Set/GetField()
за ответы спасибо, но он ругается на Doc.NumBlock
хотя покрутил код и в итоге ошибка исчезла, но ничего не удалилось

Re: Вопрос по коду

Добавлено: Ср май 28, 2014 15:43
rvs
Вы свой код здесь приведите полностью, а то так непонятно из-за чего у вас ошибка.
И какую ошибку выдает?

Re: Вопрос по коду

Добавлено: Ср май 28, 2014 15:55
nagoran
код стандартный из wgtdinfo [E3TIR<-GTD.Script], в конце перед end. я прописываю

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

  for j:=Doc1.NBlock('\\TIR_Shipment\1\Goods\') downto 2 do
          Doc2.DeleteBlock('\\TIR_Shipment\1\Goods\' + IntToStr(j));
весьма странно: после того как я первый раз прописал и сохранил, он ругался что не указан к какому доку обращаться Doc1 или Doc2. Я исправил это и все запустилось без ошибок (правда без удаления каких-либо строк), но теперь, после перезапуска альты уже пишет "Invalid variant type conversion."
а в альте действительно не предусмотрено хоть какого-нибудь модуля для дебага кода или он куда-то запрятан?

Re: Вопрос по коду

Добавлено: Ср май 28, 2014 16:15
rvs
Ошиблись в коде, не NBlock, а NumBlock, и документ должен быть один и тот же, а то смешали Doc1 и Doc2

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

for j:=Doc2.NumBlock('\\TIR_Shipment\1\Goods\') downto 2 do
  Doc2.DeleteBlock('\\TIR_Shipment\1\Goods\' + IntToStr(j));

Re: Вопрос по коду

Добавлено: Ср май 28, 2014 16:26
nagoran
я думал что если обращаться к одному доку, то он либо не все удалится (ведь получается, что уменьшается число записей в процессе цикла), либо, еще что-то нехорошее.
спасибо Вам за помощь.
и, если можно, последний вопрос:
можно ли в альте перед созданием того же ТИРа, прописать всплытие диалогового окна с "галочкой". переменной типа boolean (если 1, то так заполнять, если 0, то другой код соответственно)

Re: Вопрос по коду

Добавлено: Ср май 28, 2014 16:42
rvs
Пропишите свой скрипт в файле Alta\wgtduser.dat (если файла нет, надо создать)
и он будет работать вместо стандартного

Re: Вопрос по коду

Добавлено: Ср май 28, 2014 16:47
nagoran
я имею ввиду, что при нажатии на создание ЭД-2 Карнет ТИР (транспортный) всплывало окно с выбором (к примеру: выбор стандартное или нестандартное заполнение), и как прописать всплытие этого диалогового окна в коде скрипта.

Re: Вопрос по коду

Добавлено: Чт май 29, 2014 09:38
rvs
Можно прописать вопрос прямо в скрипте

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

if MessageDlg('Использовать свой скрипт?', mtConfirmation, [mbYes, mbNo], 0)  = mrYes then 
  //свой код
else 
  //стандартный код