Имя: Пароль:
1C
1С v8
вопрос по запросу
0 gosn1ck
 
15.05.12
11:39
надо найти документы РТиУ в которых номенклатура принадлежит одной и групп.
а именно надо найти РТиУ в которых есть хотя бы 1 позиция из группы "ручки" и хотя бы 1 позиция из группы "карандаши", причем если есть только ручки или только карандаши то эти документы не должны попадать в отчет.
а еще сложность в том, что количество групп выбирается пользователем от 1го до 5ти.
у кого есть какие-нибудь соображения?
1 mikecool
 
15.05.12
11:41
надо писать запрос!
2 mikecool
 
15.05.12
11:41
напишу за 500р
3 gosn1ck
 
15.05.12
11:43
блин, клоунада понеслались раньше чем обычно
4 mikecool
 
15.05.12
11:47
ну раз ты все разгадал - я удаляюсь
5 Азазелло
 
15.05.12
11:50
По количеству выбранных пользователем групп прилепить к основной таблице документа левые джойны таблицы номенклатуры документа с условием что-то типа
<Имя_ОсновнойТаблицы>.Ссылка = <Имя_Таблицы_Номенклатуры_i>.Ссылка
И <Имя_Таблицы_Номенклатуры_i>.Номенклатура В ИЕРАРХИИ(&ВыбраннаяГруппа_i)

а дальле проверять на NULL Имя_Таблицы_Номенклатуры_i.Ссылка
6 Жан Пердежон
 
15.05.12
11:50
(0) а что ты уже сам сделал для решения этой неимоверно сложной задачи?
7 echo77
 
15.05.12
11:50
Запрос в цикле по каждой из групп? Это неправильно, но работать будет
8 gosn1ck
 
15.05.12
11:52
(6) я сделал вот так
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ТоварыЧека.Ссылка КАК Чек,
   ТоварыЧека.Продавец,
   ТоварыЧека.Ссылка.Магазин КАК Салон,
   СУММА(ТоварыЧека.Количество) КАК КоличествоПервойГруппы
ПОМЕСТИТЬ ЧекиСПервойГруппой
ИЗ
   Документ.ЧекККМ.Товары КАК ТоварыЧека
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК НоменГруппа1
       ПО ТоварыЧека.Номенклатура = НоменГруппа1.Ссылка
ГДЕ
   ТоварыЧека.Ссылка.Проведен
   И ТоварыЧека.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
   И НоменГруппа1.НоменклатурнаяГруппа = &НоменклатурнаяГруппаПервая

СГРУППИРОВАТЬ ПО
   ТоварыЧека.Ссылка,
   ТоварыЧека.Продавец,
   ТоварыЧека.Ссылка.Магазин
;

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

СГРУППИРОВАТЬ ПО
   ТоварыЧека.Ссылка,
   ТоварыЧека.Продавец,
   ТоварыЧека.Ссылка.Магазин
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ЧекиСоВторойГруппой.Чек КАК КоличествоЧеков,
   ЧекиСоВторойГруппой.Продавец,
   ЧекиСоВторойГруппой.Салон
ИЗ
   ЧекиСоВторойГруппой КАК ЧекиСоВторойГруппой
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЧекиСПервойГруппой КАК ЧекиСПервойГруппой
       ПО ЧекиСоВторойГруппой.Чек = ЧекиСПервойГруппой.Чек


но оказалось что групп может быть несколько
9 mikecool
 
15.05.12
11:56
а меня еще клоуном называл, двоечник
10 gosn1ck
 
15.05.12
11:58
(5) сказано, что если в документе есть только "карандаши" то этот док выводить не нужно.
(9) прости, готов выслушать твоё решение задачи
11 mikecool
 
15.05.12
11:58
+9 открой для себя В ИЕРАРХИИ и параметр - список значений к примеру
12 mikecool
 
15.05.12
11:59
+11 или просто В (&Список)
13 gosn1ck
 
15.05.12
11:59
(11) если я в списке укажу 2 группы, то в результат получу док в котором может быть только 1 номенклатура из 1ой группы, а мне надо только из 2х, 3х и т.д.
14 mikecool
 
15.05.12
12:03
(13) построитель отчета или скд + их параметры тогда в руки
15 mikecool
 
15.05.12
12:03
иначе - собирать текст запроса динамически
16 gosn1ck
 
15.05.12
12:06
(14) у меня скд. какие параметры брать в руки?
17 Азазелло
 
15.05.12
12:07
(10) сказано, а дальле проверять на NULL Имя_Таблицы_Номенклатуры_i.Ссылка и в зависимости от результата включать/исключать строки из результата запроса. делается с помощью ГДЕ
18 mikecool
 
15.05.12
12:08
а теперь я подумал - а ведь запрос динамически придется собирать )
ибо даже построитель будет сравнивать со всем списком ))
19 gosn1ck
 
15.05.12
12:14
(17) если ты про это
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ТоварыЧека.Ссылка КАК Чек,
   ТоварыЧека.Продавец,
   ТоварыЧека.Ссылка.Магазин КАК Салон
ИЗ
   Документ.ЧекККМ.Товары КАК ТоварыЧека
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК НоменГруппа1
       ПО ТоварыЧека.Номенклатура = НоменГруппа1.Ссылка
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК НоменГруппа2
       ПО ТоварыЧека.Номенклатура = НоменГруппа2.Ссылка

ГДЕ
   ТоварыЧека.Ссылка.Проведен
   И ТоварыЧека.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
   И НоменГруппа1.НоменклатурнаяГруппа = &НоменклатурнаяГруппаПервая
   И НоменГруппа2.НоменклатурнаяГруппа = &НоменклатурнаяГруппаВторая
то результат будет пустой.
если условие делать ИЛИ по группам, то опять попадёт не то что нужно (только карандаши из требуемых карандаши+ручки)
20 gosn1ck
 
15.05.12
12:19
(18) как димамически?
21 mikecool
 
15.05.12
12:21
(20) пока чтото там
      текстзапроса = текстзапроса + "что то здесь"
22 mikecool
 
15.05.12
12:22
потому как надо получить типа
выбрать поместить НГ1 из номенклатура где НГ = ПараметрНГ1;
...
выбрать из документы внутреннее соединение НГ1  по
...
23 gosn1ck
 
15.05.12
12:31
(22) держи пятихатку
24 gosn1ck
 
15.05.12
15:27
сделал вот так
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   НоменклатурныеГруппы.Ссылка КАК Группа
ПОМЕСТИТЬ Группы
ИЗ
   Справочник.НоменклатурныеГруппы КАК НоменклатурныеГруппы
ГДЕ
   НоменклатурныеГруппы.Ссылка В(&СписокГрупп)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Группы.Группа) КАК Количество
ПОМЕСТИТЬ КоличествоГрупп
ИЗ
   Группы КАК Группы
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   Чеки.Ссылка,
   Группы.Группа
ПОМЕСТИТЬ ЧекиСГруппой
ИЗ
   Документ.ЧекККМ.Товары КАК Чеки
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Группы КАК Группы
       ПО Чеки.Номенклатура.НоменклатурнаяГруппа = Группы.Группа
ГДЕ
   Чеки.Ссылка.Проведен
   И Чеки.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон

СГРУППИРОВАТЬ ПО
   Группы.Группа,
   Чеки.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ЧекиСГруппой.Ссылка КАК Чек
ИЗ
   ЧекиСГруппой КАК ЧекиСГруппой
       ЛЕВОЕ СОЕДИНЕНИЕ КоличествоГрупп КАК КоличествоГрупп
       ПО (ИСТИНА)

СГРУППИРОВАТЬ ПО
   ЧекиСГруппой.Ссылка,
   КоличествоГрупп.Количество

ИМЕЮЩИЕ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекиСГруппой.Группа) = КоличествоГрупп.Количество
вроде работает