Запись данных об использовании элемента

1. userOleg 28.01.25 12:28 Сейчас в теме
Требуется помощь.
В документе имеется реквизит Номенклатура и табличная часть ОбъемРемонта, в табличной части ссылки на справочник с о перечнем работ.
Как при сохранении документа в элементы справочника. которые были задействованы, записать информацию о номенклатуре, для которой они были использованы.

У меня при попытке записи в справочник с переченем работ вылетает ошибка "Объект недоступен для изменения" т.е элементы которые используюттся в форме не доступны для редактирования.

Цель задачи записать в справочник информацию о номенклатуре для которой используется элемент, для дальнейшего использования этих данных при отборе работ для конкретной номенклатуры.
По теме из базы знаний
Найденные решения
12. antz 28.01.25 14:33 Сейчас в теме
(11) А прямо так и писать

&НаСервере
Процедура НаполнениеЦенника()
     Отбор = Новый Структура("Номенклатура", Объект.Номенклатура);
     Для Каждого СтрокаТЧ Из Объект.ОбъемРемонта Цикл
          Если СтрокаТЧ.ОбъемРаботы.Номенклатура.НайтиСтроки(Отбор).Количество() = 0 Тогда
              ЭлементОбъект = СтрокаТЧ.ОбъемРаботы.ПолучитьОбъект();
              НоваяСтрока = ЭлементОбъект.Номенклатура.Добавить();
              НоваяСтрока.Деталь = Объект.Номенклатура;
              ЭлементОбъект.Записать();
        КонецЕсли;
     КонецЦикла;
КонецПроцедуры 
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 33 28.01.25 12:31 Сейчас в теме
(1)
У меня при попытке записи в справочник с переченем работ вылетает ошибка "Объект недоступен для изменения" т.е элементы которые используюттся в форме не доступны для редактирования.

Код приведи.
На форме - ссылки.
Записывать надо в объект.
4. userOleg 28.01.25 12:50 Сейчас в теме
(2) в процедуре ПередЗаписью

 Для Каждого СтрокаТЧ Из Работы.ОбъемРемонта Цикл
		 Сообщить(СтрокаТЧ.ОбъемРаботы);
		 ЭлементОбъект = СтрокаТЧ.ОбъемРаботы.ПолучитьОбъект(); 
		 НоваяСтрока = ЭлементОбъект.Ссылка.Номенклатура.Добавить();  
                 на это строке ошибка "Объект  недоступен для изменения."
		 
		 НоваяСтрока.Номенклатура = Номенклатура; 
		 
		 ЭлементОбъект.Записать();    	
		 
КонецЦикла;
Показать
5. Sashares 33 28.01.25 13:03 Сейчас в теме
(4)
НоваяСтрока = ЭлементОбъект.Номенклатура.Добавить(); 

Не надо в ссылку писать.
Но это все дичь, если честно.
Второй раз запишите документ, еще раз добавится.
100 раз запишите документ, будет 100 записей.
И так при записи каждого документа.
6. userOleg 28.01.25 13:22 Сейчас в теме
(5) Поменял. теперь Поле объекта не обнаружено (Номенклатура)

контроль на повторную запись я потом сделаю. Сначала нужно понять как записать.
Хотя через отладку табличную часть "Номенклатура" видно.
14. Sashares 33 28.01.25 16:43 Сейчас в теме
(1) Если цель - получить информацию, в какой работе какая номенклатура использовалась, было бы проще сделать отчет на СКД.
15. userOleg 28.01.25 17:03 Сейчас в теме
(14) нет цель собрать данные какая номенклатура используется для какой работы, чтобы в дальнейшем по этим данным сделать автоподбор для выбора работ для конкретной номенклатуры. Сначала хотел в ручную ввести соответствие, но это получается несколько тысяч позиций. а так оно само постепенно соберется.
3. starjevschik 28.01.25 12:32 Сейчас в теме
Наймите программиста, это не будет дорого
Это все делается не так, архитектуру программы тоже надо сделать правильно, и язык программирования 1с тоже не настолько банален, как кажется на первый взгляд из-за того, что там все по-русски.
7. userOleg 28.01.25 13:40 Сейчас в теме
исправил код.

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


Но все равно пишет

Ошибка при установке значения атрибута контекста (Объект)
{Документ.Работы.Форма.ФормаДокумента.Форма(177)}: НаполнениеЦенника( Объект, Объект.Номенклатура);
по причине:
Нельзя изменять поле, содержащее объект данных формы
8. antz 28.01.25 13:51 Сейчас в теме
Код процедуры НаполнениеЦенника полностью приведите.
9. userOleg 28.01.25 14:08 Сейчас в теме
(8)
&НаСервере
 Процедура НаполнениеЦенника(Работы, Номенклатура_оборудования)
	 Для Каждого СтрокаТЧ Из Работы.ОбъемРемонта Цикл
		 Сообщить(СтрокаТЧ.ОбъемРаботы);
		 ЭлементОбъект = СтрокаТЧ.ОбъемРаботы.ПолучитьОбъект(); 
		 НоваяСтрока = ЭлементОбъект.Номенклатура.Добавить(); 
		 
		 НоваяСтрока.Деталь = Номенклатура_оборудования; 
		 
		 ЭлементОбъект.Записать();    	
		 
	КонецЦикла;	 
	 //
 КонецПроцедуры
Показать
10. antz 28.01.25 14:13 Сейчас в теме
(9) А зачем передавать туда объект? И Объект и Объект.Номенклатура на сервере в контекстном вызове так же доступен, как и на клиенте.
11. userOleg 28.01.25 14:20 Сейчас в теме
(10) А как тогда это можно написать?
12. antz 28.01.25 14:33 Сейчас в теме
(11) А прямо так и писать

&НаСервере
Процедура НаполнениеЦенника()
     Отбор = Новый Структура("Номенклатура", Объект.Номенклатура);
     Для Каждого СтрокаТЧ Из Объект.ОбъемРемонта Цикл
          Если СтрокаТЧ.ОбъемРаботы.Номенклатура.НайтиСтроки(Отбор).Количество() = 0 Тогда
              ЭлементОбъект = СтрокаТЧ.ОбъемРаботы.ПолучитьОбъект();
              НоваяСтрока = ЭлементОбъект.Номенклатура.Добавить();
              НоваяСтрока.Деталь = Объект.Номенклатура;
              ЭлементОбъект.Записать();
        КонецЕсли;
     КонецЦикла;
КонецПроцедуры 
Показать
13. userOleg 28.01.25 16:21 Сейчас в теме
Огромное спасибо!
Получилось
Оставьте свое сообщение

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