Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 июн 2021, 18:25

Записать ТЧ Контрагента из документа

Автор Vasia Povar, 12 апр 2017, 08:17

0 Пользователей и 1 гость просматривают эту тему.

Vasia Povar

Есть документ ЗаявкаНаИзменениеНСИ и ТЧ "КонтактнаяИнформация", которая формируется из общего модуля програмно. Мне нужно значения из ТЧ ЗаявкаНаИзменениеНСИ перенести в такую же ТЧ в Справочник.Контрагенты, который создается по кнопке на форме документа. Помогите плз
erp , упр.форма

ilyay

ТаблицаЗначений = ЗаявкаНаИзменениеНСИСсылка.КонтактнаяИнформация.Выгрузить();
Об = РеквизитФормыВЗначение("Объект");
Об.КонтактнаяИнформация.Загрузить(ТаблицаЗначений);
ЗначениеВРеквизитФормы(Об, "Объект");

Vasia Povar

Цитата: ilyay от 12 апр 2017, 11:19
ТаблицаЗначений = ЗаявкаНаИзменениеНСИСсылка.КонтактнаяИнформация.Выгрузить();
Об = РеквизитФормыВЗначение("Объект");
Об.КонтактнаяИнформация.Загрузить(ТаблицаЗначений);
ЗначениеВРеквизитФормы(Об, "Объект");


Об. это Обьект формы справочника?
Добавлено: 12 апр 2017, 11:48


Вот функция в модуле менеджера, которая вызывается с формы документа при нажатии кнопки

Функция СоздатьОбъектНСИ(Объект, ЗначенияРеквизитов, ЗначенияРеквизитовТабличныхЧастей, ВидОПерации, ЭлементИзменения = Неопределено, РежимОбмена = Ложь, ПартнерПоЗаявке = НЕопределено) Экспорт

ИмяОбъекта = СокрЛП(Объект.ИмяПоМетаданным);

Если Объект.Родитель = Справочники.АГРО_СтруктураМетаданных.Справочники Тогда
Если ЗначениеЗаполнено(ЭлементИзменения) Тогда
НовыйОбъект = ЭлементИзменения.ПолучитьОбъект();

Если ВидОПерации = Перечисления.АГРО_ВидыОперацийЗаявкиНСИ.Удаление Тогда
НовыйОбъект.ПометкаУдаления = Истина;
НовыйОбъект.Записать();
Возврат НовыйОбъект.Ссылка;
КонецЕсли;

Иначе
НовыйОбъект = Справочники[ИмяОбъекта].СоздатьЭлемент();
Если ИмяОбъекта = "Контрагенты" Тогда
НовыйОбъект.Партнер = ПартнерПоЗаявке;
КонецЕсли;

КонецЕсли;

Если ВидОПерации <> Перечисления.АГРО_ВидыОперацийЗаявкиНСИ.Удаление Тогда

// Очистим табличные части
Для Каждого табЧасть Из НовыйОбъект.Метаданные().ТабличныеЧасти Цикл
НовыйОбъект[табЧасть.имя].Очистить();
КонецЦикла;

Попытка
ТабЧасти = ЗначенияРеквизитовТабличныхЧастей.Выгрузить();
Исключение
ТабЧасти = ЗначенияРеквизитовТабличныхЧастей.Скопировать();
КонецПопытки;
ТабЧасти.Свернуть("ИмяТабличнойЧасти, НомерСтрокиТЧ");

Для Каждого Строка Из ТабЧасти Цикл

НовСтрокаТЧ = НовыйОбъект[Строка.ИмяТабличнойЧасти].Добавить();

МасивСтрок = ЗначенияРеквизитовТабличныхЧастей.НайтиСтроки(Новый Структура("ИмяТабличнойЧасти, НомерСтрокиТЧ", Строка.ИмяТабличнойЧасти, Строка.НомерСтрокиТЧ));

Для Каждого элементМас Из МасивСтрок Цикл

НовСтрокаТЧ[элементМас.ИмяРеквизита] = элементМас.ЗначениеРеквизита;

КонецЦикла;

КонецЦикла;

КонецЕсли;

ИначеЕсли Объект.Родитель = Справочники.АГРО_СтруктураМетаданных.РегистрыСведений Тогда

Если ВидОПерации <> Перечисления.АГРО_ВидыОперацийЗаявкиНСИ.Добавление Тогда
НаборЗаписей = РегистрыСведений[ИмяОбъекта].СоздатьНаборЗаписей();
Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл

СтрокаТЧ = ЗначенияРеквизитов.Найти(ЭлементОтбора.Имя, "ИмяРеквизита");

ЭлементОтбора.Значение = СтрокаТЧ.ТекущееЗначениеРеквизита;
ЭлементОтбора.Использование = Истина;

КонецЦикла;
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() <> 0 Тогда
НовыйОбъект = НаборЗаписей.Получить(0);
Иначе
Сообщить("Записи не существует!");
Возврат Неопределено;
КонецЕсли;

Если ВидОПерации = Перечисления.АГРО_ВидыОперацийЗаявкиНСИ.Удаление Тогда
НаборЗаписей.Удалить(НовыйОбъект);
Сообщение = "Запись успешно удалена!";

Иначе
Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл
СтрокаТЧ = ЗначенияРеквизитов.Найти(ЭлементОтбора.Имя, "ИмяРеквизита");
ЭлементОтбора.Значение = СтрокаТЧ.ЗначениеРеквизита;
ЭлементОтбора.Использование = Истина;
КонецЦикла;
КлючЗап = Новый  Структура;
Для Каждого ЗначениеРеквизита Из ЗначенияРеквизитов Цикл
НовыйОбъект[ЗначениеРеквизита.ИмяРеквизита] = ЗначениеРеквизита.ЗначениеРеквизита;

//+++Щуровский 1.03.12
КлючЗап.Вставить(ЗначениеРеквизита.ИмяРеквизита, НовыйОбъект[ЗначениеРеквизита.ИмяРеквизита]);
//---Щуровский 1.03.12

КонецЦикла;
Сообщение = "Запись успешно изменена!";
КонецЕсли;

НаборЗаписей.Записать();
Сообщить(Сообщение);

//Возврат Истина;
//Щуровский 1.03.12
Возврат КлючЗап;
//Щуровский 1.03.12

Иначе
НовыйОбъект = РегистрыСведений[ИмяОбъекта].СоздатьМенеджерЗаписи();
КонецЕсли;
КонецЕсли;

КлючЗап = Новый  Структура;

Для Каждого ЗначениеРеквизита Из ЗначенияРеквизитов Цикл

Если НЕ ЗначениеРеквизита.ТабличнаяЧасть Тогда
НовыйОбъект[ЗначениеРеквизита.ИмяРеквизита] = ЗначениеРеквизита.ЗначениеРеквизита;
//+++Щуровский 1.03.12
КлючЗап.Вставить(ЗначениеРеквизита.ИмяРеквизита, НовыйОбъект[ЗначениеРеквизита.ИмяРеквизита]);
//---Щуровский 1.03.12
КонецЕсли;

КонецЦикла;

Если РежимОбмена Тогда
НовыйОбъект.ОбменДанными.Загрузка = Истина;
НовыйОбъект.УстановитьНовыйКод();
НовыйОбъект.Записать();
Иначе
# Если Клиент Тогда
Форма = НовыйОбъект.ПолучитьФорму();
Форма.ОткрытьМодально();
# Иначе
Возврат НовыйОбъект;
# КонецЕсли

КонецЕсли;

Если Объект.Родитель = Справочники.АГРО_СтруктураМетаданных.Справочники Тогда
Возврат НовыйОбъект.Ссылка;
ИначеЕсли Объект.Родитель = Справочники.АГРО_СтруктураМетаданных.РегистрыСведений Тогда
НовыйОбъект.Прочитать();
Если НовыйОбъект.Выбран() Тогда

//Возврат Истина;
//+++Щуровский 1.03.12
Возврат КлючЗап;
//---Щуровский 1.03.12

Иначе
Возврат Неопределено;
КонецЕсли;
КонецЕсли;

КонецФункции

Добавлено: 12 апр 2017, 11:53


Если так делаю:
&НаСервере
Процедура СоздатьНажатиеНаСервере(ДанныеФормы)

ДокОбъект = Документы.АГРО_ЗаявкаНаИзменениеНСИ.СоздатьОбъектНСИ(Объект.ОбъектЗаявки, Объект.ЗначенияРеквизитов, Объект.ЗначенияРеквизитовТабличныхЧастей, Объект.ВидОперации, Объект.ЭлементИзменения,ЛОжь,Объект.ПартнерПоЗаявке);

ЗначениеВДанныеФормы(ДокОбъект, ДанныеФормы);

Объект.ДатаВыполненияЗаявки = ТекущаяДата();
Объект.Обработал = ПараметрыСеанса.ТекущийПользователь;
ТаблицаЗначений = Объект.КонтактнаяИнформация.Выгрузить();
Объект = РеквизитФормыВЗначение("Объект");
Объект.КонтактнаяИнформация.Загрузить(ТаблицаЗначений);
ЗначениеВРеквизитФормы(Объект, "Объект");
                                           
КонецПроцедуры


{Документ.АГРО_ЗаявкаНаИзменениеНСИ.Форма.АГРО_ФормаДокументаУправляемая.Форма(894)}: Ошибка при установке значения атрибута контекста (Объект)
Объект = РеквизитФормыВЗначение("Объект");
по причине:
Нельзя изменять поле, содержащее объект данных формы

alex0402

ilyay написал
Об = РеквизитФормыВЗначение("Объект");
а не
Объект = РеквизитФормыВЗначение("Объект");
Спасибо за Сказать спасибо

Vasia Povar

Цитата: alex0402 от 12 апр 2017, 14:01
ilyay написал
Об = РеквизитФормыВЗначение("Объект");
а не
Объект = РеквизитФормыВЗначение("Объект");

Не помогло, пусто все равно

ilyay

Я написал выше следующие действия: реквизит формы конвертируется в объект, в его табличную часть загружаются данные из таблицы значения, потом этот объект конвертируется обратно в реквизит формы.

Можно без конвертации: очистить табличную часть реквизита формы, в цикле перенести строки из таблицы значений.
Объект.КонтактнаяИнформация.Очистить()
Для каждого СтрокаТЗ из ТаблицаЗначений Цикл
    СтрокаТЧ = Объект.КонтактнаяИнформация.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаТЗ);
КонецЦикла;




Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск