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

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

Автор green_ezhik, 31 мар 2015, 16:58

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

green_ezhik

Здравствуйте!

Возник вопрос:mellow::
У меня есть документ "Техническое задание", который содержит реквизиты Проект, ДатаНачала, ДатаОкончания и Табличная часть документа "ПереченьРабот" с реквизитами СписокРабот, Ответственный, ДатаНачала и ДатаОкончания.

Как мне сделать так, чтобы у меня в реквизите документа в дату начала вносилась дата начала первой работы, а в дату окончания - дата окончания последней работы соответственно? :dfbsdfbsdf:

Не судите строго - только учусь!

Дмитрий@

Самый простой способ сделать это на клиенте перебором, что то вроде
ДатаНачала = Неопределено;
ДатаОкончания = Неопределено;
Для каждого Строка Из ТабличнаяЧасть Цикл

    Если ДатаНачала > Строка.ДатаНачала ИЛИ ДатаНачала = НЕопределено Тогда
        ДатаНачала = Строка.ДатаНАчала;
    КонецЕсли;

    Если ДатаОкончания < Строка.ДатаОкончания ИЛИ ДатаОкончания = Неопределено Тогда
        ДатаОкончания = Строка.ДатаОкончания;
    КонецЕсли;

КонецЦикла

k_aleks80

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

СГРУППИРОВАТЬ ПО
ПереченьРабот.Ссылка


В запрос передаешь ссылку текущего документа. Затем заполняешь реквизиты формы датами из выборки запроса.

vitasw


k_aleks80

    Дальше уже можно предусмотреть всякие граничные условия. Если новый - пока не заполнять значение данных полей шапки; При изменении - код обработки оформить в виде отдельной процедуры (кстати, и в ПриОткрытии() вызывать процедуру вместо наличия кода - более гибко) и вызывать данную процедуру ПриЗаписи() объекта.
    Хотя вы правы - работа с БД не самый оптимальный вариант. Надо работать с реквизитами формы.

vitasw

Цитата: k_aleks80 от 01 апр 2015, 09:22Надо работать с реквизитами формы.
Провокационный вопрос: Это как? Если не сложно, покажите пример.


LexaK

Цитата: vitasw от 01 апр 2015, 13:50
Цитата: k_aleks80 от 01 апр 2015, 09:22Надо работать с реквизитами формы.
Провокационный вопрос: Это как? Если не сложно, покажите пример.

попробуйте сделать следующее

у вас есть процедура которая определяет даты начала и окончания работ (см.выше).
необходимо ее вставить в события табличной части формы

1.ТабличнаяЧасть1ПриОкончанииРедактирования()
2.ТабличнаяЧасть1ПослеУдаления()

если пользователь что-то изменил в этапах, произойдет пересчет периодов
если пользователь удалил этап, произойдет пересчет периодов
если помогло нажмите: Спасибо!

vitasw

Чисто технически - совет хороший, ничего не имею против. Но мой личный фэншуй протестует против постоянного выполнения кода, который по смыслу интересен только по окончании редактирования всей таблицы или перед записью. Я б впихнул в "ПередЗаписью".

k_aleks80

Присоединюсь к посту LexaK.
Цитата: vitasw от 01 апр 2015, 15:45
Чисто технически - совет хороший, ничего не имею против. Но мой личный фэншуй протестует против постоянного выполнения кода, который по смыслу интересен только по окончании редактирования всей таблицы или перед записью. Я б впихнул в "ПередЗаписью".
Пользователю, скорее всего, нужна оперативная обработка данных на форме. Поэтому здесь уместнее все-таки обработчики событий табличной части.

LexaK

На самом деле, все зависит от постановки задачи!
если нужно пользователю видеть сразу изменения границ, то используем события при изменении,
если эти границы не нужны оперативно, то получаем их перед записью,
да и во всех остальных случаях когда нужны границы, получить запросом в две строки (как был пример выше) очень просто.
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск