Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
alexey980
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 12
1

Не отображаются изменения на форме после заполнения табличной части реквизита

15.04.2016, 17:10. Просмотров 4341. Ответов 4
Метки нет (Все метки)

Пишу внешнюю обработку для заполнения табличной части документа Реализация товаров и услуг в Конфигурации УТ 11. Суть в том, что нужно скорректировать количество для каждой позиции номенклатуры в зависимости от того, сколько данного товара есть на складе.

Код модуля объекта самой обработки:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
    ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Корректировка количества товара в РТУ");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная обработка для корректировки количества товара в табличной части документа Реализация товаров и услуг");
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Корректировка количества по остаткам", "КорректировкаКоличестваПоОстаткам", "ВызовКлиентскогоМетода", Истина);
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции
 
Функция ПолучитьТаблицуКоманд()
  Команды = Новый ТаблицаЗначений;
  Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
  Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
  Возврат Команды;
КонецФункции
 
Функция ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;
КонецФункции
Здесь вопросов нет. При подключении обработки в форме документа добавляется кнопка "Заполнение / Корректировка количества по остаткам".

Дальше создаю в обработке форму и в модуле формы пишу следующий код:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&НаКлиенте
Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения) Экспорт
    ДанныеФормыРТУОбъект = ВладелецФормы.Объект;
    ЗаполнитьОбъектНаСервере(ДанныеФормыРТУОбъект);
    КопироватьДанныеФормы(ДанныеФормыРТУОбъект, ВладелецФормы.Объект);        
    ВладелецФормы.Модифицированность = Истина;
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьОбъектНаСервере(ДанныеФормыОбъект)
    ТЧ = ДанныеФормыОбъект.Товары;
    Для Каждого Строка Из ТЧ Цикл
        // здесь будет запрос к регистру накопления ТоварыНаСкладахОстатки, чтобы узнать остатки товара
        // пока для наглядности пусть в документе будет каждого товара по одной штуке
        Строка.Количество = 1; 
    КонецЦикла;
КонецПроцедуры
Собственно и всё, а пользователь пусть сам решает сохранять ему документ или продолжить редактирование.

Вопрос лишь в том, что изменение количества в реквизите "Товары" никак не отображается на форме документа, то есть в данном конкретном случае пользователь после изменения объекта увидит не единички в поле "Количество", а прежнее количество. Кроме того, если нажать кнопку "Записать объект", закрыть и заново открыть документ, то там по-прежнему будет старое количество, а не единички.

Как это исправить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2016, 17:10
Ответы с готовыми решениями:

Присвоение значения реквизита к табличной части
Здравствуйте! Помогите пожалуйста с присвоением. Такая вот проблема, есть документ "Приказ на ввод...

Обращение к данным реквизита табличной части документа
Всем привет, уже полдня парюсь над проблемой, нужна ваша подмога, голова дымит, уже не соображает....

Как сделать ссылку реквизита табличной части справочника
Я недавний пользователь 1с. И я решил сделать на нём диплом (Библиотека). В процессе возник вопрос...

Отображение не стандартного реквизита справочника в табличной части документа
Здравствуйте. Столкнулся с проблемой в собственной конфе на 1с 8.3.5. Есть 2 справочника ...

Заполнение табличной части документа при выборе реквизита
Доброго дня! Будьте добры, подскажите, пожалуйста! Имеется: 1. Справочник...

4
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
15.04.2016, 17:31 2
alexey980, а зачем строка КопироватьДанныеФормы()?
0
alexey980
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 12
15.04.2016, 23:20  [ТС] 3
без копирования данных формы тоже ничего не выходит

Добавлено через 5 часов 8 минут
На самом деле, первоначальный код, можно сказать, полностью рабочий, и все-таки без КопироватьДанныеФормы() не обойтись. Просто изначально какая-то подстава вышла с колонкой таблицы Количество, в которой почему-то отображается не количество штук, а количество упаковок. Поскольку я менял значения поля Количество (а не КоличествоУпаковок), то на экране табличная часть для меня оставалась неизменной. В общем, дальше нужно разбираться именно с логикой отображения количества штук и количества упаковок табличной части реквизита Товары в форме документа РеализацияТоваровУслуг, но это уже, как говорится, другая история.
0
Dethmontt
Модератор
Эксперт 1С
2655 / 2444 / 419
Регистрация: 10.03.2011
Сообщений: 8,748
Записей в блоге: 1
Завершенные тесты: 1
19.04.2016, 18:44 4
alexey980, Сначала ДанныеФормыВЗначение() - преобразование данных формы в объект прикладного типа
Изменяем полученную ТЗ

А потом ЗначениеВДанныеФормы() - преобразуем прикладной объект обратно в данные формы

Добавлено через 6 минут
У всех элементов объектного типа есть три состояния

1. Данные на клиенте (экземпляр объекта №1)
2. Данные на сервере (экземпляр объекта №2)
3. Данные в БД (экземпляр объекта №3)

На форме ты видишь №1 - меняешь №2 - реально сейчас в базе №3


Как работает:
Когда ты открываешь форму объекта происходит
1. считывание объекта из БД (№3)
2. конструирование объекта на сервере (№2)
3. передача данных с сервера на клиент (№1)

Когда нажимаешь кнопку записать:
1. Данные формы на клиенте переходят на сервер (№1)
2. На сервере происходит перезапись серверных данных (№2) данными (№1)
3. Серверные данные сохраняются в БД(№3)

нужно учитывать это при разработке и станет гараздо проще понять что делать и почему так происходит

Добавлено через 2 минуты
контекстный серверный вызов автоматом при изменении данных на сервере обновляет данные на клиенте, но когда ты это делаешь вне контекста формы изменяемого объекта
ты должен сам позаботиться об обновлении данных формы после изменения серверных данных

Добавлено через 5 минут
З.Ы. это я очень обобщенно написал. Где то в просторах интернета есть литература по УФ.
На самом деле там более запутанно все и еще куча нюансов с оптимизацией по передаче, перезаписи и т.д.
2
alexey980
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 12
25.04.2016, 11:19  [ТС] 5
ещё немного полезной, на мой взгляд, информации в продолжение темы:

мне тут подсказали, что в новых конфигурациях, использующих БСП, можно для внешних обработок вида "ЗаполениеОбъекта" указывать тип команды использования "ЗаполнениеФормы" (вместо "ВызовКлиентскогоМетода"). это позволяет сразу на сервере работать непосредственно с контекстом формы самих документов, из которых вызывается обработка через передаваемый параметр ПараметрыВыполнения.ЭтаФорма. мало того, что задача заполнения документов упрощается в разы, потому что не нужно ни КопироватьДанныеФормы(), ни преобразовывать ДанныеФормыВЗначение() - так еще можно сходу менять и добавлять новые реквизиты и элементы формы на стандартные документы типовой конфигурации прямо из внешней обработки. при использовании ВызовКлиентскогоМетода это было невозможно сделать, так как на сервере нельзя было получить контекст формы владельца (то есть не формы обработки, а формы документа, из которого эта обработка вызывается) и можно было работать лишь с объектом формы владельца.
0
25.04.2016, 11:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2016, 11:19

Подстановка реквизита элемента справочника при заполнении табличной части документа
Всем доброго времени суток. Совсем начинающий, потому и вопрос наверное многим покажется глупым,...

Как в табличной части скрыть название реквизита, но его значения отражать так же?
Смотрите картинку. Как сделать, чтобы реквизит ЦифраВид отражался, но его иконки отражались как...

Как получить значение реквизита одного справочника и перенести их в реквизит табличной части другого
Добрый день, очень сильно нужна помощь.... Есть справочник "ВидыУслуг", реквизит "Тариф" ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru