Содержание:
2. Работа с системой с учетом затрат
1. Создание элементов формы
Создание элементов формы – занятие отнюдь не программного характера. И делается это так. Мы создаем реквизиты формы 1С 8.3, потом «перекидываем» их в элементы формы, задаем оформление, и форма готова! В конфигураторе 1С 8 в таком случае мы увидим приближенную к пользовательскому интерфейсу форму. Это удобно.
Но бывают случаи, когда количество реквизитов формы заранее неизвестно. Что делать в этом случае? Можно, например, сделать намного больше реквизитов (с запасом), вынести их в элементы формы и скрывать программно лишние. Но всегда остается вопрос, достаточно ли мы создали тех самых реквизитов, и так ли поступают настоящие программисты?
В этой статье мы рассмотрим и другой вариант: реквизиты и элементы будем создавать кодом. Чтобы делать это было интересней, придумаем задачу.
2. Работа с системой с учетом затрат
Итак, имеем систему с учетом затрат на автопарк, в которой необходимо реализовать удобный функционал ввода стоимости топлива по поставщикам. Где хранятся сами данные, не столь важно, а вот наличие кросс-таблицы - обязательно!
Решено сделать слева виды топлива, сверху – поставщиков, а на пересечении –цены. Конечно же, добавим к этому дату, на которую действуют эти цены (но это уже просто руками). Аналогичная схема применяется при установке цен в 1С:УТ, Рознице, ERP, когда слева мы видим номенклатуру, а сверху – виды цен.
Наша форма будет выглядеть так:
Нам нужен реквизит «Дата». Это дата, на которую действуют цены, Список значений «Поставщики» - это для удобства работы (об этом дальше в коде) и «ТаблицаЗначений» - это и будет наша кросс-таблица (колонки и строки мы заполним программно).
Для обновления данных в таблице у нас будет отдельная процедура, чтоб можно было не только изначально построить ее, но и обновлять (если кто-то внес нового поставщика, вид топлива или цену). В процедуре запросом выбираем данные из трех таблиц: Виды топлива, Контрагенты (только поставщики топлива) и Цены топлива. Небольшое отступление: база самописная, и исходим мы от того, какой функционал уже реализован. В выборке мы получаем таблицу с тремя колонками «ВидТоплива, Поставщик, Цена» с итогами по виду топлива.
Преобразовываем реквизит формы «ТаблицаЗначений» в объект и удаляем колонки, которые могли быть созданы ранее (это для обновления).
Вы спросите, зачем очищать только что созданный массив? Это, наверное, привычка. Расскажу анекдот: «Буратино дали три яблока. Два он съел. Сколько яблок осталось у Буратино? Думаете одно? Ничего подобного. Никто же не знает, сколько у него уже было яблок до этого!». Мораль – обнуляйте переменные.
Очищаем таблицу объект и условное оформление формы. В условном оформлении мы зададим условие, чтобы нули отображались как дефисы, это для красоты, мы же все-таки не дрова рубим))).
В таблицу объект добавляем первую колонку, она всегда будет «Вид топлива».
Далее делаем выборку по группировке «Вид топлива». Создаем строку. В детальных записях выбираем поставщика с ценами, создаем его колонку и заполняем ее для вида цены.
Так как имена реквизитов формы не могут содержать некоторые символы – убираем их.
Когда таблица объект заполнена, пробегаем циклом по ее колонкам и создаем колонки как реквизиты формы. И, конечно же, возвращаем наш объект Таблицу обратно в реквизит формы (со всеми заполненными ранее значениями, строками).
Теперь осталось добавить сами элементы на форму на основе созданных реквизитов.
И в том же цикле добавляем условное оформление 8.3, чтоб нули отображались как дефисы.
Вот и все. Осталось полюбоваться результатом. Вот как это выглядит в реальной базе.
Сами ячейки доступны для редактирования. Пользователь может изменить дату, внести актуальные цены и записать результат. Процедура записи не относится к этой статье, поэтому ее мы рассматривать не будем.
Есть примеры и более сложного создания управляемых форм с их динамическим размещением, но об этом поговорим уже в следующей статье. Хорошего дня, уважаемый читатель!
Специалист компании ООО «Кодерлайн»
Вадим Хоменко.