Рисунок 22 – Окно свойств кнопки.
В результате получилась такая форма- рисунок 23.
Рисунок 23 – Форма документа «СырьеПродукция».
Теперь можно приступить к разработке модуля формы. Для этого перейдем на закладку Модуль. Перед началом программирования составим алгоритм программы.
1.6.2 Разработка алгоритма функционирования документа
Рисунок 24 – Блок-схема алгоритма работы с модулем «Производство»
На донном этапе разрабатывается документ «СырьеПродукция» разработаем его алгоритм работы, рисунок 25.
Рисунок 25 – Блок-схема алгоритма ввода нового документа.Запускаем документ «СырьеПродукция» (Рисунок 26).
Рисунок 26 – Документ «СырьеПродукция».
При открытии документа выполняется процедура «ПриОткрытии»
Данная процедура задает начальные значения переменных документа и создает строки и столбцы в таблице значений «ТзДоп». Это осуществляеться с помощью операций «НоваяКолонка», «НоваяСтрока()».
Программный код:
Процедура ПриОткрытии()
ПриЗаписиПерепроводить(1);
СуммаКом=0;
СуммаРас=0;
тзДоп.НоваяКолонка("Инф" ,"Строка",26, ,"Информация",30);
тзДоп.НоваяКолонка("Показ","Число" ,15,2,"Показатель",15);
тзДоп.НоваяСтрока(); тзДоп.Инф = "Стоимость комплектующих";
тзДоп.НоваяСтрока(); тзДоп.Инф = "Стоимость расходных";
тзДоп.НоваяСтрока(); тзДоп.Инф = "Затраты на работу %";
тзДоп.НоваяСтрока(); тзДоп.Инф = "Прочие затраты%";
тзДоп.НоваяСтрока(); тзДоп.Инф = "Себестоимость";
тзДоп.НоваяСтрока(); тзДоп.Инф = "";
тзДоп.НоваяСтрока(); тзДоп.Инф = "Наценка";
тзДоп.НоваяСтрока(); тзДоп.Инф = "Продажная цена";
КонецПроцедуры
Идентификаторам «СуммаКом» и «СуммаРас» присваивается нулевое значение.
Далее создаются строки и колонки.
В наименование выбираем название готовой продукции из справочника «Номенклатура». Задаем количество готовой продукции в партии, без этих данных будет не корректная проводка документа.
При нажатии кнопки «Новая строка» сразу происходит вызов спраочника «Материалы».
Далее в столбце выбираем комплектующие и расходные материалы из справочника. Как показано на рисунке 27.
Рисунок 27 – Выбор материала из справочника.
Когда материал выбран вызывается процедура «Пересчет(Материал)».
Программный код будет выглядеть так:
Процедура Пересчет(ИмяРеквизита)
Если Материал.Выбран() = 1 Тогда
Если (ИмяРеквизита = "Материал") Тогда
Цена = Материал.Цена;
ИначеЕсли (ИмяРеквизита = "Колво") Тогда
Сумма = Цена*Колво;
мат=Материал.Родитель ;
Если СокрЛП(мат) ="Комплектующие" Тогда
СуммаКом=СуммаКом+сумма;
тзДоп.УстановитьЗначение(1,2,СуммаКом);
иначе
Если СокрЛП(мат) ="Расходные" тогда
СуммаРас=СуммаРас+сумма;
тзДоп.УстановитьЗначение(2,2,СуммаРас);
Иначе
Сообщить ("Выбран не верный элемент справочника",);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры //Пересчет
Так как процедура вызывается из столбца «МАтериал» то ИмяРеквизита=Материал и тогда процедура по итогам условий выполняет только одну формулу Цена = Материал.Цена По этой фрмуле в столбце Стоимость сырья проставляется Цена материала из справочника Материалы.
Далее вводим количество используемого материала. После ввода вновь вызывается процедура Пересчет(ИмяРеквизита) но с другим реквизитом. В этом случае реквизитом будет «Колво».
Процедура Пересчет(ИмяРеквизита)
Если Материал.Выбран() = 1 Тогда
Если (ИмяРеквизита = "Материал") Тогда
Цена = Материал.Цена;
ИначеЕсли (ИмяРеквизита = "Колво") Тогда
Сумма = Цена*Колво;
мат=Материал.Родитель ;
Если СокрЛП(мат) ="Комплектующие" Тогда
СуммаКом=СуммаКом+сумма;
тзДоп.УстановитьЗначение(1,2,СуммаКом);
иначе
Если СокрЛП(мат) ="Расходные" тогда
СуммаРас=СуммаРас+сумма;
тзДоп.УстановитьЗначение(2,2,СуммаРас);
Иначе
Сообщить ("Выбран не верный элемент справочника",);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры //Пересчет
Процедура выполняет следующее:
- Вычисляет сумму которая потом проставляется в форме документа Сумма = Цена*Колво,
- Находит родителя выбранного материала для расчета отдельных затрат на комплектующие и расходные материалы .После чего спомощью условий увеличивает либо сумму затрат на комплектующие (СуммаКом=СуммаКом+сумма) либо на расходные материалы (СуммаРас=СуммаРас+сумма)
- Записывает полученные суммы в в таблицу значений «ТЗдоп»
- Если объект взят не из журнала производство, то выводится сообщение ("Выбран не верный элемент справочника",)
После того как все используемые материалы выбраны, небходимо заполнить таблицу значений. Это необходимо для учета других затрат связанных с производством (электричество, транспорт, зарплата и т.д.). Данные затраты вводяться в процентном соотношении. Если их не ввести то расчет будет не корректным.
При нажатии на необходимую строку в таблице значений вызывается процедура РедактированиеТзДоп()
Процедура РедактированиеТзДоп()
ВрЧисло = тзДоп.Показ;
ВвестиЧисло(ВрЧисло,"Введите "+тзДоп.Инф,15,3);
тзДоп.Показ = ВрЧисло;
КонецПроцедуры
В ней осуществляется вывод диалога для ввода данных и запись введенных данных в таблицу значений.
После ввода необходимых данных осуществляется расчет себестоимости и продажной цены продукции.Это осуществляется после нажатия на кнопку формы «Расчет себестоимости».При этом вызывается следующая процедура:
Процедура РасчетСтоимости()
ЗатРаб=тзДоп.ПолучитьЗначение(3,2);
ЗатПр=тзДоп.ПолучитьЗначение(4,2);
Нац=тзДоп.ПолучитьЗначение(7,2);
Если ЗатРаб*ЗатПр=0 Тогда
сообщить("Введены не все параметры") ;
КонецЕсли;
Если ЗатРаб*ЗатПр <>0 Тогда
Итого=(СуммаКом+СуммаРас)*(ЗатРаб/100+ЗатПР/100+1);
тзДоп.УстановитьЗначение(5,2,Итого);
КонецЕсли;
Если Нац=0 Тогда
тзДоп.УстановитьЗначение(8,2,Итого);
иначе
Итого1=Итого+итого*нац/100;
тзДоп.УстановитьЗначение(8,2,Итого1);
КонецЕсли;
Себестоимость=Итого1;
Всего=Себестоимость*Штук;
КонецПроцедуры
С помощью команды «ПолучитьЗначение» получаем значения из таблици значений из указанных позиций.
«Если ЗатРаб*ЗатПр=0 Тогда сообщить ("Введены не все параметры") Этот параметр нужен для того, чтобы не было нулевых значений в используемых параметрах.
Если нет нулевых значений будет выполняться расчет себестоимости, а потом и продажной цены при этом наценка может отсутствовать, для этого мы присваиваем ей значение единицы.
Далее если есть необходимость то можно распечатать конфигурацию собранного системного блока с продажными ценами и отдать потенциальным покупателям. Это осуществляеться с помощью нажатия кнопки «печать». В программе при этом вызываеться процедура печати.
Процедура Печать()
пр=ЗатРаб+ЗатПр;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Печать");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,0,0);
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
мат=Материал.Родитель ;
процент=сумма*пр/100+сумма;
процент=процент*нац/100+процент;
Если СокрЛП(мат) ="Комплектующие" Тогда
Таб.ВывестиСекцию("Строка");
КонецЕсли;
КонецЦикла;
Таб.ВывестиСекцию("Шапка2");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
мат=Материал.Родитель ;
процент=сумма*пр/100+сумма;
процент=процент*нац/100+процент;
Если СокрЛП(мат) ="Расходные" Тогда
Таб.ВывестиСекцию("Строка2");
КонецЕсли;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Печать СырьеПродукция","");
КонецПроцедуры
Рисунок 28 – Форма печати документа «СырьеПродукция».
Создание формы печати. С помощью формы создается вид будущего документа. Здесь будут находиться: название изделия, дата документа, наименование изделия, его количество, сумма и общая себестоимость. Для этого создаем 2 шапки отдельно для комплектующих и расходных материалов и строки в которые будут копироваться данные.
Тут же рассчитываются проценты- «процент=сумма*пр/100+сумма», «процент=процент*нац/100+процент».Процент это переменная в которой храниться наценка и затраты применимые к каждому материалу в отдельности.
После расчета и формирования печатной формы документ необходимо провести. Проведение документа зависит от того какой на предприятии ведется план счетов и бухгалтерский учет. В данном варианте используются две проводки: дебет 20 – кредит 10.1 (списание материалов в производство) и дебет 43 – кредит 20 (списание готовой продукции из производства).
При нажатии пользователем кнопки «ОК» или «Закрыть» выходит диалоговое окно с выбором «провести документ или нет». При подтверждении запускается процедура обработки проведения. Данная процедура пишется не в модуле формы, а в модуле самого документа.