Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 22:06

Оптимизация проведения документа

Автор lilia93, 09 апр 2015, 10:50

0 Пользователей и 1 гость просматривают эту тему.

lilia93

Доброе утро, уважаемые программисты :-)

    При разработке конфигурации столкнулась со следующей ситуацией. У меня есть документ "Заявка", в котором присутствует реквизит "Статус" со значениями, взятыми из перечислений "Назначен", "Выполняется", "Выполнено", "Не выполнено". Поскольку я новичок в этом деле и это моя первая разработка, все значения реквизитов для каждой заявки приходится менять вручную. Статус заявки при проведении документа фиксируется в соответствующем регистре сведений "Статус заявки".
    Помимо этого с заявкой связаны документы "ЗаказМатериаловДляВыполненияУслуги" и "АктОказанияУслуг". Подскажите, пожалуйста, как сделать, чтобы при записи "Заказа материалов" (его движения ни в одном из созданных регистров не отражаются) движения документа "Заявка" перепизасывались с соответствующим изменением реквизита "Статус" на "Назначено", и при проведении док-та "Акт оказания услуг" (регистр накопления "Услуги") статус в док-те "Заявка" менялся на "Выполнено".

Вот модули объектов всех документов

Заявка: Процедура ОбработкаПроведения(Отказ, Режим)
   // регистр СтатусЗаявки
   Движения.СтатусЗаявки.Записывать = Истина;
   Движение = Движения.СтатусЗаявки.Добавить();
   Движение.СрокИсполнения = СрокИсполнения;
   Движение.Исполнитель = Исполнитель;
   Движение.Статус = Статус;
КонецПроцедуры


Заказ материалов для оказания услуги: Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
   
   Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаНаОказаниеПлатныхУслуг") Тогда
      Исполнитель = ДанныеЗаполнения.Исполнитель;
      ДокументОснование = ДанныеЗаполнения.Ссылка;
      Для Каждого ТекСтрокаТабличнаяЧасть1 Из ДанныеЗаполнения.ТабличнаяЧасть1 Цикл
         НоваяСтрока = ТабличнаяЧасть1.Добавить();
         НоваяСтрока.Услуга = ТекСтрокаТабличнаяЧасть1.ВидУслуги;
      КонецЦикла;
   ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаНаОказаниеБесплатныхУслуг") Тогда
      Исполнитель = ДанныеЗаполнения.Исполнитель;
      ДокументОснование = ДанныеЗаполнения.Ссылка;
      Для Каждого ТекСтрокаТабличнаяЧасть1 Из ДанныеЗаполнения.ТабличнаяЧасть1 Цикл
         НоваяСтрока = ТабличнаяЧасть1.Добавить();
         НоваяСтрока.Услуга = ТекСтрокаТабличнаяЧасть1.ВидУслуги;
      КонецЦикла;
   КонецЕсли;
КонецПроцедуры


Акт оказания услуг:  Процедура ОбработкаПроведения(Отказ, Режим)
   // регистр Услуги
   Движения.Услуги.Записывать = Истина;
   Для Каждого ТекСтрокаТабличнаяЧасть1 Из ТабличнаяЧасть1 Цикл
      Движение = Движения.Услуги.Добавить();
      Движение.Период = Дата;
      Движение.ВидУслуги = ТекСтрокаТабличнаяЧасть1.ВидУслуги;
      Движение.Исполнитель = Исполнитель;
      Движение.Количество = ТекСтрокаТабличнаяЧасть1.Количество;
   КонецЦикла;
КонецПроцедуры

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
   Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаНаОказаниеПлатныхУслуг") Тогда
      Инициатор = ДанныеЗаполнения.Заказчик;
      Исполнитель = ДанныеЗаполнения.Исполнитель;
      ДокументОснование = ДанныеЗаполнения.Ссылка;
      Для Каждого ТекСтрокаТабличнаяЧасть1 Из ДанныеЗаполнения.ТабличнаяЧасть1 Цикл
         НоваяСтрока = ТабличнаяЧасть1.Добавить();
         НоваяСтрока.ВидУслуги = ТекСтрокаТабличнаяЧасть1.ВидУслуги;
         НоваяСтрока.Количество = ТекСтрокаТабличнаяЧасть1.Количество;
      КонецЦикла;
   ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаНаОказаниеБесплатныхУслуг") Тогда
      Инициатор = ДанныеЗаполнения.Заказчик;
      Исполнитель = ДанныеЗаполнения.Исполнитель;
      ДокументОснование = ДанныеЗаполнения.Ссылка;
      Для Каждого ТекСтрокаТабличнаяЧасть1 Из ДанныеЗаполнения.ТабличнаяЧасть1 Цикл
         НоваяСтрока = ТабличнаяЧасть1.Добавить();
         НоваяСтрока.ВидУслуги = ТекСтрокаТабличнаяЧасть1.ВидУслуги;
         НоваяСтрока.Количество = ТекСтрокаТабличнаяЧасть1.Количество;
      КонецЦикла;
   КонецЕсли;
   
КонецПроцедуры


Спасибо! С уважением, грустный студент :-)





 

Дмитрий@

Есть два варианта перепровести документ "Заявка", или получить набор записей из регистра и где поменять статус заявки.

lilia93

Цитата: Дмитрий@ от 09 апр 2015, 11:04
Есть два варианта перепровести документ "Заявка", или получить набор записей из регистра и где поменять статус заявки.

Дмитрий,как реализовать первый вариант? Чтобы изменялся статус и перепроводился документ?

Конфигурацию делаю в 1С 8.2

Дмитрий@

Получаете ссылку на документ "заявка", далее
Попытка
Заявка = Ссылка.ПолучитьОбъект();
Заявка.Записать(РежимЗаписиДокумента.Проведение);
Исключение
КонецПопытки;

cska-fanat-kz

В "ЗаказМатериаловДляВыполненияУслуги" и "АктОказанияУслуг" есть ссылка на Заявку?
Предположим что есть и называется ДокументОснование.
Тогда делаете Заказ и Акт тоже регистраторами регистра где статусы заявок
и при их проведении делаете соответствующее движение с нужным статусом,
ссылка на заявку берете из ДокументОснование.

ЗЫ зачем вам и реквизит Статус и регистр? оставляйте только регистр.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

lilia93

Цитата: cska-fanat-kz от 09 апр 2015, 12:02
В "ЗаказМатериаловДляВыполненияУслуги" и "АктОказанияУслуг" есть ссылка на Заявку?
Предположим что есть и называется ДокументОснование.
Тогда делаете Заказ и Акт тоже регистраторами регистра где статусы заявок
и при их проведении делаете соответствующее движение с нужным статусом,
ссылка на заявку берете из ДокументОснование.

ЗЫ зачем вам и реквизит Статус и регистр? оставляйте только регистр.

Да, Заказ и Акт заполняются на основании заявки, значит, я добавляю в Заказ и Акт тот же реквизит "Статус", что и в заявке , затем формирую движения документов по регистру "Статус заявки".
А вот что делать потом, я, к сожалению, никак не понимаю :(
Дописывать в обработку проведения каждого из документов? что именно прописывать?

Извините, мне очень неудобно за свою глупость (

cska-fanat-kz

Цитата: lilia93 от 09 апр 2015, 12:20Да, Заказ и Акт заполняются на основании заявки, значит, я добавляю в Заказ и Акт тот же реквизит "Статус", что и в заявке , затем формирую движения документов по регистру "Статус заявки".

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

Цитата: lilia93 от 09 апр 2015, 12:20Дописывать в обработку проведения каждого из документов? что именно прописывать?

ну у вас в проведении заявки уже же есть код формирования движений по регистру статусов,
его берете и копировать/вставить в заказ и акт...

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

Цитата: lilia93 от 09 апр 2015, 12:20Извините, мне очень неудобно за свою глупость (

тут главное не сдаваться )))
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

lilia93

Сдала вот так
Процедура ОбработкаПроведения(Отказ, Режим)

   // регистр СтатусЗаявки
   Движения.СтатусЗаявки.Записывать = Истина;
   Движение = Движения.СтатусЗаявки.Добавить();
   Движение.Заявка = ДокументОснование;
   Движение.Статус = СтатусЗаявки;
   ДокОсн = ДокументОснование.ПолучитьОбъект();
ДокОсн.Статус = СтатусЗаявки;
ДокОсн.Записать(режимзаписидокумента.проведение);

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

Вроде работает, только теперь до меня дошло, что записи в регистре затираются, а как можно это реализовать, если я сделаю этот регистр периодическим, через СрезПоследних?

cska-fanat-kz

Цитата: lilia93 от 09 апр 2015, 15:44ДокОсн = ДокументОснование.ПолучитьОбъект();
ДокОсн.Статус = СтатусЗаявки;
ДокОсн.Записать(режимзаписидокумента.проведение);

еще раз. реквизит документа НЕ НУЖЕН. статус видно по регистру.
то есть эти строки не нужны.

регистр - периодический?
рекомендую сделать его подчиненным регистратору и периодичность - по позиции регистратора.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск