Перейти к содержимому


Услуги программиста 1С
Профессиональные программисты 1С.
Весь комплекс услуг сопровождения 1С.

Курсы 1С
Бухгалтерам, менеджерам
и программистам.
Бесплатно!
Живое индивидуальное обучение по 1С.

Запрос по строкам расходной накладной


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1   vadim007

vadim007

      Подполковник

    • Пользователи
    • PipPipPipPipPip
    • Сообщений: 146
    • Регистрация: 14-October 09
    • Откуда:Донецк, Украина

Отправлено 27 February 2011 - 21:54

В РН присутствуют одинаковые ТМЦ. Следующий запрос выводит последний ТМЦ в РН:
ТекстЗапр = ТекстЗапр+"
|ОбрабатыватьДокументы Проведенные;
|Док = Документ.РасходнаяНакладная.ТекущийДокумент;
|Контр = Документ.РасходнаяНакладная.Контрагент;
|ТМЦ = Документ.РасходнаяНакладная.ТМЦ;
|Кво = Документ.РасходнаяНакладная.Кво;
|СуммаБезНДС = Документ.РасходнаяНакладная.СуммаБезНДС;
|СтрДок = Документ.РасходнаяНакладная.НомерСтроки;
|Функция Колво = Сумма(Кво);
|Функция Сумма = Сумма(СуммаБезНДС);
|Группировка Контр Без групп;
|Группировка ТМЦ Без групп;

Как получить ВСЕ ТМЦ?

  • 0

#2   5_kopeek

5_kopeek

      Генерал-лейтенант

    • Пользователи
    • PipPipPipPipPipPipPipPip
    • Сообщений: 608
    • Регистрация: 31-January 11
    • Откуда:Украина

Отправлено 27 February 2011 - 23:21

В запросе ошибок не вижу. Смущает строка
|СтрДок = Документ.РасходнаяНакладная.НомерСтроки;
Как Вы выбираете нужные результаты запроса?
  • 0

Услуги программиста 1С


#3   vadim007

vadim007

      Подполковник

    • Пользователи
    • PipPipPipPipPip
    • Сообщений: 146
    • Регистрация: 14-October 09
    • Откуда:Донецк, Украина

Отправлено 28 February 2011 - 06:45

Стандартным способом:

Пока Запр.Группировка("Контр")=1 Цикл
...
Пока Запр.Группировка("ТМЦ")=1 Цикл

В тексте запроса я упустил, для простоты, условие отбора ТМЦ. Так вот, в нескольких РН имеется по два одинаковых ТМЦ, но из разных партий. Если эти ТМЦ указать в диалоге как критерий отбора, то в отладчике явно видно, что внутреннй цикл проходится всего один раз.
А СтрДок - это просто получение номера строки РН, в которой находится выбранный ТМЦ. Она используется для получения цен отобранной в запросе ТМЦ:
ТекРН = Запр.Док.ТекущийДокумент();
ТекРН.ПолучитьСтрокуПоНомеру(Запр.СтрДок);
...
ЦінаПродажу = ТекРН.ЦенаБезНДС;
Хотя эта цена "добывается" и в самом запросе. Думаю, это лишнее - уберу.

  • 0

#4   pas_kiev

pas_kiev

      Рядовой

    • Пользователи
    • Сообщений: 2
    • Регистрация: 08-April 09
    • Откуда:Киев , Киев , Украина

Отправлено 28 February 2011 - 09:01

укажите в запросе еще группировку по партиям
|Партия = Документ.РасходнаяНакладная.Партия;
...
|Группировка Партия;
  • 0

#5   5_kopeek

5_kopeek

      Генерал-лейтенант

    • Пользователи
    • PipPipPipPipPipPipPipPip
    • Сообщений: 608
    • Регистрация: 31-January 11
    • Откуда:Украина

Отправлено 28 February 2011 - 09:02

Не совсем понимаю, в чем проблема. Вы хотите, чтобы 2 одинаковых товара из одной РН, но по разным партиям (или по разным ценам?), выводились 2 строками в отчете? Если Вы создаете группировку по товару, то естественно, что товары будут группироваться (т.е. один и тот же товар из разных строк, как и из разных РН, сгруппируется в одну позицию). Если я задачу поняла правильно, тогда добавьте еще группировку по партии (или цене).
По поводу запроса. Если что-то можно "добыть" в самом запросе, это лучше там и делать -- работать будет быстрее. Есть, конечно, нюансы, но, как правило, лучше пользоваться запросом.
  • 0

Услуги программиста 1С


#6   vadim007

vadim007

      Подполковник

    • Пользователи
    • PipPipPipPipPip
    • Сообщений: 146
    • Регистрация: 14-October 09
    • Откуда:Донецк, Украина

Отправлено 28 February 2011 - 09:21

В общем, понятно, что так просто выбрать ВСЕ строки документа в запросе 1С не получится - это же не SQL.
Тогда придется в запросе оставить только выборку документов, а строки документов выбирать отдельно.
Но... в таком случае не имеет смысла и запрос по документам.
  • 0

#7   5_kopeek

5_kopeek

      Генерал-лейтенант

    • Пользователи
    • PipPipPipPipPipPipPipPip
    • Сообщений: 608
    • Регистрация: 31-January 11
    • Откуда:Украина

Отправлено 28 February 2011 - 09:28

Опять не совсем понимаю, поэтому отвечу, может, и невпопад. Есть стандартная группировка
|Группировка СтрокаДокумента;
, если так необходимо добраться до строки документа, хотя все указанные Вами данные извлекаются из запроса и так.
  • 0

Услуги программиста 1С


#8   vadim007

vadim007

      Подполковник

    • Пользователи
    • PipPipPipPipPip
    • Сообщений: 146
    • Регистрация: 14-October 09
    • Откуда:Донецк, Украина

Отправлено 28 February 2011 - 12:18

Попробую использовать "Группировка СтрокаДокумента". Хотя искусственные ограничения 1С начинают уже раздражать: почему выборку в запросе можно делать только через "Группировка ...", а ежели Группировка - то происходит сворачивание (группирование) по одинаковым наименованиям. Здесь предлагали: использовать дополнительно группировку по партиям, по ценам. Зачем плодить лишние сущности? Лучше как можно проще: перебрать документы нужного вида, и их строки. И быстрее будет, чем в запросе...
  • 0

#9   ivisor

ivisor

      Генералиссимус

    • Пользователи
    • PipPipPipPipPipPipPipPipPipPip
    • Сообщений: 1438
    • Регистрация: 06-March 08
    • Откуда:Планета Земля

Отправлено 28 February 2011 - 22:09

vadim007, как раз не быстрее, но можете перебрать - что вам мешает?
Quote
Док = СоздатьОбъект("Документ.РасходнаяНакладная");
Док.ВыбратьДокументы(ДатаНач,ДатаКон);
Пока Док.ПолучитьДокумент()=1 Цикл
.... и т.д.

  • 0

#10   Golub____Ka

Golub____Ka

      Лейтенант

    • Пользователи
    • PipPip
    • Сообщений: 72
    • Регистрация: 18-November 09
    • Откуда:Ужгород , Закарпатская Область , Украина

Отправлено 01 March 2011 - 15:19

скористайтеся конструктором

спочатку зробіть групіровку по ТМЦ а потім по пертіям..

  • 0



Похожие темы

  Название темы Автор Статистика Последнее сообщение



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных