Автозаполнение табличной части

Версия для печатиPDF-версия

Платформа:

Доброго времени суток товарищи!
Прошу оказать помощь в решении прикладной задачи учёта материалов и рассчета их стоимости. Первым постом, я объясню поставленную перед собой задачу и то, чего я смог добиться своими силами. Прошу не троллить мои методы достижения желаемой цели, а конструктивно предложить свои. Вообще, я не программист, а так скажем администратор, поэтому не судите строго элементарные глупые решения, учитывая отсутствие знаний языка...
Задача достаточно простая на мой взгляд, с минимумом элементарных вычислений.
Организовать рассчет необходимых материалов на выполнение ремонтных в одном помещении с отдельными комнатами, а следовательно отдельным набором значений для расчёта, но в рамках одного документа. На примере 2х видов работ штукатурки и покраски.

Реквизиты булевского значения Штукатурка и Краска по умолчанию в значении "Истина" к ним я добавил событие "При изменении" привязав к их значению видимость групп с расчётом площади работ и выбором материала из справочника материалов, можно конечно было сделать отдельные справочники для каждого вида работ, однако сам понимаю, что это неправильно и не практично. С настройками параметров выбора, я думаю разберусь сам.

По умолчанию, при создании документа видны все виды работ, сняв галочки, вызывается процедура при изменении и значение Ложь передаётся параметру соответствующей группы Видимость.

В самой группе расчёта я сделал поля для рассчета площади, со значением по умолчанию 1 и процедурами рассчета площади из см сторон в кв.м, при изменении любого из параметров.

Так же в каждую группу добавил реквизит типа ссылка на справочник материалов, из которого теперь я хочу выбрать материал, желательно с выборкой по родителю. После чего имея уже готовую площадь в кв.м рассчитать количество необходимого материала используя реквизит элемента справочника материалов "Расход", и тут возникает вопрос....

Как мне сделать, что бы после выбора материала он добавился в табличную часть этого же документа, где были бы указаны такие реквизиты как " Вес" то есть фасовка материала, "Расход" на кв.м. и "Цена", для рассчета количества упаковок и их стоимости.

То есть результатом моих действий должен стать список материалов, помимо прочего, округленный в большую сторону количества и рассчитаной стоимостью. Все данные о материале, содержатся в реквизитах элемента справочника.

А теперь порадую опытных программеров своим ламерским подходом в фотоотчете...)

ЗЫ Извиняюсь, если выгляжу совсем глупо и очень надеюсь на вашу помощь товарищи! Моя разработка носит не коммерческий характер и нужна для личного использования в целях оптимизации рабочего времени, планируется использование только на учебной версии 1с.

Я правильно понимаю, что для каждого из видов работ (Штукатурка и Краска) будет выбираться только 1 материал?

База полностью самописная?

Единицы измерения не используются?

ПС. А где фотоотчет?

ППС. В курсе что в учебной версии стоит ограничение на количество строк в таблице базы данных (1000)?

Извеняюсь, писал с телефона и не смог загрузить скрины через фотохостинг... Вот выкладываю то, что смог сделать сам...

А ограничение на 1000 строк, ну да знаю, но что это значит в реальности не понимаю)

Вот скрин формы с указанием того, что хотелось бы видеть..

Да, все верно, для каждого вида работ будет выбиратся только один материал. Но следующим шагом хотелось бы добится того, что бы допустим на каждые 2 банки краски, добавлялась 1 кисть, в ту же табличную часть...

База полностью самописаная.

Единицы измерения используются в первичных данных сантиметры, в итоговых кв.м.

Материалы на данный момент в килограмах. Расход в кг на кв.м...

 

Благодарю за внимание, ответ и вопросы товарищ!

Добавляете команду ЗаполнитьМатериалы (или типа того). Создаёте действие у команды (на клиенте и на сервере). Вот примерный код процедур:

&НаСервере
Процедура ЗаполнитьМатериалыНаСервере()
	ТекМатериал = Объект.МатериалШтукатур;
	НоваяСтрока = Объект.Материалы.Добавить();
	НоваяСтрока.Материал = ТекМатериал;
	НоваяСтрока.Расход = ТекМатериал.Расход * Объект.РасходШтукатур;
	НоваяСтрока.Количество = ?(Цел(НоваяСтрока.Расход) < НоваяСтрока.Расход, Цел(НоваяСтрока.Расход), Цел(НоваяСтрока.Расход) + 1);
	НоваяСтрока.Цена = ТекМатериал.Цена;
	НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
	
	ТекМатериал = Объект.МатериалКраска;
	НоваяСтрока = Объект.Материалы.Добавить();
	НоваяСтрока.Материал = ТекМатериал;
	НоваяСтрока.Расход = ТекМатериал.Расход * Объект.РасходКраска;
	НоваяСтрока.Количество = ?(Цел(НоваяСтрока.Расход) < НоваяСтрока.Расход, Цел(НоваяСтрока.Расход), Цел(НоваяСтрока.Расход) + 1);
	НоваяСтрока.Цена = ТекМатериал.Цена;
	НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
	
	// Пример добавления кистей
	КоличествоКраски = НоваяСтрока.Количество;
	Если КоличествоКраски > 2 Тогда 
		НоваяСтрока = Объект.Материалы.Добавить();
		НоваяСтрока.Материал = НоменклатураКисть;
		НоваяСтрока.Количество = Цел(КоличествоКраски / 2);
		НоваяСтрока.Цена = НоменклатураКисть.Цена;
		НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
	КонецЕсли;
КонецПроцедуры

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

Огромное человеческое спасибо! Вы очень помогли понять, как  осуществить задуманое на данном этапе! Если не против, продолжу задавать вопросы, по мере их появления.. Так как чем дальше я углубляюсь в процесс и возникают новые идеи и понимание того, что хотелось бы видеть, появляются дилемы, которые я конечно пытаюсь решить сам и только после того, как устану искать ответ, начинаю готовить текст с пояснением того, чот хотелось бы сделать и просьбой помочь в осуществлении.. Еще раз спасибо товарищ! Буду частым гостем на вашем ресурсе ;)

Сейчас ломаю голову над тем, каким образом добится автозаполнения реквизита тип СправочникСсылка, определенным значением из справочника по умолчания.. Буду вновь признателен, если откроете глаза) Так как понимаю, что технически ничего сложного нет, но методом тыка можно долго над этим трудится, вроде формулирую вопрос достаточно корректно, однако Google результата пока не принес...

Есть 2 простых способа:

1. Создать предопределённый элемент справочника.

2. Создать константу для хранения этого значения.

Вот рисунок того, над чем ломаю голову в данный момент! Еще в перспективе, хотелось бы делать отбор эелемнтов из справочника материалы для определенных работ. То естьпри выборе материала для штукатурки, что бы были доступны только эелементы с родителем Штукатурка из справочника Номенклатура.

Предопределенный элемент как создать знаю, а как заставить его быть в реквизите по умолчанию? Его можно будет выбрать в пункте "Значение заполнения" в свойствах реквизита? Неужели я правильно понял?)))

Создавайте константы для хранения групп номенклатуры и материала по умолчанию.

Если Качество - это справочник, то можно добавить реквизит РасходНаКвМ также как и у номенклатуры.

Уже попробовал способ с предопределенным элементом! Огромное спасибо, что подсказали, долго бы ломал голову.

Однако что значит "создать константу для хранения групп номенклатуры и материала по умолчанию, не понял(

С качеством тоже мысль уловил, попробую реализовать собственными силами пока.. А если я сделал Качество не справочником а перечислением? Ведь пополнятся оно явно не будет и другого типа качества не существует. Все значения будут постоянными... Сейчас пока пишу, сам подумал что со справочником я понимаю как реализовать, а вот с перечислением я поторопился... Есть конечно смысл от прочтения книг, однако практику ничто не заменит....

Если количество значений качества ограничено, то справочник не нужен. Перечисление - это правильный выбор. При изменении значения прописываете выбор: Если Качество = ПредопределенноеЗначение("Перечисление.Качество.Плинтус") Тогда РасходНаКвМ = 1 ... Как-то так.

По поводу констант. Что именно непонятно?

Прямо скажу, совсем не понятно.)

Как в константах воообще хранить значение групп...

То есть создал допустим я константу Краска...

Тип СправочникСсылка.Номенклатура

Параметры выбора Отбор.Родитель(Краска)?

В правильном направлении мыслю?

И далее?

Попробовал указать Параметры выбора, Отбор.Родитель и его значение тип строка "Краска"(Родитель всех эелемнтеов справочника номенклатура, нужных мне выборе краски..) Указав это в рекизите МатериалКраска, результат таков, что нет вообще не одного элемента справочника для выбора...

 

PS С заполнением все усвоил, все отлично работает! Спасибо вери мач!

В константе нужно хранить группу номенклатуры. А отбор при выборе программно устанавливать.