Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
07 июн 2025, 07:31

На форму документа выводятся все строки результата запроса, а нужно выводить только одну, соответств

Автор MarinaTroshina, 08 апр 2025, 14:50

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

MarinaTroshina

Здравствуйте! Я начинающий программист и еще плаваю в запросах.
Получила следующее задание: при печати Транспортной накладной, в соответсвующую ячейку должны выводиться реквизиты счет-фактуры. Имеется документ РеализацияТоваровУслуг, на основании которого создается ТранспортнаяНакладная и Счет-фактураВыданный. То есть, как я ранее сказала, нужно реквизиты подчиненной счет-фактуры вывести на печатную форму подчиненной транспортной накладной. В результат запроса попадают нужные счет-фактуры (их 5 штук всего, потому что 5 документов реализации). Но и на форму транспортной накладной попадают все 5, хотя должна только одна.
Подскажите, пожалуйста, может быть, можно как-то сделать отбор только по той транспортной накладной, которую я собираюсь печатать? Или есть другой способ?


Функция ЗапросДокументаОснования(РезультатЗапросаДО);

ВЫБРАТЬ
СчетФактураВыданный.Ссылка КАК Ссылка
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ. СчетФактураВыданный КАК СчетФактураВыданный
    ПО (РеализацияТоваровУслуг.Ссылка = СчетФактураВыданный.ДокументОснование),
Документ.ТранспортнаяНакладная КАК ТранспортнаяНакладная
ГДЕ
РеализацияТоваровУслуг.Ссылка = СчетФактураВыданный.ДокументОснование.Ссылка
    И РеализацияТоваровУслуг.Ссылка = ТранспортнаяНакладная.ДокументыОснования.ДокументОснование.Ссылка
    И ТранспортнаяНакладная.ДокументыОснования.ДокументОснование.Ссылка = СчетФактураВыданный.ДокументОснование.Ссылка

РезультатЗапроса = Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Массив = Новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      РезультатЗапросаДО = ВыборкаДетальныеЗаписи.Ссылка;
      Массив.Добавить(РезультатЗапросаДО);
КонецЦикла;

СписокЗначений = Новый СписокЗначений;
СписокЗначений.ЗагрузитьЗначения(Массив);

Возврат СписокЗначений

КонецФункции



Еще я пробовала без Массива, списка значений, но у меня попадало только одно и то же значение, которое для остальных 4 транспортных накладных является неверным

Максим75

MarinaTroshina, так Вы прямо получайте нужную Вам счет-фактуру для нужной Транспортной накладной. т.е. выбираете транспортную накладную нужную Вам (по нужной ссылке) и связываете ее со счетом-фактурой по документу-основанию (посмотрите как в конфигурации эти реквизиты называются в одном и другом документе).

MarinaTroshina

Максим75, у меня в запросе есть условие, что основание накладной должно быть равно основанию счет-фактуры :   
И ТранспортнаяНакладная.ДокументыОснования.ДокументОснование.Ссылка = СчетФактураВыданный.ДокументОснование.Ссылка

Чтобы связать транспортную накладную со счет-фактурой нужно еще что-то помимо данного условия?

antoneus

Да, нужно условие на равенство ссылки ТН конкретной ссылке, которую нужно передать в запрос параметром.

MarinaTroshina

antoneus, я, если честно, не совсем понимаю, что для этого нужно сделать. Не могли бы вы поподробнее объяснить, пожалуйста?

antoneus

В целом - почитать книжки про реляционные БД и запросы)
А здесь - ваш запрос выгребает из базы все счета-фактуры, потому что не чувствует себя ни в чем ограниченным, т.к. в секции ГДЕ вы особо условий ему не ставите. Объяснять ему что с чем соединяется надо в условиях соединения, а в секции ГДЕ объяснять - какие именно документы мы хотим видеть. Например:

Функция СчетФактура(СсылкаНаТН)

Запрос.Текст = "ВЫБРАТЬ
СчетФактураВыданный.Ссылка КАК Ссылка
ИЗ
Документ.СчетФактураВыданный КАК СчетФактураВыданный
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ПО СчетФактураВыданный.ДокументОснование = РеализацияТоваровУслуг.Ссылка
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТранспортнаяНакладная.ДокументыОснования КАК ТранспортнаяНакладнаяДокументыОснования
    ПО РеализацияТоваровУслуг.Ссылка = ТранспортнаяНакладнаяДокументыОснования.ДокументОснование
ГДЕ
    ТранспортнаяНакладнаяДокументыОснования.Ссылка = &Ссылка"

Запрос.УстановитьПараметр("Ссылка", СсылкаНаТН);

ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Цикл
      Возврат ВыборкаДетальныеЗаписи.Ссылка;     
КонецЦикла;

КонецФункции

И в эту функцию передаете ссылку на свою транспортную накладную.

MarinaTroshina


Теги: Запрос 

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

Рейтинг@Mail.ru

Поиск