Установка адресного хранения

Материал из GB wiki
Версия от 09:14, 15 июня 2010; Iv (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Порядок установки системы адресного хранения

  1. Запнуть все нужные процедуры в базу
    порядок запинывания:
    WMS_CALC_CELLSIZE
    WMS_CONTAINER_GET
    WMS_CONTAINER_PUT_NEW
    WMS_EMPTY_CELL
    WMS_CHANGEFLAG
    WMS_CHANGEDOC
    WMS_CELLCHANGED
    WMS_GETDOCS
Процедура WMS_CHANGEFLAG должна вызываться из Documents_ChangeFlag_AfterAll
Процедура WMS_CHANGEDOC должна вызываться из Documents_Put_BeforeAll
Процедура WMS_CELLCHANGED должна вызываться из GBObjects_Put_AfterAll
  1. Создать в БД типы документов для отборки, размещения и передачи. А также задания на пополнение, вытеснение и уплотнение

Создаются типы документов с родовым типом "заказ поставщику"

  1. Прописать @WMSType всем документам, влияющим на остатки

Прописывается в свойствах типа документа "Настройки"->"Все подряд" @WMSType Документы которые будет создавать планер

  1. I - Размещение
  2. O - Отборка
  3. T - Передача

ВСЕ ДОКУМЕНТЫ СОЗДАВАТЬ С ФЛАГОМ 0 !!!!! иначе некорректно плановые количества работают потом двигать SetFlag

Документы которые планер проверяет

  1. P+ - Приходный документ
  2. P- - Расходный документ
  3. PT - Документ передачи
  4. P~ - Пополнение, вытеснение, уплотнение. Различаются по OPType.
    1. OPType
      1. 0 - Пополнение
      2. 1 - Вытеснение
      3. 2 - Уплотнение


  1. Создать доп справочник зон хранения
  2. ---
  3. Планер
    • В ГБ "Конфигурация"->"Глобальные настройки"->"Конфигурация системы" создаем запись с ид 200 и пишем в нее IP:Port (Port указывается в настройке планировщика, по умолчанию 200)
  1. Настройка получения документов

Планер получает документы всех типов кроме тех у которых @WMSType I,O,T. В Настроках планера указываем фирмы для которых будут получаться документы, минимальный и максимальный флаг, промежуток дат. Кроме того для склада или партнера должно быть указано @WMSEnabled=1 либо в настройках включить получение для всех складов секция Documents параметр AllStocks

  1. Настройка колонок

настраивает в ини секция Documents параметр GridLayout

Пример
GridLayout=|"Document","-116","Док."|;|"SName=DocType.Name+'
'+DocNumber","+114","Название"|;|"Partner.Name","+150","Партнер"|
;|"Stock.Name","+121","Склад"|;|"TotalSum","-87","Сумма"|;|"DocDate","+64","Дата
док."|;|"OperationDate","+64","Дата отгр."|
  1. Создание шаблонов

CellFlags.txt добавление произвольных флагов ячейкам флагов Пример: Для размещения надо сделать приоритетность уровней 2-3-4-5 только для размещения 1 только для размещения возвратов

разбиваем по уровням, удобне сделать обычным флагом так как он влияет на качество1

IIF(SUBSTR(name,STRLEN(name)-1,1)='-',IIF(SUBSTR(name,STRLEN(name),1)='1','Floor.1=1','Floor.2=1'),)

приоритетность

IIF(SUBSTR(name,STRLEN(name),1)<>'1','~Floor='+FORMATFLOAT('0.00',1-0.25*(STRTOFLOAT( SUBSTR(name,STRLEN(name),1))-2)),),) Сделан только для рядов и ячеек. Флаг с дов интервалом влияет на качество2.

Шаблон DsToXml.xml используется для подготовки документа к планированию(выбрасываются всякие ненужные вещи, обрабатываются и дополняются связвнные документы) имеет 1 тег line

 <line>
   <object name="%child.line" />
   <structure>
     <field name="Id" type="I4" />
     <field name="Partner" type="I4" />
     <field name="Stock" type="I4" />
     <field name="DocType" type="I4" />
     <field name="WMSType"  type="S20"/>
     <field name="Heap"  type="B" nature="fmSingleSet" />
     <subset name="Goodies">
       <field name="Document" type="I4" />
       <field name="UniqueId" type="I4" />
       <field name="Articul" type="I4" />
       <field name="Heap" type="B" nature="fmSingleSet" />
       <subset name="Certificates">
         <field name="Certificate" type="I4" />
         <field name="Quantity" type="F8" />
       </subset>
     </subset>
   </structure>


   <ds2xml>
     <subset fieldname="Goodies" breakline="true">
       <subset fieldname="Certificates" line="line" breakline="true">
         <attr fieldname="%master.%master.Id" tagname="doc" />
         <attr fieldname="%master.%master.Partner" tagname="partner" />
         <attr fieldname="%master.%master.Stock" tagname="stock" />
         <attr fieldname="%master.%master.DocType" tagname="doctype" />
         <attr fieldname="%master.%master.WMSType" tagname="wmstype" />
         <attr fieldname="%master.%master.Heap" tagname="docheap" />
         <attr fieldname="%master.Articul" tagname="art" />
         <attr fieldname="%master.Heap" tagname="heap" />
         <attr fieldname="Certificate" tagname="cert" />
         <attr fieldname="Quantity" tagname="qty" />
       </subset>
     </subset>
   </ds2xml>
   <xml2ds>
     <subset fieldname="Goodies" line="%child.line">
       <subset fieldname="Certificates" line="line">
         <attr fieldname="%master.%master.Id" tagname="doc" key="true" />
         <attr fieldname="%master.%master.Partner" tagname="partner" key="true" />
         <attr fieldname="%master.%master.Stock" tagname="stock"  key="true"/>
         <attr fieldname="%master.%master.DocType" tagname="doctype"  key="true"/>
         <attr fieldname="%master.%master.WMSType" tagname="wmstype"  key="true"/>
         <attr fieldname="%master.%master.Heap" tagname="docheap"  />
         <attr fieldname="%master.Document" value="IIF(:GroupOperation,:CurrentDoc,0)"  key="true"/>
         <attr fieldname="%master.UniqueId" value="IIF(:GroupOperation or !doctype=1270 or !cert<>0,GetChildNumber(),0)"  key="true"/>
         <attr fieldname="%master.Articul" tagname="art"  key="true"/>
         <attr fieldname="%master.Heap" value="!heap" />
         <attr fieldname="Certificate" tagname="cert"  key="true"/>
         <attr fieldname="Quantity" value="IFEMPTY(Quantity,0)+GetAttrValue(0,'qty')" />
       </subset>
     </subset>
   </xml2ds>
 </line>

шаблон XmlToDs.xml планирование и результирующие документы теги line и doc

Необходимо указание типа контейнера, заводим типы контейнеров в ГБ. Справочник "Контейнеры" в свойствах контейнера заполняются либо собственные параметры контейнера, либо указываются поля на товаре из которых они будут браться. Оба набора заполнять нельзя, если заполнены собственные параметры, данные из товара браться не будут. Поле Slice указывает на соответствующие поле на товаре, максимально возможное количество коробок которые можно разместить на поддоне при оптимальной раскладке в 1 слое(ряде). Заполняем если пустые поля размеров на товаре при выборе варианта 2.

Делаем тег line для начала планирования Пример

 <line>
   <object name="line" />
   <structure>
     <field name="Type"         label="Тип" type="S40"/>
     <field name="DocParams"    label="Параметры документа" type="B"/>
     <field name="PlanType"     label="Тип планирования" type="S1"/>
     <field name="Articul"      label="Товар" type="I4" nature="fmId+otArticuls" />
     <field name="Certificate"  label="Сертификат" type="I4"/>
     <field name="Qty"          label="Количество товара" type="I4"/>
     <field name="ContQty"      label="Количество контейнеров" type="I4"/>
     <field name="NewContQty"   label="Новое количество контейнеров" type="F8"/>
     <field name="Container"    label="Контейнер" type="I4" nature="fmId+106" />
     <field name="NewContainer" label="Новый контейнер" type="I4" nature="fmId+106"/>
     <field name="OldContCap"   label="Штук в контейнере(исх)" type="I4"/>
     <field name="ContCap"      label="Штук в контейнере" type="I4"/>
     <field name="Flags"        label="Флаги" type="B"/>
     <field name="FromFlags"    label="Флаги (исходная ячейка)" type="B"/>
     <field name="ContX"        label="x" type="I4"/>
     <field name="ContY"        label="y" type="I4"/>
     <field name="ContZ"        label="z" type="I4"/>
     <field name="Cell"         label="Ячейка" type="I4" nature="fmId+105"/>
     <field name="NewCell"      label="В ячейку" type="I4" nature="fmId+105"/>
     <field name="BoxId"        label="Коробка" type="S50"/>
     <field name="NewBoxId"     label="Новая коробка" type="S50"/>
     <field name="Weight"       label="Вес" type="F8"/>
   </structure>
   <xml2ds filter="!wmstype='P+' and !qty >0">
     <attr fieldname="Type" value="'Приход'" key="true" />
     <attr fieldname="Articul" value="!art" key="true" />
     <attr fieldname="Certificate" value="!cert" key="true" />
     <attr fieldname="Container" value=":Коробка" key="true" />
     <attr fieldname="PlanType" value="'+'" />
     <attr fieldname="Qty" value="!qty" />

высчитываем количество контейнеров

     <attr fieldname="ContQty" value="Int((!qty/Articul.RatioSale)+0.999)" />
     <attr fieldname="ContCap" value="Articul.RatioSale" />
     <attr fieldname="Flags" >
      '~Floor=1'+\+
      'Floor.2=1'
     </attr>
   </xml2ds>
 </line>

Делаем тег Doc для создания документов

 <doc>
   <object name="%child.doc" />
   <structure>
     <field name="Type"           label="Тип"                 type="S40"/>
     <field name="Id"             label="Код"                 type="I4" nature="fmId+otDocs"/>
     <field name="Firm"           label="Собст.фирма"         type="I4" nature="fmId+otPartners"/>
     <field name="OperationDate"  label="Дата опер."          type="D8"/>
     <field name="Kind"           label="Операция"            type="I4"/>
     <field name="TotalSum"       label="Сумма"               type="F8"/>
     <field name="Currency"       label="Вал.расчета"         type="I4"/>
     <field name="CurrRate"       label="Сумма в вал.расчета" type="F8"/>
     <field name="Partner"        label="Партнер"             type="I4" nature="fmId+otPartners"/>
     <field name="Agent"          label="Агент"               type="I4" nature="fmId+otPartners"/>
     <field name="Stock"          label="Склад"               type="I4" nature="fmId+otPartners"/>
     <field name="Imported_Id"    label="Imported_Id"         type="I4"/>
     <field name="Flag"           label="Сост.док."           type="I4"/>
     <field name="SetFlag"        label="Нов.сост.док."       type="I4"/>
     <field name="DocType"        label="Тип док."            type="I4" nature="fmId+otDocTypes"/>
     <field name="DocNumber"      label="Номер"               type="S10"/>
     <field name="DocDate"        label="Дата выписки"        type="D8"/>
     <field name="DocCurrency"    label="Валюта"              type="I4"/>

` <field name="DocCurrRate" label="DocCurrRate" type="F8"/>

     <field name="Prev_DocType"   label="Prev_DocType"        type="I4"/>
     <field name="Prev_DocNumber" label="Prev_DocNumber"      type="S10"/>
     <field name="Prev_DocDate"   label="Prev_DocDate"        type="D8"/>
     <field name="Scheme"         label="Автопроведение"      type="I2"/>
     <field name="Contract"       label="Договор"             type="I4"/>
     <field name="ExpectedDate"   label="Дата ож.оплаты"      type="D8"/>
     <field name="Heap"           label="Дополнительно"       type="B" nature="fmSingleSet"/>
     <field name="PrintForm"      label="Печ.форма"           type="B"/>
     <subset name="Goodies">
       <field name="Id"        label="Код"        type="I4"/>
       <field name="Document"  label="Документ"   type="I4"/>
       <field name="Articul"   label="Товар"      type="I4" nature="fmId+otArticuls" />
       <field name="Quantity"  label="Количество" type="F8"/>
       <field name="Price"     label="Цена"       type="F8"/>
       <field name="PriceList" label="Вн.цена"    type="F8"/>
       <field name="Contents"  label="В упак."    type="F8"/>
       <field name="Pack"      label="Упак."      type="I4"/>
       <field name="Heap"      label="Доп."       type="B" nature="fmSingleSet" />
       <subset name="Certificates">
         <field name="Certificate" label="Certificate" type="I4" nature="fmId+otCertificates" />
         <field name="Quantity"    label="Quantity"    type="F8"/>
       </subset>
     </subset>
     <subset name="Links">
       <field name="DebetDoc"  label="DebetDoc"  type="I4"/>
       <field name="CreditDoc" label="CreditDoc" type="I4"/>
       <field name="LinkType"  label="LinkType"  type="I2"/>
       <field name="LinkSumma" label="LinkSumma" type="F8"/>
     </subset>
   </structure>


   <xml2ds line="%child.doc" >
     <subset fieldname="Goodies" line="%child.doc" >
       <subset fieldname="Certificates" line="doc" >
         <attr fieldname="%master.%master.Type"           value="SubStr(!Type,1,2)" key="true" />
         <attr fieldname="%master.%master.Id"             value="-1" key="true" />
         <attr fieldname="%master.%master.DocType"        key="true">
            IIF(!PlanType='+',530000005,530000007) 
         </attr>
         <attr fieldname="%master.%master.Firm"           value="GB_GET(11,:CurrentDoc,'Firm')" />
         <attr fieldname="%master.%master.OperationDate"  value="date()" />
         <attr fieldname="%master.%master.Kind"           value=":Операция" />
         <attr fieldname="%master.%master.TotalSum"       value="0" />
         <attr fieldname="%master.%master.Currency"       value="1" />
         <attr fieldname="%master.%master.CurrRate"       value="0" />
         <attr fieldname="%master.%master.Partner"        value="GB_GET(11,:CurrentDoc,'Partner')" />
         <attr fieldname="%master.%master.Agent"          value="GB_GET(11,:CurrentDoc,'Agent')" />
         <attr fieldname="%master.%master.Stock"          value="GB_GET(11,:CurrentDoc,'Stock')" />
         <attr fieldname="%master.%master.Flag"           value="0" />

флаг который будет выставлен планером документу после записи

         <attr fieldname="%master.%master.SetFlag" value="1000" />
         <attr fieldname="%master.%master.DocNumber">

GB_GET(11,:CurrentDoc,'DocNumber')

         </attr>
         <attr fieldname="%master.%master.PrintForm">
            IIF(!PlanType='+','ЛистРазмещения.txt','Листотборки.txt')
         </attr>
         <attr fieldname="%master.%master.DocDate"        value="date()" />
         <attr fieldname="%master.%master.DocCurrency"    value="1" />
         <attr fieldname="%master.%master.DocCurrRate"    value="0" />
         <attr fieldname="%master.%master.Prev_DocDate"   value="date()"/>
         <attr fieldname="%master.%master.Scheme"         value="1" />
         <attr fieldname="%master.%master.Contract"       value="0" />
         <attr fieldname="%master.%master.ExpectedDate"   value="date()"/>
         <attr fieldname="%master.%master.Heap"   >

IIF(

 !PlanType='-',
 'Zone='+SubStr(!Type, 3, 2)+\,
 

)+IIF(SubStr(!Type, 3, 2)='БХ','Zone=БР'+\,)+ 'DailyNum='+FORMATFLOAT('00',:DailyNum)+\+ 'ComplCell='+GB_GET(11,:CurrentDoc,'Heap.ComplCell')+ IIF(!PlanType='+',\+'@ConNumber='+GB_GET(11,:CurrentDoc,'Heap.@ConNumber'),)+ IFEMPTY(\+'@SDayOut='+GB_GET(11,:CurrentDoc,'Heap.@SDayOut'),)+ IFEMPTY(\+'@STimeOut='+GB_GET(11,:CurrentDoc,'Heap.@STimeOut'),)

         </attr>
         <attr fieldname="%master.Id"        value="GetChildNumber()" key="true" />
         <attr fieldname="%master.Articul"   tagname="Articul" />
         <attr fieldname="%master.Quantity"  tagname="Qty" />
         <attr fieldname="%master.Price"     value="0" />
         <attr fieldname="%master.PriceList" value="0" />
         <attr fieldname="%master.Contents"  value="1" />
         <attr fieldname="%master.Pack"      value="0" />
         <attr fieldname="%master.Heap">

IIF(GetHeap(!DocParams,'Carantin')=,,'Carantin=K'+\)+ 'Cell='+!Cell+\+ 'Container='+!Container+\+ 'ContQty='+!ContQty+\+ 'Tara='+FORMATFLOAT('00',IIF(!Type='2.ДХ.Пополнение',1,IfEmpty(GetHeap(!DocParams,'Tara'),(:TaraCount:=:TaraCount+1))))+ \+'Order='+IfEmpty(GetHeap(!DocParams,'Order'),'10')+ IfEmpty(GetHeap(!DocParams,'@TransDoc'),,\+'TransDoc='+GetHeap(!DocParams,'@TransDoc'))+ IIF(

 not IsNull(!ContCap),
 \+'ContCap='+!ContCap,
 )+

IIF(

 !PlanType='=',
 \+
 'ToCell='+!NewCell+\+
 'NewContainer='+!NewContainer+\+
 'NewContQty='+!NewContQty+\+
 'OldContCap='+!OldContCap+\+
 IFEMPTY(GetHeap(!DocParams,'@SrcRest'),,'SrcRest='+GetHeap(!DocParams,'@SrcRest')+\)+
 IFEMPTY(!NewBoxId,,'NewBoxId='+!NewBoxId)
 ,)
         </attr>
         <attr fieldname="Certificate"       tagname="Certificate" key="true" />
         <attr fieldname="Quantity"          tagname="Qty" />
       </subset>
     </subset>
     <subset fieldname="Links" line="doc" filter="not :GroupOperation">
       <attr fieldname="DebetDoc"  value=":CurrentDoc" key="true" />
       <attr fieldname="CreditDoc" value="-1" key="true" />

Стандартная связь между приход-лист размещения и расход-лист отборки 51, 52 - оперативное пополнение

       <attr fieldname="LinkType"  value="51" key="true"/>
       <attr fieldname="LinkSumma" value="0" />
     </subset>
   </xml2ds>
 </doc>

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