Инструменти за потребители

Инструменти за сайта


kak_da:proizvodstvo:proizvodstvo_skript

Разлики

Тук са показани разликите между избраната и текущата версия на страницата.

Препратка към сравнението на версиите

Следваща версия
Предходна версия
kak_da:proizvodstvo:proizvodstvo_skript [2017/08/18 13:57] – създадена t.lalovakak_da:proizvodstvo:proizvodstvo_skript [2018/07/18 07:16] (текуща) k.kyurkchieva
Ред 2: Ред 2:
  
  
-Описание на скрипта:+**Скриптът за Производство** се стартира от документ, в който има позиции, за които е избрана рецепта и имат отметка "Автоматично производство".\\ 
 +Той позволява разнообразни настройки на база наличните параметри и извършва различни проверки. 
 +    
 +===== Параметри =====
  
- 1. Скрипта се стартира от документ, в който е възможно да имаме (може и да нямаме) позиции,  + 1. **ID**                    Номер на документа, от който се стартира скрипта.
-    които имат избрана рецепта и са с чек автоматично производство +
- 2. Скрипта позовлява разнообразни настройки - виж секция параметри  +
- 3. Скрипта извършва различни проверки - виж секция проверки +
- 4. Извличане на константи - +
-    - извличат се дефолтните контрагент, обект, служител от типа документ +
-      Ако са подадени празни контрагент и обект се вземат тези от дефолта. +
-    - извлича се дефолтната валута от конфигурацията - *DEFAULT_CURRENCY_REF* +
-    - извличат се настройките на обекта  +
-      настрйката за наличности - предупреждение или забрана за отрицателни наличности *CHECK_NEGATIVE_AVAILABILITY*  +
-      * изисква ли въвеждане на местоположение *REQUIRE_LOCATION_POSITION* +
-      * брой местоположения в обекта +
-      * първото местоположение - ако имаме само 1 местоположение ще го използваме! +
- 5. Определяне на параметъра *LOCATION_POSITION_TYPE*  +
-    Ако е 0 трябва да сравним обекта с тези от документа за да знаем кое поле после ще използваме +
-    Ако обекта съвпадне с някой от обектите в документа (Започваме сравнението с Източник/Посредник/Получател) +
-    ние променяме стойността на параметъра съответно на 1/2/3. +
-    Ако е останало с 0 и имаме повече от 1 местоположения, то не може да използваме "Първото" +
- 6. Анулираме всички "свързани" производства към документа, от който страртираме скрипта +
-    Това зависи от настройката *INVALIDATE_ALL_LINKED_DOCS*. +
-    Кои документи:  +
-      - които са с референция *REF_DOC_NUMBER* към текущия +
-      - които са с тип = на типа на създаваните документи *PROD_DOC_TYPE_REF* +
-      - които не са анулирани DOC_STATUS <> - 1 +
- 7. Извличаме информацията за редовете които ще произвеждаме в *DS* +
-    Това са всички редове в документа, които: +
-   - които са с позиции по които се води наличност (изключваме услуги - защита за производство на безналични услуги!) +
-      - за които е казано че се произвеждат автоматично или параметъра *ASSEMBLY_ONLY_WITH_CHECK_AUTOASSEMBLY* е 0 +
-      - които имат номер на рецепта +
- 8. Ако правим проверки за наличност (в зависимост от параметъра *CHECK_AVAILABILITY_NEW_DOC*) или ще произвеждаме   +
-    само липсващото количество (параметъра *PRODUCE_MISSING_ITEMS*), то ще извлечем наличностите по всички редове. +
- Идеята е да вземем редовете с отрицателно количество (те са разпад) и да проверим дали има достатъчна наличност +
- А тези които са с положителни количества да намалим количествата в зависимост от наличността +
- Получаваме резултат в *DS_AVAIL* +
- 9. Правим проверка за позиции, които трябва да имат цветове (имат група цвят в номенклатурата), но нямат избран цвят в документа +
-    Към тази проверка прибавяме позициите, които са без размер. +
-    Добавяме и проверка за Местоположение, ако е задължително и липсва.+
  
-    Всички тези позиции които не отговарят на горните условия ги считаме за "обработени" в смисъл, че за тях + 2. **NEED_STATUS**           - Необходим статус за стартиране - Прави се проверка на статуса на документаот който се стартира скрипта. Ако няма поставена стойностто проверка не се правиАко има поставена стойностто стойността на статуса на документа трябва да е >= от зададената в този параметър стойност.
- Ако съществуват такивание няма да можем да определим наличност, за да "произведем" само необходимите. +
-  +
-10. Ако сме избрали проверката за наличност *CHECK_AVAILABILITY_NEW_DOC* ще извършим проверка на всички позиции, които се опитваме да  +
-    "разпаднем" (са с отрицателен знак на количеството). Идеята е да коригираме наличното количество! +
-11Следва алгоритъма за приспадане на наличното количество. Този алгоритъм се запуска само с параметъра *PRODUCE_MISSING_ITEMS* +
-12. Почистваме таблицата от нулеви производства+
-13. Следва процедурата по създаване на документи +
-    Процедурата включва обхождане на временната таблица *DS* и последващото създаване на хедъри и редове +
-14. Създават се хедърите на документите (ако е необходимо да са повече от един). +
-15. След това се взема рецептата и на два паса се добавят артикулите, като се прави проверка на наличността на база на ред.+
  
-===== Проверки =====+ 3. **__DATASOURCE_ID**       - Системен параметър за превод на грешките - параметър, в който се предава идентификатора на дейтасорса. Целта е да може да се използва при превод на грешки.
  
-0Първоначалната проверка се прави само ако е изключена проверката *CHECK_ITEMS_WO_RECIPE = 0 + 4. **DEBUG_FLAG**            Системен параметър за дебъг (показва различни съобщения по време на изпълнението).
-   Тази проверка е в самото начало и се прави проверка дали въобще има редове за производство. +
-   Ако няма - излизаме без да правим всичко останало. +
-   Целта е да спестим проверки и заявки за документи без значение! +
-1. Проверява дали документа от който се стартира съществува +
-2. Ако *NEED_STATUS(параметъра) има стойност, то се прави проверка дали статуса на документа е ПО-МАЛЪК.  +
-   Идеята е тк да се слага например статус 100 и да се иска документа от който се стартира да е приключен +
-   Ако искаме документа да е анулиран, то ще поставим -1. +
-3. Проверка дали всички позиции имат въведена рецепта в зависимост от *CHECK_ITEMS_WO_RECIPE* (параметър) +
-4. Проверяваме дали съществува типа на документа, който ще създаваме (производство) +
-5. Ако сме избрали да извършваме проверка на типа на документа за производство - *CHECK_DOC_TYPE_ASSEMBLY* (параметър) е 1 +
-  - Ако не влияе на наличността на Източника (*SOURCE_COEF* трябва да е <> 0) - грешка +
-  - Ако влияе на наличността на Посредника и Получателя (*VIA_COEF* и *TARGET_COEF* трябва да са = 0) - грешка +
-  - Ако документа не е от тип Производство (*IS_ASSEMBLY* не трябва да е 0) - грешка +
-6. Проверява се дали имаме Контрагент и Обект. Ако няма някое от двете - грешка +
-7. По време на "производството" търсим дали продукта може да бъде намерен по съответната рецепта.  +
-   Ако се случи така че да не може да се намери ще трябва да гръмнем и да прекратим. +
-   Това съобщение е само за защита и не бива да се появява никога! +
-   Защо? Защото списъците с рецептите, трябва да са съобразени с позицията. +
-   Това е ако сме добавили нов продукт, който се произвежда, но не е описан в посочената рецепта. +
-    +
-===== Параметри =====+
  
- 1ID                    номер на документа от който го стартираме + 5**CHECK_ITEMS_WO_RECIPE** Проверка на позиции без въведена рецепта - Проверява дали има позиция без рецепта в документа. Идеята ече ако има нареждане за производство или разпад, в документа не трябва да има позиции без избрана рецепта. /*не трябва да има "паразитни" позиции в документа (т.е. БЕЗ ИЗБРАНА РЕЦЕПТА)!*/
- 2. NEED_STATUS           - Необходим статус на документа от който се стартира +
- 3. __DATASOURCE_ID       - Системен параметър - служи за превод на грешките +
- 4. DEBUG_FLAG            - Системен параметър за дебъг (показва различни съобщения по време на изпълнението) +
- 5. CHECK_ITEMS_WO_RECIPE - Проверка на позиции без въведена рецепта (Ако е документ само за производство +
-                            то не искаме да имаме позиции, които са БЕЗ ИЗБРАНА РЕЦЕПТА) +
- 6. PROD_DOC_TYPE_REF     - Тип на документа за производство +
- 7. CHECK_DOC_TYPE_ASSEMBLY               - Проверка на документа за производство (включва няколко проверки) +
- 8. ASSEMBLY_ONLY_WITH_CHECK_AUTOASSEMBLY - Извършва производство само на позициите, които са с отметка  +
-                                            "Автоматично производство" в детайла на изходния документ +
- 9. INVALIDATE_ALL_LINKED_DOCS            - Анулиране на свързани документи за Производство към текущия документ  +
-                                            Връзката се осъществава през REF_ +
-10. CREATE_DOCUMENT_COUNT                 - 0 или 1.  +
-                                            0 - всеки ред се създава в нов документ  +
-                                            1 - всички рецепти се вмъкват в един документ +
-11. ENTITY_REF             - Контрягент за новия документ (отива в Контрагент Източник) +
-12LOCATION_REF           - Обект (аналогв Обект Източник) +
-13. EMPL_REL_REF           - Служител (в служител Източник)+
  
-14LOCATION_POSITION_TYPE - Тип на позицията в обекта:+ 6**PROD_DOC_TYPE_REF**     - Тип на документа за производство - Това е тип на новия документ, който ще създаде този скрипт.
  
-                             null не гледаме никое поле от документа източник + 7. **CHECK_DOC_TYPE_ASSEMBLY**               Проверка на документа за производство - Извършва проверки на вида ТД за това дали е настроен като производство, дали влияе на наличността на Посредника и Получателя. \\ 
-                             Вземаме настройката дали обекта изпозлзва местоположения.  +Проверката изисква: \\ 
-      Ако използва, то търсим съвпадение на обекта в скрипта с обекта от документа  +1. Документът да влияе на наличността само на Източника \\ 
- с източник, посредник или получател обект за да знаем кое поле от документа да гледаме. +2. Документът да е тип "Производство"
- (Ако е 0 ние или ще го направим null или 1, 2, 3) +
-                             1 - Гледаме полето SOURCE_LOCATION_POSITION_REF +
-                             - Гледаме полето VIA_LOCATION_POSITION_REF +
-                             3 - Гледаме полето TARGET_LOCATION_POSITION_REF+
  
-15DOC_DATE DATE      Дата на документа + 8**ASSEMBLY_ONLY_WITH_CHECK_AUTOASSEMBLY** Произвеждат се само на позициите, които имат отметка "Автоматично производство" в детайла на изходния документ. Това се използва при документи като продажби\\ 
-16DOC_COMMENT        - Коментар +В документи за нареждане на производство или разпад е необходимо в този параметър да се постави стойност НЕ. 
-                 + 
-17IS_DISSASSEMBLY    Скрипта се използва за разпад - 0/1 + 9**INVALIDATE_ALL_LINKED_DOCS**            Анулиране на свързаните към текущия документ документи за Производство. \\ Анулира всички документи от посочения тип "PROD_DOC_TYPE_REF", които не са анулирани и са свързани с текущия документ през полето "REF_DOC_NUMBER"
-                         0 - скрипта се използва като производствен - Каквото пише в количеството така се интерпретира + 
-                         1 - скрипта се използва за обратно създаване - РАЗПАД - Умножава се количеството по (-1)!  +10. **CREATE_DOCUMENT_COUNT**                 - Брой документи за производство \\ 
 +Стойности: \\ 
 + * 0 - прави отделен документ за всяка рецепта (за всеки ред от документа). \\ 
 + * 1 прави общ документ за всички рецепти (групирано по рецепта). \\ 
 + * 2 - прави общ документ, без да групира по рецепта, цвят и т.н. 
 + 
 +11. **ENTITY_REF**             - Контрагент за новия документ - Контрагент, който ще бъде поставен в полето за Източник на новия документ. Ако контрагентът и обектът са празни, то се взима подразбиращата се стойност от документа. 
 + 
 +12. **LOCATION_REF**           - Обект (аналогично на Контрагент се поставя в полето за Обект Източник) 
 + 
 +13. **EMPL_REL_REF**           - Служител (в полето за служител Източник) 
 + 
 +14. **LOCATION_POSITION_TYPE** - Тип на позицията в обекта:  
 + 
 +- null - не се гледа никое поле от документа източник \\ 
 +0 - Взема се предвид настройката дали обектът използва местоположения  \\ 
 +Ако използва, то се търси съвпадение на обекта в скрипта с обекта от документа с обект Източник, Посредник или Получател, за да се знае кое поле от документа да се вземе предвид. \\ 
 +(Ако е 0 приема стойности null или 1, 2, 3) 
 +1 - Гледа се полето SOURCE_LOCATION_POSITION_REF 
 +2 - Гледа се полето VIA_LOCATION_POSITION_REF 
 +3 - Гледа се полето TARGET_LOCATION_POSITION_REF 
 + 
 +15. **DOC_DATE**      - Дата на документа 
 + 
 +16. **DOC_TIME_TYPE**      - Час на новия документ \\ 
 +Стойности: \\ 
 +null - null \\ 
 +-1 - взима се часът на документа, от който се стартира и се маха 1 секунда (ако е поне 00:00:01) \\ 
 +0 - взима се часът на документа, от който се стартира \\ 
 +1 - взима се текущият час 
 + 
 +17. **DOC_COMMENT**        - Коментар 
 +              
 +18. **IS_DISSASSEMBLY**    - Скриптът се използва за разпад - ДА/НЕ \\ 
 +ДА - скриптът се използва за обратно създаване - РАЗПАД - Количеството се умножава по (-1)! \\ 
 +НЕ - скриптът се използва като производствен - Числото, което е вписано в количество се интерпретира със същия знак  
      
-18. PRODUCE_MISSING_ITEMS      - Произвежда само недостатъчната наличност  +19**PRODUCE_MISSING_ITEMS**      - Произвежда само недостатъчната наличност - Проверява се наличността по рецептите за производство. Позициите за производство ще се намалят с наличните (има алгоритъм за изчистване). 
-                                 Ще провери наличността по рецептите за производство + 
- Ще намали позициите за производство с наличните (има алгоритъм за изчистване) +20**CHECK_AVAILABILITY_NEW_DOC** - Прави проверка за наличност в новия документ - Проверява всички позиции, които трябва да намалят наличността в източника на новия документ.
-19. CHECK_AVAILABILITY_NEW_DOC - Прави проверка за наличност в новия док.+
      
-20. PRICE_LIST_REF                 - Ценова листа +21**PRICE_LIST_REF**                 - Ценова листа номер - Параметърът определя каква единична цена да се изписва в документа за вписване/изписване.\\ 
-21. SET_ZERO_PRICE_WHEN_NULL_PRICE - Поставя нулева цена при липса на такава +При непопълнен параметър документът за вписване/изписване се извършва по СДЦ, а в единична цена се записва цена 0.\\ 
-22WORK_WITH_SN                   - Използва серийни номера  +Ако се въведе число, отговарящо на номер ценова листа, то единичните цени в документа идват от въпросната ценова листа. 
 + 
 +22. **COPY_SN**                        - Копиране на серийните номера на продукцията \\ 
 +При производство, когато и един от артикулите (независимо дали суровина или готов продукт) е със сериен/партиден номер, документът който се генерира от скрипта, трябва да се отвори със статус "Неприключен" пред потребителя, за да може да се въведе серийният/партидният номер. \\  
 +Параметър, който указва, че фирмата работи със серийни/партидни номера, с възможности Да и Не. 
 + 
 +23. **AUTOFILL_SN_LOT_NUM_BY_EXPIRY**                   - Автоматично попълване на серийни и партидни номера 
      
-23. DO_FINALIZE_DOCUMENTS      - Приключва създадените документи +24**DO_FINALIZE_DOCUMENTS**      - Приключи генерирания/те документ/и 
-24DO_OPEN_DOCUMENTS          Отваря създадените документи+ 
 +25. **DO_OPEN_DOCUMENTS**          - Отвори генерирания/те документ/и 
 + 
 +26. **VIEW_REF**                   - Изглед, който да се стартира след скрипта 
 + 
 +27. **AUTO_EXECUTE_VIEW**          - Автоматично да се изпълни стартираният изглед 
 + 
 +28. **S_TO_MASTER**                - Само в папката, където Документът, от който се копира е главен - Възможни стойности: 0 - Новият се записва във всички папки на стария. \\ 
 +1 - Новият документ се записва САМО в папката, където старият е главен\\ 
 +Новият документ се записва само в първата папка на стария.\\ 
 +3 - Новият документ НЕ се записва в никакви папки от стария документ.\\ 
 + 
 +29. **ADD_MLS_TO_TIME**            - Генерира документите с последните часове, с разлика 1 милисекунда. 
 + 
 + 
 + 
 + 
 +[[kak_da:proizvodstvo:proizvodstvo|Основни положения за реализиране на процес Производство]]
kak_da/proizvodstvo/proizvodstvo_skript.1503064679.txt.gz · Последна промяна: 2018/01/11 15:29 (външна редакция)