Закодить небольшой алгоритм

1. robix 11.11.14 22:34 Сейчас в теме
Здравствуйте, помогите новичку обработать таблицу, которую возвращает запрос. Можно обработать как выборку или как выгрузку.
Либо вообще запросами решить задачу, не знаю как лучше.
Запрос дает следующее:

ПодчиненыйДокумент........ДатаДокумента.....ДокументОснование
РеализацияТоваровУслуг1......01.05.2104.............ЗаказКлиента1
ЗаказПоставщику1................02.05.2104.............ЗаказКлиента1
РеализацияТоваровУслуг2......13.06.2014.............ЗаказКлиента2
РеализацияТоваровУслуг2a.....13.06.2014.............ЗаказКлиента2
ЗаказПоставщику2................14.06.2014.............ЗаказКлиента2
РеализацияТоваровУслуг3......15.06.2014.............ЗаказКлиента2
РеализацияТоваровУслуг3а.....15.06.2014.............ЗаказКлиента2
ЗаказПоставщику3................16.06.2014.............ЗаказКлиента2
РеализацияТоваровУслуг4......17.06.2014.............ЗаказКлиента2

Т.е. типы подчиненных либо РеализацияТоваровУслуг, либо ЗаказПоставщику, а основание всегда ЗаказКлиента.
И так для всех заказов клиента отбирается. Цель - для каждого документа ЗаказКлиента в его структуре подчиненности
отобрать такие документы РеализацияТоваровУслуг, у которых дата меньше даты документа ЗаказПоставщику,
исключая из отбора такие реализации перед которыми более ранний документ в структуре подчиненности это ЗаказПоставщику. И все отобранные документы реализацийсо всех заказов клиентам поместить в таблицу значений.
Допустим в данном примере будет отобраны документы РеализацияТоваровУслуг2, РеализацияТоваровУслуг2а и РеализацияТоваровУслуг3а.
Если нетрудно, напишите код плиз.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. azmon 1 12.11.14 00:15 Сейчас в теме
ВЫБРАТЬ
	ВложенныйЗапрос.ПодчинДокумент КАК ПодчиненныйДокумент,
	ВложенныйЗапрос.Дата КАК ДатаДокумента,
	ЗаказКлиента.Ссылка КАК ДокументОснование
ИЗ
	Документ.ЗаказКлиента КАК ЗаказКлиента
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ВЫБОР
				КОГДА ЗаказПоставщику.Дата < РеализацияТоваровУслуг.Дата
					ТОГДА ЗаказПоставщику.Дата
				КОГДА ЗаказПоставщику.Дата > РеализацияТоваровУслуг.Дата
					ТОГДА РеализацияТоваровУслуг.Дата
			КОНЕЦ КАК Дата,
			ВЫБОР
				КОГДА ЗаказПоставщику.Дата < РеализацияТоваровУслуг.Дата
					ТОГДА ЗаказПоставщику.Ссылка
				КОГДА ЗаказПоставщику.Дата > РеализацияТоваровУслуг.Дата
					ТОГДА РеализацияТоваровУслуг.Ссылка
			КОНЕЦ КАК ПодчинДокумент,
			ВЫБОР
				КОГДА ЗаказПоставщику.Дата < РеализацияТоваровУслуг.Дата
					ТОГДА ЗаказПоставщику.ДокументОснование
				КОГДА ЗаказПоставщику.Дата > РеализацияТоваровУслуг.Дата
					ТОГДА РеализацияТоваровУслуг.Сделка
			КОНЕЦ КАК ДокОснование
		ИЗ
			Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
				ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
				ПО РеализацияТоваровУслуг.Сделка = ЗаказПоставщику.ДокументОснование) КАК ВложенныйЗапрос
		ПО ЗаказПокупателя.Ссылка = ВложенныйЗапрос.ДокОснование

УПОРЯДОЧИТЬ ПО
	ДатаДокумента
Показать
3. robix 12.11.14 12:45 Сейчас в теме
Благодарю вас за очень полезные для меня знания.
В УТ 11.1 весто сделки заказ клиента, в итоге ваш запрос такой:

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

УПОРЯДОЧИТЬ ПО
   ДатаДокумента
Показать полностью


Но все-таки всей логики запрос не учел.
Наример если структура подчиненности такая:
Заказ клиента 00ЦБ-000100 от 06.05.2014
_____Заказ поставщику 00ЦБ-000100 от 08.05.2014
_____Реализация товаров и услуг 00ЦБ-000100 14.05.2014
_____Заказ поставщику 00ЦБ-000101 от 16.05.2014

То эта реализаци попадает в отбор, хотя не должна, так как перед ней самый ранний документ в структуре подчиненности
есть заказ поставщику.

Может быть все-таки с помощью запроса не решить или не эффективно решать такую задачу, а нужно программировать выборку или выгрузку запроса?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот