Множественное значение реквизита табличной части документа
Всем доброго времени суток!
Подскажите пожалуйста, как реализовать возможность присвоения реквизиту табличной части документа множественного значения одного типа. Например: есть ТЧ "СписокРабот", в ней есть поле "Исполнители" и этому полю есть необходимость присваивать множественное значение типа "Справочник.Сотрудники" или одиночное значение того-же типа.
Подскажите пожалуйста, как реализовать возможность присвоения реквизиту табличной части документа множественного значения одного типа. Например: есть ТЧ "СписокРабот", в ней есть поле "Исполнители" и этому полю есть необходимость присваивать множественное значение типа "Справочник.Сотрудники" или одиночное значение того-же типа.
По теме из базы знаний
- Групповое редактирование реквизитов табличной части и движений документов LITE (управляемая форма)
- Универсальные обработки документов и справочников для 1С: Предприятие 7.7
- Множественные дополнительные реквизиты в УТ 11.5 (11.4)
- Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0
- Снизу вверх по табличной части. Разбираемся в понятиях Идентификатор-индекс-номер строки управляемых форм
Найденные решения
Для того чтобы реализовать возможность присвоения реквизиту табличной части документа множественного значения одного типа, вы можете использовать тип данных "СписокЗначений" или создать отдельную табличную часть для хранения множества значений. Однако, напрямую использовать "СписокЗначений" в качестве типа реквизита в 1С нельзя.
Одним из способов решения этой задачи является создание дополнительной табличной части в документе для хранения исполнителей работ. Например, можно создать ТЧ "ИсполнителиРабот" с реквизитами "Работа" (тип: ссылка на строку ТЧ "СписокРабот") и "Исполнитель" (тип: Справочник.Сотрудники).
Пример структуры:
ТЧ "СписокРабот"
Реквизит "Работа"
... другие реквизиты ...
ТЧ "ИсполнителиРабот"
Реквизит "Работа" (тип: СправочникСсылка.СписокРабот) // Ссылка на строку в ТЧ "СписокРабот"
Реквизит "Исполнитель" (тип: Справочник.Сотрудники)
Таким образом, для каждой строки в "СписокРабот" можно указать множество исполнителей в "ИсполнителиРабот".
Для упрощения работы с данными можно использовать формы и обработчики событий для заполнения ТЧ "ИсполнителиРабот".
Пример кода для заполнения ТЧ "ИсполнителиРабот":
Однако, более простой способ — использовать реквизит типа "Справочник.Сотрудники" с возможностью выбора нескольких значений, используя элемент формы "Поле ввода" с кнопкой выбора и списком значений. Но напрямую это не поддерживается для реквизитов ТЧ.
Поэтому, более простой альтернативой является использование реквизита типа "Строка" и хранение в нем строкового представления множества значений (например, через запятую), но это требует дополнительной логики для разбора и проверки значений.
Чтобы приблизиться к необходимому функционалу без изменения структуры хранения данных, можно использовать элемент формы "ТаблицаФормы" с возможностью множественного выбора и обработкой выбранных значений.
Если критично использовать именно реквизит ТЧ для множественного выбора, то одним из вариантов является использование строкового реквизита и реализация выбора и хранения значений через обработчики событий формы.
Этот подход требует дополнительной обработки при сохранении и чтении значений.
Для более точного ответа на ваш вопрос, рекомендую рассмотреть конкретные требования к функционалу и структуре данных в вашей конфигурации.
Одним из способов решения этой задачи является создание дополнительной табличной части в документе для хранения исполнителей работ. Например, можно создать ТЧ "ИсполнителиРабот" с реквизитами "Работа" (тип: ссылка на строку ТЧ "СписокРабот") и "Исполнитель" (тип: Справочник.Сотрудники).
Пример структуры:
ТЧ "СписокРабот"
Реквизит "Работа"
... другие реквизиты ...
ТЧ "ИсполнителиРабот"
Реквизит "Работа" (тип: СправочникСсылка.СписокРабот) // Ссылка на строку в ТЧ "СписокРабот"
Реквизит "Исполнитель" (тип: Справочник.Сотрудники)
Таким образом, для каждой строки в "СписокРабот" можно указать множество исполнителей в "ИсполнителиРабот".
Для упрощения работы с данными можно использовать формы и обработчики событий для заполнения ТЧ "ИсполнителиРабот".
Пример кода для заполнения ТЧ "ИсполнителиРабот":
// В обработчике события ПриИзменении поля "Исполнители" в форме документа
&НаКлиенте
Процедура СписокРаботИсполнителиПриИзменении(Элемент)
// Получить текущую строку ТЧ "СписокРабот"
ТекущаяСтрока = Элементы.СписокРабот.ТекущиеДанные;
// Очистить ТЧ "ИсполнителиРабот" для текущей работы
Для каждого СтрокаИсполнителей Из Объект.ИсполнителиРабот Цикл
Если СтрокаИсполнителей.Работа = ТекущаяСтрока.Ссылка Тогда
Объект.ИсполнителиРабот.Удалить(СтрокаИсполнителей);
КонецЕсли;
КонецЦикла;
// Добавить выбранных исполнителей в ТЧ "ИсполнителиРабот"
Для каждого Исполнитель Из ТекущаяСтрока.Исполнители Цикл
НоваяСтрока = Объект.ИсполнителиРабот.Добавить();
НоваяСтрока.Работа = ТекущаяСтрока.Ссылка;
НоваяСтрока.Исполнитель = Исполнитель;
КонецЦикла;
КонецПроцедуры ПоказатьОднако, более простой способ — использовать реквизит типа "Справочник.Сотрудники" с возможностью выбора нескольких значений, используя элемент формы "Поле ввода" с кнопкой выбора и списком значений. Но напрямую это не поддерживается для реквизитов ТЧ.
Поэтому, более простой альтернативой является использование реквизита типа "Строка" и хранение в нем строкового представления множества значений (например, через запятую), но это требует дополнительной логики для разбора и проверки значений.
Чтобы приблизиться к необходимому функционалу без изменения структуры хранения данных, можно использовать элемент формы "ТаблицаФормы" с возможностью множественного выбора и обработкой выбранных значений.
Если критично использовать именно реквизит ТЧ для множественного выбора, то одним из вариантов является использование строкового реквизита и реализация выбора и хранения значений через обработчики событий формы.
// Пример обработчика события НачалоВыбора для поля "Исполнители"
&НаКлиенте
Процедура СписокРаботИсполнителиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Открыть форму выбора сотрудников с возможностью множественного выбора
ПараметрыФормы = Новый Структура("МножественныйВыбор", Истина);
ФормаВыбора = ПолучитьФорму("Справочник.Сотрудники.ФормаВыбора", ПараметрыФормы);
ФормаВыбора.Открыть();
// Обработка выбранных значений будет в обработчике события "ПриИзменении" или "ОбработкаВыбора"
КонецПроцедуры
&НаКлиенте
Процедура СписокРаботИсполнителиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ТекущаяСтрока = Элементы.СписокРабот.ТекущиеДанные;
// Преобразовать выбранные значения в строку или список
СтрокаИсполнителей = "";
Для Каждого Исполнитель Из ВыбранноеЗначение Цикл
СтрокаИсполнителей = СтрокаИсполнителей + ?(ЗначениеЗаполнено(СтрокаИсполнителей), ", ", "") + Строка(Исполнитель);
КонецЦикла;
ТекущаяСтрока.Исполнители = СтрокаИсполнителей;
КонецПроцедуры ПоказатьЭтот подход требует дополнительной обработки при сохранении и чтении значений.
Для более точного ответа на ваш вопрос, рекомендую рассмотреть конкретные требования к функционалу и структуре данных в вашей конфигурации.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для того чтобы реализовать возможность присвоения реквизиту табличной части документа множественного значения одного типа, вы можете использовать тип данных "СписокЗначений" или создать отдельную табличную часть для хранения множества значений. Однако, напрямую использовать "СписокЗначений" в качестве типа реквизита в 1С нельзя.
Одним из способов решения этой задачи является создание дополнительной табличной части в документе для хранения исполнителей работ. Например, можно создать ТЧ "ИсполнителиРабот" с реквизитами "Работа" (тип: ссылка на строку ТЧ "СписокРабот") и "Исполнитель" (тип: Справочник.Сотрудники).
Пример структуры:
ТЧ "СписокРабот"
Реквизит "Работа"
... другие реквизиты ...
ТЧ "ИсполнителиРабот"
Реквизит "Работа" (тип: СправочникСсылка.СписокРабот) // Ссылка на строку в ТЧ "СписокРабот"
Реквизит "Исполнитель" (тип: Справочник.Сотрудники)
Таким образом, для каждой строки в "СписокРабот" можно указать множество исполнителей в "ИсполнителиРабот".
Для упрощения работы с данными можно использовать формы и обработчики событий для заполнения ТЧ "ИсполнителиРабот".
Пример кода для заполнения ТЧ "ИсполнителиРабот":
Однако, более простой способ — использовать реквизит типа "Справочник.Сотрудники" с возможностью выбора нескольких значений, используя элемент формы "Поле ввода" с кнопкой выбора и списком значений. Но напрямую это не поддерживается для реквизитов ТЧ.
Поэтому, более простой альтернативой является использование реквизита типа "Строка" и хранение в нем строкового представления множества значений (например, через запятую), но это требует дополнительной логики для разбора и проверки значений.
Чтобы приблизиться к необходимому функционалу без изменения структуры хранения данных, можно использовать элемент формы "ТаблицаФормы" с возможностью множественного выбора и обработкой выбранных значений.
Если критично использовать именно реквизит ТЧ для множественного выбора, то одним из вариантов является использование строкового реквизита и реализация выбора и хранения значений через обработчики событий формы.
Этот подход требует дополнительной обработки при сохранении и чтении значений.
Для более точного ответа на ваш вопрос, рекомендую рассмотреть конкретные требования к функционалу и структуре данных в вашей конфигурации.
Одним из способов решения этой задачи является создание дополнительной табличной части в документе для хранения исполнителей работ. Например, можно создать ТЧ "ИсполнителиРабот" с реквизитами "Работа" (тип: ссылка на строку ТЧ "СписокРабот") и "Исполнитель" (тип: Справочник.Сотрудники).
Пример структуры:
ТЧ "СписокРабот"
Реквизит "Работа"
... другие реквизиты ...
ТЧ "ИсполнителиРабот"
Реквизит "Работа" (тип: СправочникСсылка.СписокРабот) // Ссылка на строку в ТЧ "СписокРабот"
Реквизит "Исполнитель" (тип: Справочник.Сотрудники)
Таким образом, для каждой строки в "СписокРабот" можно указать множество исполнителей в "ИсполнителиРабот".
Для упрощения работы с данными можно использовать формы и обработчики событий для заполнения ТЧ "ИсполнителиРабот".
Пример кода для заполнения ТЧ "ИсполнителиРабот":
// В обработчике события ПриИзменении поля "Исполнители" в форме документа
&НаКлиенте
Процедура СписокРаботИсполнителиПриИзменении(Элемент)
// Получить текущую строку ТЧ "СписокРабот"
ТекущаяСтрока = Элементы.СписокРабот.ТекущиеДанные;
// Очистить ТЧ "ИсполнителиРабот" для текущей работы
Для каждого СтрокаИсполнителей Из Объект.ИсполнителиРабот Цикл
Если СтрокаИсполнителей.Работа = ТекущаяСтрока.Ссылка Тогда
Объект.ИсполнителиРабот.Удалить(СтрокаИсполнителей);
КонецЕсли;
КонецЦикла;
// Добавить выбранных исполнителей в ТЧ "ИсполнителиРабот"
Для каждого Исполнитель Из ТекущаяСтрока.Исполнители Цикл
НоваяСтрока = Объект.ИсполнителиРабот.Добавить();
НоваяСтрока.Работа = ТекущаяСтрока.Ссылка;
НоваяСтрока.Исполнитель = Исполнитель;
КонецЦикла;
КонецПроцедуры ПоказатьОднако, более простой способ — использовать реквизит типа "Справочник.Сотрудники" с возможностью выбора нескольких значений, используя элемент формы "Поле ввода" с кнопкой выбора и списком значений. Но напрямую это не поддерживается для реквизитов ТЧ.
Поэтому, более простой альтернативой является использование реквизита типа "Строка" и хранение в нем строкового представления множества значений (например, через запятую), но это требует дополнительной логики для разбора и проверки значений.
Чтобы приблизиться к необходимому функционалу без изменения структуры хранения данных, можно использовать элемент формы "ТаблицаФормы" с возможностью множественного выбора и обработкой выбранных значений.
Если критично использовать именно реквизит ТЧ для множественного выбора, то одним из вариантов является использование строкового реквизита и реализация выбора и хранения значений через обработчики событий формы.
// Пример обработчика события НачалоВыбора для поля "Исполнители"
&НаКлиенте
Процедура СписокРаботИсполнителиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Открыть форму выбора сотрудников с возможностью множественного выбора
ПараметрыФормы = Новый Структура("МножественныйВыбор", Истина);
ФормаВыбора = ПолучитьФорму("Справочник.Сотрудники.ФормаВыбора", ПараметрыФормы);
ФормаВыбора.Открыть();
// Обработка выбранных значений будет в обработчике события "ПриИзменении" или "ОбработкаВыбора"
КонецПроцедуры
&НаКлиенте
Процедура СписокРаботИсполнителиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ТекущаяСтрока = Элементы.СписокРабот.ТекущиеДанные;
// Преобразовать выбранные значения в строку или список
СтрокаИсполнителей = "";
Для Каждого Исполнитель Из ВыбранноеЗначение Цикл
СтрокаИсполнителей = СтрокаИсполнителей + ?(ЗначениеЗаполнено(СтрокаИсполнителей), ", ", "") + Строка(Исполнитель);
КонецЦикла;
ТекущаяСтрока.Исполнители = СтрокаИсполнителей;
КонецПроцедуры ПоказатьЭтот подход требует дополнительной обработки при сохранении и чтении значений.
Для более точного ответа на ваш вопрос, рекомендую рассмотреть конкретные требования к функционалу и структуре данных в вашей конфигурации.
(3) Т.е я правильно понимаю: реквизиту ТЧ присвоить тип "СписокЗначений" нельзя (ограничения платформы), поэтому присваиваем тип "Строка" - это будет пользовательское представление значений реквизита. Создаем еще одну ТЧ "Исполнители", в которой будем хранить значения ссылочного типа "Справочник.Сотрудники". Связь с ТЧ "СписокРабот" будет осуществляться через реквизит "ВидРабот". Ну а методы заполнения, редактирования и удаления это уже по ходу пъессы.
Правильно я понимаю?
Правильно я понимаю?
(10)
Это не множественный реквизит. Это отдельная таблица. С релятивным ключом связи.
Можешь назвать его матричным кубом. Или массивным уплотением. Дело твоей фантазии.
Но это отдельная релятивная таблица.
А множественного значения в реквизите не бывает.
Если только это не хранилище значений.
реквизит ТЧ со множественным значением к сожалению нет.
Потому что его не бывает. Это ты просто придумал такое свое собственное название при полном отсутствии базовой терминологии.
Это не множественный реквизит. Это отдельная таблица. С релятивным ключом связи.
Можешь назвать его матричным кубом. Или массивным уплотением. Дело твоей фантазии.
Но это отдельная релятивная таблица.
А множественного значения в реквизите не бывает.
Если только это не хранилище значений.
(3)
(11) Ну в терминологии я не силен, тут я согласен. Как в 1С называется связь один ко многим описал как смог, как говорится своими словами. Отсутствие базовой терминологии объясню фразой из мультика: "Чтобы продать что-то не нужное, нужно сначала купить что-то не нужное".
Какой способ хранения более привлекателен: релятивная таблица или список значений, при условии что "СписокРабот" может быть до 300 строк, а "СписокИсполнителей" к каждой строке "СпискаРабот" до 20 может 30 строк?
Спасибо за ваше внимание к моей проблеме.
(11) Ну в терминологии я не силен, тут я согласен. Как в 1С называется связь один ко многим описал как смог, как говорится своими словами. Отсутствие базовой терминологии объясню фразой из мультика: "Чтобы продать что-то не нужное, нужно сначала купить что-то не нужное".
Какой способ хранения более привлекателен: релятивная таблица или список значений, при условии что "СписокРабот" может быть до 300 строк, а "СписокИсполнителей" к каждой строке "СпискаРабот" до 20 может 30 строк?
Спасибо за ваше внимание к моей проблеме.
(15)
Может уже почитаешь что-нибудь?
Какой способ хранения более привлекателен: релятивная таблица или список значений
Список значений не является объектом или типом для хранения. Список значений - это чисто прикладной объет данных, существует только в оперативной памяти.
Может уже почитаешь что-нибудь?
(3)
(20) Я рассматриваю данную задачу в комплексе: ввод, изменение, удаление или хранение и, отображение на форме. Да, картинка относится к свойствам элемента формы, но мне просто ввести данные без сохранения недостаточно. Непонятен был механизм хранения множественных значений, для этого я и написал эту тему.
Как я считаю: стыдно не не знать что-то, стыдно не спросить и натворить проблем.
Статьи на сайтах, видео и т.п. уже прорабатываю, но остаются вопросы. С ними и пытаюсь обратится к форумчанам.
(20) Я рассматриваю данную задачу в комплексе: ввод, изменение, удаление или хранение и, отображение на форме. Да, картинка относится к свойствам элемента формы, но мне просто ввести данные без сохранения недостаточно. Непонятен был механизм хранения множественных значений, для этого я и написал эту тему.
Как я считаю: стыдно не не знать что-то, стыдно не спросить и натворить проблем.
Статьи на сайтах, видео и т.п. уже прорабатываю, но остаются вопросы. С ними и пытаюсь обратится к форумчанам.
(3) Нейрокультисты со своими нейрокультяпками как всегда
Для каждого СтрокаИсполнителей Из Объект.ИсполнителиРабот Цикл
Если СтрокаИсполнителей.Работа = ТекущаяСтрока.Ссылка Тогда
Объект.ИсполнителиРабот.Удалить(СтрокаИсполнителей);
КонецЕсли;
КонецЦикла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот