Разработка обработки Формирование карточки

Постановка задачи:

Обеспечить создание карточки себестоимости по выбранному договору.

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

 

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

Примерный вид формы обработки представлен на рисунке

Рис. 8

Создать новую форму (имя – Форма), куда добавляем все реквизиты. В окне формы вызываем свойства кнопки Выполнить. Далее перейти на вкладку Модуль и раскрыть заготовку процедуры КнопкаВыполнитьНажатие, где и будет формироваться процедура.

Алгоритм решения задачи

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

 

Технология реализации

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

Процедура КнопкаВыполнитьНажатие(Кнопка)

Дог=Документы.Договор.НайтиПоНомеру(Договор.Номер);

Для каждого СтрокаТабличнойЧасти из Дог.Спецификация цикл

НовыйДокумент=Документы.КарточкаСебестоимости.СоздатьДокумент();

НовыйДокумент.Дата=ТекущаяДата();

НовыйДокумент.Договор=Договор;

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

Запрос=Новый Запрос;

Запрос.Текст=

"ВЫБРАТЬ

|      РаботаМатериал.ВидРабот,

|      РаботаМатериал.Материал,

|      СУММА(РаботаМатериал.Количество * УслугаРабота.КоличествоНаЕИ) КАК Количество

|ИЗ

|      (ВЫБРАТЬ

|                  СпецификацияУслугСпецификация.ВидРабот КАК ВидРабот,

|                  СпецификацияУслугСпецификация.КоличествоНаЕИ КАК КоличествоНаЕИ

|      ИЗ

|                  Справочник.СпецификацияУслуг.Спецификация КАК СпецификацияУслугСпецификация

|                             ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацияУслуг КАК СпецификацияУслуг

|                             ПО СпецификацияУслугСпецификация.Ссылка = СпецификацияУслуг.Ссылка

|      ГДЕ

|                  СпецификацияУслуг.Услуга = &Услуга) КАК УслугаРабота

|                  ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ

|                             Нормативы.ВидРабот КАК ВидРабот,

|                             НормативыСпецификация.Материал КАК Материал,

|                             НормативыСпецификация.Количество КАК Количество

|                  ИЗ

|                             Справочник.Нормативы.Спецификация КАК НормативыСпецификация

|                                         ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Нормативы КАК Нормативы

|                                         ПО НормативыСпецификация.Ссылка = Нормативы.Ссылка) КАК РаботаМатериал

|                  ПО УслугаРабота.ВидРабот = РаботаМатериал.ВидРабот

|

|СГРУППИРОВАТЬ ПО

|      РаботаМатериал.ВидРабот,

|      РаботаМатериал.Материал";

Запрос.УстановитьПараметр("Услуга",СтрокаТабличнойЧасти.Услуга);

Табл=Запрос.Выполнить().Выгрузить();

Для каждого СтрокаТаблЗначений из Табл Цикл

НоваяСтрока=НовыйДокумент.МатериальныеЗатраты.Добавить();

НоваяСтрока.ВидРабот=СтрокаТаблЗначений.ВидРабот;

НоваяСтрока.МатериалГруппа=СтрокаТаблЗначений.Материал;

НоваяСтрока.НорматРасход=СтрокаТаблЗначений.Количество;

Отбор=Новый Структура("Материал",СтрокаТаблЗначений.Материал);

Значение=РегистрыСведений.ОтпускныеЦеныМатериалов.ПолучитьПоследнее(ТекущаяДата(), Отбор);

НоваяСтрока.НормСумма=Значение.ОтпускнаяЦена*СтрокаТаблЗначений.Количество;

КонецЦикла;

НовыйДокумент.ИтогоНорм=НовыйДокумент.МатериальныеЗатраты.Итог("НормСумма");

НовыйДокумент.Записать();

НовыйДокумент.ИтогоНорм=НовыйДокумент.МатериальныеЗатраты.Итог("НормСумма");

 НовыйДокумент.ПолучитьФорму("ФормаДокумента").Открыть();

КонецЦикла

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

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: