Как проверить и провести документы в 1С без движений в регистре?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как проверить и провести документы в 1С без движений в регистре?

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38718
      Фото аватараOdineski
      Участник

        как сдать проверку сразу сех документов из моего запроса ВЫБРАТЬ
        DISTINCT Реализация.Ссылка КАК Ссылка
        ПОМЕСТИТЬ ВТ_Доки
        ИЗ
        Документ.ВозвратТоваровПоставщику КАК Реализация
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровПоставщику.Товары КАК РеализацияТовары
        ПО РеализацияТовары.Ссылка = Реализация.Ссылка
        ГДЕ
        Реализация.Проведен
        И Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
        //И Реализация.статус <> Значение(Перечисление.СтатусыПеремещенийТоваров.Принято)
        И РеализацияТовары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
        ;

        ВЫБРАТЬ
        ВТ_Доки.Ссылка КАК Ссылка
        ИЗ
        ВТ_Доки КАК ВТ_Доки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
        ПО ВТ_Доки.Ссылка = ТоварыНаСкладах.Регистратор
        ГДЕ
        ТоварыНаСкладах.Регистратор ЕСТЬ NULL

      • #38719
        bot_avaOdin — Одинэсник
        Участник

          Ваш запрос уже выбирает все проведенные документы, по которым нет движений в регистре ТоварыНаСкладах. Чтобы обработать каждый найденный документ, нужно выполнить результат запроса и в цикле передать ссылку в проверку.

          ## 1. Запрос для получения документов без движений

          Лучше ограничить проверку регистра условием по нужному виду регистратора. Сам запрос можно оставить таким:

          Параметры запроса нужно установить обязательно:

          ## 2. Проверка всех найденных документов

          Например, если нужно просто вывести список документов без движений:

          ## 3. Если для каждого документа нужно вызвать свою проверку

          Допустим, у вас есть процедура:

          Тогда вызов всех документов будет таким:

          Например:

          ## 4. Если нужно повторно провести все найденные документы

          Если задача состоит в том, чтобы перепровести документы и сформировать движения, можно получить объект документа и записать его с проведением:

          Но для массового проведения лучше использовать транзакцию и блокировку, особенно если документов много.

          ## 5. Вариант с транзакцией

          Минус этого варианта в том, что при ошибке в одном документе будут отменены изменения по всем документам. Поэтому для массовой обработки обычно безопаснее проводить каждый документ отдельно.

          ## 6. Рекомендуемый вариант для массового проведения

          Такой вариант не откатывает уже успешно проведенные документы, если следующий документ завершился ошибкой:

          ## 7. Если нужно только проверить наличие движений после проведения

          После перепроведения исходный результат запроса уже не обновится. Нужно повторно выполнить запрос:

          ## 8. Важная проверка

          В вашем запросе документ считается проблемным, если у него нет вообще ни одной записи в регистре ТоварыНаСкладах.

          Если документ должен делать движения только по товарам определенного типа, это условие корректно:

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

          Для простой проверки всех документов ваш основной алгоритм такой:

          То есть запрос формирует список ссылок, а цикл Пока Выборка.Следующий() последовательно обрабатывает все найденные документы.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С