Перенос значений одной табличной части в другую используя отбор по реквизиту

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

Платформа:

Можно узнать, каким образом форматировать код, что бы он был раскрашен в постах, как в 1с?

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

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

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

Будьте добры, поправьте меня, где я ошибаюсь..? (( 

Спасибо за Ваши ответы, знания и труд!

Почему то не вижу вставленого скрина....

Про раскраску кода написано тут.

По поводу самого кода.

Что-то Вас куда-то не туда понесло. В цикле обхода ТЧ РабочиеПараметры ищете строку этой же ТЧ. В чём смысл? Незачем делать обход ТЧ. Всё гораздо проще:

&НаКлиенте
Процедура РаботаСтеныПомещениеПриИзменении(Элемент)
	СтрокаТабличнойЧасти = Элементы.РаботаСтены.ТекущиеДанные;
	СтруктураОтбора = Новый Структура("Помещение", СтрокаТабличнойЧасти.Помещение);
	НайденныеСтроки = Объект.РабочиеПараметры.НайтиСтроки(СтруктураОтбора);
	Если НайденныеСтроки.Количество() Тогда 
		СтрокаТабличнойЧасти.РабочаяПлощадь = НайденныеСтроки[0].ПлощадьСтен;
	Иначе 
		СтрокаТабличнойЧасти.РабочаяПлощадь = 0;
	КонецЕсли;
КонецПроцедуры

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

Необходимое значение подставиться автоматически.  С уважением Осипов Михаил Юрьевич

 

Можно поподробнее?

Допустим у нас есть некий документ в терминологии 1 с, как объект конфигурации. Нам необходимо, чтобы в реквизит данного документа вставлялось определенное значение из другого реквизита данного документа или из подвала в терминологии 1 с. 

Создаем форму этого документа в конфигураторе.  Далее нам необходимо допустим определить некую сумму чего либо

Заходим в соотвествующий реквизит формы, находим там путь к данным и выбыраем   данные подвала в данном случае общую площадь стен

По определению 1 с подвал - это сумма количественных величин в строках табличной части.   После чего соотвествующие данные подвала или любого объекта   переносятся в строки основых реквизитов документа  (не табличной части) 

Вообще же Вам надо понимать, что табличная часть любого документа - это самостоятельный объект, связанный с основным документом соотношением 1 ко многим

У Вас в 1 и 2 части совпадают  по полям  № и Помещение

Вы же стремитесь решить задачу по соотношению многие ко многим.

Во вторых, зачем Вам две разные таблицы.  Неужели сложно создать 1 таблицу с дополнительнми реквизитами

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

И У Вас судя по скрпиншоту совпадают реквизиты в 1 и 2 табличной части № и помещение

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

Создавайте 1 табличную часть со следующими реквизитами Помещение, площадь стен, площадь пола, рабочая площадь, материал, стоимость работы

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

Так не бывает. Увы, но таковы стандарты базы данных. С этим ничего сделать нельзя 

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

По-моему, вполне логично хранить параметры помещений и используемые для их ремонта материалы в различных таблицах. И связь будет 1 ко многим.

Неправильно.  Если у Вас каждое помещение оборудовано различными материалами, пол, потолок, стены, то тогда делается это так

Создаются следующие справочники материалы, помещения, работы, цены на материалы, цены на работы  и одно перечисление: пол, потолок, стены. 

Далее создается документ на каждое помещение.  В основной части документа не в табличной части  указываются  следующие реквизиты: помещение и ставится ссылка на справочник помещения, общая площадь помещения - тип даннных число, общая стоимость ремонта - тип значения - число, стоимость работ - тип значения - число,  стоимость материалов - тип значения - число, общая площадь помещения - тип значения, число.  

И создается две табличные части: Стоимость материалов, Стоимость Работ

В табличной части стоимость материалов указывается е указываются следующие реквизиты  наменование материалов - тип значения - справочник (ссылка) материалы,  тип поверхности - перечисление ссылка (пол, потолок, стены), площадь объекта (пола, потолка, стен), цена материала - число, общая стоимость материалов,  работы, справочник - ссылка работы, стоимость работы.  Если цены определяются в квадратных метрах, то для того, чтобы определить стоимость материалов на каждый объкт мы поступаем следующим образом.

Создаем общий модуль и называем его РассчетСтоимостиМатериалов

и помещаем туда следующий текст

Процедура РассчитатьСтоимостьМатериалов(СтрокаТабличнойЧасти)Экспорт

СтрокаТабличнойЧасти.СтоимостьМатериалов=СтрокаТабличнойЧасти.ПлощадьОбъекта*СтрокаТабличнойЧасти.ЦенаМатериала;

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

 

Далее создаем форму документа в конфигураторе

Открываем реквизит прощадь объекта и нажимаем на правой панели значёк лупы и в содержимое обработчика вставляем следующий текст обработчика (строки уже заполненные системой) не изменяем 

СтрокаТабличнойЧасти=Элементы.СтоимостьМатериалов.ТекущиеДанные

РассчетСтоимостиМатериалов.РассчитатьСтоимостьМатериалов(СтрокаТабличнойЧасти);

Далее мы делаем следующие действия 

В табличной части создаем подвал. 

и на следущих реквизитах площадь объекта, стоимость выбираем  на правой панели формы путь к данным подвала Сумма итог площади, сумма итог стоимость материалов,  на табличчной части работы выбираем подвал. На реквизите формы стоимость работ выбираем итоговая сумма работ

Затем в ревизитах основного документа (не табличной части): площадь пломещения выбираем на вкладке путь к данным подвал итоговая площадь, на реквизите стоимость работ выбираете подвал итого сумма работ, а на реквизите стоимость материалов выбираете путь к данным подвал стоимость материалов

Где то так.

В Слове КонецПроцедуры Убираем точку.

Всё бы хорошо, но одно помещение - это не весь объект. В каждом объекте несколько помещений. Например, объект - это квартира. В квартире есть помещения: комнаты, санузел, кухня и т.д. По каждому помещению количество материалов рассчитывается отдельно. Документ служит для расчёта общего количества материалов и их стоимости на всю квартиру. Если следовать Вашей логике, то нужно на каждый объект создавать столько документов расчёта сколько помещений в объекте. А для расчёта общего количества и стоимости материалов создавать отчёт типа Смета по объекту.

Мне кажется, что выбор варианта работы должен выбираться исходя из удобства для пользователя.

Ничего плодобного. Вы создаете столько табличных частей в документе, сколько у Вас есть объектов

Материалы, кухня

Материалы. Ванная

Материалы, Комната 1

Материалы Комната 2

Материалы Комната 3 и.т.д 

 

Работы Кухня

Работы Ванна

Работы Комната 1

Работы комната 2

Работы Комната 3 

 

И соотвественно производить расчет стоимости по  по каждой из табличных частей по правилам, которые были указаны Выше

Далее создаете отдельную табличную часть типа смета по объекту

и туда записываете значения общей стоимости работ и материалов по каждому из этих объектов (данные подвала) каждой табличной части  вручную.

Затем используя технологию ссылок на подвал, о которой я говорил выше Вы определите стоимость объекта 

Извините но такой слложный расчет делается только так и никак иначе

Объект (квартира) - суб (объект) помещение.  В одной квартире много помещений.  Отнощение 1 ко многим

В свою очередь каждое помещение (обект) табличная часть делится на два вида: работы и материал

Поскольку в каждом помещении материал для пола, потолка и стен различный, равно как и различная площадь Вы должны расчитать площадь и стоимость работ и материалов по каждому субобъекту одного объекта (квартиры) и записать соотвествующие значения  по подвалу в табличную часть (смета по объекту). Затем определте стоимость работ по табличной части смета по объекту через технологию ссылок на подвал (изменение пути к данным) Вы определите общую стоимость ремонта.

По другому либо очень сложно - либо никак

Извините, но таковы принципы построения баз данных и нормальные формы

С уважением Осипов Михаил Юрьевич

Что значит:

Вы создаете столько табличных частей в документе, сколько у Вас есть объектов

?

Есть какой-то способ динамического создания табличных частей в документе? Или Вы предлагаете создать 100500 табличных частей на все случаи жизни, а потом ненужные для конкретного объекта не использовать? В чём смысл? От чего пытались избавиться к тому и пришли.

Одна ТЧ для параметров помещений, одна ТЧ для материалов по всем помещениям с привязкой к помещениям. Что может быть проще? Для расчёта итогов по помещениям надо написать немного кода.

А уж плодить однотипные таблицы - это явно протьиворечит принципам построения баз данных.

Про нормальные формы я не говорю, т.к. 1С не обращает внимания на такие пустяки.

Попробуйте тогда так.  Вы создаете справочник Материалы для помещения - иерархический: с группами материал для пола, потолка, стен

Далее Вы создаете справочник - тип помещения,   Далее создаетие справочник работы

Далее создаете документ квартира.  В табличной части материалы  пишите следующие реквизиты:  Тип помещения - справочник ссылка тип помещения, материал - справочник ссылка материалы, цена материала - тип числовой,  Тип площади - перечисление ссылка: пол, потолок, стены. площадь; площадь помещения - тип числовой стоимость материалов - тип значения - числовой.

В табличной части стоимость работ Вы делаете следующие реквизиты Наименование работы, стоимость работы

В основной части Вы пишите стоимость материалов и стоимость работ.

И далее производите расчет следующим образом

Создаете общий модуль Расчет материала

Пишите следующий код 

Процедура Рассчитать стоимость материалов  (Экспорт)

СтрокаТабличтнойЧасти.СтоимостьМатериала=СтрокаТабличнойЧасти.Площадь*СтрокаТабличнойЧасти.ЦенаМатериала

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

Затем создаете форму документа 

Выбираете реквизит Цена и площадь и нажимаете на лупу при изменении

Затем вставляете содержимое обработчика

СтрокаТабличнойЧасти.Элементы.Материалы.ТекущиеДанные;

РасчетМатериала.РассчитатьСтоимостьМатериалов (СтрокаТабличнойЧасти);

Все у Вас пересчитает автоматически стоимость материала

Общую стоимость материала по квартире Вы можете узнать сделав подвал в табличной части Материалы  срока формы итоговая сумма

и перенеся стоимость материалов в основой реквизит документа с помощью опции путь к данным.

Хоть убей но не могу понять, для чего в Вашей системе автоматизации нужна общая площадь помещеия

Вам нужна площадь не помещения, а площадь потолка, пола, стен в Ванной, прихожей, кухне и.т,д

Следовательно нет никакой необходимости в переносе одних данных в другие данные

Вполне достаточно одной табличной части вернее 2 Расчет стоимости материалов и расчет стоимости работ

Все. Общая площадь помещения ничего не дает  для расчтета стоимости материалов, необходимых для ремонта, потому что считается все по другому.

С уважением Осипов Михаил Юрьевич

Уважаемый Михаил Юрьевич! Благодарю за активное участие в обсуждении! Для того, что бы Вы поняли мою логику составления документа, я начал подготовку объемного материала, описывающего все нюансы того, как производится расчет материала! Насчет того, что ОбщаяПлощадь, ничего не дает для расчета материала, Вы несомненно правы! Однако, ОбщаяПлощадь, является результатом ввода первичных данных, а в силу моей неопытности, сами понимаетеп, что я действую крайне простыми методами, до которых смог додуматся, прочитав 2 книги по программированию 1С одна из которых описывает создание школьного дневника... Если быть точным, я хотел организовать документ таким образом, что бы была возможность добавления вкладок в виде помещений. Однако как организовать расширяемость документа такого рода, я не представляю. То есть конечно по принципу работы, правильно выглядел бы документ, в котором по умолчанию 1 помещение. Я снимаю его замеры, получая общие площади, которые конечно, можно и не отображать в виде отдельного реквизита, добавляю нужное количество окон и дверей с указанием их параметров, ввожу данные, которые не поддаются автоматическому расчету, но дают возможность расчитать несколько позиций номенклатуры (Ну например на лист гипсокартона, нужно столько то шурупов..)(На 2 тройные и 3 двойные розетки столько то розеток, столько то рамок и т.д.)(В случае с сантехникой все еще сложнее, то есть на каждый выход ГВС ХВС надо то-то, то-то, то-то в зависимости от их назначения). То есть в каждом помещении помимо материалов, которые считаются площади, должна быть возможность предусмотреть и штучные и метровые материалы, которые не возможно вычислить из площади пола, стен и потолка. И таким образом, закончив внесение данных в первой комнате, я интерактивно добавляю еще одну комнату, с идентичной структурой формы заполнения, где вновь вношу все исходные данные замеров помещения, окон и дверей. выбираю "качество" штукатурки, плинтус\правило\маяк вместе с возможностью выбора самой штукатурки из справочника Номенклатура, выбираю шпатлевку, определяю количество ее слоев, определяю финишный слой выбирая допустим из обоев с 2мя разными размерами рулонов или будь то жидкие обои, просто покраска, декоративная штукатурка или еще что, между слоями я учитываю так же грунтовку. На месте определяю кол-во и место расположения розеток, выключателей, замеряю проводку и вношу данные в базу, так же поступаю с полом и потолком, а исходя из параметров окон рассчитываются уголки, подоконники, откосы. В зависимости от финишного покрытия поверхностей, меняется соответственно и материал, то еть для обоев это клей, пара выбора которого должна имеется в справочнике Номенклатура и быть доступной для редактирования. Если это плитка, то клей для плитки. Ко всем видам работ привязана стоимость выполнения. И после заполнения таким образом всех "комнат", а во множестве случае прихожие, это 2 прямоугольника, а то и 3, получить олбщий, сводный список материалов, сгруппированый по принципу, сантехника\эелектрика\сухие смеси и т.д. 

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

С уважением Владимир Андреевич З.!

А последний вариант, который Вы предлагаете не даст желаемого результата. Мне изначально нужно количество материала, а не его стоимость. То есть не стоимость той же штукатурки на стену 23кв.м. надо, а количество упаковок выбраной штукатурки в зависимости от того, какого качества производится выравнивание стены грубо говоря, под плинтус мне понадобится 6кг штукатурки ротбанд (30кг) на кв.м., под правило 8,5кг, под маяк 10кг. Следовательно получив цифру под маяк, допустим 230кг, я получаю число 8 упаковок ротбанда по 30кг, так же при штукатурке под маяк, должны считатся маяки, которые считаются отталкиваясь от значений ширины и высоты, а не площади. То есть я не просто так беру за исходные данные именно замеры, а не делаю калькулятор стоимости штукатурки по площади, что само собой, логично сделать по вашему примеру. А дальше уже берутся значения рекизита цена из справочника материалов и производится расчет стоимости. Хотя точнее, для корректного расчета, дробные значения количества упаковок должны складыватся по всем комнатам и округлятся по принципу +1.

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

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

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

А если Вы будите хранить п материал в разных  табличных частях  неизбежно произойдет путаница, поскольку № строк в разных табличных частях будет всякий раз разной, что приведет к неизбежной путанице. Система 1 с - это не система искуственного интеллекта, который сравнивает текксты в разных табличных частях.

Лучше всего сделать следующим образом

Хранить данные в справочниках, в том числе иерархических, а все расчеты производить в соответсвующих строках табиц табличной части

Кроме того, надо определится, для какой цели Вам необходимо знать площадь окон и дверей, как она повлиет на стоимость работ

не очень понятно.

С уважением Осипов Михаил Юрьевич

 

 

Для начала Вы должны себе представлять, что Вы хотите, какие обьекты Вам нужны.

В данном случае насколько я Вас понял Вам нужна площадь пола, потолка и стен в каждом из помещений квартиры

Если это так, то тогда у Вас в строках табличной части должны быть следующие реквизиты

1) тип помещения - ссылка. Справочник - тип помещения

2). Тип рабочей поверхности - справочник - ссылка - тип рабочей поверхности: пол, потолок, стены

3) площадь рабочей поверхности - тип значения - число

4) материал - справочник ссылка материал

5) количество материала - тип значения число

6) норматиывный коэффциект - сколько материала надо для покрытиия 1 единицы рабочей поверхности

7) Цена материала - тип значения число

8) стоимость материала

 

Далее поскольку 1 с допускает использование в строках табличной части использование повторяющихся реквизитов, например Вы можете несколько раз использовать ссылку на кухню, прихожую, ванную и точно также Вы можете использовать несколько раз реквизит пол, потолок, стены в различных строках табличной части   следовательно Вы можете произвести расчеты количества и стоимости материалов как по всей квартире, так и по любому из помещений данной квартиры или по части поскольку Вы выбираете площадь и стоимость материала только тех, которые Вам нужны

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

По моему в таком случае все логично и понятно в расчетах

С уважением Осипов Михаил Юрьевич 

 

 

 

 

Код такой

Создаете модуль РасчетСтоимости материалов и пишите следующий код

Процедура РассчитатьСтоимостьМатериалов (СтрокаТабличнойЧасти) Экспорт

СтрокаТабличнойЧасти.СтоимостьМатериалов=СтрокаТабличнойЧасти.КоличествоМатериалов.*СтрокаТабличнойЧасти.ЦенаМатериала

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

Процедура РассчитатьКоличествоМатериалов (СтрокаТабличнойЧасти)Экспорт

СтрокаТабличнойЧасти.КоличествоМатериалов.=СтрокаТабличнойЧасти.ПлощадьПоверхности*СтрокаТабличнойЧасти.НормативныйКоэффициект

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

После этого в модуле формы в разделе вставить содержимое обработчика пишите следующий текст

СтрокаТабличнойЧасти=Элементы.НазваниеТабьличнойЧасти.ТекущиеДанные

РасчетСтоимостиМатериалов.РассчитатьКоличествоМатериалов (СтрокаТабличной части);

РасчетСтоимостиМатериалов.РассчитатьСтоимостьМатериалов (СтрокаТабличнойЧасти)

Вот и все

 

Откуда Вы собираетесь брать площадь стен? Смотрите.. У нас имеется комната 4х6м, с высотой полоков 3м. Следовательно "общаяплощадь стен"(4+6)*3=30кв.м. В этой комнате есть 1 дверь размерами 0,5м в ширину и 2м в высоту и 2 окна пусть одинакового размера для примера 0,5 в ширину и 1,5 в высоту. Следовательно, рабочая площадь стен, равна 30-(0,5*2)-(0,5*1,5)-(0,5*1,5)= 30-1-0,75-0,75=27,5кв.м. Как вы предлагаете производить данные расчеты в одной табличной части? Для того и используется несколько табличных частей. В первой вводятся параметры комнаты, то есть длина, ширина и высота. Основные параметры выполняемых замеров на месте, следом идет табличная часть с окнами, в которой каждая комната ассоциируется с нужной по средствам справочника "помещения", использованым и в первой таблице, для однозначной идентификации комнаты. Аналогично с таблицей №3, в которой прописывабтся параметры дверей в каждой из комнат. После заполнения трех таблиц, я по кнопке расчитываю рабочую площадь стен, заполняю значения площади пола и потолка соответственно, для каждой комнаты. После чего, в таблице №4 я начинаю указывать виды работ с различными поверхностями из перечисления типо того...

Комната №1        Стены        Штукатурка под маяк        Ротбанд(30)кг        ПлощадьСтенКомнаты№1 КоличествоМатериала

Комната №1        Стены         ФинишноеВыравнивание     Кнауф(30кг)         ПлощСтенКомнаты№1 КоличествоМатериала

 

Комната№1         Стены        Обои         Клей KLEO UNI(5кг)    ПлощадьСтенКомн№1      Кол-воМат

 

Комната №1     Пол   Стяжка        ЦементПесок       ПлощадьПолаКомн№1   Кол-воМат

 

Комната №1 Пол НаливнойПол     ЭкоПол (25кг)      ПлощадьПолаКомн№1   Кол-воМат

 

Комната№1        Пол        Плитка        Плитонит В(30кг) ПлощадьПолаКомн№1 Кол-воМат

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

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

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

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

Сейчас я пытаюсь разбить все материалы на группы,допустим в одной группе, будут все материалы которые можно посчитать из квадратуры поверхности, в другой группе, материалы, которые можно посчитать исходя из первых, допустим кол-во грунтовки, можно посчитать прибавляя к определенным видам работ, кол-во грунтовки на ту же площадь, допустим перед штукатуркой стены 27,5кв.м нужен слой грунта, перед последующей тукатуркой опять же слой грунта... таким образом из списка работ, я смогу вычислить количество грунтовки. Исходя из периметра помещения смогу расчитать необходимые под штукатурку маяки так как они ставятся так скажем на каждые 1,5 погонных метра. В случае с краской, можно расчитать кол-во кисточек и валиков, если это достаточно большая площадь и их необходимо больше чем +1. В другой же группе будут материалы, посчитать которые невозможно. Допусти кол-во розеток, выключатялей, длина проводки, шлангов при необходимости не стандартных размеров.

При этом, площадь поверхности просто подставляется из таблиц, для удобства. Так как очень часто придется менять площадь. Допустим на полу в кухне квадратурой 20кв.м., на 8м будет лежать плитка, а на 12 ламинат.

И как все это реализовать, используя Ваш метод, я просто не представлдяю. Квадратуры всегда должны иметь возможность менятся в ручную, нормативные коэфициенты для всего абсолютно рарзные и находятся в реквизитах справочника, кол-во материала всегда будет получатся в дробных килограммах, разный материал в одном стобце, никакой подвал тут не поможет. Ведь мне не нужна цифра 385кг из 120кг ротбанда, 15кг клея, 10кг ПесокЦемента и по 50 шпатлевки и пола наливного. Мне нужен каждый расход, на каждую комнату в отдельности, что бы производить с ними дальнейшую работу. Все промежуточные расчеты необходимы. Поэтому я и указываю в таблице№4 реквизит ПлощадьПоверхности, который для удобства заполняется из таблицы№3 где уже есть рабочие площади, с возможностью их изменения. 

На деле все получается именно так и тут я не изобретаю велосипед, а оцифрую данные замеров и получаю из них в таблице№4 нужные для дальнейшей работы величины.Понимаете о чем я? Или я Вас не понимаю...

То есть Вы как раз описываете принцип действия таблицы №5, однако значения площади стен сперва нужно вычислить где то, для чего и используются разные, для удобства пользователя таблицы, хотя конечно Двери и окна, теоритически, можно было бы объединить в 1 таблицу.

Но таблица №4 "Рабочие параметры", как раз дает нам нужные цифры площадей для дальнейшей работы по описаному Вами принципу, который я и пытаюсь реализовать. Что, как и в примере с окнами и дверями оже можно собрать в одну таблицу, однако с точки зрения пользователя, проще и удобнее заполнять отдельные таблицы для пола, стен и потолка, так как в таком случае, меньше вероятности пропустить вид работ.. Допустим Штукатурка может применятся и на стены и потолок, и будет стоять задача не забыть указать оба вида работы, когда же пользователь отдельно работает со стенами, отдельно с полом и отдельно с потолком, путаницы гораздо меньше.

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

Идентификация же объекта в любых базах данных осуществляется по № строки

В результате Вашего обхода по реквизитам все данные будут перепутаны

Ну и что, что разные коэффициекты, какая разница.

Расчеты же производятся в виде массивов данных.  Но у двух массивов данных может быть общий идентификатор № строки

А как Вы всего этого добъетесь не имея у двух табличных частей общего идентификатора

Допустим Вы занесли площадь комнаты А  в 1 табличную часть в строку под № 1

А Площадь комнаты А необходимую для расчета стоимости материалов вы занесли в табличную часть в строку под № 2

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

Да разьяренный клиент просто подаст на Вас в суд и будет абсолютно прав.

Добавьте в табличную часть рекизиты длина, ширина, высота

и соотвествуюшие процедуры, позволяющие рассчитвывть площади, цену материала и стоимость

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

Как это сделать я Вам уже писал

С уважением Осипов Михаил Юрьевич

 

 

 

Извините, но площадь пола, потолка и стен придется вносить в систему вручную

Ибо площадь потолка и пола рассчитыывается как длина*ширина

А площадь стен расчитывается по формуле 2*длина*высота+2 ширина*высота.

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

Универсальных механизмов расчета площадей в данном случае нет

 

 

 

 

 

Подождите, Михаил Юрьевич, а почему именно номер строки? Если в качестве уникального идентификатора, я использую реквизит "Помещение" который для таблиц является уникальным и я ввожу в первой таблице в строку

№1    Помещение А     Длина     Ширина    Высота

№2    Помещение Б     Длина     Ширина    Высота

№3    Помещение В     Длина     Ширина    Высота

Во второй таблице окон я ввожу

№1   Помещение А       Ширина   *    Высота   = ПлощадьОдногоОкнаВпомещенииА

№2   Помещение А       Ширина   *    Высота   = ПлощадьВторогоОкнаВпомещенииА

№3   Помещение  Б      Ширина   *    Высота   = ПлощадьОдногоОкнаВпомещенииБ

№4   Помещение  Б       Ширина  *     Высота    =ПлощадьВторогоОкнаВпомещенииБ

№5   Помещение  В      Ширина   *    Высота    = ПлощадьОдногоОкнаВпомещенииВ

№6   Помещение   В     Ширина    *    Высота    = ПлощадьВторогоОкнаВпомещенииВ

Аналогично сТретьей таблицей Двери

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

А по поводу разъяренности пользователя и суда не беспокойтесь) Я и есть пользователь и создаю данный документ для личного использования, результаты которого использовать буду лично, просто упрощая себе задачу расчета материала. Поэтому я еще не однократно проверю результаты вычислений и исключаю не правильный порядок действия пользователя в своем лице)

 

    

Тем не менее, приведенный выше механизм работает и считается рабочая площадь стен абсолютно корректно!!!

С Уважением Владимир!

Площади и нормировочные коэффициекты вносятся вручную либо методом копи - паста,  равно как и замеры либо методом корировал вставил. Только при такой постановке задачи можно решить проблему автоматизации стоимости ремонта

Если у нас на 8 метрах в кухне будет лежать плитка, а на 12 метрах ламинат

то при моем способе Вы легко расчитаете стоимость необходимых Вам материалов

Поскольку у Вас в сроках табличной части будет

№ строки      Тип помещения               Тип поверхности     Материал           Площадь рабочей поверхности   НК     КолМат.   Цена. Стоимость

1                      Кухня                                     Пол                           Плитка                                 8                                           X

2                      Кухня                                       Пол                          Ламинат                               12                                        Y

Формула будет такая Площадь рабочей поверхности*нормировочнй коэффициект*Цена=стоимость

 

Как рассчитывать эти данные с помощью процедур  я Вам уже говорил

Аналогично для остальных помещений также расчитыывается стоимость материалов

Вот и все. Надеюсь я объяснил понятно

 

Привожу протой пример. 

Дорустим у Вас в таблице 1 записано 

№1    Помещение А     Длина     Ширина    Высота

№2    Помещение Б     Длина     Ширина    Высота

№3    Помещение В     Длина     Ширина    Высота

А другую таблицу немного пользователь решил видоизменить

№1 Помещение  Б      Ширина   *    Высота 

№ 2  Помещение А       Ширина   *    Высота

Ну так пользователю понравилось В результате Вашего обхода система подсчитает площадь неправильно Примет площадь помещения А за площадь помещения Б и наоборот

Что Вы будите в таком случае делать? А?!

С уважением Осипов Михаил Юрьевич 

 

Ничего подобного. Поменял все что мог местами, результат идентичный!!!

 

С уважением, Владимир!

Не знаю, не могу сказать, не разрабатывал. Получилось, очень хорошо! Я рад за Вас!

С уважением Осипов Михаил Юрьевич

В том и дело, что я не по номеру строки идентифицирую помещение, а по реквизиту помещение, в какой бы строке оно не находилось!

Страницы