oknosoft / windowbuilder

Окнософт:Заказ дилера
http://www.oknosoft.ru/zd/
Other
10 stars 19 forks source link

Clientofdiler windowsbuilder #533

Closed aks60 closed 5 years ago

aks60 commented 5 years ago

Добрый день! Для нормальной работы компании нам нужно расширить форму ClientOfDiller. 1.Предлагаю внести изменения на форме, добавить две вкладки для “Физ. лица” и “Юр. лица”. Пример json см. в файле wnd_debug.js. Есть второй вариант внесения изменений “form.client_of_dealer = { obj:” оставить без изменений и добавить новый тег, например ui.

  1. Если в нашем локальном модификаторе вернуть отказ от сохранения “Записать и сохранить” то появляется дополнительное диалоговое окно с сообщением о значении гуида текушей записи. Думаю это тестовое сообщение “wnd_debug => $p.md.emit('alert', {t....” ,надо закрыть его или исправить. С уважением, Аксёнов Сергей.
unpete commented 5 years ago

Мы, вроде, договаривались с вашим коллективом предварять pr-ы обсуждениями. Не забывайте на будущее перед тем, как кодировать, обосновать потребность и алгоритм.

unpete commented 5 years ago

Не вижу структуру, где живёт состав полей для разных типов клиента дилера.

Для нормальной работы компании

Странно. Мне казалось, Клиент дилера, не имеет отношения к вашей организации. Это косметическое поле позволяет дилеру печатать бумажки для своих заказчиков. Поясните, как вы собираетесь использовать значения вложенных реквизитов этого поля?

Так же, не забываем, что Клиент дилера - частный случай поля вложенных реквизитов. Мы можем скрывать и по разному обрабатывать вложенные реквизиты в формах, но их состав и порядок определяются выше в метаданных, менять их на лету не следует.

unpete commented 5 years ago

Решение использовать закладки - годное, но для хранения разделителя не надо портить формат. Вместо this.state.valTab + "'" + data.join('\u00A0'), лучше добавить этот разделитель в допметаданные поля и единообразно сериализовать вместе с другими полями.

unpete commented 5 years ago

АУ? Это нормально вообще, начать разговор и пропасть? Синтаксис описания формы должен совпадать с https://github.com/oknosoft/metadata.js/issues/311. Имена типов DataBtn и BtnGroup вызывают сомнения. Может, лучше Tab и Tabs и надо решить, как транслировать и надо ли транслировать значение текущей закладки в значение реквизита DataObj

aks60 commented 5 years ago

Извини что не ответил сразу. Я понял, что начал беседу не там. Ошибся, всё делаю первый раз и удалил ветку, а тут проблема с компиляцией, пока разбираюсь. Посоветуюсь с Ростиславом.

пн, 15 июл. 2019 г. в 20:22, Evgeniy Malyarov notifications@github.com:

АУ? Это нормально вообще, начать разговор и пропасть? Синтаксис описания формы должен совпадать с oknosoft/metadata.js#311 https://github.com/oknosoft/metadata.js/issues/311. Имена типов DataBtn и BtnGroup вызывают сомнения. Может, лучше Tab и Tabs и надо решить, как транслировать и надо ли транслировать значение текущей закладки в значение реквизита DataObj

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/oknosoft/windowbuilder/pull/533?email_source=notifications&email_token=ABWGZVQVCJD5MPDWOXM7VLLP7SW4DA5CNFSM4IDT4PGKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZ6MD5Y#issuecomment-511492599, or mute the thread https://github.com/notifications/unsubscribe-auth/ABWGZVT62W7LK3FJB36EXRLP7SW4DANCNFSM4IDT4PGA .

unpete commented 5 years ago

Вынес renderItems в типовой форме в отдельный экспортный метод, добавил типы Tab, Tabs и Condition, см.: https://github.com/oknosoft/metadata.js/commit/6d6a1f8f1a190ef972bdd6521ee36d0fda76c0f3 Теперь, обработку структуры элементов, можно выкинуть из формы ClientOfDiler и отдать типовому методу. Что скажете?

aks60 commented 5 years ago

Это очень хор.

вт, 16 июл. 2019 г. в 12:30, Evgeniy Malyarov notifications@github.com:

Вынес renderItems в типовой форме в отдельный экспортный метод, добавил типы Tab, Tabs и Condition, см.: oknosoft/metadata.js@6d6a1f8 https://github.com/oknosoft/metadata.js/commit/6d6a1f8f1a190ef972bdd6521ee36d0fda76c0f3 Теперь, обработку структуры элементов, можно выкинуть из формы ClientOfDiler и отдать типовому методу. Что скажете?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/oknosoft/windowbuilder/pull/533?email_source=notifications&email_token=ABWGZVVZZCW3UXIGHR3KVMTP7WILPA5CNFSM4IDT4PGKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD2AIY2Y#issuecomment-511741035, or mute the thread https://github.com/notifications/unsubscribe-auth/ABWGZVT7IXLO4MUMFTY627LP7WILPANCNFSM4IDT4PGA .

unpete commented 5 years ago

Хочу увидеть ваш вариант структуры с разным набором полей для физлиц и юрлиц. Куда смотреть?

aks60 commented 5 years ago
form.client_of_dealer = {
  fields: {
    surname: {
      synonym: 'Фамилия',
      mandatory: true,
      type: {types: ['string'], str_len: 50}
    },
    name: {
      synonym: 'Имя',
      mandatory: true,
      type: {types: ['string'], str_len: 50}
    },
    patronymic: {
      synonym: 'Отчество',
      type: {types: ['string'], str_len: 50}
    },
    passport_serial_number: {
      synonym: 'Серия и номер паспорта',
      tooltip: 'Серия и номер через пробел',
      type: {types: ['string'], str_len: 20}
    },
    passport_date: {
      synonym: 'Дата выдачи паспорта',
      type: {types: ['string'], str_len: 20}
    },
    note: {
      synonym: 'Дополнительно',
      multiline_mode: true,
      type: {types: ['string'], str_len: 50}
    },
    phone: {
      synonym: "Телефон",
      type: {
        types: ["string"], str_len: 50
      }
    },
    address: {
      synonym: "Адрес регистрации",
      type: {
        types: ["string"], str_len: 50
      }
    },
    passport_office: {
      synonym: "Орган выдавший паспорт",
      type: {
        types: ["string"], str_len: 50
      }
    },
    sex: {
      synonym: "Пол",
      type: {
        types: ["boolean"]
      }
    },
    email: {
      synonym: "E-mail адрес",
      type: {
        types: ["string"], str_len: 50
      }
    },
    full_name_org: {
      synonym: 'Полное наименование',
      mandatory: true,
      type: {types: ['string'], str_len: 50}
    },
    scort_name_org: {
      synonym: 'Сокращенное наименование',
      type: {types: ['string'], str_len: 50}
    },
    yur_address: {
      synonym: 'Юридический адрес',
      type: {types: ['string'], str_len: 50}
    },
    mailing_address: {
      synonym: 'Почтовый адрес',
      type: {types: ['string'], str_len: 50}
    },
    inn: {
      synonym: 'ИНН',
      type: {types: ['string'], str_len: 50}
    },
    kpp: {
      synonym: 'КПП',
      type: {types: ['string'], str_len: 50}
    },
    ogrn: {
      synonym: 'ОГРН',
      type: {types: ['string'], str_len: 50}
    },
    okpo: {
      synonym: 'ОКПО',
      type: {types: ['string'], str_len: 50}
    },
    okato: {
      synonym: 'ОКАТО',
      type: {types: ['string'], str_len: 50}
    },
    okogy: {
      synonym: 'ОКОГУ',
      type: {types: ['string'], str_len: 50}
    },
    okfs: {
      synonym: 'ОКФС',
      type: {types: ['string'], str_len: 50}
    },
    okopf: {
      synonym: 'ОКОПФ',
      type: {types: ['string'], str_len: 50}
    },
    gen_director: {
      synonym: 'Генеральный директор',
      type: {types: ['string'], str_len: 50}
    },
    glav_byx: {
      synonym: 'Главный бухгалтер',
      type: {types: ['string'], str_len: 50}
    },
    phone_org: {
      synonym: 'Телефон',
      mandatory: true,
      type: {types: ['string'], str_len: 50}
    },
    bank_details: {
      synonym: 'Банковские реквизиты',
      type: {types: ['string'], str_len: 50}
    },
    checking_account: {
      synonym: 'Расчетный счет',
      type: {types: ['string'], str_len: 50}
    },
    bank: {
      synonym: 'Банк',
      type: {types: ['string'], str_len: 50}
    },
    bik: {
      synonym: 'БИК',
      type: {types: ['string'], str_len: 50}
    },
    corresp_account: {
      synonym: 'Корреспондентский счет',
      type: {types: ['string'], str_len: 50}
    }
  },
  obj: {
    items: [
      {
        element: 'BtnGroup',
        items: [
          {
            element: 'DataBtn',
            label: 'Физ. лицо',
            items: [ //вкладка №1
              {
                element: 'FormGroup',
                row: true,
                items: [
                  {
                    element: 'FormGroup',
                    items: [ //колонка №1
                      {
                        element: 'DataField',
                        fld: 'surname',
                      },
                      {
                        element: 'DataField',
                        fld: 'name',
                      },
                      {
                        element: 'DataField',
                        fld: 'patronymic',
                      },
                      {
                        element: 'DataField',
                        fld: 'email',
                      },
                    ]
                  },
                  {
                    element: 'FormGroup',
                    items: [  //колонка №2
                      {
                        element: 'DataField',
                        fld: 'passport_serial_number',
                      },
                      {
                        element: 'DataField',
                        fld: 'passport_date',
                      },
                      {
                        element: 'DataField',
                        fld: 'note',
                      },
                    ]
                  },
                  {
                    element: 'FormGroup',
                    items: [ //колонка №3
                      {
                        element: "DataField",
                        fld: "phone"
                      }, {
                        element: "DataField",
                        fld: "address"
                      }, {
                        element: "DataField",
                        fld: "passport_office"
                      }, {
                        element: "DataField",
                        fld: "sex"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            element: 'DataBtn',
            label: 'Юр.  лицо',
            items: [ //вкладка №2
              {
                element: 'FormGroup',
                row: true,
                items: [
                  {
                    element: 'FormGroup',
                    items: [
                      {
                        element: 'DataField',
                        fld: 'full_name_org', //Полное наименование
                      },
                      {
                        element: 'DataField',
                        fld: 'scort_name_org' //Сокращенное наименование
                      },
                      {
                        element: 'DataField',//Юридический адрес
                        fld: 'yur_address',
                      },
                      {
                        element: 'DataField',//Почтовый адрес
                        fld: 'mailing_address',
                      },
                      {
                        element: 'DataField',//ИНН
                        fld: 'inn',
                      },
                      {
                        element: 'DataField',//КПП
                        fld: 'kpp',
                      },
                      {
                        element: 'DataField',//ОГРН
                        fld: 'ogrn',
                      },
                    ]
                  },
                  {
                    element: 'FormGroup',
                    items: [
                      {
                        element: 'DataField',//ОКПО
                        fld: 'okpo',
                      },
                      {
                        element: 'DataField',//ОКАТО
                        fld: 'okato',
                      },
                      {
                        element: 'DataField',//ОКОГУ
                        fld: 'okogy',
                      },
                      {
                        element: 'DataField',//ОКФС
                        fld: 'okfs',
                      },
                      {
                        element: 'DataField',//ОКОПФ
                        fld: 'okopf',
                      },
                      {
                        element: 'DataField',//Генеральный директор
                        fld: 'gen_director',
                      },
                      {
                        element: 'DataField',//Главный бухгалтер
                        fld: 'glav_byx',
                      },
                    ]
                  },
                  {
                    element: 'FormGroup',
                    items: [
                      {
                        element: 'DataField',//Телефон
                        fld: 'phone_org',
                      },
                      {
                        element: 'DataField',//Банковские реквизиты
                        fld: 'bank_details',
                      },
                      {
                        element: 'DataField',//Расчетный счет
                        fld: 'checking_account',
                      },
                      {
                        element: 'DataField',//Банк
                        fld: 'bank',
                      },
                      {
                        element: 'DataField',//БИК
                        fld: 'bik',
                      },
                      {
                        element: 'DataField',//Корреспондентский счет
                        fld: 'corresp_account',
                      },
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  },
  selection: {
    indexes: [
      {
        mango: false,
      }
    ]
  }
};
aks60 commented 5 years ago

Ответил на GitHub

вт, 16 июл. 2019 г. в 12:48, Evgeniy Malyarov notifications@github.com:

Хочу увидеть ваш вариант структуры с разным набором полей для физлиц и юрлиц. Куда смотреть?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/oknosoft/windowbuilder/pull/533?email_source=notifications&email_token=ABWGZVQ3FSCPBOGSWN77WG3P7WKO5A5CNFSM4IDT4PGKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD2AKJMI#issuecomment-511747249, or mute the thread https://github.com/notifications/unsubscribe-auth/ABWGZVSHPEHD34EHFSKY4QDP7WKO5ANCNFSM4IDT4PGA .

unpete commented 5 years ago

Спасибо, вопрос в очереди.

unpete commented 5 years ago

Абстрактный рендер, вроде, работает - можете проверить в dev (после второго запуска браузера, т.к. crazy_ram). Идея хранить много реквизитов в поле клиент дилера мне не нравится, но вреда от вашего подхода нет - можете пользоваться. Если будете отлаживать на локальных сборках, надо подтянуть изменения файлов метадаты из git. Файлы в npm чуть устарели. Дублирую здесь код модификатора:

const {client_of_dealer} = $p.doc.calc_order.metadata().form;

client_of_dealer.obj = {
  items: [
    {
      element: 'Tabs',
      fld: 'individual_legal',
      items: [
        {
          element: 'Tab',
          cond_value: 'ФизЛицо',
          label: 'Физ. лицо',
        },
        {
          element: 'Tab',
          cond_value: 'ЮрЛицо',
          label: 'Юр.  лицо',
        }
      ]
    },
    {
      element: 'Condition',
      fld: 'individual_legal',
      cond_value: 'ФизЛицо',
      items: [
        {
          element: 'FormGroup',
          row: true,
          items: [
            {
              element: 'FormGroup',
              items: [ //колонка №1
                {
                  element: 'DataField',
                  fld: 'surname',
                },
                {
                  element: 'DataField',
                  fld: 'name',
                },
                {
                  element: 'DataField',
                  fld: 'patronymic',
                },
                {
                  element: 'DataField',
                  fld: 'email',
                },
              ]
            },
            {
              element: 'FormGroup',
              items: [  //колонка №2
                {
                  element: 'DataField',
                  fld: 'passport_serial_number',
                },
                {
                  element: 'DataField',
                  fld: 'passport_date',
                },
                {
                  element: 'DataField',
                  fld: 'note',
                },
              ]
            },
            {
              element: 'FormGroup',
              items: [ //колонка №3
                {
                  element: 'DataField',
                  fld: 'phone'
                }, {
                  element: 'DataField',
                  fld: 'address'
                }, {
                  element: 'DataField',
                  fld: 'passport_office'
                }, {
                  element: 'FieldSelectStatic',
                  fld: 'sex',
                  options: ['Мужской','Женский']
                }
              ]
            }
          ]
        }
      ],
    },
    {
      element: 'Condition',
      fld: 'individual_legal',
      cond_value: 'ЮрЛицо',
      items: [
        {
          element: 'FormGroup',
          row: true,
          items: [
            {
              element: 'FormGroup',
              items: [
                {
                  element: 'DataField',
                  fld: 'full_name_org', //Полное наименование
                },
                {
                  element: 'DataField',
                  fld: 'scort_name_org' //Сокращенное наименование
                },
                {
                  element: 'DataField',//Юридический адрес
                  fld: 'yur_address',
                },
                {
                  element: 'DataField',//Почтовый адрес
                  fld: 'mailing_address',
                },
                {
                  element: 'DataField',//ИНН
                  fld: 'inn',
                },
                {
                  element: 'DataField',//КПП
                  fld: 'kpp',
                },
                {
                  element: 'DataField',//ОГРН
                  fld: 'ogrn',
                },
              ]
            },
            {
              element: 'FormGroup',
              items: [
                {
                  element: 'DataField',//ОКПО
                  fld: 'okpo',
                },
                {
                  element: 'DataField',//ОКАТО
                  fld: 'okato',
                },
                {
                  element: 'DataField',//ОКОГУ
                  fld: 'okogy',
                },
                {
                  element: 'DataField',//ОКФС
                  fld: 'okfs',
                },
                {
                  element: 'DataField',//ОКОПФ
                  fld: 'okopf',
                },
                {
                  element: 'DataField',//Генеральный директор
                  fld: 'gen_director',
                },
                {
                  element: 'DataField',//Главный бухгалтер
                  fld: 'glav_byx',
                },
              ]
            },
            {
              element: 'FormGroup',
              items: [
                {
                  element: 'DataField',//Телефон
                  fld: 'phone_org',
                },
                {
                  element: 'DataField',//Банковские реквизиты
                  fld: 'bank_details',
                },
                {
                  element: 'DataField',//Расчетный счет
                  fld: 'checking_account',
                },
                {
                  element: 'DataField',//Банк
                  fld: 'bank',
                },
                {
                  element: 'DataField',//БИК
                  fld: 'bik',
                },
                {
                  element: 'DataField',//Корреспондентский счет
                  fld: 'corresp_account',
                },
              ]
            }
          ]
        }
      ]
    },
  ]
};

client_of_dealer.fields = {
  surname: {
    synonym: 'Фамилия',
    mandatory: true,
    type: {types: ['string'], str_len: 50}
  },
  name: {
    synonym: 'Имя',
    mandatory: true,
    type: {types: ['string'], str_len: 50}
  },
  patronymic: {
    synonym: 'Отчество',
    type: {types: ['string'], str_len: 50}
  },
  passport_serial_number: {
    synonym: 'Серия и номер паспорта',
    tooltip: 'Серия и номер через пробел',
    type: {types: ['string'], str_len: 20}
  },
  passport_date: {
    synonym: 'Дата выдачи паспорта',
    type: {types: ['string'], str_len: 20}
  },
  note: {
    synonym: 'Дополнительно',
    multiline_mode: true,
    type: {types: ['string'], str_len: 50}
  },
  phone: {
    synonym: "Телефон",
    type: {
      types: ["string"], str_len: 50
    }
  },
  address: {
    synonym: "Адрес регистрации",
    type: {
      types: ["string"], str_len: 50
    }
  },
  passport_office: {
    synonym: "Орган выдавший паспорт",
    type: {
      types: ["string"], str_len: 50
    }
  },
  sex: {
    synonym: "Пол",
    type: {
      is_ref: true,
      types: ["enm.gender"]
    },
    'default': 'Мужской'
  },
  email: {
    synonym: "E-mail адрес",
    type: {
      types: ["string"], str_len: 50
    }
  },
  full_name_org: {
    synonym: 'Полное наименование',
    mandatory: true,
    type: {types: ['string'], str_len: 50}
  },
  scort_name_org: {
    synonym: 'Сокращенное наименование',
    type: {types: ['string'], str_len: 50}
  },
  yur_address: {
    synonym: 'Юридический адрес',
    type: {types: ['string'], str_len: 50}
  },
  mailing_address: {
    synonym: 'Почтовый адрес',
    type: {types: ['string'], str_len: 50}
  },
  inn: {
    synonym: 'ИНН',
    type: {types: ['string'], str_len: 11}
  },
  kpp: {
    synonym: 'КПП',
    type: {types: ['string'], str_len: 20}
  },
  ogrn: {
    synonym: 'ОГРН',
    type: {types: ['string'], str_len: 20}
  },
  okpo: {
    synonym: 'ОКПО',
    type: {types: ['string'], str_len: 50}
  },
  okato: {
    synonym: 'ОКАТО',
    type: {types: ['string'], str_len: 50}
  },
  okogy: {
    synonym: 'ОКОГУ',
    type: {types: ['string'], str_len: 50}
  },
  okfs: {
    synonym: 'ОКФС',
    type: {types: ['string'], str_len: 50}
  },
  okopf: {
    synonym: 'ОКОПФ',
    type: {types: ['string'], str_len: 50}
  },
  gen_director: {
    synonym: 'Генеральный директор',
    type: {types: ['string'], str_len: 50}
  },
  glav_byx: {
    synonym: 'Главный бухгалтер',
    type: {types: ['string'], str_len: 50}
  },
  phone_org: {
    synonym: 'Телефон',
    mandatory: true,
    type: {types: ['string'], str_len: 50}
  },
  bank_details: {
    synonym: 'Банковские реквизиты',
    type: {types: ['string'], str_len: 50}
  },
  checking_account: {
    synonym: 'Расчетный счет',
    type: {types: ['string'], str_len: 50}
  },
  bank: {
    synonym: 'Банк',
    type: {types: ['string'], str_len: 50}
  },
  bik: {
    synonym: 'БИК',
    type: {types: ['string'], str_len: 50}
  },
  corresp_account: {
    synonym: 'Корреспондентский счет',
    type: {types: ['string'], str_len: 50}
  },
  individual_legal: {
    synonym: 'Юр. / физ. лицо',
    type: {
      is_ref: true,
      types: ['enm.individual_legal']
    },
    'default': 'ФизЛицо',
  }
};
aks60 commented 5 years ago

Спасибо. Там в пункте 2 я писал, что вываливается дополнительное окно с гуидом когда событие сохранения возвращает ложь. Можете посмотреть?

чт, 18 июл. 2019 г. в 13:56, Evgeniy Malyarov notifications@github.com:

Closed #533 https://github.com/oknosoft/windowbuilder/pull/533.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/oknosoft/windowbuilder/pull/533?email_source=notifications&email_token=ABWGZVXF2SG75J343UDME6TQABD7XA5CNFSM4IDT4PGKYY3PNVWWK3TUL52HS4DFWZEXG43VMVCXMZLOORHG65DJMZUWGYLUNFXW5KTDN5WW2ZLOORPWSZGOSSG5P4Q#event-2492323826, or mute the thread https://github.com/notifications/unsubscribe-auth/ABWGZVRASSTTJ7DHNQYCFKDQABD7XANCNFSM4IDT4PGA .

aks60 commented 5 years ago

Если заполнить вкладку "Юр. лицо" то лейбл вкладки сохраняется с данными в базе.

чт, 18 июл. 2019 г. в 14:17, Sergey Aksenov gonved60@gmail.com:

Спасибо. Там в пункте 2 я писал, что вываливается дополнительное окно с гуидом когда событие сохранения возвращает ложь. Можете посмотреть?

чт, 18 июл. 2019 г. в 13:56, Evgeniy Malyarov notifications@github.com:

Closed #533 https://github.com/oknosoft/windowbuilder/pull/533.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/oknosoft/windowbuilder/pull/533?email_source=notifications&email_token=ABWGZVXF2SG75J343UDME6TQABD7XA5CNFSM4IDT4PGKYY3PNVWWK3TUL52HS4DFWZEXG43VMVCXMZLOORHG65DJMZUWGYLUNFXW5KTDN5WW2ZLOORPWSZGOSSG5P4Q#event-2492323826, or mute the thread https://github.com/notifications/unsubscribe-auth/ABWGZVRASSTTJ7DHNQYCFKDQABD7XANCNFSM4IDT4PGA .

unpete commented 5 years ago

Не лейбл, а значение реквизита. Tabs - это такой же элемент управления, как поле ввода или переключатель.

unpete commented 5 years ago

В вашем случае, к Tabs подключено свойство individual_legal, но в общем случае, Tabs-ов может быть несколько, в том числе, вложенных и они могут смотреть каждый на свой реквизит

aks60 commented 5 years ago

Сообщение о гуиде?

чт, 18 июл. 2019 г. в 16:11, Evgeniy Malyarov notifications@github.com:

В вашем случае, к Tabs подключено свойство individual_legal, но в общем случае, Tabs-ов может быть несколько, в том числе, вложенных и они могут смотреть каждый на свой реквизит

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/oknosoft/windowbuilder/pull/533?email_source=notifications&email_token=ABWGZVTZJNEXH7SDNN2U57DQABTXBA5CNFSM4IDT4PGKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD2INOLI#issuecomment-512808749, or mute the thread https://github.com/notifications/unsubscribe-auth/ABWGZVRLRWRNSVGI24GLYWDQABTXBANCNFSM4IDT4PGA .

unpete commented 5 years ago

Если в нашем локальном модификаторе

В каком вашем модификаторе? Внятно шаги для воспроизведения проблемы напишите,

aks60 commented 5 years ago

/**

console.log('ecookna: check_impost_to_shtulp')

const {before_save: characteristics_before_save} = $p.CatCharacteristics.prototype; const paramActive = this.params.get(0).param; //ведущая фурнитура

$p.CatCharacteristics.prototype.__define('before_save', { value: function (attr) {

    const ox = this;
    return Promise.resolve()
        .then(() => characteristics_before_save.bind(this)(attr))
        .then(before_save_res => {

            if (before_save_res === false) {
                return before_save_res;
            }
            const {constructions, coordinates} = ox
            let ret = true;
            constructions.forEach(_row => {

                const {furn} = _row
                const {furn_set} = furn
                if (furn_set.specification.find({nom: paramActive})) {
                    coordinates.forEach(el => {

                        if (el.elm_type.name && el.orientation.name &&

el.inset.name) { if (el.elm_type.name === 'Импост' && el.orientation.name === 'Вертикальная') {

                                if

(el.inset.name.toLowerCase().indexOf('импост') != -1) {

                                    $p.msg.show_msg({
                                        type: "alert-warning",
                                        text: `Ошибка! Штульповое

изделие должно содержать штульп, а не импост.`, title: "Подмена штульпа импостом" }); ret = false; } } } }) } }) return ret }); }, configurable: true, writable: true }); Если модификатор возвращает false, то появляется дополнительное диалоговое окно.

чт, 18 июл. 2019 г. в 17:38, Evgeniy Malyarov notifications@github.com:

Если в нашем локальном модификаторе

В каком вашем модификаторе? Внятно шаги для воспроизведения проблемы напишите,

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/oknosoft/windowbuilder/pull/533?email_source=notifications&email_token=ABWGZVSUSRMORRH55MOMPNDQAB56NA5CNFSM4IDT4PGKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD2IWCCY#issuecomment-512844043, or mute the thread https://github.com/notifications/unsubscribe-auth/ABWGZVWP3EOOWDYYRG4WRDTQAB56NANCNFSM4IDT4PGA .

unpete commented 5 years ago

Для чего этот модификатор? Если он используется runtime в рисовалке, почему поиск импоста ведётся по спецификации, а не по изделию? Почему вы подменяете метод характеристики, вместо того, чтобы подписаться на событие перед записью? Если это некая проверка перед записью, про это есть оговоренный синтаксис и подключаются проверки во вставках, чтобы их технолог мог редактировать без программиста. Проверки не должны пытаться взаимодействовать с интерфейсом (вы внутри формулы пытаетесь show_msg), а должны где-то накапливать ошибки, которые интерфейс сам покажет пользователю, если контекст позволит. Before_save ведь, не только в текущем заказе случается. но и при копировании или регламентном пересчете.

И давайте уже перенесём обсуждение в ваш репозиторий. Математика этого модификатора специфична для Экоокон и никогда не попадёт в типовой windowbuilder.

rnpoddor commented 5 years ago

Для поля Клиент дилера нужна настройка в Константы и списки, чтобы можно было включать доступный режим ввода: Только строка, Только форма, Строка и форма. Необходимость такая возникла в связи с переходом на ввод данных только через форму, т.к. хотим разделять данные и использовать поля обязательные для заполнения.

rnpoddor commented 5 years ago

Модификатор Реквизиты клиента пока вернул старый, т.к. у Калевы форма перестала работать.

unpete commented 5 years ago

При вводе через поле: 'Иванов{tab}Иван{tab}Иванович', поля разбегаются по своим местам. Ваши люди используют вместо Таба пробел и вся строка попадает в первый реквизит

rnpoddor commented 5 years ago

Ваши люди используют вместо Таба пробел и вся строка попадает в первый реквизит

Кроме использования таба вместо пробела, нашим людям нужно помнить последовательность расположения полей, это не вариант.

rnpoddor commented 4 years ago

Очень нужен этот функционал https://github.com/oknosoft/windowbuilder/pull/533#issuecomment-514055943.

unpete commented 4 years ago

Да легко. Вы же знаете, как ускорить приоритетные задачи: бартер. Вы исправляете или удаляете несколько плохих формул, а я в благодарность поднимаю ваши задачи выше по списку.

unpete commented 4 years ago

Например, формула Контроль штапика - очень гадкая. Можно с неё начать.

unpete commented 4 years ago

Параметр хотите для абонента, отдела или пользователя?

rnpoddor commented 4 years ago

Для отдела наверное самое оптимальное. Хотя, в нашем случае и для абонента было бы хорошо. Давайте все таки для отдела.

unpete commented 4 years ago

Недавно мы договорились, что параметры отдела физически храним, как допреквизиты подразделения. Пишу, просто для напоминания. Допреквизит и учёт его значения в форме заказа - добавлю. Надеюсь на встречные шаги по формулам. Очень уж они меня бесят.

rnpoddor commented 4 years ago

Можно с неё начать.

Как альтернативу формуле Контроль штапика, предлагаю следующее решение, проверять короткие сегменты заполнений во вставке импоста. На примере вставки 102309 Импост 81мм WHS-72. Тестовые изделия 8 и 14 в заказе 00-007-0004.

unpete commented 4 years ago

Расскажите, зачем вообще потребовалась эта формула. Неужели нет стандартного способа?

rnpoddor commented 4 years ago

Понадобилось для проверки ПТО и для подсказки менеджеру, что имеются короткие штапики и нужно применить инструмент 0-магнит. Инструментом начинают пользоваться когда об этом скажешь, импост двигают кто как может, а здесь как раз ошибка на это указывает и подсказывает что нужно сделать.

rnpoddor commented 4 years ago

Неужели нет стандартного способа?

Может я чего забыл, что за способ?

unpete commented 4 years ago

Ссылку на статью не найду, но для контроля чего угодно есть регламент - обсуждали много раз. Технолог добавляет номенклатуру ошибки в технологический справочник - соединение, вставку или фурнитуру. Предполагаю, что если штапик рождается в примыкающем || соединении, там же надо анализировать его длину, изгибы или что там вы пытаетесь ограничить своей формулой?

rnpoddor commented 4 years ago

Технолог добавляет номенклатуру ошибки в технологический справочник - соединение, вставку или фурнитуру.

Так сейчас и работает. Технолог добавляет номенклатуру ошибки во вставку импоста, задает формулу проверки.

Предполагаю, что если штапик рождается в примыкающем || соединении, там же надо анализировать его длину, изгибы или что там вы пытаетесь ограничить своей формулой?

Только проверка коротких сегментов делается в окрестности точек начала и конца импоста. Короткие сегменты приводят к коротким штапикам.

unpete commented 4 years ago

добавляет номенклатуру ошибки во вставку импоста

А должен - в || соединение, где нужные данные под рукой и не требуется геометрических построений.

Я ведь чего ругаюсь: чтение свойств элементов рисовалки (например, cnn_point) - это активная операция, которая может потребовать пересчет лучей профиля и даже сброс соединения. Обращаться к свойствам элементов надо с осторожностью, помня про реентерабельность (те, кто программировал под DOS или более ранние операционные системы хорошо помнят, как легко падал-зависал компьютер, если время работы некой функции внутри прерывания оказывалось выше разрешенного. в рисовалке - почти так же).

unpete commented 4 years ago

Наверное, новый тип ошибки нужен, чтобы информировать оперативно во время редактирования, а не при записи заказа. Сообщение можно показывать в snack - он лучше модального диалога. Для диких случаев, можно ещё один тип ошибки сделать - с модальным диалогом. В любом случае, обработка ошибок должна быть стандартизирована, а информирование об ошибках должно вписываться в жизненный цикл изделия, а не всплытием диалогов dhtmlx в неожиданные для рисовалки моменты

rnpoddor commented 4 years ago

Наверное, новый тип ошибки нужен, чтобы информировать оперативно во время редактирования, а не при записи заказа.

Сейчас оперативно информирует красная пунктирная линия во время редактирования. Если нужна расшифровка, пользователь переходит в диалог со списком ошибок.

unpete commented 4 years ago
unpete commented 4 years ago

https://github.com/oknosoft/windowbuilder/commit/2a8d5b9f55ddd8c2aacf89ba9ae0319e0014c639 В 1С и js добавил возможность задать умолчания в Абоненте и уточнить значение в подразделении. Dev обновил, задал режим "Только форма" - проверяйте.

rnpoddor commented 4 years ago

Поверил, работает.