Запись строкового поля в табличную часть документа

1. citicat 119 01.12.16 12:31 Сейчас в теме
Пишу обработку для документов "Акт сверки взаиморасчетов" БП ред. 3.0
В базе формируются документы "Операция", которые должны попадать в Акт сверки взаиморасчетов. В печатную форму выводится поле "Представление", которое можно откорректировать вручную.
Задача - откорректировать поле "Представление" с помощью обработки в случае использования ручных операций.

[1C-CODE]&НаСервере
Процедура Заполнить()
	//Датаконца=Конмесяца
	
	//// Вставить содержимое обработчика.
	Док = Документы.АктСверкиВзаиморасчетов.Выбрать(Датаначала, датаконца);
	Пока Док.Следующий() Цикл 
		
		ЭтотОбъект= Док.ПолучитьОбъект();
		// Действия с документом - элементом выборки, 
		// его значение содержится в переменной ВыборкаДокументов 
		
	
		КоличествоСтрок = ЭтотОбъект.ПоДаннымОрганизации.Количество();
		Если КоличествоСтрок <> 0 Тогда 
			Для Каждого стр из ЭтотОбъект.ПоДаннымОрганизации Цикл 
				ТекКомментарий = стр.Документ.Комментарий;
				Если  найти(ТекКомментарий,"№") >0 тогда
					ЭтотОбъект.ПоДаннымОрганизации.Представление=ТекКомментарий;
					ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
				Конецесли;	
				 								
			КонецЦикла;
		КонецЕсли;
		
	КонецЦикла 

КонецПроцедуры
Показать
[/1C-CODE]

Пока не вижу ошибки в тексте модуля, но не работает.

Всем помогающим заранее спасибо.
По теме из базы знаний
Найденные решения
13. tusv 212 02.12.16 17:46 Сейчас в теме
(11) Тогда в запрос добавляем НомерСтроки-1 как Индекс
и в Выборке пишем
ДокОбъект.ПоДаннымОрганизации[ВыборкаСтроки.Индекс].Представление =Чего то там;

Разумеется ДокОбъект определяем раньше выборки строк
14. spacecraft 02.12.16 17:58 Сейчас в теме
с запросом конечно лучше. Решение с ним уже дали.
Но, вот переделанное начальное решение без запроса:
&НаСервере
Процедура Заполнить()
	Док = Документы.АктСверкиВзаиморасчетов.Выбрать(Датаначала,Датаконца);
	Пока Док.Следующий() Цикл 
		Акт= Док.ПолучитьОбъект();
		НужноЗаписать = Ложь;
		Для Каждого стр из Акт.ПоДаннымОрганизации Цикл
			ТекДокумент = стр.Документ;
			ТекКомментарий = ТекДокумент.Комментарий;
			Если  найти(ТекКомментарий,"№") >0 тогда
				ТекКомментарий =ТекКомментарий+" на складе Родники-2";
				стр.Представление=ТекКомментарий;
				НужноЗаписать = Истина;
			Конецесли;	
		КонецЦикла; 	
		Если  НужноЗаписать тогда
			Акт.Записать(РежимЗаписиДокумента.Запись);
		КонецЕсли;
	КонецЦикла 
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. tusv 212 02.12.16 15:06 Сейчас в теме
(1) Я так понимаю Что Представление это реквизит Ссылки, а не табличной части
(2)Безусловно запросом оптимальней. Мы сразу отсекам документы, где отсутствует подстрока "№"
Вот набросал в блокноте
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|	Ссылка, 
|	Комментарий
| ИЗ
|	 Документ.АктСверкиВзаиморасчетов.ПоДаннымОрганизации
|ГДЕ
|	Ссылка.Дата Между &ДатаНачала и &ДатаОкончания
|	И Комментарий подобно ""%№%""
|ИТОГИ
|	ПО Ссылка
|";
Запрос.УстановитьПараметр("ДатаНачала",ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончания));
ВыборкаДокументы = Запрос.Выполнить.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокументы.Следующий() Цикл
	Представление = "";
	ВыбокаСтроки = ВыборкаДокументы.Выбрать();
	Пока ВыборкаСтроки.Следующий() Цикл
		Представление = Представление+?(ПустаяСтрока(Представление),"","; ")
				+ ВыборкаСтроки.Комментарий;;
	КонецЦикла;
	ДокОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект();
	ДокОбъект.ОбменДанными.Загрузка = Истина;
	ДокОбъект.Представление = Представление;
	ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Показать

11. citicat 119 02.12.16 16:58 Сейчас в теме
(10)
"Представление" здесь реквизит табличной части. Его и надо откорректировать.
12. spacecraft 02.12.16 17:44 Сейчас в теме
(11) во-первых, не надо называть свои переменные служебными именами. ЭтотОбъект используется системой 1С. Дайте другое имя.
во-вторых, для заполнения строки табличной части, нужно или получить существующую строку, или создать новую.
13. tusv 212 02.12.16 17:46 Сейчас в теме
(11) Тогда в запрос добавляем НомерСтроки-1 как Индекс
и в Выборке пишем
ДокОбъект.ПоДаннымОрганизации[ВыборкаСтроки.Индекс].Представление =Чего то там;

Разумеется ДокОбъект определяем раньше выборки строк
2. Vovan1975 13 01.12.16 12:48 Сейчас в теме
первое:
ЭтотОбъект.ПоДаннымОрганизации.Представление=ТекКомментарий - неверно, должно быть

стр.Представление=ТекКомментарий

второе

записывать документ нужно только после обхода табчасти а не в процессе.
проверить, изменился ли документ после обхода табчасти поможет метод Модифицированность()
akR00b; citicat; +2 Ответить
3. S.V.Y 17 01.12.16 12:49 Сейчас в теме
Что именно не работает? Не заполняется поле "Представление" из комментария?
4. Vovan1975 13 01.12.16 12:49 Сейчас в теме
третье
подсчитывать количество строк в тч - нет нужды, цикл "для каждого" при отсутствуии в ТЧ строк - не будет выполнене ниразу.
akR00b; citicat; +2 Ответить
5. citicat 119 02.12.16 13:47 Сейчас в теме
Обработка не видит документы "Акт сверки взаиморасчетов" за период. Документы есть. Стоит ли переписывать с использованием запроса.
Прикрепленные файлы:
ОбработкаДокументовАКТОВ.epf
6. Ганс 02.12.16 13:58 Сейчас в теме
(5) Проблема может быть в неправильных датах! Попробуйте перепроверить что даты правильные! Хотя по сути запрос такой написать 1 минута, так что не вижу сложностей!
akR00b; citicat; +2 Ответить
7. citicat 119 02.12.16 14:08 Сейчас в теме
(6)Даты правильные (ошибки в датах проверяла).
8. Ганс 02.12.16 14:26 Сейчас в теме
(7) Попробуйте запрос, но думается что вы получите то же самое!

9. akR00b 24 02.12.16 14:38 Сейчас в теме
(7)Делайте запросом, вы сразу сможете посмотреть и отладить результат.

ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
выносите в первый цикл.

+ Используйте НачалоДня() КонецДня()
14. spacecraft 02.12.16 17:58 Сейчас в теме
с запросом конечно лучше. Решение с ним уже дали.
Но, вот переделанное начальное решение без запроса:
&НаСервере
Процедура Заполнить()
	Док = Документы.АктСверкиВзаиморасчетов.Выбрать(Датаначала,Датаконца);
	Пока Док.Следующий() Цикл 
		Акт= Док.ПолучитьОбъект();
		НужноЗаписать = Ложь;
		Для Каждого стр из Акт.ПоДаннымОрганизации Цикл
			ТекДокумент = стр.Документ;
			ТекКомментарий = ТекДокумент.Комментарий;
			Если  найти(ТекКомментарий,"№") >0 тогда
				ТекКомментарий =ТекКомментарий+" на складе Родники-2";
				стр.Представление=ТекКомментарий;
				НужноЗаписать = Истина;
			Конецесли;	
		КонецЦикла; 	
		Если  НужноЗаписать тогда
			Акт.Записать(РежимЗаписиДокумента.Запись);
		КонецЕсли;
	КонецЦикла 
КонецПроцедуры
Показать
15. citicat 119 02.12.16 21:18 Сейчас в теме
Спасибо всем комментаторам! Переделала обработку с учетом ваших комментариев.
16. config 203 03.12.16 10:05 Сейчас в теме
В базе формируются документы "Операция", которые должны попадать в Акт сверки взаиморасчетов

А за это вообще ай-яй-яй
17. citicat 119 03.12.16 17:50 Сейчас в теме
(16)Почему? Имеете право поставить "минус", но объяснить за что его ставите не словами типа "ай-яй-яй", а вредом для клиента.
Оставьте свое сообщение

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