Доброго времени суток, не могу разобраться с подстановкой значений в таблицу, есть несколько ТЧ в документе связаны уникальным, в одну из таблиц добавляю подбор для выбора нескольких значений, значения выбираются галочками, и проставляются в таблицу, но добавляет в общую таблицу только первое выбранное остальные не записываются...
Как сделать так что бы все значения записывались в общую таблицу?
&НаКлиенте
Процедура МашиныПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока И Не Копирование Тогда
НомСтроки = 1;
Элемент.ТекущиеДанные.УникальныйСотрудник = Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник;
Элемент.ТекущиеДанные.УникальныйТипОборудования = Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования;
// Элемент.ТекущиеДанные.УникальныйМашина = Новый УникальныйИдентификатор;
РезультатОткрытия = ОткрытьФормуМодально("Документ.пРегистрацияПростояОборудования.Форма.Подбор", СтуктураПараметров());
Если НЕ РезультатОткрытия = Неопределено Тогда
//СтруктураУН = Новый Структура;
//СтруктураУН.Вставить("УникальныйСотрудник", Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник);
//СтруктураУН.Вставить("УникальныйТипОборудования", Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования);
Для Каждого Стр из РезультатОткрытия Цикл
Если НомСтроки = 1 Тогда
НовСтр = Элемент.ТекущиеДанные;
Иначе
НовСтр = ЭтаФорма.Машины.Добавить();
КонецЕсли;
НовСтр.Машина = Стр.Машина;
НовСтр.УникальныйСотрудник = Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник;
НовСтр.УникальныйТипОборудования = Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования;
НовСтр.УникальныйМашина = Новый УникальныйИдентификатор;
НомСтроки = НомСтроки + 1;
конецЦикла;
// ПроверитьСтруктуру(РезультатОткрытия, СтруктураУН);
КонецЕсли;
ИначеЕсли НоваяСтрока И Копирование Тогда
WSHShell = Новый COMОбъект("WScript.Shell");
Уникальный = СозданиеКопированием(Элемент.ТекущиеДанные.УникальныйСотрудник, Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования, Элемент.ТекущиеДанные.УникальныйМашина);
ЭтоКопирование = Истина;
ЗаполнитьТаблицуМашиныКлиент();
ПодключитьОбработчикОжидания("СпозиционироватьНаНужнойСтроке", 0.001, Истина);
НужнаяСтрокаИдентификатор = ПозицияНужнойСтроки(Уникальный, "УникальныйМашина", Машины);
Элементы.ТипыОборудования.ТекущаяСтрока = НужнаяСтрокаИдентификатор;
WSHShell.SendKeys("{ENTER}")
КонецЕсли;
КонецПроцедуры
ПоказатьКак сделать так что бы все значения записывались в общую таблицу?
Прикрепленные файлы:
По теме из базы знаний
- Регистрация запуска обработок во внешнем источнике данных
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Генератор данных. Полезный инструмент для разработки через тестирование
- Универсальная загрузка данных формата Excel
- Размер таблиц серверной базы данных (для двух СУБД)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5)Видимо не добавляет потому что не так что то в процедуре передокончанием редактирования ...
При отладке видно что записывает в общую таблицу именно в этой процедуре и только 1е значение
&НаКлиенте
Процедура МашиныПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ЭтоКопирование = Ложь Тогда
Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.Машина) Тогда
СтруктураПоиска = Новый Структура("Машина", Элемент.ТекущиеДанные.Машина);
Иначе
СтруктураПоиска = Новый Структура("Машина", Справочники.ЮИ_РабочиеЦентры.ПустаяСсылка());
КонецЕсли;
РезультатПоиска = Машины.НайтиСтроки(СтруктураПоиска);
Если РезультатПоиска.Количество()> 1 Тогда
Предупреждение("Дубль машины");
УдалитьСтрокиОбщиеДанные(Элемент.ТекущиеДанные.УникальныйСотрудник, Элемент.ТекущиеДанные.УникальныйТипОборудования, Элемент.ТекущиеДанные.УникальныйМашина, Неопределено);
ЗаполнитьТаблицуМашиныКлиент();
ПодключитьОбработчикОжидания("ЗаполнитьТаблицуПричиныПростояКлиент", 0.001, Истина);
АктивацияПервыхСтрок(Неопределено, Неопределено, Машины, ПричиныПростоя);
Возврат;
Иначе
Если НоваяСтрока Тогда
СтрокаОбщиеДанные = Объект.ОбщиеДанные.Добавить();
СтрокаОбщиеДанные.Сотрудник = Элементы.Сотрудники.ТекущиеДанные.Сотрудник;
СтрокаОбщиеДанные.УникальныйСотрудник = Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник;
СтрокаОбщиеДанные.ТипОборудования = Элементы.ТипыОборудования.ТекущиеДанные.ТипОборудования;
СтрокаОбщиеДанные.УникальныйТипОборудования = Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования;
СтрокаОбщиеДанные.Машина = Элемент.ТекущиеДанные.Машина;
СтрокаОбщиеДанные.УникальныйМашина = Элемент.ТекущиеДанные.УникальныйМашина;
ИначеЕсли ЭтоИзменение Тогда
ИзменениеСтрокиОбщиеДанные(Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник, Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования, Элемент.ТекущиеДанные.УникальныйМашина, Неопределено, Элементы.Сотрудники.ТекущиеДанные.Сотрудник, Элементы.ТипыОборудования.ТекущиеДанные.ТипОборудования, Элемент.ТекущиеДанные.Машина, Неопределено);
КонецЕсли;
Модифицированность = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьПри отладке видно что записывает в общую таблицу именно в этой процедуре и только 1е значение
РезультатОткрытия = ДанныеФормыКоллекция ???!
советую переписать без модальности, открыть форму подбора с блокированием формы владельца, в качестве владельца прописать ЭтаФорма.Машины.
Для элемента ЭтаФорма.Машины прописать обработчик "ОбработкаВыбора",
в форме подбора по нажатию на кнопку перенести в документ - Закрыть(МассивВыбранныхЗначений);
в обработчике выбора - этот массив добавлять в машины.
советую переписать без модальности, открыть форму подбора с блокированием формы владельца, в качестве владельца прописать ЭтаФорма.Машины.
Для элемента ЭтаФорма.Машины прописать обработчик "ОбработкаВыбора",
в форме подбора по нажатию на кнопку перенести в документ - Закрыть(МассивВыбранныхЗначений);
в обработчике выбора - этот массив добавлять в машины.
(9)Вот все процедуры формы подбора :
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтруктураПараметров = ЗначениеИзСтрокиВнутр(Параметры.ДокОбъект);
ЗаполнитьОстатки();
Таб = СтруктураПараметров.СоставПартии;
Для Каждого Строка Из Таблица1 Цикл
Если Не Таб.Найти(Строка.Машина,"Машина")= Неопределено Тогда
Строка.Подобрать=Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьОстатки()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЮИ_РабочиеЦентры.Ссылка КАК Машина
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЮИ_РабочиеЦентры КАК ЮИ_РабочиеЦентры
| ПО (ЮИ_РабочиеЦентры.Ссылка = ЗначенияСвойствОбъектов.Объект)
|ГДЕ
| ЗначенияСвойствОбъектов.Свойство.Наименование = ""Тип оборудования""
| И НЕ ЗначенияСвойствОбъектов.Объект.НомерОборудования = """"";
Результат = Запрос.Выполнить().Выгрузить();
Результат.Сортировать("Машина");
Таблица1.Загрузить(Результат);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьВДокумент(Команда)
ЭтаФорма.Закрыть(ПолучитьСтруктуруПараметров());
КонецПроцедуры
&НаСервере
Функция ПолучитьСтруктуруПараметров()
Отбор = Новый Структура("Подобрать",Ложь);
Результат = Таблица1.НайтиСтроки(Отбор);
Для Каждого СтрокаРезультат Из Результат Цикл
Таблица1.Удалить(СтрокаРезультат);
КонецЦикла;
Возврат Таблица1;
КонецФункции
&НаКлиенте
Процедура ОтметитьВсе(Команда)
Для каждого СтрокаТаблицы Из Таблица1 Цикл
СтрокаТаблицы.Подобрать = Истина;
КонецЦикла;
КонецПроцедуры
Показать
&НаСервере
Функция ПолучитьСтруктуруПараметров()
Отбор = Новый Структура("Подобрать",Истина);
Результат = Таблица1.Скопировать(Отбор).ВыгрузитьКолонку("Машина");
Возврат Результат; // массив "машин"
КонецФункции
// форма исходная
&НаКлиенте
Процедура МашиныПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока И Не Копирование Тогда
НомСтроки = 1;
<…>
Если НЕ РезультатОткрытия = Неопределено Тогда
Для Каждого Машина из РезультатОткрытия Цикл
Если НомСтроки = 1 Тогда
НовСтр = Элемент.ТекущиеДанные;
Иначе
НовСтр = ЭтаФорма.Машины.Добавить();
КонецЕсли;
НовСтр.Машина = Машина;
НовСтр.УникальныйСотрудник = Элементы.Сотрудники.ТекущиеДанные.УникальныйСотрудник;
НовСтр.УникальныйТипОборудования = Элементы.ТипыОборудования.ТекущиеДанные.УникальныйТипОборудования;
НовСтр.УникальныйМашина = Новый УникальныйИдентификатор;
НомСтроки = НомСтроки + 1;
конецЦикла;
КонецЕсли;
<…>
КонецПроцедуры
Показать
(11) {Документ.пРегистрацияПростояОборудования.Форма.Подбор.Форма(48)}: Метод объекта не обнаружен (Скопировать)
Результат = Таблица1.Скопировать(Отбор).ВыгрузитьКолонку("Машина");
Вот процедуры в форме документа по подбору :
Мне кажется проблема еще кроется в таблице ТипОборудования, потому что при активации строки в этой таблице и удаляются все значения кроме первого в таблице машины...
Результат = Таблица1.Скопировать(Отбор).ВыгрузитьКолонку("Машина");
Вот процедуры в форме документа по подбору :
&НаКлиенте
Процедура Подбор(Команда)
РезультатОткрытия = ОткрытьФормуМодально("Документ.пРегистрацияПростояОборудования.Форма.Подбор", СтуктураПараметров());
Если НЕ РезультатОткрытия = Неопределено Тогда
ПроверитьСтруктуру(РезультатОткрытия);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СтуктураПараметров()
СтруктураПараметров = Новый Структура;
Для каждого Реквизит Из Объект.Ссылка.Метаданные().ТабличныеЧасти Цикл
СтруктураПараметров.Вставить(Сокрлп(Реквизит.Имя), Объект[Реквизит.Имя].Выгрузить());
КонецЦикла;
Возврат Новый Структура("ДокОбъект",ЗначениеВСтрокуВнутр(СтруктураПараметров));
КонецФункции
&НаСервере
Функция ПроверитьСтруктуру(РезультатОткрытия, СтруктураУН = Неопределено)
//Машины.Очистить();
ТаблицаЗачений = РезультатОткрытия.Выгрузить();
Машины.Загрузить(ТаблицаЗачений);
КонецФункции
ПоказатьМне кажется проблема еще кроется в таблице ТипОборудования, потому что при активации строки в этой таблице и удаляются все значения кроме первого в таблице машины...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот