Подстановка данных в таблицу

1. user945678 06.06.18 15:38 Сейчас в теме
Доброго времени суток, не могу разобраться с подстановкой значений в таблицу, есть несколько ТЧ в документе связаны уникальным, в одну из таблиц добавляю подбор для выбора нескольких значений, значения выбираются галочками, и проставляются в таблицу, но добавляет в общую таблицу только первое выбранное остальные не записываются...
&НаКлиенте
Процедура МашиныПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	Если НоваяСтрока И Не Копирование Тогда 
		
		НомСтроки	= 1;
		
		Элемент.ТекущиеДанные.УникальныйСотрудник			= Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник;
		Элемент.ТекущиеДанные.УникальныйТипОборудования		= Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования;
	//	Элемент.ТекущиеДанные.УникальныйМашина	= Новый УникальныйИдентификатор;
		РезультатОткрытия = ОткрытьФормуМодально("Документ.пРегистрацияПростояОборудования.Форма.Подбор",  СтуктураПараметров());
		Если НЕ РезультатОткрытия = Неопределено Тогда
			
			//СтруктураУН	= Новый Структура;
			//СтруктураУН.Вставить("УникальныйСотрудник", Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник);
			//СтруктураУН.Вставить("УникальныйТипОборудования", Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования);
			
			Для Каждого Стр из РезультатОткрытия Цикл
				Если НомСтроки	= 1 Тогда
					НовСтр	= Элемент.ТекущиеДанные;
				Иначе
					НовСтр	= ЭтаФорма.Машины.Добавить();
				КонецЕсли;
				НовСтр.Машина						= Стр.Машина;
				НовСтр.УникальныйСотрудник			= Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник;
				НовСтр.УникальныйТипОборудования	= Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования;
				НовСтр.УникальныйМашина 			= Новый УникальныйИдентификатор;
				НомСтроки	= НомСтроки + 1;
				
			конецЦикла;	
			
		//	ПроверитьСтруктуру(РезультатОткрытия, СтруктураУН);
			
		КонецЕсли;

	ИначеЕсли НоваяСтрока И Копирование Тогда 
		
		WSHShell = Новый COMОбъект("WScript.Shell");
		
		Уникальный		= СозданиеКопированием(Элемент.ТекущиеДанные.УникальныйСотрудник, Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования, Элемент.ТекущиеДанные.УникальныйМашина);
		ЭтоКопирование	= Истина;
		
		ЗаполнитьТаблицуМашиныКлиент();
		ПодключитьОбработчикОжидания("СпозиционироватьНаНужнойСтроке", 0.001, Истина);
		НужнаяСтрокаИдентификатор		= ПозицияНужнойСтроки(Уникальный, "УникальныйМашина", Машины);
		Элементы.ТипыОборудования.ТекущаяСтрока	= НужнаяСтрокаИдентификатор;
		
		WSHShell.SendKeys("{ENTER}")
	
	КонецЕсли;

КонецПроцедуры
Показать

Как сделать так что бы все значения записывались в общую таблицу?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ЧерныйКот 06.06.18 15:48 Сейчас в теме
(1) Если НоваяСтрока И Не Копирование Тогда

НомСтроки = 1;
не в этом проблема?

И в форме подбора можно ЭтаФорма.Закрыть(МассивВыбранныхЗначений);
тогда РезультатОткрытия будет получать МассивВыбранныхЗначений
3. user945678 06.06.18 16:00 Сейчас в теме
(2) В том то и дело что все выбирает как нужно, в таблицу попадают все значения выбранные, но в общую записывается только 1е...
Прикрепленные файлы:
4. ЧерныйКот 06.06.18 16:11 Сейчас в теме
(3) РезультатОткрытия что содержит в отладке? ТЗ, массив, список значений ?
ЭтаФорма.Машины = данный реквизит какого типа?
форма на скрине в шапке топа - это форма документа?

а Машины - это ТЧ документа?
5. user945678 06.06.18 16:17 Сейчас в теме
(4) РезультатОткрытия = ДанныеФормыКоллекция, ЭтаФорма.Машины тоже ДанныеФормыКоллекция
6. user945678 06.06.18 16:30 Сейчас в теме
(5)Видимо не добавляет потому что не так что то в процедуре передокончанием редактирования ...
&НаКлиенте
Процедура МашиныПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
		
	Если ЭтоКопирование = Ложь Тогда
		
		Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.Машина) Тогда 
			СтруктураПоиска = Новый Структура("Машина",  Элемент.ТекущиеДанные.Машина);
		Иначе 
			СтруктураПоиска = Новый Структура("Машина",  Справочники.ЮИ_РабочиеЦентры.ПустаяСсылка());
		КонецЕсли;
		
		РезультатПоиска = Машины.НайтиСтроки(СтруктураПоиска);

				
		Если РезультатПоиска.Количество()> 1 Тогда
						
			Предупреждение("Дубль машины");
			УдалитьСтрокиОбщиеДанные(Элемент.ТекущиеДанные.УникальныйСотрудник, Элемент.ТекущиеДанные.УникальныйТипОборудования, Элемент.ТекущиеДанные.УникальныйМашина, Неопределено);
			ЗаполнитьТаблицуМашиныКлиент();
			ПодключитьОбработчикОжидания("ЗаполнитьТаблицуПричиныПростояКлиент", 	0.001, Истина);
			АктивацияПервыхСтрок(Неопределено, Неопределено, Машины, ПричиныПростоя);
			
			Возврат;
			
		Иначе
										
			Если НоваяСтрока Тогда
				
				СтрокаОбщиеДанные = Объект.ОбщиеДанные.Добавить();
				
				СтрокаОбщиеДанные.Сотрудник						= Элементы.Сотрудники.ТекущиеДанные.Сотрудник;
				СтрокаОбщиеДанные.УникальныйСотрудник   		= Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник;
				СтрокаОбщиеДанные.ТипОборудования				= Элементы.ТипыОборудования.ТекущиеДанные.ТипОборудования;
				СтрокаОбщиеДанные.УникальныйТипОборудования   	= Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования;
				
				СтрокаОбщиеДанные.Машина						= Элемент.ТекущиеДанные.Машина;
				СтрокаОбщиеДанные.УникальныйМашина				= Элемент.ТекущиеДанные.УникальныйМашина;

			ИначеЕсли ЭтоИзменение Тогда 
				
				ИзменениеСтрокиОбщиеДанные(Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник, Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования, Элемент.ТекущиеДанные.УникальныйМашина, Неопределено, Элементы.Сотрудники.ТекущиеДанные.Сотрудник, Элементы.ТипыОборудования.ТекущиеДанные.ТипОборудования, Элемент.ТекущиеДанные.Машина,  Неопределено);
				
			КонецЕсли; 
			
			Модифицированность	= Истина;
			
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры
Показать

При отладке видно что записывает в общую таблицу именно в этой процедуре и только 1е значение
7. ЧерныйКот 06.06.18 16:30 Сейчас в теме
РезультатОткрытия = ДанныеФормыКоллекция ???!

советую переписать без модальности, открыть форму подбора с блокированием формы владельца, в качестве владельца прописать ЭтаФорма.Машины.

Для элемента ЭтаФорма.Машины прописать обработчик "ОбработкаВыбора",

в форме подбора по нажатию на кнопку перенести в документ - Закрыть(МассивВыбранныхЗначений);

в обработчике выбора - этот массив добавлять в машины.
8. user945678 06.06.18 16:37 Сейчас в теме
(7)Возможно в процедуре передокончаниемредактирования можно чуть подправить что бы не переписывать все?)
9. ЧерныйКот 06.06.18 16:48 Сейчас в теме
(8) я не вижу в обработке МашиныПередОкончаниемРедактирования причин удаления строк.
хотелось бы посмотреть, что в процедуре которая вызывается по кнопке "Добавить в документ" из формы подбора.
мне кажется ошибка там.
10. user945678 06.06.18 17:03 Сейчас в теме
(9)Вот все процедуры формы подбора :
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	СтруктураПараметров	= ЗначениеИзСтрокиВнутр(Параметры.ДокОбъект);
	ЗаполнитьОстатки();
	
	Таб = СтруктураПараметров.СоставПартии;
	
	Для Каждого Строка Из Таблица1 Цикл	
		Если Не Таб.Найти(Строка.Машина,"Машина")= Неопределено Тогда 
			Строка.Подобрать=Истина;	
		КонецЕсли;	
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьОстатки()	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЮИ_РабочиеЦентры.Ссылка КАК Машина
		|ИЗ
		|	РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЮИ_РабочиеЦентры КАК ЮИ_РабочиеЦентры
		|		ПО (ЮИ_РабочиеЦентры.Ссылка = ЗначенияСвойствОбъектов.Объект)
		|ГДЕ
		|	ЗначенияСвойствОбъектов.Свойство.Наименование = ""Тип оборудования""
		|	И НЕ ЗначенияСвойствОбъектов.Объект.НомерОборудования = """"";

	Результат = Запрос.Выполнить().Выгрузить();
	Результат.Сортировать("Машина");
	
	Таблица1.Загрузить(Результат);
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьВДокумент(Команда)
	ЭтаФорма.Закрыть(ПолучитьСтруктуруПараметров());
КонецПроцедуры

&НаСервере
Функция ПолучитьСтруктуруПараметров()
	
	Отбор = Новый Структура("Подобрать",Ложь);
	
	Результат = Таблица1.НайтиСтроки(Отбор);
	
	Для Каждого СтрокаРезультат Из Результат Цикл
		Таблица1.Удалить(СтрокаРезультат);
	КонецЦикла;
	
	Возврат Таблица1;
	
КонецФункции

&НаКлиенте
Процедура ОтметитьВсе(Команда)
	
	Для каждого СтрокаТаблицы Из Таблица1 Цикл
		СтрокаТаблицы.Подобрать = Истина;
	КонецЦикла;
	
КонецПроцедуры
Показать
11. ЧерныйКот 06.06.18 17:28 Сейчас в теме
&НаСервере
Функция ПолучитьСтруктуруПараметров()
	
	Отбор = Новый Структура("Подобрать",Истина);
	Результат = Таблица1.Скопировать(Отбор).ВыгрузитьКолонку("Машина");
		
	Возврат Результат; // массив "машин"
	
КонецФункции

// форма исходная
&НаКлиенте
Процедура МашиныПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    
    Если НоваяСтрока И Не Копирование Тогда 
        
        НомСтроки    = 1;
        
        <…>
        Если НЕ РезультатОткрытия = Неопределено Тогда
            
              Для Каждого Машина из РезультатОткрытия Цикл
                Если НомСтроки    = 1 Тогда
                    НовСтр    = Элемент.ТекущиеДанные;
                Иначе
                    НовСтр    = ЭтаФорма.Машины.Добавить();
                КонецЕсли;
                НовСтр.Машина                        =  Машина;
                НовСтр.УникальныйСотрудник            = Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник;
                НовСтр.УникальныйТипОборудования    = Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования;
                НовСтр.УникальныйМашина             = Новый УникальныйИдентификатор;
                НомСтроки    = НомСтроки + 1;
                
            конецЦикла;    
            
         КонецЕсли;

      <…>

КонецПроцедуры


Показать
12. user945678 06.06.18 18:13 Сейчас в теме
(11) {Документ.пРегистрацияПростояОборудования.Форма.Подбор.Форма(48)}: Метод объекта не обнаружен (Скопировать)
Результат = Таблица1.Скопировать(Отбор).ВыгрузитьКолонку("Машина");
Вот процедуры в форме документа по подбору :
&НаКлиенте
Процедура Подбор(Команда)
				
		РезультатОткрытия = ОткрытьФормуМодально("Документ.пРегистрацияПростояОборудования.Форма.Подбор",  СтуктураПараметров());
		
		Если НЕ РезультатОткрытия = Неопределено Тогда 
			ПроверитьСтруктуру(РезультатОткрытия);
		КонецЕсли;
			
КонецПроцедуры

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

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

&НаСервере
Функция ПроверитьСтруктуру(РезультатОткрытия, СтруктураУН = Неопределено)
	
	//Машины.Очистить();
	ТаблицаЗачений	= РезультатОткрытия.Выгрузить();
	Машины.Загрузить(ТаблицаЗачений);	

КонецФункции
Показать

Мне кажется проблема еще кроется в таблице ТипОборудования, потому что при активации строки в этой таблице и удаляются все значения кроме первого в таблице машины...
13. ЧерныйКот 06.06.18 18:57 Сейчас в теме
(12) поправка Результат = Таблица1.Выгрузить(Отбор).ВыгрузитьКолонку("Машина"); // метода скопировать у данныеформыколлекция нет, ошибся
14. user945678 06.06.18 19:06 Сейчас в теме
(13) {Документ.пРегистрацияПростояОборудования.Форма.ФормаДокумента.Форма(405)}: Поле объекта не обнаружено (Машина)
НовСтр.Машина = Стр.Машина;
15. ЧерныйКот 06.06.18 19:09 Сейчас в теме
(14) смотри код в (11) внимательнее. т.к. мы возвращаем не коллекцию, а массив, то и обращение через точку нам более не нужно
16. user945678 06.06.18 19:20 Сейчас в теме
(15) Результат тот же , данные не сохраняются в общую таблицу((
17. ЧерныйКот 07.06.18 11:57 Сейчас в теме
(16) значит отладчик и ищем место кода в котором ошибка
18. user945678 07.06.18 12:08 Сейчас в теме
(17)Нет ошибок, просто все эти изменения не повлияли на запись в таблицу основную, я так понимаю изменился способ но результат тот же.
Оставьте свое сообщение

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