Данные были изменены или удалены другим пользователем УФ

1. reif 01.11.13 11:05 Сейчас в теме
&НаСервере
Процедура ЗаполнитьПоСчетуНаСервере(Документ,ТекСчет)экспорт


ДокОбъект = Документ.получитьобъект();

Если ТипЗнч(документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда


// дальше запроск данным и присванивание новых значений.


ДокОбъект.записать(РежимЗаписиДокумента.Запись);
КонецЕсли;

&НаКлиенте
Процедура ВыполнитьКоманду(идентификаторкоманды,массивдокументов) экспорт


Перем ВыбЗнач;
Ссылканадокумент =массивдокументов[0];

Массив = Новый Массив;
Массив.Добавить(Тип("ПланСчетовСсылка.Хозрасчетный"));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберете счет", ОписаниеТипов) Тогда

ТекСчет = ВыбЗнач;
ЗаполнитьПоСчетуНаСервере(Ссылканадокумент,ТекСчет);

КонецЕсли;

Вызывается на форме. Типа нажал заполнить, нече не заполнилось ,надо перазаходить чтоб отобразилось. Если нажать записать то ошибка в название темы.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. reif 01.11.13 12:15 Сейчас в теме
Я предпологаю что форма не обновляется. Или чето-то еще. Есть какие-то ымсли?
3. zamichnik 01.11.13 12:33 Сейчас в теме
Вместо
ДокОбъект = Документ.получитьобъект();
Используй
ДокОбъект = РеквизитФормыВЗначение("Объект");
jushkaaa; +1 Ответить
4. zamichnik 01.11.13 12:34 Сейчас в теме
А после записи -
ЗначениеВРеквизитФормы(ДокОбъект, "Объект")
Aspire1C; ProkhorDP; jushkaaa; +3 Ответить
5. reif 08.11.13 10:53 Сейчас в теме
не помогло.

В ДокОбъект = РеквизитФормыВЗначение("Объект"); передается форма внешней обработки , а не форма открытого документа,вроде. Или как-то так...
9. zamichnik 08.11.13 14:32 Сейчас в теме
(5) >> не помогло...
Ещё бы помогло, моих телепатических способностей догадаться, что речь шла о форме внешней обработки, увы, не хватило :)
По теме, есть два варианта решения:
1 - интерктивно. Выбрать в контекстном меню формы пункт "Перечитать".
или
2 - программно. В конце процедуры "ВыполнитьКоманду" добавить строку кода
Оповестить("Перечитать");
а в форме документа в обработчике события ОбработкаОповещения()
Если ИмяСобытия = "Перечитать" Тогда
Прочитать();
КонецЕсли;
jushkaaa; +1 Ответить
6. reif 08.11.13 13:55 Сейчас в теме
7. starjevschik 08.11.13 13:57 Сейчас в теме
(6) reif, лучше бы поделился, что за форма и что за серверный модуль, где все это. Иначе кажется, что в модуле документа ты пытаешься поменять этот же документ, достав его из базы.
8. reif 08.11.13 14:07 Сейчас в теме
Внешная обрабокта заполнения.

Использую ее в форме документа.

В форме обработки написано вот это.

&НаКлиенте
Процедура ВыполнитьКоманду(идентификаторкоманды,массивдокументов) экспорт


Перем ВыбЗнач;
Ссылканадокумент =массивдокументов[0];

Массив = Новый Массив;
Массив.Добавить(Тип("ПланСчетовСсылка.Хозрасчетный"));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберете счет", ОписаниеТипов) Тогда

ТекСчет = ВыбЗнач;
ЗаполнитьПоСчетуНаСервере(Ссылканадокумент,ТекСчет);

КонецЕсли;


///////////
&НаСервере
Процедура ЗаполнитьПоСчетуНаСервере(Документ,ТекСчет)экспорт


ДокОбъект = Документ.получитьобъект();

Если ТипЗнч(документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда


// дальше запроск данным и присванивание новых значений.


ДокОбъект.записать(РежимЗаписиДокумента.Запись);
КонецЕсли;

все. документ изменяется, но не отображается, форма в самом документе не изменяется, при нажатии записать выдвется ошибка в названии темы.Чтобы заполнение отобразаитлось ндао закрыть и открыть документ.
Метод "Этаформу" получает фомру обработки,
ЗначениеВРеквизитФормы(ДокОбъект, "Объект") - получает обработку, а не документ.
10. reif 08.11.13 14:56 Сейчас в теме
11. zamichnik 08.11.13 15:08 Сейчас в теме
(10) reif,
а в чём "печалька"? Конфигурация закрыта от изменений?
Ну тогда можно попробовать перечитать данные формы документа из кода внешней обработки. Получаешь форму с помощью функции ПолучитьОкна(), она возвращает коллекцию всех открытых окон твоего приложения, находишь там по имени форму документа и применяешь к ней метод Прочитать()... Должно взлететь...
12. reif 08.11.13 15:17 Сейчас в теме
(11) zamichnik,

&НаКлиенте
Процедура ВыполнитьКоманду(идентификаторкоманды,ОбъектыНазначенияМассив) экспорт


Перем ВыбЗнач;

Массив = Новый Массив;
Массив.Добавить(Тип("ПланСчетовСсылка.Хозрасчетный"));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберете счет", ОписаниеТипов) Тогда

ТекСчет = ВыбЗнач;

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


ОНО? не взлетает. После нажатия он мне пишет выберите тип операции поступления и список выдает)) Когда выбираю ошибка.
13. zamichnik 08.11.13 15:21 Сейчас в теме
Бр-р-р, ужас какой, я не так советовал :)
Подожди пару минут, сам попробую...
14. zamichnik 08.11.13 15:28 Сейчас в теме
Вот, лови, вставь после строки ЗаполнитьПоСчетуНаСервере(Ссылканадокумент,ТекСчет);
  окна = ПолучитьОкна();
  Для каждого текущее_окно Из окна Цикл
    содержимое_окна = текущее_окно.ПолучитьСодержимое();
    Если содержимое_окна <> Неопределено 
      И ТипЗнч(содержимое_окна) = Тип("УправляемаяФорма") 
      И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента" Тогда
          содержимое_окна.Прочитать();
    КонецЕсли; 
  КонецЦикла;
Показать
guagua; cheiser1982; Мах; reif; jushkaaa; +5 Ответить
18. cheiser1982 215 05.07.17 07:03 Сейчас в теме
(14)
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И ТипЗнч(содержимое_окна) = Тип("УправляемаяФорма")
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента" Тогда
содержимое_окна.Прочитать();
КонецЕсли;
КонецЦикла;


Спасибо! Тоже очень помогло.
20. user1004898 28 18.07.19 13:15 Сейчас в теме
(14)
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И ТипЗнч(содержимое_окна) = Тип("УправляемаяФорма")
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента" Тогда
содержимое_окна.Прочитать();
КонецЕсли;
КонецЦикла;


содержимое формы было обновлено до первоначального состояния (без учета последней записи в ТЧ формы, которая предшествувала этой операции, что вы рекомендуете.

Т,е. условно всё так же, как и ЭтаФорма.Прочитать() или просто Прочитать().

что нет так?
15. reif 08.11.13 16:16 Сейчас в теме
16. zamichnik 08.11.13 16:31 Сейчас в теме
(15) reif, тогда на самом деле - "печалька" :)
В любом случае решение вопроса заключается в том, чтобы обновить данные формы документа "ПоступлениеТоваровУслуг" после того как ты программно в сторонней процедуре изменил его реквизиты.
jushkaaa; +1 Ответить
17. reif 11.11.13 12:01 Сейчас в теме
(16) zamichnik,
А вот так вот заработало.
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаОбщая" Тогда
содержимое_окна.Прочитать();

Спасибо!
19. LomayaZakat 26.11.18 16:12 Сейчас в теме
Данные были изменены или удалены другим пользователем (тонкий клиент)

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

Возможно, их изменил другой пользователь или мы программно их изменили, но форму не обновили. Решить эту проблему можно, используя метод управляемой формы Прочитать(). Этот метод обновляет объект управляемой формы.

ЭтаФорма.Прочитать()
kaaasteeen; +1 Ответить
21. user633581_tsibulkomn 26.03.24 06:28 Сейчас в теме
Добрый день.
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаОбщая" Тогда
содержимое_окна.Прочитать();
Работает.
Спасибо.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот