Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 07:34

Заполнение табличной части при выборе реквизита другой табличной части в документе.

Автор Vlad-93, 25 окт 2017, 10:53

0 Пользователей и 1 гость просматривают эту тему.

Vlad-93

Здравствуйте. Являюсь новичком в 1с, поэтому скорее всего глупый вопрос, но все же. Конфигурация самописная. Управляемое приложение.

Есть Справочник - Детали. У Справочника детали есть табличная часть Операции со своими реквизитами.
Есть Документ - Формирование узла. Реквизит - НаименованиеУзла. И 2 табличные части - Детали и Операции.
В табличной части Детали есть реквизит Наименование с Типом СправочникСсылка.Детали
Проблема в следующем: Необходимо, чтобы при выборе Детали из табличной части Детали, заполнялась табличная часть Операции. И по мере заполнения Табличной части Детали - деталями, заполнялась табличная часть - Операции.
Предполагаю, что надо делать в обработчике событий ПриИзменении реквизита табличной части Детали - Наименование. Но как именно делать в плане запросом или каким то другим методом пока не понял.
Буду благодарен любому совету. Спасибо.

AIFrame

Цитироватьпо мере заполнения Табличной части Детали - деталями, заполнялась табличная часть - Операции.
Интерактивность - это конечно прекрасно, но вам охота прописывать не только по событию добавления, но и по событию изменения строки ТЧ, удаления строкиТЧ, еще и  как-то вычленять нужные операции, добавлять к ТЧ операций значение индекса из ТЧ Деталей. И опять таки - это все интерактивность формы. А если документ будет создаваться программно, обработкой?
Короче мой вам совет - уберегите себя от будущих проблем и делайте заполнение Операций одной функцией в модуле документа (не формы, документа) по событию ПередЗаписью, например. Чтобы Операции очищались и заполнялись на основе ТЧ Детали. Дополнительно, можете на форму кнопку нарисовать с вызовом этой самой процедуры, которая заполнит ТЧ.

Vlad-93

Цитата: AIFrame от 25 окт 2017, 11:11
Цитироватьпо мере заполнения Табличной части Детали - деталями, заполнялась табличная часть - Операции.
Интерактивность - это конечно прекрасно, но вам охота прописывать не только по событию добавления, но и по событию изменения строки ТЧ, удаления строкиТЧ, еще и  как-то вычленять нужные операции, добавлять к ТЧ операций значение индекса из ТЧ Деталей. И опять таки - это все интерактивность формы. А если документ будет создаваться программно, обработкой?
Короче мой вам совет - уберегите себя от будущих проблем и делайте заполнение Операций одной функцией в модуле документа (не формы, документа) по событию ПередЗаписью, например. Чтобы Операции очищались и заполнялись на основе ТЧ Детали. Дополнительно, можете на форму кнопку нарисовать с вызовом этой самой процедуры, которая заполнит ТЧ.
По поводу интерактивности приму к сведению, спасибо. Но у меня проблема заключается в более банальной вещи, как мне кажется.
Меня интересует, как мне вытянуть из реквизита табличной части - Детали, Наименование(СправочникСсылка.Детали), табличную часть - Операции из справочника Детали. Я так понимаю, это лучше сделать через запрос по кнопке после заполнения табличной части Детали. Просто, после того, как я это сделаю. Мне нужно будет высчитывать в табличной части - Операции, некоторые поля исходя из имеющихся.(Но это уже не проблема).

AIFrame

Для Каждого Деталь ИЗ Детали Цикл
    Для Каждого Операция из Деталь.Операции Цикл
        // Пердолим детали
    КонецЦикла;
КонецЦикла;

alex0402

Если я правильно понял, то самый правильный вариант - запросом.
Если правильно составлен запрос, то можно сделать так:
ИмяТЧ.Загрузить(Запрос.Выполнить().Выгрузить());
если нужно заполнить всю т.ч. (все записи)
если не всю, тогда;

//очистить ТЧ от лишних записей:

Выброрка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ЗаполнитьЗначенияСвойств(ИмяТЧ.Добавить());
КонецЦикла;


ЗЫ.
В запрос можно впихнуть и те строки, которые удалять не нужно при заполнении ТЧ, тогда первый вариант то же можно использовать.
Спасибо за Сказать спасибо

Vlad-93

Всем спасибо. По итогу решил сделать через запрос.
Итоговый код вышел такой.

   

&НаСервере
Процедура Подбор()

Объект.СписокОпераций.Очистить();

Для Каждого Деталь Из Объект.Детали Цикл

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

КонецЦикла;

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


&НаКлиенте
Процедура Заполнить(Команда)

Подбор();

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


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск