Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 окт 2024, 13:29

Получение данных в запросе на основании реквизита "основание" в регистре накопления

Автор Sasha1C, 06 мар 2023, 14:16

0 Пользователей и 1 гость просматривают эту тему.

Sasha1C

Добрый день, я начинающий программист 1С столкнулся с проблемой составления верного запроса для получения данных из регистра накопления. Задача состоит в том, что создается документ "Счет" и его данные записываются в регистр накопления, и на основании документа "Счет" создается документ "Продажа товаров",и мы должны получить количество из документа "Продажа товаров" и количество записанное в регистре накопления на основании документа "Счет"(С последним возникли сложности).   

Запрос = Новый Запрос;
   
    Запрос.Текст ="ВЫБРАТЬ
    |    Счет.Ссылка КАК Ссылка
    |ИЗ
    |    Документ.Счет КАК Счет" ;
   
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
   

Запрос.Текст = "ВЫБРАТЬ
                   |    ПродажаТоваровТовары.Номенклатура КАК Номенклатура,
                   |    ПродажаТоваровТовары.Количество КАК Количество
                   |ПОМЕСТИТЬ ТаблицаДокумента
                   |ИЗ
                   |    Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ТаблицаДокумента.Номенклатура КАК Номенклатура,
                   |    ЕСТЬNULL(ТаблицаДокумента.Количество, 0) КАК Количество,
                   |    ЕСТЬNULL(РезервыНоменклатурыОстатки.РезервОстаток, 0) КАК Резерв
                   |ИЗ
                   |    РегистрНакопления.РезервыНоменклатуры.Остатки(
                   |            &МоментДокумента,
                   |            Номенклатура В
                   |                (ВЫБРАТЬ
                   |                    ТаблицаДокумента.Номенклатура КАК Номенклатура
                   |                ИЗ
                   |                    ТаблицаДокумента КАК ТаблицаДокумента)) КАК РезервыНоменклатурыОстатки
                   |        ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаДокумента КАК ТаблицаДокумента
                   |        ПО РезервыНоменклатурыОстатки.Номенклатура = ТаблицаДокумента.Номенклатура";

    //Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    //Запрос.Текст = "ВЫБРАТЬ
    //               |    ПродажаТоваровТовары.Номенклатура КАК Номенклатура,
    //               |    ПродажаТоваровТовары.Количество КАК Количество
    //               |ПОМЕСТИТЬ ТаблицаДокумента
    //               |ИЗ
    //               |    Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
    //               |;
    //               |
    //               |////////////////////////////////////////////////////////////////////////////////
    //               |ВЫБРАТЬ
    //               |    ТаблицаДокумента.Номенклатура КАК Номенклатура,
    //               |    ЕСТЬNULL(ТаблицаДокумента.Количество, 0) КАК Количество,
    //               |    ЕСТЬNULL(РезервыНоменклатурыОстатки.РезервОстаток, 0) КАК Резерв
    //               |ИЗ
    //               |    РегистрНакопления.РезервыНоменклатуры.Остатки(
    //               |            &МоментДокумента,
    //               |            Основание = &Основание
    //               |                И Номенклатура В
    //               |                    (ВЫБРАТЬ
    //               |                        ТаблицаДокумента.Номенклатура КАК Номенклатура
    //               |                    ИЗ
    //               |                        ТаблицаДокумента КАК ТаблицаДокумента)) КАК РезервыНоменклатурыОстатки
    //               |        ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаДокумента КАК ТаблицаДокумента
    //               |        ПО РезервыНоменклатурыОстатки.Номенклатура = ТаблицаДокумента.Номенклатура";
    //
    //Запрос.УстановитьПараметр("МоментДокумента", ДокументСсылка.МоментВремени());
    //Запрос.УстановитьПараметр("Основание",Ссылка);   
    //


И запрос в идеале должен вытянуть количество, зарезервированное в регистре накопления на основании конкретного документа "Счет". В последние запросы моя попытка реализовать данный функционал. Заранее благодарен   

Afinogen

ну если у вас документ Счет - регистратор  в этом регистре то  вам достаточно  сделать левое соединение по регистратор  либо в запросе
передать как параметр
ГДЕ  РегистрНакопления.РезервыНоменклатуры.Регистратор = &Ссылка
Ссылка - ссылка на ваш документ
Но этот путь "плохой", во всех типовых  в таком случае кроме регистратора у регистра есть  еще измерение с типом ДокументСсылка (В  вашем случае это документ Счет)

структура регистра должна быть такой

Регистратор - док.  счет, который плюсует регистр,  документ который минусует регистр

Измерение
1. ДокументДвжения - счет
...
N

Тогда при проведении Счета у вас будет делаться запись Регистратор = Счет,  Измерение счет = Счет, а при списании из регистра : Регистратор - документ списания, Измерение счет - документ счет

Это позволит вам получать остатки в разрезе документа счет  B)

Теги: запросы 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск