Имя: Пароль:
1C
1С v8
На сервере получить реквизиты формы
0 Chameleon1980
 
30.07.25
15:32
Приветствую всех!
А нельзя как-то получить реквизиты формы (не объекта) на сервере?
Есть реквизиты добавленные (не программно) на форму и их нужно получить

Метаданные.Документы.ЗаказКлиента.Формы.ФормаДокумента
не дает информации о реквизитах
только основные данные, а мне бы узнать, что вытащили на форму еще.
1 mikecool
 
30.07.25
15:41
так уйди в серверный метод формы и читай ЭтаФорма.Реквизит
2 Chameleon1980
 
30.07.25
15:44
поправка - я не в форме, я вообще в РЗ, например. мне нужно по имени формы документа получить ее реквизиты (не путать с метаданные документа).
3 Chameleon1980
 
30.07.25
15:45
у меня нет формы - мне нужны реквизиты, которые натыкали мышкой и не только от объекта
4 Fish
 
гуру
30.07.25
15:47
(3) Если реквизиты формы не сохраняются в БД, то они тебе не нужны.
5 Fish
 
гуру
30.07.25
15:49
(3) Если нет формы, то где тогда натыкали мышкой?
6 Chameleon1980
 
30.07.25
15:49
вот это мне как получить без формы, но форма в составе документа в конфигурации
7 maxab72
 
30.07.25
15:50
(3) ну... можно влезть в сохраненные настройки пользователя и начать их разгребать.
8 Fish
 
гуру
30.07.25
15:50
(6) Зачем тебе они нужны? Что ты хочешь от них получить?
9 RomanYS
 
30.07.25
15:51
(3) создай форму и перебирай реквизиты.
Отмена, на сервере конечно работать не будет
10 Chameleon1980
 
30.07.25
15:50
(5) на руках у меня нет формы. я на сервере вне формы.
(4) мне нужны - в тч документа есть реквизиты, которые считаются динамически, но мне нужно их знать в другой обработке для заполнения формул расчета, например.
11 Chameleon1980
 
30.07.25
15:51
(9) где создай форму? на сервере?
12 Chameleon1980
 
30.07.25
15:51
(8) читай (10)
13 Fish
 
гуру
30.07.25
15:52
+(8) Если по тупому, то как-то так:

Форма = ПолучитьФорму(Твояформа);

РеквизитФормы = Форма.ТвойЛевыйРеквизит.

Только это тебе ничего не даст.
14 Fish
 
гуру
30.07.25
15:53
(10) Ну так и читай данные из ТЧ документа по ссылке.
15 Chameleon1980
 
30.07.25
15:53
(13) да нельзя Форма = ПолучитьФорму(Твояформа);
интерактивные ... бла бла
16 Fish
 
гуру
30.07.25
15:55
(15) Ты так и не ответил на вопрос зачем.
В (10) написан бред.
17 Chameleon1980
 
30.07.25
15:56
(14) там только реквизиты объекта блин, мне нужны сверх реквизитов объекта
18 Chameleon1980
 
30.07.25
15:58
(16) просто ты не додумал.
смотри. мне во вне нужно знать, какие колонки будут потом в форме для написания формул расчета строки ТЧ.

вот есть у тебя добавленная в тч колонка, которая считается другим механизмом в форме (не хранится в документе) мне нужно, условно в справочнике хранить формулу, ссылающуюся на эту "не родную" колонку, для своих расчетов.

короче не важно зачем. я задал вопрос и вижу демагогию.
спасибо.
19 Fish
 
гуру
30.07.25
15:58
(17) Зачем они нужны? Когда ты сможешь ответить на этот вопрос, ты поймешь, что тебе не нужны реквизиты формы.
20 Chameleon1980
 
30.07.25
15:59
(19) решу по-другому. пропишу, как сейчас есть.
Спасибо всем за участие.
21 craxx
 
30.07.25
16:01
(0) ЗУП? кадровый блок?
22 Fish
 
гуру
30.07.25
16:01
(18) Ну и кто тебе мешает рассчитать эти данные так же, как это считается в форме?

Данные, существующие только на форме, для сервера не имеют смысла.

Представь, ты выполняешь своё РЗ, в этот момент у 10-ти пользователей открыта твоя форма и у каждого в ней свои данные. И что ты собираешься получать?
23 Chameleon1980
 
30.07.25
16:06
(22) да мне просто имена реквизитов ТЧ на текущий момент нужны.
да - имена реквизитов можно взять через метаданные тч документа, но там не все - там нет добавленных вне объета.

для написания формул в другом месте.
а потом эти формулы будут использоваться уже в форме

так понятней?
24 Fish
 
гуру
30.07.25
16:06
(23) Ничего не понял. Кто мешает эти имена реквизитов посмотреть в конфигураторе и прописать в коде?
25 Chameleon1980
 
30.07.25
16:08
(24) да никто. так и сделаю. но завтра добавят еще реквизит.
пока я узнаю, пока я допишу. да?
хотел хитрее. ну ок
26 Chameleon1980
 
30.07.25
16:09
нахера нам метаданные то тогда
а в метаданных ведь не только то, что хранится в бд верно?
а тут вот форма есть, но инфы - кот наплакал

ФормаДокумента = Метаданные.Документы.ЗаказКлиента.Формы.ФормаДокумента;
27 Fish
 
гуру
30.07.25
16:17
(26) Можешь написать свой РС, и при первом открытии формы (инициализации) писать туда имена всех реквизитов формы.
28 Chameleon1980
 
30.07.25
16:24
(27) да - уже делаю
29 Ненавижу 1С
 
гуру
30.07.25
16:31
Как можно не имея объекта формы узнать значения свойств этого  объекта?
30 RomanYS
 
30.07.25
16:33
(29) ему значения не нужны
32 DiMel_77
 
31.07.25
01:07
(0) Задача теоретически решаемая, но навряд ли вы будете заморачиваться...

Вам необходимо прочитать таблицы метаданных конфигурации напрямую из БД.
Сложный вариант:
1) Читаем файл "1a621f0f-5568-4183-bd9f-f6ef670e7090.si" из таблицы "Params". (распаковываем deflate). В нем содержатся имена записей в таблице "Config" (метаданных и GUID типа объекта метаданных, например 061d872a-5787-460e-95ac-ed74ea3a3e84 - Документы).
2) Делаете соответствие полного имени объекта метаданного и имя записи в таблице "Config".
(Формы в этой таблице имеют постфикс ".0".)
3)Читаете файл хранения формы во внутреннем скобко-файле. Разбираете этот скобко файл на форму и модуль формы. Получаете все реквизиты, которые вам нужны. (разбор формата можно посмотреть в https://infostart.ru/1c/tools/106310/)

Это если вы не хотите привязываться к конфигуратору и пакетному запуску. (у меня так работает анализ модулей форм на наличие подключения к подсистеме подключаемых команд).

Простой вариант:
Если не надо постоянно, а достаточно разово, то пакетный запуск конфигуратора и анализ выгрузки конфигурации в XML, с последующей записью результата анализа в регистр сведений. Либо вообще заполнить этот регистр создавая формы на клиенте через "ПолучитьФорму", а потом записывать результат в регистр сведений и в фоновом задании оперировать уже записанными в регистр данными.
33 Chameleon1980
 
31.07.25
05:23
(32) спасибо большое.
34 1Снеговик
 
гуру
31.07.25
09:36
"мне во вне нужно знать, какие колонки будут потом в форме" "которые натыкали мышкой"

Что за бред?

Если реквизиты нарисованы мышкой в конфигураторе, смотришь глазами и используешь в коде.

Если пользователь натыкал что-то и сохранил, то это лежит где-то в данных объекта, при чем тут форма?.
35 Мультук
 
гуру
31.07.25
09:40
Допустим я иду в "Заказ покупателя", нажимаю "Изменить форму"
и на таб.часть товары вытаскиваю реквизит "Код" из "Номенклатура"

Это считается "натыкал мышкой" ?
Вы это пытаетесь найти ?
36 программистище
 
31.07.25
09:51
такие реквизиты обычно заполняются алгоритмом в модуле формы или вызывается серверный метод, значит надо проделать теже действия и получить данные для них, имея данные контекста формы
а если они заполняются вручную, то и смысла нет
37 butterbean
 
31.07.25
09:53
я все равно не понял - зачем нужны реквизиты формы, что с ними можно сделать, если нет рядом самой формы? какая польза от этого? а если форма все таки есть, то почему из нее не надергать всего что надо?
38 Fish
 
гуру
31.07.25
10:12
(37) Видимо, нетленка какая-то.
39 1Снеговик
 
гуру
31.07.25
11:00
(37) это признак того, что изначально решение с какими-то формулами пошло не туда, а теперь приходится изобретать велосипеды и спрашивать на форумах.

Сам вопрос в таком ключе должен заставить задуматься переделать все нафиг с нуля.
40 rozer76
 
31.07.25
11:08
если БСП то ОбщегоНазначенияУТКлиентСервер.ДанныеПоПути

Подробности
// Возвращает значение реквизита формы или объекта по пути, заданному в виде строки.
//
// Параметры:
//    Объект - ДокументОбъект, СправочникОбъект, ФормаКлиентскогоПриложения - Объект или форма, из которой необходимо получить данные
//    ПутьКДанным - Строка - Путь к данным, например "Объект.Контрагент"
//    ИдентификаторСтроки - Строка - Уникальный идентификатор строки для случая получения данных из таблицы таблицы.
//    ЗначениеОтсутствия - Произвольный - Если путь к данным пустой, то возвращается данное значение
//    
// Возвращаемое значение:
//     Произвольный - Значение реквизита
//
Функция ДанныеПоПути(Объект, Знач ПутьКДанным, Знач ИдентификаторСтроки = Неопределено, ЗначениеОтсутствия = Неопределено) Экспорт
    
    Если ПутьКДанным = "" Тогда
        Возврат ЗначениеОтсутствия;
    ИначеЕсли ТипЗнч(ПутьКДанным) <> Тип("Строка") Тогда
        Возврат ПутьКДанным;
    КонецЕсли;
    
    ЧастиПутиКДанным = СтрРазделить(ПутьКДанным, ".", Ложь);
    Данные = ДанныеПоЧастямПути(Объект, ЧастиПутиКДанным, ИдентификаторСтроки);
    
    Возврат Данные;
    
КонецФункции

Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс