Как в 1С v8 сделать документ не проведенным программно (1С: Программисту) — 1C-h
 

Как в 1С v8 сделать документ не проведенным программно (1С: Программисту)

Как программным путем отменить проведение документа в 1С v8? Рассмотрим на примере отмены проведения всех документов «ПриходныйОрдерНаТовары», на основании которых (в структуре подчиненности) нет ни одного проведенного документа. Для получения структуры подчиненных документов используется метод…

Вопрос: Как программным путем отменить проведение документа в 1С v8?
Ответ
Для этого используется метод записи с параметром «РежимЗаписиДокумента.ОтменаПроведения»
Пример: Рассмотрим на примере отмены проведения всех документов «ПриходныйОрдерНаТовары», на основании которых (в структуре подчиненности) нет ни одного проведенного документа.
Для получения структуры подчиненных документов используется метод «ПолучитьСписокДокументовПоКритериюОтбора», подробно описанный в статье Как программно получить список документов, подчиненных текущему.
Текст процедуры, решающей такую задачу отмены проведения таких документов:

Процедура ОтменаБесплодныхПриходныхОрдеров(Кнопка)

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

        Отпенять = Истина;
        ТаблицаПодчиненных = ПолныеПрава.ПолучитьСписокДокументовПоКритериюОтбора("СвязанныеДокументы", Выборка.Ссылка);
        Если ТаблицаПодчиненных.Количество() > 0 Тогда // подчиненные документы есть, значит, есть что проверять
            Для каждого СтрокаТП Из ТаблицаПодчиненных Цикл
                Если СтрокаТП.Ссылка.Проведен Тогда // если все подчиенные не проведены, то можно будет распровести, а иначе - нельзя
                    Отпенять = Ложь;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;

        Если Отпенять Тогда
            ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
            ДокОбъект.Комментарий = ДокОбъект.Комментарий + "Отменено проведение, т.к. нет проведенных подчиненных документов";
            ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); // собственно отмена проведения
        КонецЕсли;

    КонецЦикла;

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


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Next Post

Как определить программно, существует ли у документа требуемый реквизит (1С: Программисту)

Ср Ноя 10 , 2010
Вопрос Как определить программно, существует ли у документа требуемый реквизит С давних времен в типовых конфигурациях для этого существовала специальная функция. В конфигурациях последних редакций эта функция стала более универсальной и кроме того стала неожиданно оригинальной, даже эстетически восхитительной. Так, на сегодня, в 2019 г., эта функция называется ЕстьРеквизитИлиСвойствоОбъекта и […]

You May Like