8.х Эффективно отобрать из выгрузки/выборки данные

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

  1. TopicStarter Overlay
    Robix
    Offline

    Robix Опытный в 1С

    Регистрация:
    1 апр 2012
    Сообщения:
    107
    Симпатии:
    1
    Баллы:
    29
    Здравствуйте, у меня есть запрос который возвращает в консоле запросов таблицу,
    где главный документ всегда Заказ клиента, а подчиненные двух видов: либо Реализация товаров услуг,
    либо Заказ поставщику
    Конфигурация УТ 11.1 на 1С 8.3
    Вот пример:
    Подчиненный...................................................ДатаПодчиненного ......ГлавныйДокумент
    Реализация товаров и услуг 00ЦБ-001......03.12.2013 10:24:37........Заказ клиента 00ЦБ-001
    Заказ поставщику 00ЦБ-001......................... 22.11.2013 0:00:00......... Заказ клиента 00ЦБ-001


    Можете помочь с кодом, который обработает результат запроса через выборку или выгрузку по следующей логике?:
    В Рамках каждого Заказа клиенту нужно сделать следующее:
    Если упорядочить подчиненные заказу клиенту документы по дате, то нужно отобрать такие реализации товаров и услуг, позже которых встречается заказ поставщику. Но если ранее реализации самый ранний документ это заказ поставщику, то такие реализации не отбирать, даже если
    позже них где-то в структуре подчиненности встречается заказ поставщику.
    Последнее редактирование: 11 ноя 2014
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Навскидку:

    1. Добавить поле ТипЗначения Подчиненного документа. Во ВТ
    2 .Дальше выбрать из ВТ ТипЗначения, ГлавныйДокумент, минимум(ДатаПодчиненного) сгруппировать по ГлавныйДокумент, ТипЗначения поместить в новуюВТ
    3. Дальше выбрать ГлавныйДокумент, ТипЗначения, МинимумДаты из новаяВТ внутреннееСоединение КопияНовойВТ по ГлавныйДокумент = ГлавныйДокументИзКопии И ТипЗначения <> ТипЗначенияИзКопии И МинимумДаты < МинимумДатыИзКопии ГДЕ ТипЗначения = Тип(Документ.РеализацияТоваровУслуг)
    4. Дальше внутреннее соединение последней ВТ с первой по ГлавномуДокументу Где Подчиненный ссылка Документ.РеализацияТоваровУслуг
  3. TopicStarter Overlay
    Robix
    Offline

    Robix Опытный в 1С

    Регистрация:
    1 апр 2012
    Сообщения:
    107
    Симпатии:
    1
    Баллы:
    29
    Спасибо. Я сейчас более точно опишу ситуацию. Если это реально сделать запросом, можете мой запрос доработать.

    Код:
    ВЫБРАТЬ
        ВЫБОР
            КОГДА ЗаказПоставщику.Дата > РеализацияТоваровУслуг.Дата
                ТОГДА РеализацияТоваровУслуг.Ссылка
        КОНЕЦ КАК РеализацияТУ
    ИЗ
        Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
            ПО РеализацияТоваровУслуг.ЗаказКлиента = ЗаказПоставщику.ДокументОснование
    
    СГРУППИРОВАТЬ ПО
        ВЫБОР
            КОГДА ЗаказПоставщику.Дата > РеализацияТоваровУслуг.Дата
                ТОГДА РеализацияТоваровУслуг.Ссылка
        КОНЕЦ
    В УТ 11.1 этот запрос вернет такие реализации товаров и услуг, позже которых в структуре подчиненности заказа клиента встречается заказ проставщику.
    Но мне нужно исключить из отбора такие реализации , перед которыми в структуре подчиненности заказа клиента более ранний подряд идущий документ из таких типов документов как реализацияТУ или ЗаказПоставщику это ЗаказПоставщику .
    Т.е. если было:
    ЗаказПоставщику1 от 01.05.14
    РеализацияТУ1 02.05.14
    ЗаказПоставщику2 03.05.14, тогда РеализацияТУ1 не попадает в отбор, а если бы документа ЗаказПоставщику1 не было, то попала бы.
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Robix, у меня нет ни вашей конфигурации ни тем более ваших данных. Проверить мне не на чем.
    Вот вам пример, все что вам нужно сделать, это заменить первую ВТ (ВТ_исх которая) в запросе на ваши данные (ну и проверить так или нет).
    Код:
    ВЫБРАТЬ
        РеализацияТоваровУслуг.Ссылка КАК Подчиненный,
        РеализацияТоваровУслуг.Дата КАК ДатаПодчиненого,
        ЗаказПокупателя.Ссылка КАК Главный
    ПОМЕСТИТЬ ВТ_Исх
    ИЗ
        Документ.ЗаказПокупателя КАК ЗаказПокупателя
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            ПО (РеализацияТоваровУслуг.Сделка = ЗаказПокупателя.Ссылка)
    ГДЕ
        НЕ РеализацияТоваровУслуг.Ссылка ЕСТЬ NULL
        И ЗаказПокупателя.Организация = &Организация
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка,
        ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка.Дата,
        ЗаказПокупателя.Ссылка
    ИЗ
        Документ.ЗаказПокупателя КАК ЗаказПокупателя
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа
            ПО ЗаказПокупателя.Ссылка = ПлатежноеПоручениеВходящееРасшифровкаПлатежа.ДокументРасчетовСКонтрагентом.Сделка
    ГДЕ
        НЕ ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка ЕСТЬ NULL
        И ЗаказПокупателя.Организация = &Организация
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТ_Исх.Подчиненный,
        ВТ_Исх.ДатаПодчиненого,
        ВТ_Исх.Главный,
        ТИПЗНАЧЕНИЯ(ВТ_Исх.Подчиненный) КАК ТЗначения
    ПОМЕСТИТЬ ВТ1
    ИЗ
        ВТ_Исх КАК ВТ_Исх
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МИНИМУМ(ВТ1.ДатаПодчиненого) КАК ДатаПодчиненого,
        ВТ1.ТЗначения,
        ВТ1.Главный
    Поместить ВТ2   
    ИЗ
        ВТ1 КАК ВТ1
    
    СГРУППИРОВАТЬ ПО
        ВТ1.ТЗначения,
        ВТ1.Главный
       
    ;
       
    ВЫБРАТЬ
        ВТ2.ДатаПодчиненого,
        ВТ2.ТЗначения,
        ВТ2.Главный,
        ВТ2Копия.ДатаПодчиненого
    Поместить ВТ3
    ИЗ
        ВТ2 КАК ВТ2
        внутреннее соединение ВТ2 как ВТ2Копия
        По ВТ2.Главный = ВТ2Копия.Главный И ВТ2.ТЗначения <> ВТ2Копия.ТЗначения И ВТ2.ДатаПодчиненого < ВТ2Копия.ДатаПодчиненого
        ГДЕ ВТ2.ТЗначения = ТИП(Документ.РеализацияТоваровУслуг)
    ;
       
    ВЫБРАТЬ
        ВТ_Исх.Подчиненный,
        ВТ_Исх.ДатаПодчиненого,
        ВТ_Исх.Главный
    ИЗ
        ВТ_Исх КАК ВТ_Исх
        внутреннее соединение ВТ3 как ВТ3
        по   ВТ_Исх.Главный = ВТ3.Главный
    ГДЕ
        ВТ_Исх.Подчиненный ссылка Документ.РеализацияТоваровУслуг
    
  5. TopicStarter Overlay
    Robix
    Offline

    Robix Опытный в 1С

    Регистрация:
    1 апр 2012
    Сообщения:
    107
    Симпатии:
    1
    Баллы:
    29
    Большое спасибо. А вообще как по вашему мнению, эффективнее запросом делать это или языком программирования 1с в цикле обрабатывать ту таблицу, которую я в самом начале написал?
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    По возможности запросом. Если выйдет конечно.
    А так, на языке программирования может даже проще будет реализовать.

Поделиться этой страницей