Несколько значений для одного элемента справочника

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

Платформа:

Доброго времени суток уважаемый!

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

В случае со штукатуркой, у одного и того же элемента справочника, допустим Rotband (30кг)

меняется расход в зависимости от способа нанесения.

То есть существует 3 способа штукатурки, под плинтус, под правило и под маяк, в порядке увеличения.

Допустим расходы равны 6, 8,5 и 12кг на квадратный метр соответственно.

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

Помещение - ссылка на справочник "Помещения" где хранятся названия "помещений"

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

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

РабочаяПлощадь - Число, которое уже благодаря Вам, подставляется из соседней таблицы и доступно для редактирования, на случай комбинированых поверхностей (Допустим на 20и метровой кухне 12 ламинат и 8 плитка).

Расход - Число, которое я планировал брать из реквизита элемента справочника. Допустим для обойного клея это 0,8кг на кв.м, а длчя краски 1,5кг на кв.м, эти значения, я планировал заносить в справочник номенклатура и подставлять их в эту таблицу... Но вот тут то и встал вопрос о том, как быть со штукотуркой... Варианты, которые я смог подумать.. Это создание в справочнике 3х реквизитов, но востребованы они будут только в случае со штукатуркой, что хоть отджельный справочник для штукатурки создавай... Создал именно 3 разных ВидаРаботы ШтукатуркаПлинтус, ШтукатуркаПравило, ШтукатуркаМаяк. И подумал, что самое логичное, внедрить в расчет коэфициенты в духе 0,8, 1, 1,2... Но опять же возможно для других видов штукатурки, данный коэфициент будет не корректен. И как быть в этом случае, я совсем запутался в мыслях и не представляю. Самое логичное получается, на самом деле, создать отдельный справочник с 3мя необходимыми реквизитами?

Количество основного материала - число, которое будет получатся в результате умножения "рабочей площади в строке, на расход.

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

 

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

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

Заранее благодарю вас Уважаемый СенСей! МирТрудМай! С наступающим праздником победы! Всех благ Вам и Вашим близким!

 

PS  Не знал как более корректно назвать тему данного обсуждения..

 

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

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

Я пытаюсь, в событии ПриИзменении реквизита "ВидРаботы",  ТабличнойЧасти "РаботаСтены", подставлять по умолчанию предопредененный элемент "Ротбанд" из справочника "Штукатурка".

Тип реквизита табличной части, составной, из двух справочников "Номенклатура" и "Штукатурка".

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

&НаКлиенте
Процедура РаботаСтеныВидРаботыПриИзменении(Элемент)
	РаботаСтеныВидРаботыПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура РаботаСтеныВидРаботыПриИзмененииНаСервере()
	СтрокаТабличнойЧасти = Элементы.РаботаСтены.ТекущиеДанные;
	Если СтрокаТабличнойЧасти.ВидРаботы =   Справочники.ВидРаботыСтены.ШтукатуркаПодПлинтус
		Тогда СтрокаТабличнойЧасти.Материал = Справочники.Штукатурка.Ротбанд
		И СтрокаТабличнойЧасти.Расход = Справочники.Штукатурка.Ротбанд.РасходПодПлинтус
		КонецЕсли
КонецПроцедуры

Если можно, с объяснением... Так как все равно еще не могу сориентироватся НаКлиенте или на Сервере надо выполнять процедуру, хотя в данном случае пробовал и так и так.

В результате, при изменении я получаю следующее сообщение..

{Документ.РасчетМатериалов.Форма.ФормаДокумента.Форма(121)}: Ошибка при получении значения атрибута контекста (ТекущиеДанные)
СтрокаТабличнойЧасти = Элементы.РаботаСтены.ТекущиеДанные;
по причине:
Текущие данные таблицы недоступны на сервере
 
Сейчас копаюсь в сети в поисках объяснения, мал по малу понимаю в чем дело, однако пока задача актуальна.

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

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

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

 

&НаКлиенте
Процедура РаботаСтеныВидРаботыПриИзменении(Элемент)
	СтрокаТабличнойЧасти = Элементы.РаботаСтены.ТекущиеДанные;
	Если СтрокаТабличнойЧасти.ВидРаботы = Справочники.ВидРаботыСтены.ШтукатуркаПодПлинтус
		Тогда СтрокаТабличнойЧасти.Материал = Справочники.Штукатурка.Ротбанд;
		КонецЕсли
КонецПроцедуры

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

Похоже ничего не остается, кроме как перечитывать главу "Запросы" и ждать Вашей помощи...

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

То есть я думаю явно нужно использовать оператор Если значение рекизита ВидРаботы, допустим = предопределенному элементу "Обои", справочника "ВидРаботыСтены"

Тогда значение реквизита табличной части "РаботаСтены", "Материал" = "Обойный клей Kleo" из справочника "Номенклатура". 

Значение реквизита табличной части "РаботаСтены", "Расход" = значению реквизита элемента справочника "Номенклатура", "Расход" для подставленого материала

Значение реквизита "КоличествоОсновногоМатериала" табличной части "РаботаСтены" = произведению реквизита "РабочаяПлощадь" текущей строки и реквизита "Расход"

А стоимость работы, соответственно произведению реквизита "РабочаяПлощадь" и реквизиту "Цена", предопределенного элемента справочника "ВидРаботыСтены"...

 

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

 

1. Зачем создавать 2 справочника ВидРаботыСтены и ВидРаботыПол? Вполне можно использовать 1 справочник ВидыРабот, добавив в него реквизит ВидПоверхности типа перечисление с условным наименованием ВидыПоверхностей и значениями Стены, Пол, Потолок.

ТЧ Материалы также можно сделать одну и для стен, и для пола. Нужно опять же добавить в неё реквизит ВидПоверхности. (У Вас ТЧ названа РаботаСтены.)

2. Для хранения коэффициентов расхода материала предлагаю создать справочник КачествоРаботыс реквизитом КоэффициентРасходаМатериала типа Число. Указать у него Владельцем справочник ВидыРабот. Соответственно, вид работ для штукатурки будет всего 1: "Штукатурка". И будет минимум 3 качества работ: Плинтус, Правило, Маяк с соответствующими коэффициентами. 

3. Если я правильно понял, то любой материал используется только для одного определённого вида работ. Это так? Если да, то в справочник Номенклатура нужно добавить реквизит ВидРабот.

4. В ТЧ Материалы добавить реквизит КачествоРабот.

Подготовительные работы закончены.

Далее делаем следующее.

1. В ТЧ Материалы для реквизита ВидРабот установим свойство "Связи параметров выбора" как на картинке:

Связи параметров выбора ВидРабот

Аналогично делаем для КачестваРаботы и Материала:

Связи параметров выбора КачествоРаботы Связи параметров выбора Материал

2. Переходим в форму документа.

Для колонки ВидРабот устанавливаем свойство "СвязиПараметровВыбора":

Связи параметров выбора ВидРабот на форме

Аналогично для колонок КачествоРаботы и Материал:

Связи параметров выбора КачествоРаботы на форме

Связи параметров выбора Материал на форме

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

3. Создаём обработчики события ПриИзменении для колонок ВидРабот, КачествоРаботы и Материал и процедуру для расчёта расхода материала:

&НаКлиенте
Процедура МатериалыВидРаботПриИзменении(Элемент)
	ПолучитьРасходМатериала(Элементы.Материалы.ТекущиеДанные);
КонецПроцедуры

&НаКлиенте
Процедура МатериалыМатериалПриИзменении(Элемент)
	ПолучитьРасходМатериала(Элементы.Материалы.ТекущиеДанные);
КонецПроцедуры

&НаКлиенте
Процедура МатериалыКачествоРаботыПриИзменении(Элемент)
	ПолучитьРасходМатериала(Элементы.Материалы.ТекущиеДанные);
КонецПроцедуры

&НаСервере
Процедура ПолучитьРасходМатериала(СтрокаТаблицы)
	
	Материал = СтрокаТаблицы.Материал;
	Если ЗначениеЗаполнено(Материал) Тогда 
		Расход = Материал.Расход;
	Иначе 
		Расход = 0;
	КонецЕсли;
	
	КачествоРаботы = СтрокаТаблицы.КачествоРаботы;
	Если ЗначениеЗаполнено(КачествоРаботы) Тогда 
		КоэффициентРасходаМатериала = КачествоРаботы.КоэффициентРасходаМатериала;
	Иначе 
		КоэффициентРасходаМатериала = 1;
	КонецЕсли;
	
	СтрокаТаблицы.Расход = Расход * КоэффициентРасходаМатериала;
	
КонецПроцедуры

Как-то так.

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

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

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

C праздником Уважаемый Товарищ!

Оргомное, человеческое признание Вам, за столь информативный ответ!

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

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

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

Здравствуйте уважаемый!

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

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

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

 

&НаКлиенте
Процедура РаботаСтеныВидРаботыПриИзменении(Элемент)
	ПолучитьРасходМатериала(Элементы.РаботаСтены.ТекущиеДанные);
КонецПроцедуры

&НаКлиенте
Процедура РаботаСтеныМатериалПриИзменении(Элемент)
	ПолучитьРасходМатериала(Элементы.РаботаСтены.ТекущиеДанные);
КонецПроцедуры


&НаСервере
Процедура ПолучитьРасходМатериала(СтрокаТаблицы)
	
	Материал = СтрокаТаблицы.Материал;
	Если ЗначениеЗаполнено(Материал) Тогда 
		Расход = Материал.Расход;
	Иначе 
		Расход = 0;
	КонецЕсли;
			
	СтрокаТаблицы.Расход = Расход 	
КонецПроцедуры

Пытался самостоятельно докопатся до сути, однако ничего не вышло, при изменении получаю следующее ругательство... {Документ.РасчетМатериалов.Форма.ФормаДокумента.Форма(116)}: Ошибка при вызове метода контекста (ПолучитьРасходМатериала) ПолучитьРасходМатериала(Элементы.РаботаСтены.ТекущиеДанные); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'

 

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

Для Вашей задачи больше подходит следующий вариант

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

2. В табличной части делайте следующие реквизиты

1. Вид помещения - справочник ссылка помещения

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

3.  Материал - справочник ссылка материал

4. Способ расхода материала - справочник ссылка способ расхода материала (его при необходимости можете сделать иерархическим)

5. Норматив расхода материала на единицу площади - число

6. Площадь - число

7. Количество материала - число

8. Цена материала - число

9. Стоимость материала  - число

Затем Вы делаете следующее

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

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

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

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

Затем Вы создаете форму документа, выбираете нужные реквизиты: площадь  и норматив расхода материала на единицу площади. 

кликайте на значек лупы и вставляете следующий текст

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

НазваниеМодуля.РассчитатьКоличествоМатериалов (СтрокаТабличнойЧасти);

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

Все Ваша задача решена. 

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

Решение супер! Если бы не одно НО: откуда возьмётся значение НормативРасходаМатериала? Предлагаете его вручную вводить?

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

Аналогично поступаем и с площадью.

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

 

 

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

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

Извиняюсь, забыл, что ТекущиеДанные на сервер передать нельзя. Проверял в толстом клиенте. Там-то всё работает.

Придётся получение расхода разделить на 2 процедуры (точнее процедуру и функцию).

&НаКлиенте
Процедура РаботаСтеныВидРаботыПриИзменении(Элемент)
	ПолучитьРасходМатериала(Элементы.РаботаСтены.ТекущиеДанные);
КонецПроцедуры

&НаКлиенте
Процедура РаботаСтеныМатериалПриИзменении(Элемент)
	ПолучитьРасходМатериала(Элементы.РаботаСтены.ТекущиеДанные);
КонецПроцедуры

&НаКлиенте
Процедура ПолучитьРасходМатериала(СтрокаТаблицы)
	
	Материал = СтрокаТаблицы.Материал;
	Если ЗначениеЗаполнено(Материал) Тогда 
		Расход = ЗначениеРеквизитаОбъекта(Материал, "Расход");
	Иначе 
		Расход = 0;
	КонецЕсли;
			
	СтрокаТаблицы.Расход = Расход 	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЗначениеРеквизитаОбъекта(Объект, ИмяРеквизита)
	Возврат Объект[ИмяРеквизита];
КонецФункции

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

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

Спасибо Уважаемый товарищ!!!

С функией все работает!!!

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

Как решить проблему с тем, что я не моу использовать 1 материал на несколько видов работ, я придумал!!

Тупо, "Неправильно", но работать будет!

А именно, я задублирую в справочнике один и тот же материал, но в реквизите "ВидРабот" укажу разные виды работ! По большому счету, маловероятно, что в одной квартире, будут использоватся в одной комнате "ПодМаяк", в другой "ПодПлинтус", поэтому по сумме, это будет корректный результат необходимого материала!

Да и обои, обычно берутся одни и те же, а если и нет, то ничего страшного, если будет 2-3 наименования "разного" клея, да и штукатурки, так как реквизит "КодТовара", необходимый мне для заказа, будет одним и тем же. А возможно вообще я думаю будет написать процедуру в итоговой таблице, которая сложит все числовые значения расхода материалов с одним и тем же значением реквизита "КодТовара". Я ведь прав?

Сейчас, мне необходимо добится автоматического заполнения реквизита ТЧ "Материал"...

Что бы при выборе вида работы, автоматически подставлялся материал по умолчанию.

С расчетом Кол-ва необходимого материала, я понятно разобрался без проблем, написав в процедуре "ПриИзменении" реквизита ТЧ "Материал" формулу в которой расход умножается на площадь рабочей поверхности...

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

Если ВидРабот=Обои ИЛИ ВиниловыеОбои ИЛИ ФлизелиновыеОбои Тогда Материал=Обойный клей KLEO

ИначеЕсли ВидРабот = Плитка ИЛИ Мозаика Тогда Материал = PLITONIT B

ИначеЕсли ВидРабот = ШтукатуркаПодМаяк ИЛИ ШтукатуркаПодПлинтус ИЛИ ШтукатуркаПодПравило Тогда Материал = Rotband

И т.д....

Будьте добры, скажите, что думаете насчет всего этого бреда?)

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

Дублировать материалы для разных видов работ - это дурацкая идея. (Извиняюсь за выражение.) Вы потом с этим намучаетесь. Поверьте на слово. Лучше сразу делать правильно. Введение дополнительного справочника - самый разумный путь. Тогда не придется ни виды работ плодить, ни материалы.
Либо надо отказываться от прямой связи материала с видом работ, а использовать, например, ТЧ Виды работ в справочнике Номенклатура, в которой хранить все возможные виды работ с нормативами расхода. Но придется программно прописывать выбор только нужной номенклатуры в документе.

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

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

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

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

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

Для подстановки материала по умолчанию создаёте регистр сведений МатериалыПоУмолчанию с измерением ВидРабот и ресурсом Материал.

В модуле формы документа добавляете функцию получения материала по умолчанию в зависимости от вида работ:

&НаСервереБезКонтекста
Функция ПолучитьМатериалПоУмолчанию(ВидРабот)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	МатериалыПоУмолчанию.Материал КАК Материал
		|ИЗ
		|	РегистрСведений.МатериалыПоУмолчанию КАК МатериалыПоУмолчанию
		|ГДЕ
		|	МатериалыПоУмолчанию.ВидРабот = &ВидРабот";
	
	Запрос.УстановитьПараметр("ВидРабот", ВидРабот);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда 
		Возврат Справочники.Номенклатура.ПустаяСсылка();
	Иначе 
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		ВыборкаДетальныеЗаписи.Следующий();
		Возврат ВыборкаДетальныеЗаписи.Материал;
	КонецЕсли;
	
КонецФункции

В начало обработчика события ПриИзменении у вида работ добавляете такой код:

	ТекущиеДанные = Элементы.РаботаСтены.ТекущиеДанные;
	ТекущиеДанные.Материал = ПолучитьМатериалПоУмолчанию(ТекущиеДанные.ВидРабот);

Вот и всё.

Доброго времени суток Уважаемый товарищ!

С подстановкой материала все отлично!

Насчет сортировки, отбора материалов для конкретных видов работ, я решил не заморачиваться вовсе.

Но остается актуальной дилема насчет штукатурки...

3 разных вида работ, 3 разных расхода, которые будут менятся в зависимости от 3 коэфициентов, один из которых будет равен единице, один больше, другой меньше.

И не могу придумать куда вставить такого рода код и как его корректно использовать.. Я думаю этого будет вполне достаточно для моих целей...

 

 
ВидРабот = СтрокаТаблицы.ВидРаботы;

Если ВидРабот = Справочники.ВидыРабот.ШтукатуркаПодМаяк Тогда
СтрокаТаблицы.Расход = Расход * 1.5;
ИначеЕсли ВидРабот = Справочники.ВидыРабот.ШтукатуркаПодПлинтус Тогда
СтрокаТаблицы.Расход = Расход * 0.5;
Иначе 
СтрокаТаблицы.Расход = Расход;
КонецЕсли

Страницы