• Обсуждения на сайте Альта-Софт

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

вопросы по работе с программным обеспечением

Модераторы: Renat, Gala, alta_olg, expert, Lemur

Ответить
nagoran
Новый участник
Сообщения: 7
На форуме: c 26 май 2014
Сказал: 2 ед.
Получил: 0 ед.

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

Сообщение nagoran »

Добро времени суток.
1-й вопрос такой: как удалять блоки в декларациях? Например, в ЭД-2 Карнет ТИР (транспортный) создаются блоки (граф товарная партия) где каждый блок начинается с № товара. Как в коде скрипта, к примеру, удалить все блоки после 1-го товара.
2-й вопрос правильно ли обращаться так к блоку 2-го товара (ЭД-2 Карнет ТИР(транспортный)), например, к сведению о грузовых местах полю Код:
__Goods_PlacesInfo_PackingCode:=....
rvs
Активный участник
Сообщения: 74
На форуме: c 27 апр 2010
Сказал: 1 ед.
Получил: 22 ед.

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

Сообщение 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
Следующие пользователи поблагодарили rvs за это собщение: nagoran
nagoran
Новый участник
Сообщения: 7
На форуме: c 26 май 2014
Сказал: 2 ед.
Получил: 0 ед.

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

Сообщение nagoran »

так этот код я и пытаюсь разобрать, но я не могу ухватиться за принцип обращения к полям, то он проходит через "__", то через DocX.Set/GetField()
за ответы спасибо, но он ругается на Doc.NumBlock
хотя покрутил код и в итоге ошибка исчезла, но ничего не удалилось
rvs
Активный участник
Сообщения: 74
На форуме: c 27 апр 2010
Сказал: 1 ед.
Получил: 22 ед.

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

Сообщение rvs »

Вы свой код здесь приведите полностью, а то так непонятно из-за чего у вас ошибка.
И какую ошибку выдает?
nagoran
Новый участник
Сообщения: 7
На форуме: c 26 май 2014
Сказал: 2 ед.
Получил: 0 ед.

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

Сообщение 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."
а в альте действительно не предусмотрено хоть какого-нибудь модуля для дебага кода или он куда-то запрятан?
rvs
Активный участник
Сообщения: 74
На форуме: c 27 апр 2010
Сказал: 1 ед.
Получил: 22 ед.

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

Сообщение rvs »

Ошиблись в коде, не NBlock, а NumBlock, и документ должен быть один и тот же, а то смешали Doc1 и Doc2

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

for j:=Doc2.NumBlock('\\TIR_Shipment\1\Goods\') downto 2 do
  Doc2.DeleteBlock('\\TIR_Shipment\1\Goods\' + IntToStr(j));
nagoran
Новый участник
Сообщения: 7
На форуме: c 26 май 2014
Сказал: 2 ед.
Получил: 0 ед.

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

Сообщение nagoran »

я думал что если обращаться к одному доку, то он либо не все удалится (ведь получается, что уменьшается число записей в процессе цикла), либо, еще что-то нехорошее.
спасибо Вам за помощь.
и, если можно, последний вопрос:
можно ли в альте перед созданием того же ТИРа, прописать всплытие диалогового окна с "галочкой". переменной типа boolean (если 1, то так заполнять, если 0, то другой код соответственно)
rvs
Активный участник
Сообщения: 74
На форуме: c 27 апр 2010
Сказал: 1 ед.
Получил: 22 ед.

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

Сообщение rvs »

Пропишите свой скрипт в файле Alta\wgtduser.dat (если файла нет, надо создать)
и он будет работать вместо стандартного
nagoran
Новый участник
Сообщения: 7
На форуме: c 26 май 2014
Сказал: 2 ед.
Получил: 0 ед.

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

Сообщение nagoran »

я имею ввиду, что при нажатии на создание ЭД-2 Карнет ТИР (транспортный) всплывало окно с выбором (к примеру: выбор стандартное или нестандартное заполнение), и как прописать всплытие этого диалогового окна в коде скрипта.
rvs
Активный участник
Сообщения: 74
На форуме: c 27 апр 2010
Сказал: 1 ед.
Получил: 22 ед.

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

Сообщение rvs »

Можно прописать вопрос прямо в скрипте

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

if MessageDlg('Использовать свой скрипт?', mtConfirmation, [mbYes, mbNo], 0)  = mrYes then 
  //свой код
else 
  //стандартный код
Следующие пользователи поблагодарили rvs за это собщение: nagoran
Ответить