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

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)Нет ошибок, просто все эти изменения не повлияли на запись в таблицу основную, я так понимаю изменился способ но результат тот же.
Оставьте свое сообщение

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