MB11 生鲜项目原料消耗发货功能

*&---------------------------------------------------------------------*
*& 程序名:  ZDQFI_925
*&
*&---------------------------------------------------------------------*
*& 抬头     : 生鲜项目原料消耗发货功能                                 *
*& 模块     : FI                                                        *
*& 作者     :                                                           *
*& 创建日期 : 20180301                                                 *
*& 程序类型 : 功能报表                                                 *
*& 消息类   : zmg_fi                                                   *
*& 描述     : 生鲜项目原料消耗发货功能                                 *
*&                                                                     *
*& 修改记录 :                                                          *
*& 日期        修改人           修改内容                               *
*& YYYY/MM/DD  修改人员名       说明                                   *
*&---------------------------------------------------------------------*
REPORT  zdqfi_925 MESSAGE-ID 00.

*&---------------------------------------------------------------------*
*& INCLUDE
*&---------------------------------------------------------------------*
INCLUDE zdqfi_925_top.     "Type/Data
*INCLUDE zxxxxxxxx_class.  "Class
INCLUDE zdqfi_925_selscr.  "Selection screen
INCLUDE zdqfi_925_form.    "Form
*INCLUDE zxxxxxxxx_module.  "Module

*&---------------------------------------------------------------------*
*& 初始化处理
*&---------------------------------------------------------------------*
INITIALIZATION.
*  PERFORM xxxxxxx.

*&---------------------------------------------------------------------*
*& 选择屏幕控制
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*  PERFORM xxxxxxx.

*&---------------------------------------------------------------------*
*& 参数输入检查
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*  PERFORM xxxxxxx.

*&---------------------------------------------------------------------*
*& 程序开始处理
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_check_run.
  PERFORM frm_get_data.   "取数,过滤数据 逻辑
  PERFORM frm_pro_doc.    "处理数据

*&---------------------------------------------------------------------*
*& 程序结束处理
*&---------------------------------------------------------------------*
END-OF-SELECTION.
  PERFORM frm_alv_data.   "alv显示数据
*&---------------------------------------------------------------------*
*&      Form  frm_check_run
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_check_run .
  DATA:ls_zfit1004 TYPE zfit1004. "加锁配置表.
  DATA:ls_zruning_lock TYPE zruning_lock. "加锁配置表.

  IF p_ccl = ‘X‘.
    IF sy-batch = ‘X‘.
      MESSAGE ‘重处理只能前台手工处理!‘ TYPE ‘S‘  DISPLAY LIKE ‘E‘.
      LEAVE LIST-PROCESSING.
    ENDIF.
    SELECT SINGLE * FROM zfit1004 INTO ls_zfit1004 WHERE usnam = sy-uname.
    IF sy-subrc <> 0.
      MESSAGE ‘请联系产品维护权限!‘ TYPE ‘S‘  DISPLAY LIKE ‘E‘.
      LEAVE LIST-PROCESSING.
    ENDIF.
  ENDIF.

  SELECT SINGLE * FROM zruning_lock INTO ls_zruning_lock WHERE zprogram = sy-

repid AND flag = ‘X‘.
  IF sy-subrc EQ 0.
    DO.
*加锁
      CALL FUNCTION ‘ENQUEUE_EZ_ZRUNING_LOCK‘
        EXPORTING
          mode_zruning_lock = ‘X‘
          mandt             = sy-mandt
          zprogram          = sy-repid
          _scope            = ‘1‘
        EXCEPTIONS
          foreign_lock      = 1
          system_failure    = 2
          OTHERS            = 3.
      IF sy-subrc = 0.
        EXIT.
      ELSE.
        IF sy-batch = ‘X‘.
          WAIT UP TO 10 SECONDS.
        ELSE.
          MESSAGE ‘该程序已有其他用户在运行,请稍候再试!‘ TYPE ‘S‘  DISPLAY LIKE 

‘E‘.
          LEAVE LIST-PROCESSING.
        ENDIF.
      ENDIF.
    ENDDO.
  ELSE.
    MESSAGE ‘请维护加锁配置表ZRUNING_LOCK!‘ TYPE ‘S‘  DISPLAY LIKE ‘E‘.
    LEAVE LIST-PROCESSING.
  ENDIF.

ENDFORM.                    " frm_check_run
*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data .
  DATA:
    lr_status  TYPE RANGE OF zdestatus01,
    ls_status  LIKE LINE OF lr_status.
  DATA: lt_zfit1048 LIKE TABLE OF zfit1048,
        ls_zfit1048 LIKE zfit1048.
  FIELD-SYMBOLS:
               <lf_alv> LIKE LINE OF gt_alv.

  ls_status(3) = ‘IEQ‘.
  IF p_ccl = ‘X‘.
    ls_status-low = ‘C‘.
    APPEND ls_status TO lr_status.
  ELSE.
    ls_status-low = ‘E‘.
    APPEND ls_status TO lr_status.
    ls_status-low = ‘‘.
    APPEND ls_status TO lr_status.
  ENDIF.

**取主数据
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE gt_alv
    FROM zfit1048
    WHERE zdate_js   IN s_zdate
      AND ajust_date IN s_adate
      AND mblnr      IN s_mblnr
      AND iblnr      IN s_iblnr
      AND status     IN lr_status.

  SORT gt_alv BY iblnr mblnr.
  IF gt_alv[] IS INITIAL.
    MESSAGE ‘查询不到符合条件的数据‘ TYPE ‘S‘ DISPLAY LIKE ‘E‘.
    LEAVE LIST-PROCESSING.
  ENDIF.

**不是重处理时,需先设置C状态,然后释放程序锁
  IF p_ccl <> ‘X‘.
    LOOP AT gt_alv ASSIGNING <lf_alv>.
      MOVE-CORRESPONDING <lf_alv> TO ls_zfit1048.
      ls_zfit1048-status = ‘C‘.
      APPEND ls_zfit1048 TO lt_zfit1048.
    ENDLOOP.
    MODIFY zfit1048 FROM TABLE lt_zfit1048.
    IF sy-subrc = 0.
      COMMIT WORK AND WAIT.
    ELSE.
      ROLLBACK WORK.
      MESSAGE ‘更新处理数据C状态到表ZFIT1048失败‘ TYPE ‘S‘ DISPLAY LIKE ‘E‘.
      LEAVE LIST-PROCESSING.
    ENDIF.
  ENDIF.

  PERFORM frm_release_lock.

ENDFORM.                    " frm_get_data
*&---------------------------------------------------------------------*
*&      Form  frm_pro_doc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_pro_doc .
  FIELD-SYMBOLS: <lf_alv> LIKE LINE OF gt_alv.
**定义货物移动(MB11)收货过账的结构和变量
  DATA: ls_heade                 LIKE bapi2017_gm_head_01.
  DATA: ls_code                  LIKE bapi2017_gm_code.
*  DATA: ls_testrun               LIKE bapi2017_gm_gen-testrun.
  DATA: ls_goodsmvt_headret      LIKE bapi2017_gm_head_ret.
  DATA: ls_materialdocument      LIKE bapi2017_gm_head_ret-mat_doc.
  DATA: ls_matdocumentyear       LIKE bapi2017_gm_head_ret-doc_year.
  DATA: ls_goodsmvt_item         LIKE bapi2017_gm_item_create,
        lt_goodsmvt_item         LIKE TABLE OF bapi2017_gm_item_create,
        ls_goodsmvt_serialnumber LIKE bapi2017_gm_serialnumber,
        lt_goodsmvt_serialnumber LIKE TABLE OF bapi2017_gm_serialnumber,
        ls_return                LIKE bapiret2 ,
        lt_return                LIKE TABLE OF bapiret2 .
  DATA: lv_xblnr LIKE bkpf-xblnr,
        lv_zuonr LIKE bseg-zuonr.
  DATA: l_error TYPE c,
        l_msg   TYPE string.
  DATA: ls_bkpf LIKE bkpf,
        ls_bseg LIKE bseg,
        lv_awkey LIKE bkpf-awkey.

**处理数据
  LOOP AT gt_alv ASSIGNING <lf_alv>.

    CLEAR: ls_heade,
           ls_goodsmvt_headret,ls_materialdocument, ls_matdocumentyear,
           lt_goodsmvt_item,    lt_goodsmvt_serialnumber,lt_return.
**s1.抬头赋值:
*凭证日期:调整日期AJUST_DATE
*记账日期:当屏幕输入的BUDAT为空,则取调整日期AJUST_DATE,否则取屏幕输入BUDAT
    ls_code-gm_code        = ‘06‘.                              "MB11执行货物移

动收货,标准收货
    ls_heade-doc_date      = <lf_alv>-ajust_date.               "凭证日期
    IF p_budat IS INITIAL.
      ls_heade-pstng_date    = <lf_alv>-ajust_date.             "记账日期
    ELSE.
      ls_heade-pstng_date    = p_budat.
    ENDIF.
    ls_heade-pr_uname        = sy-uname.                        "用户名
**is_heade-header_txt    = ‘[ERP2.0]自营库存平台一期‘.        "抬头文本

**s2.项目赋值:
*商品:取数为存表中的MATNR;
*数量:取数为存表中的DIFMG;
*批次:取数为存表中的CHARG;
*移动类型:需根据DIFMG差异数量判断:
*当DIFMG差异数量不存在‘-’是,R3调用MB11增加库存,移动类型默认为Y52;
*当DIFMG差异数量存在‘-’是,R3调用MB11减少库存,移动类型默认为Y51;
*地点:WERKS    工厂
*库存地点:LGORT    库存地点
    ls_goodsmvt_item-material  = <lf_alv>-matnr.                       "商品号
    ls_goodsmvt_item-sales_ord = <lf_alv>-difmg.                       "数量
    ls_goodsmvt_item-plant     = <lf_alv>-werks.                       "工厂
    ls_goodsmvt_item-move_plant = <lf_alv>-werks.           "工厂11/18
    ls_goodsmvt_item-stge_loc   = <lf_alv>-lgort.                      "库存地点
    ls_goodsmvt_item-move_stloc = <lf_alv>-lgort.                      "库存地点

11/18
    ls_goodsmvt_item-batch      = <lf_alv>-charg.                      "批号
    IF <lf_alv>-difmg > 0.
      ls_goodsmvt_item-move_type = ‘Y52‘.                              "移动类型
    ELSE.
      ls_goodsmvt_item-move_type = ‘Y51‘.
    ENDIF.

**s3.细节赋值
*仓储类型:默认为999;
*仓位:默认为999;
*分配:输入MBLNR    SIMS MD 单号;
*文本:输入JUST_DATE    调整日期+ ‘确认销售发货成本(盘点)’
*参照:输入IBLNR   SIMS MD 单号
    ls_goodsmvt_item-entry_uom = <lf_alv>-meins.                      "单位
    ls_goodsmvt_item-stge_type   = ‘999‘.                             "仓储类型
    ls_goodsmvt_item-stge_bin    = ‘999‘.                             "仓位
    CONCATENATE <lf_alv>-ajust_date ‘确认销售发货成本(盘点)‘ INTO  

ls_goodsmvt_item-item_text.
    APPEND ls_goodsmvt_item TO lt_goodsmvt_item.
    CLEAR: ls_goodsmvt_item.

***Export分配和参照,在ZGGBS002替代程序里Import
***去替代商品凭证对应会计凭证分配和参照
    MOVE <lf_alv>-iblnr TO lv_xblnr.
    MOVE <lf_alv>-mblnr TO lv_zuonr.
    EXPORT lv_xblnr TO MEMORY ID  ‘LV_XBLNR‘."抬头参照
    EXPORT lv_zuonr TO MEMORY ID  ‘LV_ZUONR‘."行分配

    break 88392028.
**GR CREATE
    CALL FUNCTION ‘BAPI_GOODSMVT_CREATE‘
      EXPORTING
        goodsmvt_header       = ls_heade
        goodsmvt_code         = ls_code
      IMPORTING
        goodsmvt_headret      = ls_goodsmvt_headret
        materialdocument      = ls_materialdocument
        matdocumentyear       = ls_matdocumentyear
      TABLES
        goodsmvt_item         = lt_goodsmvt_item
        goodsmvt_serialnumber = lt_goodsmvt_serialnumber
        return                = lt_return.

    LOOP AT lt_return INTO ls_return WHERE type = ‘E‘ OR type = ‘A‘.
      CONCATENATE l_msg ls_return-message INTO l_msg.
      l_error = ‘X‘.
    ENDLOOP.

    IF l_error = ‘X‘.
      CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK‘.
      <lf_alv>-status_fh = ‘E‘.
      CONCATENATE ‘生成商品凭证失败!‘ l_msg INTO <lf_alv>-message_fh.
    ELSE.
* 返回商品凭证号,提交
      CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT‘
        EXPORTING
          wait = ‘X‘.
      <lf_alv>-status_fh = ‘S‘.
      <lf_alv>-mblnr_fh = ls_materialdocument.
      <lf_alv>-message_fh = ‘生成商品凭证成功!‘.
**商品凭证成功,通过MBLNR_FH+年度 取会计凭证
      CLEAR: ls_bkpf, ls_bseg, lv_awkey.
      CONCATENATE ls_materialdocument ls_matdocumentyear INTO lv_awkey.

      SELECT SINGLE *
        INTO ls_bkpf
        FROM bkpf
       WHERE awkey = lv_awkey
         AND awtyp = ‘MKPF‘.

      IF sy-subrc EQ 0.
        SELECT SINGLE *
          INTO ls_bseg
          FROM bseg
         WHERE bukrs = ls_bkpf-bukrs
           AND belnr = ls_bkpf-belnr
           AND gjahr = ls_bkpf-gjahr
           AND hkont = ‘1243999994‘.
**会计凭证回写
        <lf_alv>-belnr_fh = ls_bkpf-belnr.
        <lf_alv>-mjahr    = ls_bkpf-gjahr.
        <lf_alv>-bukrs3   = ls_bkpf-bukrs.
        <lf_alv>-budat_fh = ls_bkpf-budat.
        <lf_alv>-cpudt_fh = ls_bkpf-cpudt.
        <lf_alv>-dmbtr3   = ls_bseg-dmbtr.
      ENDIF.

    ENDIF.

**数据回写zfit1048
    UPDATE zfit1048 SET status_fh  = <lf_alv>-status_fh
                        message_fh = <lf_alv>-message_fh
                        mblnr_fh   = <lf_alv>-mblnr_fh
                        belnr_fh   = <lf_alv>-belnr_fh
                        bukrs3     = <lf_alv>-bukrs3
                        dmbtr3     = <lf_alv>-dmbtr3
                        mjahr      = <lf_alv>-mjahr
                        budat_fh   = <lf_alv>-budat_fh
                        cpudt_fh   = <lf_alv>-cpudt_fh
* STATUS
                  WHERE iblnr    = <lf_alv>-iblnr
                    AND gjahr    = <lf_alv>-gjahr
                    AND serialno = <lf_alv>-serialno
                    AND mblnr    = <lf_alv>-mblnr
                    AND uuid     = <lf_alv>-uuid.
    IF sy-subrc EQ 0.
      COMMIT WORK AND WAIT.
    ELSE.
      ROLLBACK WORK.
      <lf_alv>-status_fh = ‘E‘.
      <lf_alv>-message_fh = ‘商品凭证记账状态更新zfit1048表失败!‘.
    ENDIF.

  ENDLOOP.

ENDFORM.                    " frm_pro_doc
*&---------------------------------------------------------------------*
*&      Form  frm_alv_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_alv_data .

  IF sy-batch = ‘X‘.
    RETURN.
  ENDIF.

  DEFINE lm_fieldcat.
    clear:gs_fcat.
    gs_fcat-tabname   = ‘GT_ALV‘.
    gs_fcat-fieldname = &1.
    gs_fcat-scrtext_l = &2.
    gs_fcat-scrtext_m = &2.
    gs_fcat-scrtext_s = &2.
    gs_fcat-no_out    = &3.
    gs_fcat-outputlen = &4.
    gs_fcat-do_sum    = &5.
    gs_fcat-hotspot   = &6.
    gs_fcat-ref_table  = &7.
    gs_fcat-ref_field  = &8.
    append gs_fcat to gt_fcat.
  END-OF-DEFINITION.

  REFRESH: gt_fcat.
  lm_fieldcat:
‘IBLNR     ‘   ‘库存盘点凭证‘    ‘‘ ‘‘  ‘‘ ‘‘ ‘‘  ‘‘ ,
‘MBLNR     ‘   ‘SIMS MD单号‘     ‘‘ ‘‘  ‘‘ ‘‘ ‘‘  ‘‘,
‘WERKS     ‘   ‘工厂 ‘           ‘‘ ‘‘  ‘‘ ‘‘ ‘‘  ‘‘ ,
‘LGORT     ‘   ‘库存地点‘        ‘‘ ‘‘  ‘‘ ‘‘ ‘‘  ‘‘ ,
‘MATNR     ‘   ‘商品编码‘        ‘‘ ‘18‘  ‘‘ ‘‘ ‘‘  ‘‘ ,
‘MEINS     ‘   ‘单位‘            ‘‘ ‘‘  ‘‘ ‘‘ ‘‘  ‘‘ ,
‘CHARG     ‘   ‘批次‘            ‘‘ ‘‘  ‘‘ ‘‘ ‘‘  ‘‘ ,
‘DIFMG     ‘   ‘差异数量 ‘       ‘‘ ‘‘ ‘‘ ‘‘ ‘‘  ‘‘ ,
‘AJUST_DATE‘   ‘调整日期 ‘       ‘‘ ‘‘ ‘‘ ‘‘ ‘‘  ‘‘ ,
‘STATUS_FH ‘   ‘商品凭证记账状态‘  ‘‘ ‘‘ ‘‘ ‘‘ ‘‘  ‘‘ ,
‘MESSAGE_FH‘   ‘消息 ‘             ‘‘ ‘‘ ‘‘ ‘‘ ‘‘  ‘‘ ,
‘MBLNR_FH  ‘   ‘商品凭证‘          ‘‘ ‘‘ ‘‘ ‘‘ ‘‘  ‘‘ ,
‘MJAHR  ‘      ‘凭证年度‘          ‘‘ ‘‘ ‘‘ ‘‘ ‘‘  ‘‘,
‘BELNR_FH  ‘   ‘会计凭证‘          ‘‘ ‘‘ ‘‘ ‘‘ ‘‘  ‘‘ .

  gs_layout-zebra       = ‘X‘.
  gs_layout-cwidth_opt  = ‘X‘.
*  gs_layout-box_fname   = ‘SEL‘. "可放出最前的选择中方块"

  CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC‘
    EXPORTING
      i_callback_program      = sy-repid
      i_callback_user_command = ‘FRM_USER_COMMAND‘
      is_layout_lvc           = gs_layout
      it_fieldcat_lvc         = gt_fcat
      i_save                  = ‘A‘
    TABLES
      t_outtab                = gt_alv
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " frm_alv_data
*&---------------------------------------------------------------------*
*&      Form  frm_release_lock
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_release_lock .
  CALL FUNCTION ‘DEQUEUE_EZ_ZRUNING_LOCK‘
    EXPORTING
      mode_zruning_lock = ‘X‘
      mandt             = sy-mandt
      zprogram          = sy-repid.
ENDFORM.                    " frm_release_lock

原文地址:https://www.cnblogs.com/rainysblog/p/8494864.html

时间: 2024-11-08 14:15:08

MB11 生鲜项目原料消耗发货功能的相关文章

ios学习笔记图片+图片解释(c语言 oc语言 ios控件 ios小项目 ios小功能 swift都有而且笔记完整喔)

下面是目录其中ios文件夹包括了大部分ios控件的介绍和演示,swift的时完整版,可以学习完swift(这个看的是swift刚出来一周的视频截图,可能有点赶,但是完整),c语言和oc语言的也可以完整的学习完所需知识,,其他文件夹的内容如其名说描述一样 没张图片都有文字说明,可以需要该功能的时候搜索一下然后打开图片就可以学习到 网盘下载地址:需要的话给留言我再传上去 http://www.cnblogs.com/langtianya原创 ios学习笔记图片+图片解释(c语言 oc语言 ios控件

(生鲜项目)17. drf实现发送短信验证码功能

第一步; 前期分析 由于之前在设计model的时候, 我们已经决定对code进行数据库保存, 所以这里我们应该使用 mixins.CreateModelMixin 同时, 用户发过来的手机号码, 我们在后端应该执行自己的验证, 包括 手机号码是否被注册 手机号码是否合法  [在settings.py中加上 REGEX_MOBILE="^1[358]\d{9}$|^147\d{8}$|^176\d{8}$"] 两次验证码的间隔是否大于60秒 基于以上考虑, 我们需要创建一个 serial

天天生鲜项目

1.天天生鲜商业模式 认识电商 1.1 B2B--企业对企业 B2B ( Business to Business)是指进行电子商务交易的供需双方都是商家(或企业. 公司),她(他)们使用了互联网的技术或各种商务网络平台,完成商务交易的过程.电子 商务是现代 B2B marketing 的一种具体主要的表现形式 案例:阿里巴巴.慧聪网 1.2 C2C--个人对个人 C2C 即 Customer(Consumer) to Customer(Consumer),意思就是消费者个人 间的电子商务行为.

项目总结二:关于项目中一些功能的优化

前言: 最近一直在维护老的项目,遇到的问题也千奇百怪,需要修补的,需要优化的,需要特殊处理的,感觉总是那么的无语.也许这时候也应该感叹一句:路漫漫其修远兮,吾将上下而求索吧. 这篇文章就只是讲讲老项目中遇到的种种不敢苟同的代码写法,以及遇到一些问题时的处理方法. 1.关于按钮事件的重复点击问题 我们开发中大概都经历过这样的事情,我的一个button被重复的快速点击,(我们开发者应该更清楚的知道这意味着什么).那我们再深入的想一下(给这样的事件安排一个特定的环境):例如当网络较差的情况下,再例如当

【iOS开发-94】xcode6如果使用GIT以及如何给老得项目增加GIT功能?

(1)针对新项目:如何使用GIT?在新建项目过程中,选中如下复选框即可. (2)针对老项目,添加GIT功能. --在终端,cd到项目目录 --然后输入git init,初始化一个.git目录,即创建一个仓库 --然后输入git add . ,即表示要添加的内容是把当前目录里的内容添加到仓库中 --最后输入git commit -m "这里是本次更新的备注等等",这句话意思是提交,并且添加了备注.至此才算是更新完成.

django框架之BBS项目之评论功能

内容回顾    1. BBS项目 CMS        1. 登录            1. form组件            2. auth模块            3. 验证码        2. 注册            1. form组件                1. 生成html代码                    直接for循环form_obj,就能够遍历所有字段                2. 验证                    1. 默认的那些验证

Django项目: 3.用户注册功能

本章内容的补充知识点 导入库的良好顺序: 1.系统库 2.django库 3.自己定义的库(第三方库) redis缓存数据库的数据调用速度快,但是不利于长时间保存. mysql用于长时间存储,但是调用比较慢. session会话存储的内容(以字典的方式存放)放在redis缓存里面,要设置过期时间 用户注册功能 一.用户模型设计 1. 用户表字段分析 用户名 密码 手机号 邮箱 2.用户模型设计 django的强大之处在于开发效率高,内置了权限模块之类的很多常用功能.在开始一个新的django项目

项目中常用功能,如:流媒体、健康数据(步数等)等-b

整理iOS开发中使用的各种流媒体和常用的高级功能.由于时间关系,目前只写了一部分功能,全部都采用的是系统方法,没用第三方,截图如下: screen1.png screen2.png 个人比较懒,不爱多写文字,直接上代码,哈哈. 视频 系统用AVFoundation与MediaPlayer框架实现播放视频的方案.其中AVFoundation扩展性好,都需自定义功能,而MediaPlayer集成简单,但是样式不可扩展. 1.AVFoundation使用AVPlayer播放视频,它属于view的lay

IOS开发-项目实战-点赞功能的实现

实现思路: 1.每一条新闻就是一个cell,在cell上添加点赞按钮. 2.让cell的控制器成为自定义cell的代理,将点击了哪一个cell放在代理方法中传出去. 3.并将这条新闻的ID和当前用户的ID上传服务器. 4.此时要考虑每个用户只能点击一次,且当用户再次点击的时候,取消点赞(定义一个BOOL变量存储用户的点击次数).则将上传的数据取出来,做判断,如果取出来有数据,说明用户点击过,没有数据那就存储到网络.再次点击,将请求下来的数据,即BOOL变量存储为NO,即取消点赞. 5.到这里就要