Имя: Пароль:
1C
1С v8
Как сообщить форме НОВОГО объекта о его записи.
0 rdaler
 
16.02.25
02:05
Пользую внешний источник данных из Access. Читает он из него замечательно, а нужно еще и писать. Проблема вроде бы решается костылем ADODB.Command.Execute(СвойЗапрос), но...
Как теперь сообщить форме о том, что объект в ней уже записан? Если юзер вместо "ЗаписатьИЗакрыть" жмякнет "Записать", то делать это он может бесконечно, плодя при этом дубли записей. Объект.Ссылка в форме ведь так и осталась пустой. И, что важно, ReadOnly. Борзо закрыть форму и снова ее открыть уже по ссылке как-то не по-джедайски. Может еще какие способы есть?
1 VS-1976
 
16.02.25
03:30
Посмотри свойство формы модифицируемость
2 lEvGl
 
гуру
16.02.25
07:19
(0) запользуйте При или даже После записи, а не кнопку, ссылка не будет пустой. В акцессе замещение записей, а не добавление каждый раз новых
3 Bigbro
 
16.02.25
07:27
уд
4 rdaler
 
16.02.25
11:20
(2) В "При"я как раз отменяю штатный механизм записи и подставляю свой. Следовательно "После" не возникает. Сама ссылка у меня есть. Мне нужен способ ее в форму подставить, чтобы она перестала считать себя формой НОВОЙ записи и стала формой редактирования СУЩЕСТВУЮЩЕЙ.
5 Ёпрст
 
16.02.25
11:38
(4) Прочитать()
6 rdaler
 
16.02.25
11:50
(5) Объект.Ссылка.Пустая() = Истина.
Форме нечего читать - она считает СЕБЯ первоисточником. В том и суть топика - как ее в этом разубедить?
7 Ёпрст
 
16.02.25
11:52
(6) переокрыть форму вестимо
8 Ёпрст
 
16.02.25
11:59
Ну или играться со всякими ОтобразитьИзменениеДанных
9 ЕRPe
 
16.02.25
12:25
Ну как бы в описании задачи уже напрашивается некий id, наличие которого должно контролироваться при последующей записи во избежании дублей. Какая еще ссылка если пишем черти пойми куда.
10 lEvGl
 
гуру
16.02.25
13:23
(9) мне вот совсем ничего не понятно
форма, которая себя чем то считает, какая то на что то ссылка, записи в акцесе
что ему надо вобще?
зы. и почему recordset вдруг костылем стал
11 rdaler
 
16.02.25
13:25
(9) Разумеется некий id есть, но он генерируется внешней базой и при записи его значение не заполняется. Следовательно, платформа никак сама его не контролирует - нужен очередной костыль. Проще уж действительно просто переоткрыть форму.
Ссылка:
ВнешнийИсточникДанныхТаблицаСсылка.<Имя внешнего источника>.<Имя таблицы внешнего источника данных> (ExternalDataSourceTableRef.<External source name>.<External data source table name>)
Свойства:
<Имя поля> (<Имя поля>)

Методы:
...
Описание:
Ссылка на объект таблицы внешнего источника данных.
Только для таблиц с типом данных ОбъектныеДанные.
12 Garykom
 
гуру
16.02.25
13:32
УстановитьСсылкуНового ?
13 Garykom
 
гуру
16.02.25
13:34
Я к тому что не порти типовой механизм, пусть работает штатно и создает элементы справочника
Но ссылку устанавливай из внешней базы
И при записи заодно обновляй эту свою внешнюю
Создай справочник без кода и без наименования, только ссылка и вперед
14 rdaler
 
16.02.25
13:51
(12) Да, пробовал, но к сожалению для формы это ничего не меняет.
15 rdaler
 
16.02.25
13:53
(13) Да - вариант, но тот еще костыль. Опять же проще просто переоткрыть. А очень хочется изящный вариант, если, конечно, таковой существует.
16 RomanYS
 
16.02.25
15:33
(15) "хочется изящный вариант" - стоит для начала сформулировать задачу.
Что за форма (произвольная)?
(4) Откуда у неё событие ПриЗаписи?
В зависимости от целей нужно или блокировать/закрывать форму, или пытаться получить внешний ИД после записи, или просто перед записью проверять на дубли.
Список неполный
17 rdaler
 
16.02.25
15:50
(16) Что за форма (произвольная)? - форма объекта ВнешниеИсточникиДанных.
Откуда у неё событие ПриЗаписи? - штатное, как у любой формы объекта.
Внешний ИД получаю. Даже ссылку на новый объект получаю. Форма списка отлавливает обработку оповещения и обновляется.
Даже рассматриваемая форма оповещение получает.
Цель не заблокировать дубли, а обновить статус формы - сообщить ей о том, что ее данные успешно записаны и она должна перейти в состояние редактирования существующего, а не нового объекта.
18 Garykom
 
гуру
16.02.25
18:29
(17) эмм, а что
ЭтотОбъект.Модифицированность = Ложь;

никак?
19 rdaler
 
16.02.25
18:55
(18) Перехватываю обработчик ПриЗаписи():
Отказ = Истина;
Если Объект.Ссылка.Пустая() Тогда INSERT;
Если Не Объект.Ссылка.Пустая() Тогда UPDATE;
Получаю ссылку на вновь созданный объект;
ОповещениеОбИзменении();
Все!
Модифицированность, УстановитьСсылкуНового, ОтобразитьИзменениеДанных и иже с ними заполняют все кроме Объект.Ссылка и в заголовке формы выглядит как ПредставлениеОбъекта + "(создание)".