Данные были изменены или удалены другим пользователем УФ
&НаСервере
Процедура ЗаполнитьПоСчетуНаСервере(Документ,ТекСчет)экспорт
ДокОбъект = Документ.получитьобъект();
Если ТипЗнч(документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
// дальше запроск данным и присванивание новых значений.
ДокОбъект.записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
&НаКлиенте
Процедура ВыполнитьКоманду(идентификаторкоманды,массивдокументов) экспорт
Перем ВыбЗнач;
Ссылканадокумент =массивдокументов[0];
Массив = Новый Массив;
Массив.Добавить(Тип("ПланСчетовСсылка.Хозрасчетный"));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберете счет", ОписаниеТипов) Тогда
ТекСчет = ВыбЗнач;
ЗаполнитьПоСчетуНаСервере(Ссылканадокумент,ТекСчет);
КонецЕсли;
Вызывается на форме. Типа нажал заполнить, нече не заполнилось ,надо перазаходить чтоб отобразилось. Если нажать записать то ошибка в название темы.
Процедура ЗаполнитьПоСчетуНаСервере(Документ,ТекСчет)экспорт
ДокОбъект = Документ.получитьобъект();
Если ТипЗнч(документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
// дальше запроск данным и присванивание новых значений.
ДокОбъект.записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
&НаКлиенте
Процедура ВыполнитьКоманду(идентификаторкоманды,массивдокументов) экспорт
Перем ВыбЗнач;
Ссылканадокумент =массивдокументов[0];
Массив = Новый Массив;
Массив.Добавить(Тип("ПланСчетовСсылка.Хозрасчетный"));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберете счет", ОписаниеТипов) Тогда
ТекСчет = ВыбЗнач;
ЗаполнитьПоСчетуНаСервере(Ссылканадокумент,ТекСчет);
КонецЕсли;
Вызывается на форме. Типа нажал заполнить, нече не заполнилось ,надо перазаходить чтоб отобразилось. Если нажать записать то ошибка в название темы.
По теме из базы знаний
- Технология обновления нетиповых конфигураций 1С:Предприятия 8 (редакция 12.04.2012)
- Обзор полезных методов БСП 3.1.4
- Поддержка пользователей [Alt+S] (подключаемое расширение)
- Эффективное управление фоновыми заданиями и коммуникация сеансов сервера с Фоном с помощью Структуры обмена (ноу-хау) + Бонус: Альтернативный вариант через Хранилище настроек
- Компонента ExchangeStruc (Структура Обмена). Прямой обмен данными между потоками, сессиями и окнами.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) >> не помогло...
Ещё бы помогло, моих телепатических способностей догадаться, что речь шла о форме внешней обработки, увы, не хватило :)
По теме, есть два варианта решения:
1 - интерктивно. Выбрать в контекстном меню формы пункт "Перечитать".
или
2 - программно. В конце процедуры "ВыполнитьКоманду" добавить строку кода
Оповестить("Перечитать");
а в форме документа в обработчике события ОбработкаОповещения()
Если ИмяСобытия = "Перечитать" Тогда
Прочитать();
КонецЕсли;
Ещё бы помогло, моих телепатических способностей догадаться, что речь шла о форме внешней обработки, увы, не хватило :)
По теме, есть два варианта решения:
1 - интерктивно. Выбрать в контекстном меню формы пункт "Перечитать".
или
2 - программно. В конце процедуры "ВыполнитьКоманду" добавить строку кода
Оповестить("Перечитать");
а в форме документа в обработчике события ОбработкаОповещения()
Если ИмяСобытия = "Перечитать" Тогда
Прочитать();
КонецЕсли;
Внешная обрабокта заполнения.
Использую ее в форме документа.
В форме обработки написано вот это.
&НаКлиенте
Процедура ВыполнитьКоманду(идентификаторкоманды,массивдокументов) экспорт
Перем ВыбЗнач;
Ссылканадокумент =массивдокументов[0];
Массив = Новый Массив;
Массив.Добавить(Тип("ПланСчетовСсылка.Хозрасчетный"));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберете счет", ОписаниеТипов) Тогда
ТекСчет = ВыбЗнач;
ЗаполнитьПоСчетуНаСервере(Ссылканадокумент,ТекСчет);
КонецЕсли;
///////////
&НаСервере
Процедура ЗаполнитьПоСчетуНаСервере(Документ,ТекСчет)экспорт
ДокОбъект = Документ.получитьобъект();
Если ТипЗнч(документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
// дальше запроск данным и присванивание новых значений.
ДокОбъект.записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
все. документ изменяется, но не отображается, форма в самом документе не изменяется, при нажатии записать выдвется ошибка в названии темы.Чтобы заполнение отобразаитлось ндао закрыть и открыть документ.
Метод "Этаформу" получает фомру обработки,
ЗначениеВРеквизитФормы(ДокОбъект, "Объект") - получает обработку, а не документ.
Использую ее в форме документа.
В форме обработки написано вот это.
&НаКлиенте
Процедура ВыполнитьКоманду(идентификаторкоманды,массивдокументов) экспорт
Перем ВыбЗнач;
Ссылканадокумент =массивдокументов[0];
Массив = Новый Массив;
Массив.Добавить(Тип("ПланСчетовСсылка.Хозрасчетный"));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберете счет", ОписаниеТипов) Тогда
ТекСчет = ВыбЗнач;
ЗаполнитьПоСчетуНаСервере(Ссылканадокумент,ТекСчет);
КонецЕсли;
///////////
&НаСервере
Процедура ЗаполнитьПоСчетуНаСервере(Документ,ТекСчет)экспорт
ДокОбъект = Документ.получитьобъект();
Если ТипЗнч(документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
// дальше запроск данным и присванивание новых значений.
ДокОбъект.записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
все. документ изменяется, но не отображается, форма в самом документе не изменяется, при нажатии записать выдвется ошибка в названии темы.Чтобы заполнение отобразаитлось ндао закрыть и открыть документ.
Метод "Этаформу" получает фомру обработки,
ЗначениеВРеквизитФормы(ДокОбъект, "Объект") - получает обработку, а не документ.
(10) reif,
а в чём "печалька"? Конфигурация закрыта от изменений?
Ну тогда можно попробовать перечитать данные формы документа из кода внешней обработки. Получаешь форму с помощью функции ПолучитьОкна(), она возвращает коллекцию всех открытых окон твоего приложения, находишь там по имени форму документа и применяешь к ней метод Прочитать()... Должно взлететь...
а в чём "печалька"? Конфигурация закрыта от изменений?
Ну тогда можно попробовать перечитать данные формы документа из кода внешней обработки. Получаешь форму с помощью функции ПолучитьОкна(), она возвращает коллекцию всех открытых окон твоего приложения, находишь там по имени форму документа и применяешь к ней метод Прочитать()... Должно взлететь...
(11) zamichnik,
&НаКлиенте
Процедура ВыполнитьКоманду(идентификаторкоманды,ОбъектыНазначенияМассив) экспорт
Перем ВыбЗнач;
Массив = Новый Массив;
Массив.Добавить(Тип("ПланСчетовСсылка.Хозрасчетный"));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберете счет", ОписаниеТипов) Тогда
ТекСчет = ВыбЗнач;
Для каждого Элемент из ОбъектыНазначенияМассив Цикл
КлючПоиска = Новый Структура("Ключ", Элемент);
Окна = ПолучитьОкна();
Для каждого Окно из Окна Цикл
Если НЕ Окно.Основное
И Найти(Окно.Заголовок, Элемент) Тогда
Если ТипЗнч(Элемент) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
Форма = ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента",КлючПоиска,,,Окно);
НовыйОбъект = Форма.Объект;
ЗаполнитьОбъект(НовыйОбъект,ТекСчет); // серверная процедура
КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
Форма.Модифицированность = Истина;
Форма.ОбновитьОтображениеДанных();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
ОНО? не взлетает. После нажатия он мне пишет выберите тип операции поступления и список выдает)) Когда выбираю ошибка.
&НаКлиенте
Процедура ВыполнитьКоманду(идентификаторкоманды,ОбъектыНазначенияМассив) экспорт
Перем ВыбЗнач;
Массив = Новый Массив;
Массив.Добавить(Тип("ПланСчетовСсылка.Хозрасчетный"));
ОписаниеТипов = Новый ОписаниеТипов(Массив);
Если ВвестиЗначение(ВыбЗнач, "Выберете счет", ОписаниеТипов) Тогда
ТекСчет = ВыбЗнач;
Для каждого Элемент из ОбъектыНазначенияМассив Цикл
КлючПоиска = Новый Структура("Ключ", Элемент);
Окна = ПолучитьОкна();
Для каждого Окно из Окна Цикл
Если НЕ Окно.Основное
И Найти(Окно.Заголовок, Элемент) Тогда
Если ТипЗнч(Элемент) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
Форма = ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента",КлючПоиска,,,Окно);
НовыйОбъект = Форма.Объект;
ЗаполнитьОбъект(НовыйОбъект,ТекСчет); // серверная процедура
КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
Форма.Модифицированность = Истина;
Форма.ОбновитьОтображениеДанных();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
ОНО? не взлетает. После нажатия он мне пишет выберите тип операции поступления и список выдает)) Когда выбираю ошибка.
Вот, лови, вставь после строки ЗаполнитьПоСчетуНаСервере(Ссылканадокумент,ТекСчет);
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И ТипЗнч(содержимое_окна) = Тип("УправляемаяФорма")
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента" Тогда
содержимое_окна.Прочитать();
КонецЕсли;
КонецЦикла;
Показать
(14)
Спасибо! Тоже очень помогло.
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И ТипЗнч(содержимое_окна) = Тип("УправляемаяФорма")
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента" Тогда
содержимое_окна.Прочитать();
КонецЕсли;
КонецЦикла;
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И ТипЗнч(содержимое_окна) = Тип("УправляемаяФорма")
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента" Тогда
содержимое_окна.Прочитать();
КонецЕсли;
КонецЦикла;
Спасибо! Тоже очень помогло.
(14)
содержимое формы было обновлено до первоначального состояния (без учета последней записи в ТЧ формы, которая предшествувала этой операции, что вы рекомендуете.
Т,е. условно всё так же, как и ЭтаФорма.Прочитать() или просто Прочитать().
что нет так?
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И ТипЗнч(содержимое_окна) = Тип("УправляемаяФорма")
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента" Тогда
содержимое_окна.Прочитать();
КонецЕсли;
КонецЦикла;
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И ТипЗнч(содержимое_окна) = Тип("УправляемаяФорма")
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента" Тогда
содержимое_окна.Прочитать();
КонецЕсли;
КонецЦикла;
содержимое формы было обновлено до первоначального состояния (без учета последней записи в ТЧ формы, которая предшествувала этой операции, что вы рекомендуете.
Т,е. условно всё так же, как и ЭтаФорма.Прочитать() или просто Прочитать().
что нет так?
(16) zamichnik,
А вот так вот заработало.
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаОбщая" Тогда
содержимое_окна.Прочитать();
Спасибо!
А вот так вот заработало.
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаОбщая" Тогда
содержимое_окна.Прочитать();
Спасибо!
Данные были изменены или удалены другим пользователем (тонкий клиент)
Если при попытке записать элемент справочника или документ появляется ошибка "Данные были изменены или удалены другим пользователем", то это значит, что данные, которые отображаются на форме и данные, которые записаны в базе отличаются.
Возможно, их изменил другой пользователь или мы программно их изменили, но форму не обновили. Решить эту проблему можно, используя метод управляемой формы Прочитать(). Этот метод обновляет объект управляемой формы.
Если при попытке записать элемент справочника или документ появляется ошибка "Данные были изменены или удалены другим пользователем", то это значит, что данные, которые отображаются на форме и данные, которые записаны в базе отличаются.
Возможно, их изменил другой пользователь или мы программно их изменили, но форму не обновили. Решить эту проблему можно, используя метод управляемой формы Прочитать(). Этот метод обновляет объект управляемой формы.
ЭтаФорма.Прочитать()
Добрый день.
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаОбщая" Тогда
содержимое_окна.Прочитать();
Работает.
Спасибо.
окна = ПолучитьОкна();
Для каждого текущее_окно Из окна Цикл
содержимое_окна = текущее_окно.ПолучитьСодержимое();
Если содержимое_окна <> Неопределено
И содержимое_окна.ИмяФормы = "Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаОбщая" Тогда
содержимое_окна.Прочитать();
Работает.
Спасибо.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот