2026-07-29 세션 — AL발주서 QA 8건 (업체 다중등록·인쇄·엑셀 빈블록·인라인 드롭리스트)
논의·대안
페페가 /field/al-orderpaper(AL발주서) 화면 QA 리포트 8건을 보냈다. 발주서·orderpaper 도메인의 화면 수정과
엑셀 출력물 수정이 섞여 있고, 이 중 #2(업체 매핑)만 해석이 갈려 착수 전에 1문항 그릴링을 했다.
- #2 해석 갈림: "AL업체, 유리업체 추가 기능이 필요하다 … AL 발주서 테이블에 유리업체 컬럼을 만들고 일괄매핑을 기본으로 하되 개별 업체 선택이 필요하다."
- (A) 그리드에 유리업체 컬럼만 추가, 행마다 업체마스터에서 직접 선택 — 가장 작음.
- (B) AL·유리 둘 다 그리드 컬럼 — 컬럼 2개 증가라 #8(가로폭)과 충돌.
- (C) 헤더에 AL업체·유리업체를 여러 줄 등록(+버튼) + 그리드 컬럼은 그 등록분 중에서 선택 ← 페페 선택.
- #5 "기본 양식자체를 먼저 수정한다": 기존 구현은 빈 블록을
print_area밖으로 밀어두기만 해서 파일을 열면 빈 발주서가 8장 딸려 있었다. 인쇄영역 조정이 아니라 행을 실제로 삭제하는 쪽으로 정리. - #1 인쇄 증상 진단: "AL업체 제목 바로 아래 프레임 굵은 선만 보임" = 데이터가 아니라 인쇄 레이아웃 문제.
원인은
@media print의body *{visibility:hidden}토글이 모달(transform:translateX(-50%)+max-height:92vh+overflow:auto) 안의 내용을 인쇄 페이지에서 잘라먹은 것. CSS를 더 만지는 대신 인쇄 대상만 담은 iframe 문서로 분리해 클래스 자체를 없앴다.
결정
- 업체 다중등록 = 헤더 다중 + 항목 선택(C안). 첫 업체 = 일괄 기본값이고 항목 업체칸이 비면 첫 업체로 간다.
저장은
al_orderpaper.vendors(JSON) +al_orderpaper_item.al_vendor/glass_vendor(patch44). 첫 업체는 기존 단일컬럼(al_vendor/glass_vendor)에 그대로 유지 — 목록·검색·구버전 페이로드가 안 깨진다. - 미리보기·엑셀은 업체마다 발주서 1장. 엑셀은 업체 묶음이 블록을 통째로 차지한다(한 블록에 두 업체 혼재 금지). 양식 블록(AL 9장·유리 5장)보다 필요 장수가 많으면 조용히 누락시키지 않고 400 + 사유 메시지.
- 폰트 색상 기본 지침 = 블랙 70% 이상(페페 지시로
projects/pfs/rules.md신설·기록). - 운영 배포는 하지 않음 — 지시문에 "운영 배포" 문구가 없다.
deploy-live절대 규칙에 따라 master(8001)까지만.
산출물·커밋
pfs master 커밋 3건 (테스트 서버 8001 자동배포 확인).
- b69d325 — QA 8건 본 구현
- #1 인쇄: @media print 폐기 → printSheets() iframe 출력(#alSheetCss 스타일 주입).
- #2 업체 다중등록: 헤더 업체행 그리드(+AL업체/+유리업체), 그리드 AL업체·유리업체 컬럼(select),
_groups()로 업체별 블록 배정, patch44_al_orderpaper_multi_vendor.sql(DAO ensure_tables가 멱등 ALTER).
- #3 브레이크다운 #94a3b8 → #333. #4 계산셀 font-weight:700 → 400(색상 유지).
- #5 _trim_blocks() — 안 쓰는 뒤 블록 병합해제 후 행 삭제. 부수 수정 = _fill_label_row_addr의 조기
return으로 입고처가 첫 블록에만 채워지던 것(2장부터 공란) → 전 블록.
- #6 datalist 제거 → attachCombo() 인라인 드롭리스트(업체명·품명).
- #7 업체행 CSS grid(display:contents 행) — 컬럼 왼쪽 라인 정렬, 담당자 폭 오토.
- #8 그리드 width:max-content; min-width:100%, 품명 150→175px, 목대·유리 100→124px.
- f6bcfb2 — #7 보완: 전화·팩스도 폭 오토(031-355-9705(내선206) 잘림 발견) + UI 검증 스크립트.
- 6f9732c — #1 보완: 발주서 양식 헤더 colspan 합이 n+1이라 우측에 빈 컬럼이 남던 것 → n-4로 정정.
파일: web/templates/basic/field/field_al_orderpaper.html, web/static/js/al_orderpaper.js,
api/pfs/al_orderpaper/{al_orderpaper_excel.py, dao/al_orderpaper_dao.py, service/al_orderpaper_service.py,
controller/al_orderpaper_controller.py}, migrations/patch44_al_orderpaper_multi_vendor.sql,
scripts/_al_orderpaper_e2e_test.py, scripts/_al_orderpaper_ui_check.py.
검증
- 엑셀 생성기 자체검사(
python al_orderpaper_excel.py) — 빈블록 삭제(AL 180행→20행), 업체 2곳 → 유리 2블록, 블록별 수신처·입고처·현장명 assert 통과. - 테스트서버 E2E 18항목 PASS(
ssm_run.py scripts/_al_orderpaper_e2e_test.py) — 저장/재조회/업체목록 복원/ 항목 업체매핑 영속/첫 업체 단일컬럼 유지/엑셀 블록 분리·트림·인쇄영역/구 페이로드 호환/삭제. - 테스트서버 UI 27항목 PASS(로컬 Playwright
scripts/_al_orderpaper_ui_check.py, 콘솔 에러 0) — 드롭리스트 부분일치·Enter 확정, 업체행 5컬럼 왼쪽정렬 픽셀 일치, 담당자·전화·팩스 잘림 0, 브레이크다운 색rgb(51,51,51)·굵기 400, 품명 175px·계산셀 잘림 0, 미리보기 3장(업체별), 인쇄 iframe 3장·숨김 셀 0, 양식 각 행 컬럼수 일치. 스크린샷 =pfs/scripts/_ui_shots/test_al_*.png.
다음
- ⏳페페 육안 — 특히 실제 인쇄(Ctrl+P 미리보기) 결과와 다운로드 엑셀. 헤드리스에선
window.print()가 무동작이라 iframe 내용까지만 검증했다. - ✅2026-08-07 운영배포 완료(페페 지시 "AL발주서 내용 운영배포 진행해") —
deploy-live ffb5732← masterb69d325+f6bcfb2+6f9732c+9209bc19파일 선별 포워드(al_orderpaper 4 + patch44 + al_orderpaper.js + field_al_orderpaper.html + 러너 2). patch44 DDL 은 배포 전에 운영에 선행 적용 (vendors·al_vendor·glass_vendor3컬럼 ADD, 멱등 스크립트scripts/_al_prod_patch44.py) — DAO 자동 ALTER 에 맡기지 않고 통제해서 넣었다. 운영al_orderpaper/_item은 0행이라 데이터 영향 0. 🔴배포 준비 중 발견 = E2E 러너가 26.7.29 API 인증 게이트 이후 401 로 죽어 있었다(EC2에서 무로그인 호출) → 로컬에서pfs_login.env로 HTTPS 로그인 후 실행하도록 수정(9209bc1). 검증 = 배포 전 테스트 E2E 18항목 0 FAIL + UI 27항목 0 FAIL, 배포 후 운영 UI 27항목 0 FAIL·콘솔 0 (화면 조작만 하고 저장은 안 하므로 운영 0행 유지 확인). 사이트맵 미반영 2 → 0. ⏳남은 육안 = 실제 Ctrl+P 인쇄·엑셀 다운로드(헤드리스로는window.print()가 무동작). - 팩스발송 버튼은 여전히 스텁(범위 밖).
- 가로 스크롤: 컬럼 2개(AL업체·유리업체)가 늘어 그리드 총폭 ≈1600px > 래퍼 1210px → 가로 스크롤 발생.
#8 지시("표 가로폭은 현재 기본값 유지")대로면 정상이지만, 거슬리면 편집화면
.al-wrap최대폭 확대가 대안.
관계
- 주제 그룹: al-orderpaper
- 관련 문서: pfs-session-2026-07-29-al-profile-crud, pfs-rules, pfs-playbook