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

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


kak_da:proizvodstvo:proizvodstvo_skript

Това е стара версия на документа!


Скрипт за Производство

Описание на скрипта:

1. Скрипта се стартира от документ, в който е възможно да имаме (може и да нямаме) позиции,

  които имат избрана рецепта и са с чек автоматично производство

2. Скрипта позовлява разнообразни настройки - виж секция параметри 3. Скрипта извършва различни проверки - виж секция проверки 4. Извличане на константи -

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

Ако са подадени празни контрагент и обект се вземат тези от дефолта.

  1. извлича се дефолтната валута от конфигурацията - *DEFAULT_CURRENCY_REF*
  2. извличат се настройките на обекта
    • настрйката за наличности - предупреждение или забрана за отрицателни наличности *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. Правим проверка за позиции, които трябва да имат цветове (имат група цвят в номенклатурата), но нямат избран цвят в документа

  Към тази проверка прибавяме позициите, които са без размер.
  Добавяме и проверка за Местоположение, ако е задължително и липсва.
  Всички тези позиции които не отговарят на горните условия ги считаме за "обработени" в смисъл, че за тях
Ако съществуват такива, ние няма да можем да определим наличност, за да "произведем" само необходимите.

10. Ако сме избрали проверката за наличност *CHECK_AVAILABILITY_NEW_DOC* ще извършим проверка на всички позиции, които се опитваме да

  "разпаднем" (са с отрицателен знак на количеството). Идеята е да коригираме наличното количество!

11. Следва алгоритъма за приспадане на наличното количество. Този алгоритъм се запуска само с параметъра *PRODUCE_MISSING_ITEMS* 12. Почистваме таблицата от нулеви производства. 13. Следва процедурата по създаване на документи

  Процедурата включва обхождане на временната таблица *DS* и последващото създаване на хедъри и редове

14. Създават се хедърите на документите (ако е необходимо да са повече от един). 15. След това се взема рецептата и на два паса се добавят артикулите, като се прави проверка на наличността на база на ред.

Проверки

0. Първоначалната проверка се прави само ако е изключена проверката *CHECK_ITEMS_WO_RECIPE* = 0

 Тази проверка е в самото начало и се прави проверка дали въобще има редове за производство.
 Ако няма - излизаме без да правим всичко останало.
 Целта е да спестим проверки и заявки за документи без значение!

1. Проверява дали документа от който се стартира съществува 2. Ако *NEED_STATUS* (параметъра) има стойност, то се прави проверка дали статуса на документа е ПО-МАЛЪК.

 Идеята е тк да се слага например статус 100 и да се иска документа от който се стартира да е приключен
 Ако искаме документа да е анулиран, то ще поставим -1.

3. Проверка дали всички позиции имат въведена рецепта в зависимост от *CHECK_ITEMS_WO_RECIPE* (параметър) 4. Проверяваме дали съществува типа на документа, който ще създаваме (производство) 5. Ако сме избрали да извършваме проверка на типа на документа за производство - *CHECK_DOC_TYPE_ASSEMBLY* (параметър) е 1

  1. Ако не влияе на наличността на Източника (*SOURCE_COEF* трябва да е <> 0) - грешка
  2. Ако влияе на наличността на Посредника и Получателя (*VIA_COEF* и *TARGET_COEF* трябва да са = 0) - грешка
  3. Ако документа не е от тип Производство (*IS_ASSEMBLY* не трябва да е 0) - грешка

6. Проверява се дали имаме Контрагент и Обект. Ако няма някое от двете - грешка 7. По време на „производството“ търсим дали продукта може да бъде намерен по съответната рецепта.

 Ако се случи така че да не може да се намери ще трябва да гръмнем и да прекратим.
 Това съобщение е само за защита и не бива да се появява никога!
 Защо? Защото списъците с рецептите, трябва да са съобразени с позицията.
 Това е ако сме добавили нов продукт, който се произвежда, но не е описан в посочената рецепта.
 

Параметри

1. ID - номер на документа от който го стартираме 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 - Контрягент за новия документ (отива в Контрагент Източник) 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 DATE - Дата на документа 16. DOC_COMMENT - Коментар

17. IS_DISSASSEMBLY - Скрипта се използва за разпад - 0/1

                       0 - скрипта се използва като производствен - Каквото пише в количеството така се интерпретира
                       1 - скрипта се използва за обратно създаване - РАЗПАД - Умножава се количеството по (-1)!						 

18. PRODUCE_MISSING_ITEMS - Произвежда само недостатъчната наличност

                               Ще провери наличността по рецептите за производство
							 Ще намали позициите за производство с наличните (има алгоритъм за изчистване)

19. CHECK_AVAILABILITY_NEW_DOC - Прави проверка за наличност в новия док.

20. PRICE_LIST_REF - Ценова листа 21. SET_ZERO_PRICE_WHEN_NULL_PRICE - Поставя нулева цена при липса на такава 22. WORK_WITH_SN - Използва серийни номера

23. DO_FINALIZE_DOCUMENTS - Приключва създадените документи 24. DO_OPEN_DOCUMENTS - Отваря създадените документи

kak_da/proizvodstvo/proizvodstvo_skript.1503064679.txt.gz · Последна промяна: 2018/01/11 15:29 (външна редакция)