Как в 1С 7.7 закрывать или проводить доверенность при проведении документа поступления материалов

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет
← На главную

В процессе учета товарно-материальных ценностей бухгалтеру нередко требуется отслеживать исполнение выданных доверенностей. Типовой сценарий предполагает, что при фактическом оприходовании материалов по документу Поступление материалов выданная ранее Доверенность должна отмечаться как закрытая (исполненная), чтобы исключить ее повторное использование или потерю контроля за сроками.

При попытке связать эти документы разработчики часто сталкиваются с ошибкой «Не выбран документ!» или техническими ограничениями метаданных платформы 1С:Предприятие 7.7. Разберем детально причины возникновения этих проблем и рассмотрим несколько практических вариантов их решения.

Анализ ошибки: почему не работает вызов метода через реквизит формы

Проанализируем типичную ситуацию. В диалог документа Поступление материалов добавлен реквизит Окно (или ВыбраннаяДоверенность) с типом Документ.Доверенность. При попытке выполнить прямой вызов метода:

Окно.Провести();

Платформа 1С 7.7 прерывает выполнение и выдает сообщение об ошибке: {Документ.ПоступлениеМатериалов.Форма.Модуль(211)}: Не выбран документ!.

Выясним причину такого поведения платформы. Реквизит формы или шапки документа содержит только ссылку на документ (значение типа Документ), но не является программным объектом, спозиционированным на конкретной записи базы данных. Чтобы вызвать методы изменения состояния документа (Провести(), СделатьНеПроведенным(), Записать()), необходимо создать объект через фабрику платформы и найти нужный документ по ссылке.

Способ 1. Программное проведение документа Доверенность

Разберем по шагам реализацию через проведение. Важно учесть, что в типовой конфигурации «Бухгалтерский учет» для платформы 7.7 у документа Доверенность в метаданных по умолчанию установлено свойство «Запретить проведение». Чтобы документ можно было провести, необходимо в конфигураторе открыть свойства документа Доверенность и на вкладке «Общие» переключить режим на «Разрешить проведение».

После изменения свойств метаданных напишем процедуру проведения связанного документа. Поместим вызов в обработку проведения документа поступления или в модуль формы:


Если ПустоеЗначение(Окно) = 0 Тогда
    ДокДоверенность = СоздатьОбъект("Документ.Доверенность");
    Если ДокДоверенность.НайтиДокумент(Окно) = 1 Тогда
        Попытка
            ДокДоверенность.Провести();
        Исключение
            Предупреждение("Не удалось провести доверенность: " + ОписаниеОшибки());
            СтатусВозврата(0);
            Возврат;
        КонецПопытки;
    КонецЕсли;
КонецЕсли;

Обязательно предусмотрим обратную операцию. Если документ Поступление материалов будет распроведен или удален, доверенность должна вернуться в исходное состояние (стать непроведенной). Для этого в процедуру ОбработкаУдаленияПроведения модуля документа или в событие отмены проведения добавляем парный код:


Если ПустоеЗначение(Окно) = 0 Тогда
    ДокДоверенность = СоздатьОбъект("Документ.Доверенность");
    Если ДокДоверенность.НайтиДокумент(Окно) = 1 Тогда
        Если ДокДоверенность.Проведен() = 1 Тогда
            ДокДоверенность.СделатьНеПроведенным();
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Способ 2. Использование реквизита состояния (флага закрытия) и пиктограммы

Проведение доверенности порождает служебные записи в системных таблицах и журналах, хотя сам документ не формирует бухгалтерских проводок. Поэтому более гибким и стандартным для 1С 7.7 является механизм с отдельным реквизитом закрытия (по аналогии со статусами в платежных поручениях).

Разберем реализацию этого способа по этапам:

  1. В конфигураторе добавляем в шапку документа Доверенность числовой реквизит ДокументЗакрыт (длина 1, точность 0).
  2. В журнал доверенностей выводим колонку с пиктограммой, которая при значении реквизита ДокументЗакрыт = 1 будет отображать значок (например, зеленую или красную птичку/галочку).
  3. При проведении документа поступления находим выбранную доверенность и проставляем признак закрытия:

Если ПустоеЗначение(Окно) = 0 Тогда
    ДокДоверенность = СоздатьОбъект("Документ.Доверенность");
    Если ДокДоверенность.НайтиДокумент(Окно) = 1 Тогда
        ДокДоверенность.ДокументЗакрыт = 1;
        ДокДоверенность.Записать();
    КонецЕсли;
КонецЕсли;

При отмене проведения поступления аналогичным образом сбрасываем значение реквизита ДокДоверенность.ДокументЗакрыт = 0 и вызываем ДокДоверенность.Записать().

Ограничение списка выбора доверенностей по контрагенту

Чтобы исключить ошибки пользователей и не выбирать нужный документ из общего списка, ограничим выборку доверенностей только текущим поставщиком, указанным в шапке накладной.

Посмотрим на пример организации выбора через СписокЗначений в модуле формы документа поступления:


Процедура ВыбратьДоверенностьПоКонтрагенту()
    Если ПустоеЗначение(Контрагент) = 1 Тогда
        Предупреждение("Сначала выберите контрагента!");
        Возврат;
    КонецЕсли;
    
    СпДоверенностей = СоздатьОбъект("СписокЗначений");
    Выборка = СоздатьОбъект("Документ.Доверенность");
    
    // Выбираем доверенности за последние 30 дней
    Выборка.ВыбратьДокументы(ТекущаяДата() - 30, ТекущаяДата());
    Пока Выборка.ПолучитьДокумент() = 1 Цикл
        Если Выборка.Контрагент = Контрагент Тогда
            Представление = "№ " + СокрЛП(Выборка.НомерДок) + " от " + Выборка.ДатаДок + " (" + СокрЛП(Выборка.ФизЛицо) + ")";
            СпДоверенностей.ДобавитьЗначение(Выборка.ТекущийДокумент(), Представление);
        КонецЕсли;
    КонецЦикла;
    
    Значение = "";
    Если СпДоверенностей.ВыбратьЗначение(Значение, "Выберите доверенность:") = 1 Тогда
        Окно = Значение;
    КонецЕсли;
КонецПроцедуры

Штатный механизм подчиненности и контроль исполнения

Не забываем также про типовые возможности платформы 1С 7.7. Если настроить ввод документа Поступление материалов на основании документа Доверенность, связь между ними фиксируется автоматически через механизм подчиненных документов.

При заполнении реквизита ДокументОснование связь между доверенностью и накладной доступна в стандартном окне «Дерево документов», а реквизиты приходного документа автоматически попадают в типовой отчет «Журнал учета выданных доверенностей» (типовая форма М-2а), закрывая графу исполнения без необходимости дополнительного кодирования.

← На главную