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

Заполнение реквизитов документа при проведении другого

Автор Dirijabl, 21 мар 2016, 23:56

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

Dirijabl

Доброго времени суток. Комплексная автоматизация 1.1, в документе Заявка на расходование средств на форму добавлен реквизит ОтметкаОплаты, необходимо при создании на основании и последующем проведении Платежного поручения исходящего устанавливать значение этого реквизита - Истина и поменять значения реквизита Состояние на Закрыт. В модуле Платежного поручения исходящего пишу:
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
   Запрос.Текст =
     "ВЫБРАТЬ
     |   ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка КАК Ссылка
     |ИЗ
     |   РегистрНакопления.ДенежныеСредстваКСписанию.ОстаткиИОбороты КАК ДенежныеСредстваКСписаниюОстаткиИОбороты
     |      ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа
     |      ПО ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка = ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка
     |ГДЕ
     |   ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка ССЫЛКА Документ.ПлатежноеПоручениеИсходящее
     |   И ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.ДокументОснование.Ссылка ССЫЛКА Документ.ЗаявкаНаРасходованиеСредств
     |   И ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка = &Документ";
    Запрос.УстановитьПараметр("Документ",ЭтотОбъект.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    Выборка.Заявка.ОтметкаОплаты=Истина;
    Выборка.Заявка.Состояние=Перечисления.СостоянияОбъектов.Закрыт;
КонецПроцедуры

Получаю ошибку: Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ПлатежноеПоручениеИсходящее.МодульОбъекта(2392)}: Значение не является значением объектного типа (ОтметкаОплаты)

Подскажите, пожалуйста, как правильно.

TerverVl

1. В запросе выбирается единственное поле "ссылка" ДенежныеСредстваКСписаниюОстаткиИОбороты.ДокументСписания.Ссылка КАК Ссылка,
откуда в выборке появляется поле "Заявка".
2. Для изменения докумета в 1С нужно работать типом ДокументОбъект, тогда как в запросе получен тип ДокументСсылка.
т.е. от полученной ссылки получаешь объект и уже далее с ним работаешь:

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

vitasw

Цитата: Dirijabl от 21 мар 2016, 23:56устанавливать значение этого реквизита

Вот с этого и начинаются проблемы. Это грубейшая ошибка и логики и методологии. НЕЛЬЗЯ в модуле проведения документа менять реквизиты самого документа-объекта.
Создавайте РС и пишите в него все ваши статусы, а на форму документа выводите значение из этого РС.

Dirijabl

Надеюсь, правильно вас понимаю. Создаю РС Вспомогательный, непериодический, подчинен регистратору. В нем ресурсы - отметкавыплаты и состояние. Движения в регистр пишет документ Заявка на расходование средств. В модуле проведения Платежного поручения пишу:

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

Ничего не происходит. Совсем не то?

vitasw

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

Dirijabl


vitasw

Или мне кажется или на основании заявки делается ПП, а у вас судя по коду все с точностью до наоборот.

Dirijabl

Это в запросе? Вроде все правильно выводит...

vitasw


Dirijabl

Это видимо после цикал  НаборЗаписей.Записать(Истина);
Появляется ошибка {Документ.ПлатежноеПоручениеИсходящее.МодульОбъекта(2396)}: Ошибка при вызове метода контекста (Записать)

по причине:
Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Вспомогательный)

Теги:

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

Рейтинг@Mail.ru

Поиск