+
+
+ {formTitle}
+ 1C:Enterprise 8.5-style managed form
+
+
+ {object.commands.length ? object.commands.map((command) => (
+
+ )) : Команды не описаны}
+
+
+ {elements.map((element) => (
+
+ ))}
-
{activeForm.kind}
-
-
- {formFields.slice(0, 18).map((field) => (
-
-
{field.name}
-
{field.kind}
-
- ))}
- {formFields.length === 0 ? (
-
Поля формы не найдены в structure-only metadata.
- ) : null}
-
Form context
-
-
+
+
+
Свойства формы
+
+
+
+
+
+
+
-
-
`${key}: ${String(value)}`)} />
+
+
Добавить элемент
+
+ setNewElementName(event.target.value)}
+ placeholder="Новый реквизит"
+ className="h-8 border border-border bg-background px-2 text-sm text-foreground"
+ />
+
+
+
+
+
+ {elements.map((element) => (
+
+
{element.name}
+
updateElement(element.id, { caption: event.target.value })}
+ className="h-8 border border-border bg-background px-2 text-sm text-foreground"
+ />
+
+
+
+
+
updateElement(element.id, { binding: event.target.value })}
+ className="h-8 border border-border bg-background px-2 text-sm text-foreground"
+ />
+
+ ))}
+
+ `${key}: ${String(value)}`)} />
) : (
@@ -5578,6 +5731,68 @@ function FormDesignerPanel({ object }: Readonly<{ object: NormalizedMetadataObje
);
}
+function LegacyFormControl({ element, forceHalf }: Readonly<{ element: FormDesignerElementDraft; forceHalf: boolean }>) {
+ const span = element.kind === "table" || element.kind === "group" ? "col-span-12" : forceHalf || element.width === "half" ? "col-span-6" : element.width === "third" ? "col-span-4" : "col-span-12";
+ return (
+
+
+ {legacyFormControlInput(element)}
+
+ );
+}
+
+function legacyFormControlInput(element: FormDesignerElementDraft): ReactNode {
+ if (element.kind === "table") {
+ return (
+
+
+ {element.binding}
+ Количество
+ Сумма
+
+
+
+ );
+ }
+ if (element.kind === "checkbox") {
+ return
;
+ }
+ if (element.kind === "group") {
+ return
{element.binding}
;
+ }
+ if (element.kind === "text") {
+ return
;
+ }
+ return
;
+}
+
+function buildFormDesignerElements(object: NormalizedMetadataObject, form: ObjectPart): FormDesignerElementDraft[] {
+ const fields = [...object.attributes, ...object.tabular_sections];
+ if (fields.length) {
+ return fields.map((field, index) => ({
+ id: `${form.name}-${field.kind}-${field.name}`,
+ name: field.name,
+ caption: field.name,
+ kind: field.kind === "TABULAR_SECTION" ? "table" : field.name.toLowerCase().includes("дата") ? "date" : "input",
+ binding: field.kind === "TABULAR_SECTION" ? `Объект.${field.name}` : field.name,
+ width: field.kind === "TABULAR_SECTION" ? "stretch" : index < 2 ? "half" : "stretch"
+ }));
+ }
+ if (form.name.includes("ФормаДокумента")) {
+ return [
+ { id: `${form.name}-number`, name: "Номер", caption: "Номер", kind: "input", binding: "Объект.Номер", width: "half" },
+ { id: `${form.name}-date`, name: "Дата", caption: "Дата", kind: "date", binding: "Объект.Дата", width: "half" },
+ { id: `${form.name}-table`, name: "Товары", caption: "Товары", kind: "table", binding: "Объект.Товары", width: "stretch" }
+ ];
+ }
+ return [{ id: `${form.name}-name`, name: "Наименование", caption: "Наименование", kind: "input", binding: "Объект.Наименование", width: "stretch" }];
+}
+
+function formQualifiedName(object: NormalizedMetadataObject, form: ObjectPart): string {
+ const qualified = form.attributes.qualified_name ?? form.attributes.qualifiedName;
+ return typeof qualified === "string" && qualified ? qualified : `${object.qualified_name}.${form.name}`;
+}
+
function ObjectMetaList({ title, rows }: Readonly<{ title: string; rows: ObjectPart[] | string[] }>) {
return (