8.х Как получить ОстаткиИОбороты регистра накопления без поледнего регистратора?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Bkmz, 20 окт 2017.

  1. TopicStarter Overlay
    Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    459
    Симпатии:
    13
    Баллы:
    29
    Написал такой код для проверки корректности вводимой ставки НДС по старым движениям:

    Код:
       Если Источник.Движения.Найти("ПродажиНалоговыйУчет") <> Неопределено Тогда
            Если Источник.Движения.ПродажиНалоговыйУчет.Количество() > 0 Тогда
            
                ДоговораКонтрагентов = Источник.Движения.ПродажиНалоговыйУчет.ВыгрузитьКолонку("ДоговорКонтрагента");
            
                Запрос = Новый Запрос;
                Запрос.Текст = "ВЫБРАТЬ
                               |    ПродажиНалоговыйУчетОстатки.ДоговорКонтрагента,
                               |    ПродажиНалоговыйУчетОстатки.СтавкаНДС
                               |ИЗ
                               |    РегистрНакопления.ПродажиНалоговыйУчет.Остатки(&МоментВремени, ДоговорКонтрагента В (&ДоговораКонтрагентов)) КАК ПродажиНалоговыйУчетОстатки";
                Запрос.УстановитьПараметр("МоментВремени", Новый Граница(Источник.МоментВремени(), ВидГраницы.Исключая));
                Запрос.УстановитьПараметр("ДоговораКонтрагентов", ДоговораКонтрагентов);
                СтарыеДвижения = Запрос.Выполнить().Выгрузить();
            
                Для каждого Строка Из Источник.Движения.ПродажиНалоговыйУчет Цикл
                    Стр = СтарыеДвижения.Найти(Строка.ДоговорКонтрагента, "ДоговорКонтрагента");
                    Если ЗначениеЗаполнено(Стр) Тогда
                        Если Стр.СтавкаНДС <> Строка.СтавкаНДС Тогда
                            Сообщить("Ставка НДС по договору """ + Строка.ДоговорКонтрагента + """ не соотвествует ставке по которой были сделаны движения раньше (было """ + Стр.СтавкаНДС + """)");
                        КонецЕсли;
                    КонецЕсли;
                КонецЦикла;
            
            КонецЕсли;
        КонецЕсли;
    
    Но есть маленькое НО. если нет остаток в то контроль работать не будет. Хотел сделать ОстаткиИОбороты ВидГраницы.Исключая но там такого нет. Есть Движения и ДвиженияИГраницыПериода. Можно ли как-то подправить все-таки запрос чтобы получать всегда остатки?

    Я это делаю в подписке на событие проведения документов. Не будет ли так что если я все-таки сделаю через ОстаткиИОброты с периодичностью Регистратор то это будет тормозить проведение в случае если регистраторов много?
    Последнее редактирование: 20 окт 2017
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.397
    Симпатии:
    156
    Баллы:
    104
    1. А если ранее были движения с несколькими ставками? Не проще в сам договор внести допустимые ставки?
    2. Обороты не нужны, нужны записи. просто ВЫБРАТЬ РАЗЛИЧНЫЕ ДоговорКонтрагента, СтавкаНДС ИЗ РагистрНакопления.ПродажиНалоговыйУчет ГДЕ ДоговорКонтрагента В (&Договоры) И Период<&ДатаДокумента И СтавкаНДС<>&СтавкаДокумента
    Нужен индекс пр договору. уменьшение скорости работы на больших объемах будет, но не сильное.
    Bkmz нравится это.
  3. TopicStarter Overlay
    Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    459
    Симпатии:
    13
    Баллы:
    29
    А если ставка НДС в табличной части?
  4. TopicStarter Overlay
    Bkmz
    Offline

    Bkmz Опытный в 1С

    Регистрация:
    6 июл 2013
    Сообщения:
    459
    Симпатии:
    13
    Баллы:
    29
    Решил вот таким способом:

    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
      |   ПриобретенияНалоговыйУчет.ДоговорКонтрагента,
      |   ПриобретенияНалоговыйУчет.СтавкаНДС,
      |   ПриобретенияНалоговыйУчет.Амортизируется
      |ПОМЕСТИТЬ втДвиженияДокумента
      |ИЗ
      |   РегистрНакопления.ПриобретенияНалоговыйУчет КАК ПриобретенияНалоговыйУчет
      |ГДЕ
      |   ПриобретенияНалоговыйУчет.Регистратор = &Ссылка
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ РАЗЛИЧНЫЕ
      |   ПриобретенияНалоговыйУчет.ДоговорКонтрагента КАК ДоговорКонтрагента,
      |   ПриобретенияНалоговыйУчет.Амортизируется КАК Амортизируется,
      |   ПриобретенияНалоговыйУчет.СтавкаНДС КАК СтавкаНДС,
      |   втДвиженияДокумента.СтавкаНДС КАК ТекДокСтавкаНДС,
      |   втДвиженияДокумента.Амортизируется КАК ТекДокАмортизируется
      |ИЗ
      |   втДвиженияДокумента КАК втДвиженияДокумента
      |     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПриобретенияНалоговыйУчет КАК ПриобретенияНалоговыйУчет
      |     ПО втДвиженияДокумента.ДоговорКонтрагента = ПриобретенияНалоговыйУчет.ДоговорКонтрагента
      |       И (НЕ втДвиженияДокумента.СтавкаНДС = ПриобретенияНалоговыйУчет.СтавкаНДС
      |         ИЛИ НЕ втДвиженияДокумента.Амортизируется = ПриобретенияНалоговыйУчет.Амортизируется)
      |ГДЕ
      |   ПриобретенияНалоговыйУчет.МоментВремени <= &МоментВремени";
    
    Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
    Запрос.УстановитьПараметр("МоментВремени", Новый МоментВремени(Источник.Дата, Источник.Ссылка));
    РезультатЗапроса = Запрос.Выполнить();
    
    Если НЕ РезультатЗапроса.Пустой() Тогда
       #Если ВнешнееСоединение Тогда
         Отказ = Истина;
       #Иначе
         Выборка = РезультатЗапроса.Выбрать();
         Пока Выборка.Следующий() Цикл
           Если НЕ Выборка.ТекДокСтавкаНДС = Выборка.СтавкаНДС Тогда
             Сообщить("Выбранная ставка НДС """ + Выборка.ТекДокСтавкаНДС + """ по договору """ + Выборка.ДоговорКонтрагента + """ не соответствует ставке по которая выбиралась раньше (было """ + Выборка.СтавкаНДС + """)");
           КонецЕсли;
           Если НЕ Выборка.ТекДокАмортизируется = Выборка.Амортизируется Тогда
             Сообщить("Выбранное значение """ + Выборка.ТекДокАмортизируется + """ для Поставка основных фондов по договору """ + Выборка.ДоговорКонтрагента + """ не соответствует той которая устанавливалась раньше(было """ + Выборка.Амортизируется + """)");
           КонецЕсли;     
         КонецЦикла;
       #КонецЕсли           
    КонецЕсли;
    
Похожие темы
  1. Akuji
    Ответов:
    13
    Просмотров:
    6.908
  2. Sergey-911
    Ответов:
    7
    Просмотров:
    4.496
  3. Pavel2009
    Ответов:
    6
    Просмотров:
    1.045
  4. НиколайН
    Ответов:
    2
    Просмотров:
    1.172
  5. Robix
    Ответов:
    4
    Просмотров:
    2.657
Загрузка...