Страница 2 из 3

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 07:45
hope
Поддерживаю sim: такой функционал нужен, это прописано в законе, а не отсебятина.

Seybukan: Вариант с ТХО не очень подойдет, т.к. документы на отгрузку оформляют операторы, они не привязывают ТХО. Если заставить, то могут забыть... Нужно такой вариант, чтобы сама программа при стандартных действиях опреторов сообщила, а еще лучше запретила формировать накладные/или не давала списывать.
Вариант с JS лучше подойдет. Но я ни разу не делала этого - и не знаю с какого бока подойти. Может есть описание какое-нибудь, еще лучше пример?

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 10:30
Seybukan
Есть конечно же.
1. exe\ManufExt\SAMPLES\JSCRIPT\
2. Есть примеры подключенные в галку.
Планирование производства \ Операции \ Хранилище примеров JS
вот:
"Функция предназначена для автоматизированного выполнения импорта XML-файлов, содержащих типовые примеры использования в системе "ГАЛАКТИКА ERP" возможностей языка JavaScript."

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 10:42
Seybukan
Вот алгоритм с "похожей" задачей.
Только он работает, на сколько я понял, по балансу взаиморасчетов и из планового документа.
exe\ManufExt\SAMPLES\JSCRIPT\OrgBalance\PlanOrgBalance.xml

Загрузите пример через импорт XML - в редмихе там все написано.
Посмотрите - там все очпросто.

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 12:02
hope
В ридми написано:
"Импортируйте данный xml-файл в Галактику. Любой модуль планирования
(Планирование Пр-ва, Управление заказами, МТО)
меню Операции\Импорт данный из XML-файла."
А если этих модулей нет? Но есть модуль Обмен бизнес документами. Попробовала там загрузить, но там нужно настраивать настройки импорта, тип данных, параметры. Или их не обязательно настраивать?
Также пытаюсь разобраться как написать свой алгоритм на VIP.

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 12:54
hope
И еще вопрос: достаточно VIP-а для создания своего алгоритма, или обязательно нужен Atlantis?

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 14:45
Seybukan
Для написания алгоритма достаточно иметь VIP.

При загрузке скрипта надо конечно настроить:
1. Создать Типы данных: Алгоритм JavaScript, Алгоритм расчета (сист.№ = 52)
2. Параметры импорта обоих: Создавать новые объекты
3. Элементы обоих: Все
4. Параметры ТД обоих пометить все.
Сохраним.
Выбрать файл для загрузки и загрузить.
Результаты загрузятся в алгоритмы расчета производственных модулей.
Логистика есть наверное производственная? Там через алгоритм можно перейти и в алгоритм скрипта.

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 15:48
Seybukan
Вот XML 52 Алгоритма и Алгоритма скрипта.
Загружать как описал ранее.

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

<?xml version="1.0" encoding="windows-1251" ?> 
- <!-- Copyright ЗАО "Корпорация Галактика"
  --> 
- <Data_Root>
- <Descript ExpSet_Code="006" ExpSet_Name="Норе">
- <![CDATA[ 
  ]]> 
  </Descript>
- <Data>
- <Collection caption="Алгоритмы расчета (сист.№ = 52)" name="Data.AlgCalc_52" child_tags="Object">
- <Object name="Проверка суммы накладных по договору (95)" class_id="AlgCalc_52" id="27866022694355087">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="LastDateTime" value="12/08/2010 13:25:27" /> 
  <prop_value prop_name="Code" value="95" /> 
  <prop_value prop_name="Name" value="Проверка суммы накладных по договору" /> 
  <prop_value prop_name="wSysNum" value="52" /> 
  <prop_value prop_name="cGroup" rlt_class="MnfGroup" value="0" /> 
  <prop_value prop_name="FlagRun" value="1" /> 
  <prop_value prop_name="Comment" value="(MEMO)" /> 
  <prop_value prop_name="TypeSrc" value="3" /> 
  <prop_value prop_name="cDoc" rlt_class="" value="0" /> 
  <prop_value prop_name="DocFuncName" value="curSopr" /> 
  <prop_value prop_name="DocSpFuncName" value="" /> 
  <prop_value prop_name="cAlgJS" rlt_class="AlgJS" value="27866022694355088" /> 
  <prop_value prop_name="FlDebug" value="0" /> 
  <prop_value prop_name="VarTunes" value="0" /> 
  <prop_value prop_name="VarPosdelName" value="" /> 
  <prop_value prop_name="VarPositionName" value="" /> 
  <prop_value prop_name="VarSetValueName" value="" /> 
  <prop_value prop_name="VarBindingName" value="" /> 
  <prop_value prop_name="VarVisuaName" value="" /> 
  <prop_value prop_name="VarMessEndName" value="" /> 
  <prop_value prop_name="VarWhatVidName" value="" /> 
  <prop_value prop_name="VarnumVidName" value="" /> 
  <prop_value prop_name="VarRunIntName" value="" /> 
  <prop_value prop_name="VarErrorName" value="" /> 
  <prop_value prop_name="VarFlagRunName" value="" /> 
  <prop_value prop_name="VarTypeCpNrecName" value="" /> 
  <prop_value prop_name="VarSpMnPlNrecName" value="" /> 
  <prop_value prop_name="VarcpNrecName" value="" /> 
  <prop_value prop_name="VarcFormPlName" value="" /> 
  </Collection>
  </Object>
  </Collection>
- <Collection caption="Алгоритмы JavaScript" name="Data.AlgJS" child_tags="Object">
- <Object name="Проверка суммы накладных по договору (555)" class_id="AlgJS" id="27866022694355088">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="LastDateTime" value="12/08/2010 13:16:24" /> 
  <prop_value prop_name="Code" value="555" /> 
  <prop_value prop_name="Name" value="Проверка суммы накладных по договору" /> 
  <prop_value prop_name="wSysNum" value="65535" /> 
  <prop_value prop_name="cGroup" rlt_class="MnfGroup" value="0" /> 
  <prop_value prop_name="Comment" value="(MEMO)" /> 
- <prop_value prop_name="JS" value="(MEMO)">
- <![CDATA[ 
Sopr.setPosition(curSopr())
Summa = 0
if (Sopr.cDog > 0)
{
   DogSopr.TieToSopr(Sopr.cDog,Sopr.Type);
   for(DogSopr.getFirst(); ResultOfNavigation; DogSopr.getNext())
   {
      Debug.Print('Нашли документ на сумму: ' + DogSopr.Sum);
      Summa = Summa + DogSopr.Sum
   }
}
if (Summa > 100000)
{
   Message("По договору текущей накладной сумма больше 100 тыщ.рублей!!!");
}

  ]]> 
  </prop_value>
  </Collection>
- <Collection caption="Используемые библиотеки функций" name="Data.AlgJS_Func" child_tags="Object">
- <Object name="M_Scripts::MessageAndVisual" class_id="AlgJS_Func" id="27866022694363341">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="NameLib" value="M_Scripts::MessageAndVisual" /> 
  </Collection>
  </Object>
  </Collection>
- <Collection caption="Объекты JS" name="Data.AlgJS_Obj" child_tags="Object">
- <Object name="Объект № 2:TSopr" class_id="AlgJS_Obj" id="27866022694363330">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="Name" value="TSopr" /> 
  <prop_value prop_name="Npp" value="2" /> 
  <prop_value prop_name="TypeObj" value="16" /> 
  </Collection>
- <Collection caption="Свойства объекта JS" name="Data.AlgJS_ObjP" child_tags="Object">
- <Object name="cDog" class_id="AlgJS_ObjP" id="27866022694363335">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="Name" value="cDog" /> 
  <prop_value prop_name="FldNmb" value="3006" /> 
  <prop_value prop_name="FlDirect" value="3" /> 
  <prop_value prop_name="TypeVal" value="3" /> 
  </Collection>
  </Object>
- <Object name="Type" class_id="AlgJS_ObjP" id="27866022694363336">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="Name" value="Type" /> 
  <prop_value prop_name="FldNmb" value="3021" /> 
  <prop_value prop_name="FlDirect" value="3" /> 
  <prop_value prop_name="TypeVal" value="3" /> 
  </Collection>
  </Object>
- <Object name="Sum" class_id="AlgJS_ObjP" id="27866022694363340">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="Name" value="Sum" /> 
  <prop_value prop_name="FldNmb" value="3" /> 
  <prop_value prop_name="FlDirect" value="3" /> 
  <prop_value prop_name="TypeVal" value="0" /> 
  </Collection>
  </Object>
  </Collection>
- <Collection caption="Методы объекта JS" name="Data.AlgJS_ObjB" child_tags="Object">
- <Object name="TieToSopr" class_id="AlgJS_ObjB" id="27866022694363339">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="Name" value="TieToSopr" /> 
  <prop_value prop_name="CodeBnd" value="4012" /> 
  <prop_value prop_name="Prizn" value="2" /> 
  <prop_value prop_name="PrmCount" value="2" /> 
  <prop_value prop_name="Prm_w4" value="65535" /> 
  <prop_value prop_name="Prm_w5" value="768" /> 
  <prop_value prop_name="Prm_w6" value="3" /> 
  <prop_value prop_name="Prm_w7" value="0" /> 
  <prop_value prop_name="Prm_w8" value="0" /> 
  <prop_value prop_name="Prm_w9" value="0" /> 
  <prop_value prop_name="Prm_w10" value="0" /> 
  <prop_value prop_name="Prm_w11" value="5010" /> 
  <prop_value prop_name="Prm_w12" value="5004" /> 
  <prop_value prop_name="Prm_w13" value="0" /> 
  <prop_value prop_name="Prm_w14" value="0" /> 
  <prop_value prop_name="Prm_w15" value="0" /> 
  <prop_value prop_name="Prm_w16" value="0" /> 
  <prop_value prop_name="Prm_w17" value="0" /> 
  <prop_value prop_name="Prm_w18" value="0" /> 
  <prop_value prop_name="Prm_w19" value="0" /> 
  <prop_value prop_name="Prm_w20" value="0" /> 
  </Collection>
  </Object>
  </Collection>
- <Collection caption="Экземпляры объекта JS" name="Data.AlgJS_ObjE" child_tags="Object">
- <Object name="Sopr" class_id="AlgJS_ObjE" id="27866022694363337">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="Name" value="Sopr" /> 
  <prop_value prop_name="Npp" value="1" /> 
  </Collection>
  </Object>
- <Object name="DogSopr" class_id="AlgJS_ObjE" id="27866022694363338">
- <Collection caption="Свойства" name="Prop_Values" child_tags="prop_value">
  <prop_value prop_name="Name" value="DogSopr" /> 
  <prop_value prop_name="Npp" value="2" /> 
  </Collection>
  </Object>
  </Collection>
  </Object>
  </Collection>
  <Collection caption="Локальные константы JS" name="Data.AlgJS_CnstL" child_tags="Object" /> 
  <Collection caption="Глобальные константы JS" name="Data.AlgJS_CnstG" child_tags="Object" /> 
  <Collection caption="Аналитики JS" name="Data.AlgJS_An" child_tags="Object" /> 
  </Object>
  </Collection>
  </Data>
  </Data_Root>

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 16:07
hope
Ооооооо! Спасибо, Seybukan!
Буду разбираться.
Вопрос такой: Мы имеем тип данных "Алгоритмы расчета (сист.№ = 52)". Который состит из одного элемента "Свойства", который состоит из 29 элементов:
Дата/время последней модификации
Документ-источник
Код
Комментарий
Наименование
и т.д.
Когда это все описывается в XML, там используются имена на английском языке. Их где-то можно посмотреть?
Аналогично для типа данных "Алгоритмы JavaScript".

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 16:54
hope
И еще вопросы:
Как можно узнать наименование функции получения ссылки на текущий документ?
Откуда брать ID (типа 27866022694363336 - смотри в тексте xml)?
Что такое DogSopr.TieToSor()? Это объект определнного класса со своим набором свойств. Где можно узнать про этиобъекты?

Спасибо!

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 17:14
Seybukan
Даже врать не буду.
Ни когда не задумывался что это такое :)
Я просто беру настраиваю импорт и импортирую.
Всегда импортируется и всегда работает.

Этот алгоритм я настроил у себя, протестировал и выгрузил.
Попробовал загрузить в другую БД - загрузка прошла корректно.
Просто загрузи алгоритм открой на редактирование пощелкай по вкладкам настроек и все увидишь.
Например TieToSopr - это метод "Установка ограничений / По договору и виду накладной" к документу "Заголовок накладной". (Хотя я реально класс от метода или свойства отличаю с трудом, я все же экономист а не программист)
Что касается ID - полагаю что после загрузки в БД они будут новые.
По крайней мере когда загружаю один и тот же алгоритм мне система просто создает новые.

Re: Контроль суммы отгрузки

Добавлено: 12 авг 2010, 17:24
Seybukan
Получается что-то вроде того:
1. На вкладке библиотека привязал библиотеку "Сообщения и визуализация". Нужна для сообщения.
2. На вкладке объекты создал класс "TSopr" с типом Оперативные документы / Накладная / Заголовок накладной.
- Сделал два экземпляра: "Sopr", "DogSopr".
- Сделал метод "TieToSopr" с типом Установка ограничений / По договору и виду накладной
- Сделал свойство "cDog" с типом Ссылка на договор
- Сделал свойство "Type" с типом Вид накладной
- Сделал свойство "Sum" с типом Сумма по накладной
3. Константы не делал.
4. Далее небольшой кусочек кода.

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

Re: Контроль суммы отгрузки

Добавлено: 13 авг 2010, 09:35
hope
Вообще в Галактике можно настроить алгоритм без импорта из XML? Или надо обязательно сначала в XML наваять, а потом загрузить - только так можно добавить свой алгоритм?

Судя по фразе "Этот алгоритм я настроил у себя, протестировал и выгрузил" - можно все-таки в Галактике настраивать алгоритмы? Как дойти до этого интерфейса?

Re: Контроль суммы отгрузки

Добавлено: 13 авг 2010, 09:49
hope
Кажется нашла то, что мне должно помочь: есть документация "Применение JavaScript в контуре "Планирования и управления производством"".

Re: Контроль суммы отгрузки

Добавлено: 13 авг 2010, 10:38
Seybukan
Конечно же можно настраивать JS самостоятельно без всяких загрузок.
Если нет прямого доступа через модуля планирования, то можно зайти с любого места где есть выбор производственных алгоритмов рассчета (например настройка "Настройки Галактики \ Логистика \ Документы \ Управление сбытом \ Накладная на отпуск \ Запуск алгоритмов \ После списания выполнить алгоритм") создать алгоритм по системному № 52 "Алгоритм исполнения JavaScript" и там уже создать алгоритм JS.

Я же создал алгоритм сам. Взял выгрузил его чтобы вы смогли его загрузить и посмотреть. Он полностью рабочий и проверяет сумму всех накладных привязанных к договору по текущей накладной.
Правда алгоритм не проверяет отгружены эти накладные или нет.
Ну и собственно ни чего не делает кроме как выдает сообщение.
На самом деле дальше можно что-то сделать с документом, например если сумма больше то можно удалить ордера по текущей накладной.
Например есть функция в библиотеке Логистика \ Функции для формирования ордеров:
Функция удаления ордера
Возвращает true - успешное выполнение.
function DeleteOrder(cOrder)
cOrder : comp - ссылка на удаляемый ордер

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

Re: Контроль суммы отгрузки

Добавлено: 13 авг 2010, 11:21
hope
Все понятно теперь! :) А то я сидела разбиралась в этом XML - чтобы родить что-то свое.
Взяла ваш текст, вставляю в Блокноте в файл, сохраняю с расширением XML, загружаю - выдает ошибку в первой строке.