![]() |
|
Автоматическое изменение реквизита в документе и его перепроведение | ☑ | ||
---|---|---|---|---|
0
lile4ka
09.04.15
✎
12:40
|
Добрый день, уважаемые программисты :-)
При разработке конфигурации в 1С 8.2 столкнулась со следующей ситуацией. У меня есть документ "Заявка", в котором присутствует реквизит "Статус" со значениями, взятыми из перечислений "Назначен", "Выполняется", "Выполнено", "Не выполнено". Поскольку я новичок в этом деле и это моя первая разработка, все значения реквизитов для каждой заявки приходится менять вручную. Статус заявки при проведении документа фиксируется в соответствующем регистре сведений "Статус заявки". Помимо этого с заявкой связаны документы "ЗаказМатериаловДляВыполненияУслуги" и "АктОказанияУслуг". Подскажите, пожалуйста, как сделать, чтобы при записи "Заказа материалов" (его движения ни в одном из созданных регистров не отражаются) движения документа "Заявка" перепизасывались с соответствующим изменением реквизита "Статус" на "Назначено", и при проведении док-та "Акт оказания услуг" (регистр накопления "Услуги") статус в док-те "Заявка" менялся на "Выполнено". Вот модули объектов всех документов Заявка: Процедура ОбработкаПроведения(Отказ, Режим) // регистр СтатусЗаявки Движения.СтатусЗаявки.Записывать = Истина; Движение = Движения.СтатусЗаявки.Добавить(); Движение.СрокИсполнения = СрокИсполнения; Движение.Исполнитель = Исполнитель; Движение.Статус = Статус; КонецПроцедуры Заказ материалов для оказания услуги: Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаНаОказаниеПлатныхУслуг") Тогда Исполнитель = ДанныеЗаполнения.Исполнитель; ДокументОснование = ДанныеЗаполнения.Ссылка; Для Каждого ТекСтрокаТабличнаяЧасть1 Из ДанныеЗаполнения.ТабличнаяЧасть1 Цикл НоваяСтрока = ТабличнаяЧасть1.Добавить(); НоваяСтрока.Услуга = ТекСтрокаТабличнаяЧасть1.ВидУслуги; КонецЦикла; ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаНаОказаниеБесплатныхУслуг") Тогда Исполнитель = ДанныеЗаполнения.Исполнитель; ДокументОснование = ДанныеЗаполнения.Ссылка; Для Каждого ТекСтрокаТабличнаяЧасть1 Из ДанныеЗаполнения.ТабличнаяЧасть1 Цикл НоваяСтрока = ТабличнаяЧасть1.Добавить(); НоваяСтрока.Услуга = ТекСтрокаТабличнаяЧасть1.ВидУслуги; КонецЦикла; КонецЕсли; КонецПроцедуры Акт оказания услуг: Процедура ОбработкаПроведения(Отказ, Режим) // регистр Услуги Движения.Услуги.Записывать = Истина; Для Каждого ТекСтрокаТабличнаяЧасть1 Из ТабличнаяЧасть1 Цикл Движение = Движения.Услуги.Добавить(); Движение.Период = Дата; Движение.ВидУслуги = ТекСтрокаТабличнаяЧасть1.ВидУслуги; Движение.Исполнитель = Исполнитель; Движение.Количество = ТекСтрокаТабличнаяЧасть1.Количество; КонецЦикла; КонецПроцедуры Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаНаОказаниеПлатныхУслуг") Тогда Инициатор = ДанныеЗаполнения.Заказчик; Исполнитель = ДанныеЗаполнения.Исполнитель; ДокументОснование = ДанныеЗаполнения.Ссылка; Для Каждого ТекСтрокаТабличнаяЧасть1 Из ДанныеЗаполнения.ТабличнаяЧасть1 Цикл НоваяСтрока = ТабличнаяЧасть1.Добавить(); НоваяСтрока.ВидУслуги = ТекСтрокаТабличнаяЧасть1.ВидУслуги; НоваяСтрока.Количество = ТекСтрокаТабличнаяЧасть1.Количество; КонецЦикла; ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаНаОказаниеБесплатныхУслуг") Тогда Инициатор = ДанныеЗаполнения.Заказчик; Исполнитель = ДанныеЗаполнения.Исполнитель; ДокументОснование = ДанныеЗаполнения.Ссылка; Для Каждого ТекСтрокаТабличнаяЧасть1 Из ДанныеЗаполнения.ТабличнаяЧасть1 Цикл НоваяСтрока = ТабличнаяЧасть1.Добавить(); НоваяСтрока.ВидУслуги = ТекСтрокаТабличнаяЧасть1.ВидУслуги; НоваяСтрока.Количество = ТекСтрокаТабличнаяЧасть1.Количество; КонецЦикла; КонецЕсли; КонецПроцедуры Спасибо! С уважением, грустный студент :-) |
|||
1
ИС-2
naïve
09.04.15
✎
12:52
|
архитектура решения не правильная - каждый из документов должен менять статус в регистре СтатусЗаявки, где должно быть еще измерение Заявка и ресурс статус.
Если решать в лоб, то В событие при записи документа "Заказа материалов" добавляем изменение документа (заявка.Статус = Назначено;) и записываем заявку (Заявка.Записать(режимзаписидокумента.Проведение)) |
|||
2
lile4ka
09.04.15
✎
13:34
|
Заказ и Акт у меня вводятся на основании Заявки, точнее 2х разных "ЗаявкаНаОказаниеПлатныхУслуг" и "ЗаявкаНаОказаниеБесплатныхУслуг".
В Заказ и Акт я добавила также реквизит "Статус заявки" и сделала их регистраторами для регистра "Статус заявки". (хотя я так и не поняла, точно ли нужно его делать, ведь записи в регистре будут дублироваться...но как тогда по-другому сформировать движения этих 2х документов) Затем, как я понимаю, нужно в обработку проведения заказа и акта впихнуть информацию о том, что мне нужно изменить статус заявок непосредственно в аналогичных документах. Как это сделать - не представляю. |
|||
3
ДемонМаксвелла
09.04.15
✎
13:39
|
тут не реквизит должен быть, а регистр сведений
|
|||
4
ИС-2
naïve
09.04.15
✎
13:45
|
ДокументОснование.Статус = Назначено;
ДокументОснование.Записать(режимзаписидокумента.проведение); (3) +1 |
|||
5
lile4ka
09.04.15
✎
14:17
|
ДемонМаксвелла, не поняла Вас, поясните, пожалуйста, что нужно изменить.
|
|||
6
lile4ka
09.04.15
✎
14:18
|
ИС-2, возникает ошибка
{Документ.ЗаказМатериаловДляВыполненияУслуги.МодульОбъекта(36)}: Поле объекта недоступно для записи (Статус) ДокументОснование.Статус = СтатусЗаявки; Что неверно сделано? |
|||
7
lile4ka
09.04.15
✎
14:28
|
обработка заполнения Заказа
|
|||
8
lile4ka
09.04.15
✎
14:28
|
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! // регистр СтатусЗаявки Движения.СтатусЗаявки.Записывать = Истина; Движение = Движения.СтатусЗаявки.Добавить(); Движение.Заявка = ДокументОснование; Движение.Статус = СтатусЗаявки; ДокументОснование.Статус = СтатусЗаявки; ДокументОснование.Записать(режимзаписидокумента.проведение); //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры |
|||
9
Ganiev
09.04.15
✎
14:33
|
(4) правильно написал!
ДокОсн = ДокументОснование.ПолучитьОбъект(); ДокОсн.Статус = СтатусЗаявки; ДокОсн.Записать(режимзаписидокумента.проведение); |
|||
10
lile4ka
09.04.15
✎
14:51
|
Спасибо Вам огромное! Можно последний вопрос задать? )
По логике у меня и в заказе тогда должно установиться "Выполнено". Как правильно обратиться к документу "ЗаказМатериаловДляОказанияУслуги" в обработке проведения Акта? в случае с заявкой я поняла, что мы объявляем переменную ДокОсн = ДокументОснование.ПолучитьОбъект(); Можно так? Заказ = ДокументЗаказМатериаловДляОказанияУслуги.ПолучитьОбъект(); Или снова нагородила ошибок? |
|||
11
FIXXXL
09.04.15
✎
15:09
|
(5) нужен РС с полями Заявка, ДокументИзмененияСтатуса, Статус
и все документы пишут туда инфо затем срезом последних всегда можно получить актуальную инфо по статусу конкретной Заявки |
|||
12
FIXXXL
09.04.15
✎
15:11
|
(11) +при открытии дока Заявки обновлять поле Статус на СтатусСрезПоследних, и не хранить этот реквизит в документе
|
|||
13
lile4ka
09.04.15
✎
15:21
|
FIXXXL, делаю этот РС периодическим, затем создаю общий модуль с функцией
|
|||
14
lile4ka
09.04.15
✎
15:22
|
Функция АктуальныйСтатус(АктуальнаяДата, ЭлементЗаявок) Экспорт
Отбор=Новый Структура("Заявка",ЭлементЗаявок); ЗначенияРесурсов = РегистрыСведений.СтатусЗаявки.ПолучитьПоследнее(АктуальнаяДата, Отбор); Возврат ЗначенияРесурсов.Статус; КонецФункции Так верно? |
|||
15
lile4ka
09.04.15
✎
15:38
|
Подскажите, пожалуйста, как при открытии дока Заявка обновлять поле Статус на СтатусСрезПоследних, и не хранить этот реквизит в документе?
|
|||
16
Ganiev
10.04.15
✎
08:39
|
Сделай экспортную Функцию ПолучитьСтатусДокументаНаДату(ДатаДок, ДокументОбъект) в общем модуле с параметрами дата и регистратор ,где запросом получаешь срез на дату срез с параметром отбора по регистратору. Сделай возврат полученного значения. После этого тебе не надо будет во всех документов писать запрос получения статуса, а достаточно вызвать твою функцию.
в процедуре ПриОткрытии() или ПередОткрытием() вызови свою функцию что-то типа такого: Статус = ПолучитьСтатусДокументаНаДату(ДатаДок, ЭтотОбъект.Ссылка)! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |