Вход | Регистрация
    1  2  3  4  5  6  7  8  9  10  11   

Конкретные вопросы по lsFusion

Ø [длинная ветка, 14.10.19 - 21:06]
Конкретные вопросы по lsFusion
Я
   Bro
 
06.10.19 - 20:21
Здесь только вопросы по lsFusion, без оценок и срача, что в сторону lsFusion, что в сторону 1С. Кто будет начинать того будут блокировать.
   tty12
 
101 - 06.10.19 - 23:57
(98) Занавес...
Вывод у меня такой:
Во Фьюжне все ништяк, но ничего не зделано еще. Есть набор разрозненных таблиц в pgsql, графическое представление которых наблюдаем в демобазе, данные в которой вяжутся join-ом без какой-либо лигики (ИМХО: не знаю, может тупо по совпадению типа поля связь идет). Но фьюженовцы могут связать и по логике, только скажите КАКОЙ!
   PR
 
102 - 07.10.19 - 00:15
(11) +100500
   Злопчинский
 
103 - 07.10.19 - 00:15
(83) никакого другого ПО кроме фузины для формирования печатных форм - не надо? формирование, отображение, и вывод на печать печтаных форм фузина поддерживает самостоятельно, без стороннего ПО\без сторонних модулей (написанных не на фузине)..?
   Flyd-s
 
104 - 07.10.19 - 00:21
1. Уже спрашивал в прошлой ветке - есть ли примеры сложных проверок при записи в базу? Не в виде остатков по одному измерению, а хотя бы сопоставимое по сложности с теми же остатками в УТ с учетом резервов, настроек складов, заказов поставщикам и т.д.

2. Как в платформе осуществляется разделение представления объектов (формы) и логики? И можно ли средствами платформы сделать красивую форму, не такую вырвиглазную как в демопримерах?
   Злопчинский
 
105 - 07.10.19 - 00:24
(100) условно:
есть справочник.номенклатура.
у него может быть неограниченное количество визуальных представлений
- просто основная форма (открывается просто чтобы посмотреть)
- форма подбора (например вызывается откуда захочешь с передачей туда-сюда параметров)
- форма выбора, обычно вызывается из строки документа например для выбора номенклатуры.
в заисивмости от архитектуры решения логика поведения форм и их состав может быть лююой.
например в форме выбора можно только единичный выбор номенклатры сделать, а можно множественный выбор сделать
.
поэтому "для выбора" - это и значит открыта форма, из нее выбираем и может кудато результат выбора вноситься передаваться.
.
многие из формы списка основной например делают комбайны. у них форма списка номенклатуры превращаетс внекий АРМ по выбору строк товаров и сразу оформить заказ (а не создать заказ и наполнить номенклатурой).
в типовых решениях применен более-менее единый подход.
как сделать где конкретно - каждый ПРИ НЕОБХОДИМОСТИ решает сам
   Злопчинский
 
106 - 07.10.19 - 00:27
(100) в принцие любой список номенклатуры (основная форма, форма выбора, форма подбора итд) повзволяет добавлять\удалять\редактировать существующие элементы. это можно как запретить, так и разрешить. все делается натыкиванием мышкой по большинству. точно также как состав действий по кнопке "еще" может завистеть от контекста и состава\ограничений наложенных в конфигураторе.
если чтото неправильно спецы по 8-ке поправять
я рассказываю в общем, с тем знанием типовых что у меня есть (маленькие и разрощненные, бо не сильно втыкаю - и без втыкивания почти все нахожу, бо идеология ясна, без допизучения могут быть неясны некие специальные непривычнве вещи с которым не сталкивался ранее)
   Злопчинский
 
107 - 07.10.19 - 00:32
(100) "для редактирования или чего?" - нет немножко сложнее
- если юзер кнюпнул на ячейку такуюто в нашем списке то мы
- извлеаем из базы кучу данных, переколбашиваем их, считаем, преобразуем, на выходе получаем некий динамический список (который не содержит в себе никаких объектов БД в явном виде),
- вываливаем этот список юзеру, юзер выбирает что надо (одно значение или в общем случае несколько мультиселектом)
- по полученному значению тащим кучу данных из базы, переколбашиваеммиксуем с введеным значением и полученный результта записываем в ячеку таблиы на форме
   Злопчинский
 
108 - 07.10.19 - 00:35
(104) вдогонку
3. и можно ли объекты (например прикладные, например заказ покупателя)м описать отдельно, а логику работы с этим объектом (для разных вариантов использования) описать отдельными логиками. Понятно, что вязание таблиц по ключу друг с другом мы логикой не считаем.
   Flyd-s
 
109 - 07.10.19 - 00:37
+ к (104)

Как настраиваются доступы к объектам, есть ли аналог RLS из 1С?
   Злопчинский
 
110 - 07.10.19 - 00:43
для фузиновцев: RLS - это платформенная поддержка (включается когда надо) разгранчиения прав доступа на уровне записей.

Запись - это запись БД в терминах прикладных объектов (т.к. 1С прикладное-обьектное программирование)

спецы по 1С поправят если я неверно сказал
   _DAle_
 
111 - 07.10.19 - 00:44
(103) Платформа использует JasperReports для формирования печатных форм. Вот тут есть How-to: https://documentation.lsfusion.org/pages/viewpage.action?pageId=46367627
   Злопчинский
 
112 - 07.10.19 - 00:52
(111) "Система сохранит автоматические шаблоны для Jasper Reports в папку исходников (src/main/lsfusion)."
- что такое джасперрепорт? входит в поставку продукта? будет ли фузина формировать и выводить печатные формы без него?
   Flyd-s
 
113 - 07.10.19 - 00:53
(104), (110), приведу пример. Допустим нужно сделать так, чтобы пользователь видел документы только по своей организации или по списку организаций. Список будет задаваться в отдельной таблице, где-то у администратора системы.
Важно (!) ограничения заданные в RLS действуют не в конкретной форме ввода или отчета, а везде. Т.е. задали ограничение на видимость по организациям и пользователь не видит чужие документы во всех списках, формах выбора документов, во всех отчетах и т.д.
   Злопчинский
 
114 - 07.10.19 - 00:55
(111) почитал вики, не обрадовался. Висивига для консрутирования печформ видимо нет.
   _DAle_
 
115 - 07.10.19 - 00:56
(108) Не уверен, что правильно понял вопрос, конечно. Но попробую. Вы можете объявить класс (и возможно какие-то базовые свойства для этого класса) в одном модуле, а более сложную логику работы с объектами этого класса реализовывать в других модулях.

Часто в одном "базовом" модуле создается абстрактный класс с абстрактными свойствами, описывающими какую-то базовую логику, а затем при необходимости изменить эту базовую логику, вы объявляете конкретный класс, наследуясь от абстрактного, и переопределяете свойства. Реализуется это (по сути, это subtype полиморфизм) механизмом расширений: https://documentation.lsfusion.org/pages/viewpage.action?pageId=1146886 и дочерние статьи.
   _DAle_
 
116 - 07.10.19 - 00:56
(112) Входит в поставку.
   Злопчинский
 
117 - 07.10.19 - 00:59
(116) Висивиг - нет?
если мне надо модифицировать отчет по внешнему виду и составу данных - я сначала модифицирую текстовый шаблон в фузине, потом начинаю его майстрячить в джаспере?
   Злопчинский
 
119 - 07.10.19 - 01:18
(116) если мне в джасперстудио во время майстрячения макета понадобились допданные для отчета резво вытянуть из базы - я так понял мне надо вертаться куда-то "взад", вытаскивать эти данные, пихать описание их в шаблон и майстряить дальше? простого способа взять "реквизит обьекта" из базы (например наименование контрагента из закза) и кинуть его на макет печатной формы - так можно?
   _DAle_
 
120 - 07.10.19 - 01:19
(117) Если только по внешнему виду, то достаточно будет отредактировать соотвествующий jrxml файл в Jaspersoft Studio. Так как печатные формы - это в платформе просто одно из представлений формы, то для изменении состава данных нужно будет сначала изменить форму
   Злопчинский
 
121 - 07.10.19 - 01:20
(офф) давным-давно, мой друг (охеренный программист дельфист и все такое прочее работой котрого и было только программить) ваял на сторону решение для ЖКХ. я просто изнервничался весь, наблюдая как он майстрячил это решение, вязал таблички по ключам и все такое прочее (ну как в фузине). причем все ну практически 1-в-1 как в 1Сине было. Наблюдать это было мне очень тяжко. А тажк как майстрячились отчеты в КристалРепортс. Ну не хочу я такого повторения.
   Злопчинский
 
122 - 07.10.19 - 01:23
(120) печально. наполовину хуже чем даже в 7.7. но хорошо хоть чтото есть.
Однако будет тяжело, когда придется с клиентом какую-нить новую печформу ваять - то в джаспер лезть, то назад в фузину, то в дажспер, то в фузину (а вот сюда для номенклатуры вытащить код ТНВЭД).
   Злопчинский
 
124 - 07.10.19 - 01:27
(120) сколько примерно занимает времени от а до я майстрячение печформы сопоставимой по наполнению разнородными реквизитами и визуально выглядевшей типа как российская ТОРГ12? есть примеры таких печформ в ерп живые посмотреть?
   Злопчинский
 
125 - 07.10.19 - 01:29
у нас, у 1Сников, маястрясение печформ для документов (заказы, накладные и про) и справочников - это поле деятельности самых что ни на есть джунов, в фузине как?
   Злопчинский
 
126 - 07.10.19 - 01:36
(офф) мелкая обучаловка по основам работы с фейсом https://www.youtube.com/watch?v=OcJro5xiglk
   Злопчинский
 
127 - 07.10.19 - 01:47
? есть какая-то подсистема простановки должностей-подписей сотрудников организации и сортудников клиента в печатные формы документов? желательно - с разделением какие документы имеют право подписывать какие пользовтаели?
   Злопчинский
 
128 - 07.10.19 - 01:48
"какие документ" = какие печатные формы к каким документам, т.к. документ может иметь несколько разных печатных форм и сотрудники разный доступ к подписи разных печформ.
   Devilment
 
129 - 07.10.19 - 05:48
(70) Так вот, если мы объявляем форму для экспорта в xml, она где будет существовать, только на сервере СУБД, получается, в виде временной таблицы? А готовый xml где будет получен для последующей отправки почтой, например?
   Devilment
 
130 - 07.10.19 - 05:50
И ещё, я не понял, что является уникальным идентификатором сущности, например, конкретного документа или элемента справочника.
 
 Рекламное место пустует
   NUser
 
131 - 07.10.19 - 08:53
(87) откуда вы такие тупые беретесь?
   Bro
 
132 - 07.10.19 - 08:57
(77) lock есть для пессимистических блокировок.
(76) Форма и является отчетом, то есть может содержать любые вычисляемые данные. Для печати JasperReports.
(87) А MultiLineHeader, плюс его ресайзинг. Плюс в Web'е нужен такой же компонент.
(94) CONSTRAINT forbidden(organization(currentUser()), currentRole(), priceType(Document d)) AND NOT allowed(d) AND ... MESSAGE ''
(95) CrushBy надеюсь поделиться ссылкой с gitHub где эта логика задается.
(97)
numberSkusInAgreement(Agreement a) = GROUP SUM 1 IF skusInAgreement(Sku sk, a);
CONSTRAINT ... AND (NOT numberSkusInAgreement(agreement(d)) OR )...
(99) PROPERTIES g(a) READONLYIF h(a)
   Bro
 
133 - 07.10.19 - 09:13
(104) Сложность обычно не в самом ограничении, а в сложности показателя. То есть обычно CONSTRAINT состоит максимум из пары строк, но показатели которые он использует могут в конечном итоге использовать сотни других показателей, операторов
Дизайн задается практически точно также как в УФ. Дерево компонент. То есть CSS Flex. Можно задать любой дизайн. Но вопрос в модульности и политике безопасности, то есть то что любой компонент может исчезнуть при неподключении модулей, или запрете показателя
(105) Можно любой форме задать признак что это форма редактирования или выбора
FORM A
    OBJECTS d ...

...

    LIST MyClass OBJECT b  // форма списка
    EDIT MyClass OBJECT b  // форма редактирования

;

Потом можно делать SHOW EDIT MyClass ... вызовется A.
(107) f(a) ON CHANGE {
     DIALOG someDialog OBJECTS x=oldValue INPUT {
         ... делаем что-то
         f(a) <- something(a) * d + (GROUP SUM ...) ...
     }
}
(113) EXTEND FORM someForm
      FILTERS in(organization(d), currentRole())
;
Можно конечно сделать для класса Document, чтобы на все формы добавлялся, но непонятно скажем, что с внутренними перемещениями делать
(117) Если только дизайн не надо, если данные

PROPERTIES g(a)
и используете в дизайнере Jasper'а, все переходы в IDE максимально автоматизированы.
(127) Здесь платформу обсуждаем, для обсуждения ERP можно отдельную тему создать
(129) Форма это метаданные. Он на сервере приложений. Локальные первичные свойства, если одно изменение на сервере приложений, больше временная таблица на сервере БД. XML на сервере приложений (если его на клиента не передадите)
(130) Внутренний идентификатор. LONG. Кстати их можно генерить одним запросом:

FOR iterate(i,1,10000) NEW d=Document DO {
  ....
}

На самом деле сделает один запрос (рекурсивными CTE).
   Devilment
 
134 - 07.10.19 - 09:25
(133) Я ННП. Вот есть ваше утверждение, что программист никак не управляет, только на сервере приложения будет жить форма, или ещё на клиенте? Опять же, если XML на сервере будет сформирован, я, получается, то-же могу предать его на клиент, то есть управлять таки клиент-сервером.
По идентификатору - я не понял, он автоматом генерируется платформой для всех объектов, то есть для документа как для шапки, так и для каждой строки табличной части? Или, надо его программисту реализовывать самостоятельно?
   Bro
 
135 - 07.10.19 - 09:26
(125) В lsFusion тоже. Самые первые задачи которые идут джунам. Условно принцип такой:

1) Отчеты (PRINT), DATA, композиции (f(g(a))), FORM
2) DESIGN интерактивного представления (SHOW), GROUP SUM, GROUP LAST (суммы, последние), TREE
3) Классы / наследования, AGGR, PARTITION, XML (EXPORT / IMPORT), EXTERNAL HTTP / SQL
4) RECURSION
   Bro
 
136 - 07.10.19 - 09:31
(134) Если вы сделаете
EXPORT XLS myForm; // тут он на сервер
open(exportFile()); // передастся клиенту и откроется

EXPORT XLS myForm; // тут он на сервер
EMAIL SUBJECT 'HI' BODY exportFile(); // пошлется по почте, на клиента передаваться не будет, даже если им инициировано действие

Нет, не надо ничего руками делать есть просто NEW;

NEW d=Document
   FOR iterate(t, 1, 10) NEW dd=DocumentDetail
      document(dd) <- d;

Кстати при такой схеме можно переносить строки между документами

move(Document from, Document to) {
     document(DocumentDetail dd) <- to WHERE document(dd) = from;
}
Есть еще один фокус вообще не делать строки:

quantity = DATA LONG (Document, Sku);

и делать :
addDocument10(Document d) {
   FOR name(Sku s) LIKE '%NIVED%'
      quantity(d, s) <- 10;
}
То есть с данными сразу как в Excel, а не по строкам работать. Так при работе с ассортиментами очень удобно.
   Bro
 
137 - 07.10.19 - 09:37
(134) Чтобы лучше понимать, объект это фактически идентификатор LONG (+ свойство хранящее его принадлежность классу, но оно явно не используется, более того если у класса нет потомков его может и не быть)
out(Sku s) {
MESSAGE LONG(s); // выводит внутренний id Sku
}
   Devilment
 
138 - 07.10.19 - 09:40
(136) Ладно, допустим, с файлами понятно. А этот вот код, он в каком месте пишется?:
NEW d=Document
   FOR iterate(t, 1, 10) NEW dd=DocumentDetail
      document(dd) <- d;
И, уникальность этого кода, получается не глобальная - т.е, теоретически, этот код может быть одинаковым у документа и справочника?
   Bro
 
139 - 07.10.19 - 09:44
(121) Еще один момент, который видимо непонятен:
Документ.Организация.Банк.Х, в lsFusion это
Х(Банк(Организация(Документ)))
То есть чисто синтаксическое различие, чтобы унифицировать когда параметров станет несколько, то есть если Банк зависит от магазина, то в lsFusion:
Х(Банк(Организация(Документ), Магазин))
Хотя конечно и в синтаксисе с . это можно сделать:
Документ.Организация.Банк(Магазин).Х
И возможно мы и такой синтаксис поддержим.
   Bro
 
140 - 07.10.19 - 09:46
(138) Вот не понял если честно этого вопроса. Это действие, можно писать где угодно в событиях например.
Этот код одинаково генерировать может записи для и справочника и документа. На уровне платформы нет таких различий (есть в прикладных библиотеках), ей все равно "табличные части" это справочников или документов .
   Devilment
 
141 - 07.10.19 - 09:48
(140) Так если я его не напишу - уникального кода не будет, что-ли. А если будет, то зачем его писать?
   Bro
 
142 - 07.10.19 - 09:54
(141) Все равно не понимаю. Этот код создает новый документ и 10 строк. При этом генерятся коды и документу и строкам документа.
   Devilment
 
143 - 07.10.19 - 10:04
(142) Тьфу теперь понял, забыл, что вы склонны не только на поставленный вопрос отвечать, но ещё и сверху лишнего накинуть :)
Тогда вопрос - вот есть у нас идентификатор в виде строки, как по нему найти объект? Или, для этого обязательно знать тип объекта?
   Bro
 
144 - 07.10.19 - 10:11
(143) Сейчас в новой версии будет
OBJECT(id), но так лучше не делать, так как ей придется по всем таблицам смотреть (если в контексте использования не будет понятно что это за класс, скажем по используемым свойствам), так что лучше все же указать хоть какой-то абстрактный класс, например OBJECT(id, Document);

Но вообще в старых версиях если использовали внутренние идентификаторы то делали так
FOR LONG(Sku s) = id DO sku(dd) <- s;
Правда обычно у объектов есть внешние идентификаторы, тогда это делается так
number = DATA STRING (Document);
docByNumber = GROUP AGGR Document d BY number(d); // на выходе получается свойство STRING -> Document
фокус GROUP AGGR что автоматически создается ограничение что документ с номером максимум один.

Плюс преимущество что можно делать сразу по многим параметрам:
docByNumber = GROUP AGGR Document d BY number(d), organization(d); // на выходе получается свойство STRING, Organization -> Document

Тогда ограничение, что номер уникален в рамках одной организации.
ЗЫ: опять сверху лишнего накинул, не обижайтесь :)
   Devilment
 
145 - 07.10.19 - 10:28
(144) Я это к чему - не очень понятно, как делать обмены, если документ приходит из внешней системы, например, разработчик обмена со стороны внешней системы что должен сделать, чтобы в вашей системе при загрузке документ не задублировался? Или, вы это решаете добавление идентификатора внешней системы ко всем объектам? Или используются таблицы соответствия?
   Flyd-s
 
146 - 07.10.19 - 10:30
(133), "Сложность обычно не в самом ограничении, а в сложности показателя. "

Чем это принципиально отличается от написания процедура в 1С типа ПроверитьОстатки(,)?
   ptiz
 
147 - 07.10.19 - 10:31
(0) 1) Как выполняется сортировка документов, движений "регистров" внутри секунды?
2) Могу я расположить документы внутри секунды произвольным образом?
3) Как наложить условие на получение движений от начала месяца "до конкретного документа", не включая его движения.
   Bro
 
148 - 07.10.19 - 10:41
(145) Вот здесь пример 3 посмотрите, просто сначала добавляются недостающие, а потом сам импорт
https://documentation.lsfusion.org/pages/viewpage.action?pageId=46367614
(146) Тем что ограничение декларативно. Вам не нужно думать о местах его проверки. Не надо следить, что именно изменилось (как например если в приходе товара поменяли пару позиций), и строить алгоритмы инкрементального обновления.
(147) 1) Смотрите вы когда делаете GROUP LAST может указать допполя

last = GROUP LAST SkuLedger ledger ORDER dateTime(ledger), ledger;

То есть сначала по секунде, потом по внутреннему id. Но можете любые свойства указывать. Если условие будет недетерменированное, то как и в SELECT поведение будет недетерминированное
2) Да смотри выше, можете сделать
order = ABSTRACT LONG (SkuLedger); и  

last = GROUP LAST SkuLedger ledger ORDER dateTime(ledger), order(ledger);

3) тут я может не понял, но
last(DATETIME dt) = GROUP LAST SkuLedger ledger ORDER dateTime(ledger) WHERE dateTime(ledger) < dt;
run(Document d) {
  MESSAGE last(dateTime(d));
}
Ну или с замыканием:
run(Document d) {
  MESSAGE GROUP LAST SkuLedger ledger ORDER dateTime(ledger) WHERE dateTime(ledger) < dateTime(d);
}
   pechkin
 
149 - 07.10.19 - 10:41
(147) вроде в сиквелах секунда - это не минимальная единица времени
   Bro
 
150 - 07.10.19 - 10:44
(146) Хотя и императивно (как и в остальных системах) вам ограничение никто проверять не мешает. Представьте что это аналог CONSTRAINT'ов в СУБД, только в общем случае.
   ptiz
 
151 - 07.10.19 - 10:45
(149) Совсем нет. Ну и в 1С, сортировка внутри секунды - это сам УИД. А тут, как я понял - некое поле ledger.
(148) Можно про суть поля ledger - это что такое?
   ptiz
 
152 - 07.10.19 - 10:46
(149) Пардон, не так понял. Но 1С всё равно использует только секунду "целиком".
   ptiz
 
153 - 07.10.19 - 10:47
(149) Как я понял, у фьюжен нет типа "дата с долями секунды" и они тоже оперируют целыми секундами. Или не так?
   Bro
 
154 - 07.10.19 - 10:51
(151) Это не поле, это сам объект, а точнее его id (имя параметра не важно, то есть можете так написать GROUP LAST Document d ORDER dateTime(d), d). Хотя в конечном итоге это грубо говоря ключевое поле таблицы.

Но вообще в GROUP LAST вы можете любой шлейф свойств использовать. То есть сначала по дате потом по организации, и т.п.
(153) Мы на самом деле это отдаем СУБД, хотя да предполагаем что секунды. В любом случае с точки зрения вашей задачи это не важно. С датами та же проблема.
   Flyd-s
 
155 - 07.10.19 - 10:52
(133)? "EXTEND FORM someForm
      FILTERS in(organization(d), currentRole())"

не совсем понял подход. Что в переменной d? Что если в одной роли будет ограничение по организациям, в другой по подразделениям, а в третьей не будет ограничений и пользователю будут назначены любые из трех ролей?

Как я понял вы ограничения доступа накладываете непосредственно в форме списка, путем принудительной установки фильтров для пользователей. При создании отчета берущего данные, имеющие ограничения доступа - нужно будет там тоже прописывать ограничения заданные в ролях доступа?
   Bro
 
156 - 07.10.19 - 10:52
(154)  GROUP LAST Document d ORDER dateTime(d), d - последний документ по дате, а если они равны по внутреннему id документа (у кого больше тот и последний, генерятся эти id по возрастанию при использованию NEW, так что как правило это удобно)
   Flyd-s
 
157 - 07.10.19 - 10:56
(148), а зачем думать что изменилось, если мы проверяем остатки по документу?
   Bro
 
158 - 07.10.19 - 10:56
(155) d это объект документа (который в виде списка отображается). Вы в in можете написать все что угодно:
in(Organization o, Role r) = CASE WHEN strict(o) THEN allowed (o, r) ELSE TRUE;

(155) Да это просто дополнительный фильтр. Отчет это такая же форма.  То есть вы задает in. А потом EXTEND FORM injection делаете в нужные формы. Можно конечно в платформе сделать чтобы автоматически какое то условие embed'илось во все формы (задача на полдня). Но я если честно не могу придумать постановку как в таком брутфорсе, случайно не вырубить скажем во внутренних перемещениях документы прихода с секретной организации.
   Bro
 
159 - 07.10.19 - 10:59
(157) Ну я приводил пример с документами прихода, где не по всему документу надо проверять. Там по одной строке уменьшили с 10 до 5. Вам придется выяснить по какой строке уменьшили, причем руками.

Ну и с декларативностью в принципе проще. Повесили в каком то модуле ограничение, и вам все равно как другие разработчики будут проводить свои документы, это ограничение они без вашего ведома не обойдут.
   Мэс33
 
160 - 07.10.19 - 10:59
(111) похоже на аналог - BIRT, с таким в свое время работал.

По удобству создание отчетов в 1С - самая удобная, имхо. Не самая быстрая в работе, но красивая и удобная.
 
 Рекламное место пустует
   Мэс33
 
161 - 07.10.19 - 11:01
(125) немного офф - поэтому те же пользователи sap давно плюнули на желание получить отчеты "как в 1С" и часто просят абаперов просто выкидывать им портянки таблиц, которые потом выгружают в excel  и там уже доводят до ума.
   Bro
 
162 - 07.10.19 - 11:02
(160) Да, там два конкурента BIRT и JasperReports. Последний популярнее и функциональнее (он там такие форматы поддерживает, что я половины не знаю). Ну и нам нужна была чиста система печати, за работу с данными lsFusion отвечает. Тем более что она общая и для печати и скажем всех экспортов (и конкретно оптимизирована под формирование быстрых запросов).
   Bro
 
163 - 07.10.19 - 11:03
(161) Есть другой подход, выгружать в BI (или подключать прямо к базе), а дальше уже крутите как хотите данные. Типа как http://bi.lsfusion.ru/.
   Мэс33
 
164 - 07.10.19 - 11:03
(162) непривычно будет это для 1Сников, скажу вам сразу. Да и пользователям тоже смотреть на кривые отчеты (а они в большинстве случаев будут кривые) не в радость.

Бизнесу это часто не мешает от слова совсем.
   Devilment
 
165 - 07.10.19 - 11:04
(148) Так в примере у вас id внешней базы совпадает с id во внутренней, а если из внешней приходит GUID, например, то, получается, вы вашей системе добавите поле GUID внешней системы. А если таких систем несколько с разными идентификаторами, для каждой поле надо будет добавить, получается?
   Bro
 
166 - 07.10.19 - 11:04
(164) Давайте не разводить опять срач. Но я уже говорил Россия не приоритетный рынок (без оценок хорошо это или плохо).
   Flyd-s
 
167 - 07.10.19 - 11:05
(158), о каких секретных перемещениях идет речь и для чего оставлять пользователю к ним доступ?
   Мэс33
 
168 - 07.10.19 - 11:06
(166) "Но я уже говорил Россия не приоритетный рынок" - ну тогда я вас совсем не понимаю.

Ну ок, дело ваше.
   Flyd-s
 
169 - 07.10.19 - 11:11
(159), я просто проверю весь документ - ушел в минус, значит плохой документ, не ушел хороший, без разбирательства где изменения произошли

Глобальные ограничения на остаток в 1С тоже можно прописать в модуле регистра, но этого не делают, потому что логика проверок может отличаться от документа к документу. Например оптом занимается один разработчик, а розницей второй. И первому нужно проверять остатки, а второму нет
   ptiz
 
170 - 07.10.19 - 11:12
(154) Если ledger - "Это не поле, это сам объект, а точнее его id", то тогда его нельзя взять и поменять у документа, правильно?
Т.е. позиционирование документа внутри секунды - такое же, как у 1С (Дата + ссылка)?
Например, в журналах как строится упорядочивание? Или для получения остатков?
   Bro
 
171 - 07.10.19 - 11:12
(165) Нет, вы создаете одно поле GUID и работаете с ним. Смысл GUID в том что он один. Если систем несколько, то я уже приводил пример:
docByNumber = GROUP AGGR Document d BY number(d), organization(d); // на выходе получается свойство STRING, Organization -> Document
И везде вторым параметром вставляете организацию.
(167) Смотрите у вас форма внутренних перемещений с одного склада на второй.
Вы ограничили видимость всех расходов с секретной организации. Идет перемещение с секретной организации на мою. Если я ограничу видимость всех расходов с секретной организации, то человек не сможет видеть и приходы на его не секретную организацию. То есть нужно какое-то хитрое условие строить, что если расход не с секретной организации ИЛИ приход в мою организацию.

Но с другой стороны почему нет я подумал можно сделать что-то типа такого в объявлении класс:
CLASS Document FILTERS d AS NOT forbidden(from(d)) OR allowed(not(d))

И автоматически добавлять во все формы (как сейчас с CONSTRAINT CHECKED делается). В принципе задача не сложная, еще подумаю.
   Bro
 
172 - 07.10.19 - 11:14
(170) нет, я же приводил пример:

можете сделать:
order = DATA LONG (SkuLedger);

last = GROUP LAST SkuLedger ledger ORDER dateTime(ledger), order(ledger);

или

last = GROUP LAST Document d ORDER date(d), priority(from(d)), d;

Журналы тут не причем. Там просто:

FORM A
   OBJECTS a=A
   PROPERTIES f(a), g(a), h(a)
   ORDER f(a), h(a)
;
   Flyd-s
 
173 - 07.10.19 - 11:18
(171), если это доступ для кладовщика, то ограничение делается по складу, а не по организации. Ограничение по организации - это для менеджера , чтобы он занимался только своими делами и не лез в чужие, ему не нужны секретные перемещения, только остатки товара, которые от документа не зависят
   Devilment
 
174 - 07.10.19 - 11:21
(171) Так как один на несколько внешних систем? Если изменится номер документа во внешней системе, как вы его при таком подходе найдёте? Или вы будете товарищей, которые обмен пишут со стороны внешней системы, заставлять ваш id в свою базу обратно пихать?
   ptiz
 
175 - 07.10.19 - 11:23
(172) Очень тяжело понять такое после привычки работать с 1С.
Получается, такое понятие как "порядок" - можно определять для каждого объекта? И по-разному?
   Smile 8D
 
176 - 07.10.19 - 11:29
(171) Тут у вас проблемы с методологией, раз вы даже склады и организации путаете. Внутреннее перемещение только между складами. При перемещении между организациями будет приход и расход. Соответственно, при ограничении по организации человек не будет видеть расход, а приход видеть будет, т.к. организация там другая, а "секретная" является контрагентом уже.
Но тут скорее спрашивают про встроенные механизмы прав, ограничений и т.д. В 1С за годы существования пришли к пониманию, что ряд механизмов нужен на уровне платформы. Скорее всего вы тоже к этому со временем придете.
   pechkin
 
177 - 07.10.19 - 11:30
(175) их сложно понять потому что это какая то извращенная модель функциональщины.
она сама по себе то не проста, а в их исполнении совсем полных швах
   Flyd-s
 
178 - 07.10.19 - 11:32
(133), "Дизайн задается практически точно также как в УФ. "

Прям с визуальным редактором как в 1С?
   ПускинАС
 
179 - 07.10.19 - 11:33
(178) FORM A
   OBJECTS a=A
   PROPERTIES f(a), g(a), h(a)
   ORDER f(a), h(a)
;
вот так АДЫН пУк  и все.
   ПускинАС
 
180 - 07.10.19 - 11:34
(178) Фузиновцы считают у них уху евший дизайн уи который не нужно совсем прям трогать)))
   Devilment
 
181 - 07.10.19 - 11:35
(177) Я тут вижу проблему, что при таком подходе одни и те-же вещи их платформа позволяет сделать несколькими способами, и, при отсутствии внятной методологии и зафиксированных стандартов разработки, это неизбежно приведёт к хаосу в решениях.
   pechkin
 
182 - 07.10.19 - 11:38
(181) разве есть языки где нет множества подходов?
   pechkin
 
183 - 07.10.19 - 11:38
но для программистов изучать фузна# нет никакого смысла. куда потом с этими знаниями идти?
   Devilment
 
184 - 07.10.19 - 11:40
(182) Так да, но в 1С, например есть методология и стандарты разработки, и большинство разработчиков таки им более-менее следуют.
   Devilment
 
185 - 07.10.19 - 11:41
(183) Как куда? Самому клиентов искать и окучивать, ведь в этом случае сколько клиенту зарядил - все твои :))
   Bro
 
186 - 07.10.19 - 11:46
(174) не понял вопроса, id (GUID или что-то другое) либо есть в формате обмена, либо нет. Если его нет, то и определить изменение теоретически не вижу (175) Смотрите, вы правильно сказали, что Регистр сведений это:
GROUP LAST измерение(Ledger l) ORDER dateTime(l), l;

В lsFusion в ORDER может быть что угодно.
(178) Речь шла про дизайн. Логически также задается, физически также. То есть не мышкой, а кодом, но справа сразу рендерится форма:
https://habrastorage.org/webt/rw/tx/oh/rwtxohoulxz_m_yqhqxqiioaqfq.gif
(176) Политика безопасности по колонкам есть в полном объеме. Даже с некоторыми очень крутыми фишками вроде логирования любого показателя на форме.
По рядам, вопрос был в том что логика безопасности может быть практически любой. Хотя я уже писал как это решается и можно решить (но все равно не уверен, что в сложных случаях это заработает).
(181) На самом деле дублирования абстракций практически нет. Очень мало вещей можно сделать разными способами.
pechkin, Devilment, ПускинАС есть соседняя тема. Здесь практические вопросы разбираются. Не знаю насколько у CrushBy есть права скрывать сообщения не по теме, но если нет, то смысла конечно в отдельной ветке нет :(
   Devilment
 
187 - 07.10.19 - 11:51
(186) Понятно, сложных обменов, значит, вы не делали.
   МихаилФ
 
188 - 07.10.19 - 11:55
(187) Они не каких не делали, похоже. Всё в теории..
   Мэс33
 
189 - 07.10.19 - 12:01
(182) например, python way - должен быть быть способ сделать что-то самым оптимальным образом )
   pechkin
 
190 - 07.10.19 - 12:01
(185) мы точно про программистов говорим?
   Devilment
 
191 - 07.10.19 - 12:05
(190) Так они же смогли, значит и остальные так-же хотят :))
   Мэс33
 
192 - 07.10.19 - 12:13
Наверное этот вопрос задавали, сорри, если повторяюсь.

А на форме можно динамически отображать/скрывать элементы интерфейса? В зависимости от действий пользователя? Можно ли сделать что-то наподобие визарда в интерфейсе?

Простой пример: ПКО в типовом 1С имеет где-то с десяток вариаций одного и того интерфейса, тем не менее это один объект метаданных.

Второй вопрос: есть ли аналог понятия субконто?
   Bro
 
193 - 07.10.19 - 12:15
(192) PROPERTIES f(a) SHOWIF g(a) > 5. Как только g(a) станет больше 5 f(a) скроется (колонка или поле). В зависимости от действий пользователя или чего угодно.
(192) В платформе прикладных бухгалтерских понятий естественно нет. Есть в библиотеках, но такие скорее к ERP чем платформе относятся.
   ptiz
 
194 - 07.10.19 - 12:16
(186) Спрошу по-другому про порядок документов.
Я - манагер, хочу в пределах 1 секунды сделать два документа: покупателю А, и покупателю Б. Могу я какой-либо кнопкой или корректировкой какого-то поля (даты) менять расположение этих документов относительно друг друга (сначала А потом Б, или сначала Б потом А)? И будет ли это изменение порядка отображаться во всех отчетах?
В 1С это проблема, вот и хотел узнать - решили ли вы её.
   Salimbek
 
195 - 07.10.19 - 12:25
(194) Отвечу чисто теоретически - во все документы, которые должны обрабатываться подобным образом, добавляешь свойство order_by. И все документы/отчеты/движения выводишь сортируя сначала по времени, потом по этом полю. Далее - в каждый документ добавляешь кнопочку (или что-то более креативное), которое может указать, что "этому документу быть в данной секунде пятнадцатым!"
   Bro
 
196 - 07.10.19 - 12:27
(194) Смотрите, заводите поле порядок:
order = DATA LONG (Document);
при необходимости есть метакоды по генерации действий их управлением

далее, есть две разные вещи Регистр Сведений и Формы / Отчеты:

И там и там в опцию ORDER добавляете
dateTime(d), order(d), d
   МихаилФ
 
197 - 07.10.19 - 12:44
А есть ли у вас аналог СКД?
   Asmody
 
198 - 07.10.19 - 12:50
(100) Список выбора - это dropdown.
   Salimbek
 
199 - 07.10.19 - 12:55
(197) Отвечу тоже, теоретически - нету, есть Формы, которые собирают данные и эти Формы можно вывести в Отчет, через встроенные механизмы JasperReports
   pechkin
 
200 - 07.10.19 - 13:02
(196) для отчетов обычный Sql используется?
  1  2  3  4  5  6  7  8  9  10  11   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.