Вопрос - вторую неделю ломаю голову как правильно упорядочить данные на дереве
если в табличной части номенклатура разная - то все работает корректно
если появляются дубли то начинаются танцы с бубном
поставил выбор различные - помогло
но теперь с сортировка ерунда какая-то
пробовал через номер строки регистратора
как выличеть не пойму
ВЫБРАТЬ
Спецификация.Регистратор,
Спецификация.Номенклатура,
Спецификация.Проект,
Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
МИНИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
ПОМЕСТИТЬ тСпецификация
ИЗ
РегистрНакопления.Спецификация КАК Спецификация
СГРУППИРОВАТЬ ПО
Спецификация.Регистратор,
Спецификация.Номенклатура,
Спецификация.Проект,
Спецификация.ЗаявкаНаКомплектацию
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
тСпецПлюсКол.Регистратор КАК Регистратор,
тСпецПлюсКол.Номенклатура,
тСпецПлюсКол.Проект,
тСпецПлюсКол.Проект КАК Группировка,
тСпецПлюсКол.ДокументЗаявки,
тСпецПлюсКол.НомерСтроки КАК НомерСтроки,
СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0)) КАК ОстатокЗаявки,
СУММА(ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0)) КАК Оплата,
СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0)) КАК поступление,
СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток,
СУММА(ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)) КАК Резерв
ИЗ
тСпецификация КАК тСпецПлюсКол
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки КАК СпецификацияОстатки
ПО тСпецПлюсКол.Номенклатура = СпецификацияОстатки.Номенклатура
И тСпецПлюсКол.Регистратор = СпецификацияОстатки.ЗаявкаНаКомплектацию
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ПО тСпецПлюсКол.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
ПО тСпецПлюсКол.Регистратор = РезервированиеТоваровТовары.Ссылка
И тСпецПлюсКол.Номенклатура = РезервированиеТоваровТовары.Номенклатура
СГРУППИРОВАТЬ ПО
тСпецПлюсКол.Регистратор,
тСпецПлюсКол.Номенклатура,
тСпецПлюсКол.Проект,
тСпецПлюсКол.ДокументЗаявки,
тСпецПлюсКол.НомерСтроки,
тСпецПлюсКол.Проект
УПОРЯДОЧИТЬ ПО
Регистратор,
НомерСтроки
ИТОГИ ПО
Группировка ИЕРАРХИЯ
в табличной части номенклатура разная - то все работает корректно
если появляются дубли то начинаются танцы с бубном
поставил выбор различные - помогло
но теперь с сортировка ерунда какая-то
пробовал через номер строки регистратора
как выличеть не пойму
что -то понять не могу вопроса. Сортировка должна отрабатывать пусть тис дублей
Теперь я не понимаю "Сортировка должна отрабатывать пусть тис дублей "
Мне дубли как раз таки убрать надо - свернуть по номенклатуре
что-бы количество сложилось
а в этом случае порядок строк меняется - вот и раздумываю что делать
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
| Спецификация.Регистратор,
| Спецификация.Номенклатура КАК Номенклатура,
| Спецификация.Проект КАК Проект,
| Спецификация.Проект КАК Группировка,
| Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
| ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0) КАК ОстатокЗаявки,
| ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0) КАК Оплата,
| ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0) КАК поступление,
| ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0) КАК Резерв
|ИЗ
| РегистрНакопления.Спецификация КАК Спецификация
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
| ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
| ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
| И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
| ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
| И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка";
Показать
вот так худо бедно работает
но стоит добавить
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
| Спецификация.Регистратор,
| Спецификация.Номенклатура КАК Номенклатура,
| Спецификация.Проект КАК Проект,
| Спецификация.Проект КАК Группировка,
| Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
| ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0) КАК ОстатокЗаявки,
| ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0) КАК Оплата,
| ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0) КАК поступление,
| ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0) КАК Резерв,
| Спецификация.НомерСтроки КАК НомерСтроки ( вот эту строку - начинаются дубли)
|ИЗ
| РегистрНакопления.Спецификация КАК Спецификация
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
| ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
| ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
| И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
| ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
| И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка ";
(3) Насколько я понял, вам необходимо сгруппировать данные по номенклатуре.
"ВЫБРАТЬ
| СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток,
| Спецификация.Регистратор,
| Спецификация.Номенклатура КАК Номенклатура,
| Спецификация.Проект КАК Проект,
| Спецификация.Проект КАК Группировка,
| Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
| СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0)) КАК ОстатокЗаявки,
| СУММА(ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0)) КАК Оплата,
| СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0)) КАК поступление,
| СУММА(ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)) КАК Резерв
|ИЗ
| РегистрНакопления.Спецификация КАК Спецификация
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
| ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
| ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
| И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
| ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
| И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка
| Сгруппировать по
| Спецификация.Регистратор,
| Спецификация.Номенклатура КАК Номенклатура,
| Спецификация.Проект КАК Проект,
| Спецификация.Проект КАК Группировка,
| Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки
";
Непонятно что должно быть упорядочено. В коде нет намеков на сортировку.
PS. Код плох. Пробуйте приводить получение данных к единому запросу, ну или конечной последовательности запросов.
Вам может пригодится конструкция вида:
ГДЕ
&НеОтбиратьПоПроекту
ИЛИ Спецификация.Проект = &Проект
Запрос.УстановитьПараметр("НеОтбиратьПоПроекту", Не ОтбиратьПоПроекту);
Проблема возникает в следующем появляются дубли это как бы бог с ними они и должны появлятся - другой вопрос что количество расползается
те
лампа - 2
лампа -2
в заявке
на форме
лампа 4
лампа 4
вот и ломаю голову
с условиями то как нибудь добью
меня сейчас больше всего тревожат данные
(11) Различные проблему решило но при этом нумерация вся "перекорежилась" вот и думаю как ее выправить
либо дополнительное поле вводить чтобы хранить номер строки заявки - дурдом а что делать иначе выборку правильно не сделать
(12) В данном случае код писал не я - я только дописывал - и тестировал
наткнулся на данную проблему - думаю как правильнее решить
или по каждой строке отслеживать или же все таки группировать
Сам отчет лучше всего сделать на СКД, вместо кучи проверок заключите свои проверки в {} чтобы отсутствующие проверки не вызывали ошибку и не обрабатывались
Ладно попытаюсь - мне нужно сохранить порядок записей как в заявке, заказе
чтобы была читаемость
а то в документе одно а на форме черте что
сортировка нужна по номеру строки
но если я добавляю номер строки в запросе
появляются дубли
(17) Нумерация строк что в 1С, что в SQL - слишком изощренное действие, замедляющее скорость запроса. Считаю, что если результат запроса выводится в печатную форму, то проще добавить в цикл банальный
(18) Для нумерации строк таблицы можно также в её запросе использовать встроенную функцию АВТОНОМЕРЗАПИСИ(), которая доступна с версии платформы 8.3.13.
(19) Ваше задвоение данных - это неустранимая особенность левого соединения в запросах: когда в соединяемой таблице есть дубли ключевых полей, то задваиваются и строки основной таблицы. По хорошему Вам надо переделывать запрос, а глядя на качество кода, делать это с нуля - заново заказать его у нормальных спецов.
ВЫБРАТЬ
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
Спецификация.Регистратор,
Спецификация.Номенклатура КАК Номенклатура,
Спецификация.Проект КАК Проект,
Спецификация.Проект КАК Группировка,
Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0) КАК ОстатокЗаявки,
ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0) КАК Оплата,
ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0) КАК поступление,
ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0) КАК Резерв,
МАКСИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
ИЗ
РегистрНакопления.Спецификация КАК Спецификация
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, ) КАК ТоварыНаСкладахОстатки
ПО Спецификация.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, ) КАК СпецификацияОстатки
ПО (СпецификацияОстатки.Номенклатура = Спецификация.Номенклатура)
И Спецификация.Регистратор.Ссылка = СпецификацияОстатки.ЗаявкаНаКомплектацию.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
ПО Спецификация.Номенклатура = РезервированиеТоваровТовары.Номенклатура
И Спецификация.Регистратор = РезервированиеТоваровТовары.Ссылка
Сгруппировать по
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
Спецификация.Регистратор,
Спецификация.Номенклатура,
Спецификация.Проект,
Спецификация.Проект,
Спецификация.ЗаявкаНаКомплектацию,
ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0),
ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0),
ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0),
ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)
Показать
Агрегатную функцию МАКСИМУМ или МИНИМУМ выбери по своему усмотрению.
Не знаю специфики ваших метаданных, поэтому за верность итоговых чисел в отчете не могу ручиться.
к сожалению "костыль" не подошел у меня дерево и когда я прописываю
МАКСИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
начинает ругаться
ТФ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
УПОРЯДОЧИТЬ ПО
Регистратор,
НомерСтроки
ИТОГИ ПО
Группировка ИЕРАРХИЯ
НО! я смотрю на запрос, и меня терзают смутные сомнения, что метаданные вами понимаются правильно. Что накапливает регистр Спецификация ? Почему же запрос пробегает весь регистр? Может нужно отбирать некую табличную часть документов ЗаявкаНаКомплектацию? Или все же требуется выводить только не "закрытые" спецификации?
ВЫБРАТЬ
Спецификация.Регистратор,
Спецификация.Номенклатура,
Спецификация.Проект,
Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
МИНИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
ПОМЕСТИТЬ тСпецификация
ИЗ
РегистрНакопления.Спецификация КАК Спецификация
СГРУППИРОВАТЬ ПО
Спецификация.Регистратор,
Спецификация.Номенклатура,
Спецификация.Проект,
Спецификация.ЗаявкаНаКомплектацию
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
тСпецПлюсКол.Регистратор КАК Регистратор,
тСпецПлюсКол.Номенклатура,
тСпецПлюсКол.Проект,
тСпецПлюсКол.Проект КАК Группировка,
тСпецПлюсКол.ДокументЗаявки,
тСпецПлюсКол.НомерСтроки КАК НомерСтроки,
СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0)) КАК ОстатокЗаявки,
СУММА(ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0)) КАК Оплата,
СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0)) КАК поступление,
СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток,
СУММА(ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)) КАК Резерв
ИЗ
тСпецификация КАК тСпецПлюсКол
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки КАК СпецификацияОстатки
ПО тСпецПлюсКол.Номенклатура = СпецификацияОстатки.Номенклатура
И тСпецПлюсКол.Регистратор = СпецификацияОстатки.ЗаявкаНаКомплектацию
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
ПО тСпецПлюсКол.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
ПО тСпецПлюсКол.Регистратор = РезервированиеТоваровТовары.Ссылка
И тСпецПлюсКол.Номенклатура = РезервированиеТоваровТовары.Номенклатура
СГРУППИРОВАТЬ ПО
тСпецПлюсКол.Регистратор,
тСпецПлюсКол.Номенклатура,
тСпецПлюсКол.Проект,
тСпецПлюсКол.ДокументЗаявки,
тСпецПлюсКол.НомерСтроки,
тСпецПлюсКол.Проект
УПОРЯДОЧИТЬ ПО
Регистратор,
НомерСтроки
ИТОГИ ПО
Группировка ИЕРАРХИЯ
Или даже так, заменив ваш самосборный текст запроса с условиями на построитель:
ВЫБРАТЬ
Спецификация.Регистратор,
Спецификация.Номенклатура,
Спецификация.Проект,
Спецификация.ЗаявкаНаКомплектацию КАК ДокументЗаявки,
МИНИМУМ(Спецификация.НомерСтроки) КАК НомерСтроки
ПОМЕСТИТЬ тСпецификация
ИЗ
РегистрНакопления.Спецификация КАК Спецификация
{ГДЕ
Спецификация.Номенклатура,
Спецификация.Проект,
Спецификация.Регистратор КАК Спецификация,
Спецификация.ЗаявкаНаКомплектацию,
Спецификация.Регистратор КАК Заказы}
СГРУППИРОВАТЬ ПО
Спецификация.Регистратор,
Спецификация.Номенклатура,
Спецификация.Проект,
Спецификация.ЗаявкаНаКомплектацию
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
тСпецПлюсКол.Регистратор КАК Регистратор,
тСпецПлюсКол.Номенклатура,
тСпецПлюсКол.Проект,
тСпецПлюсКол.Проект КАК Группировка,
тСпецПлюсКол.ДокументЗаявки,
тСпецПлюсКол.НомерСтроки КАК НомерСтроки,
СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоОстаток, 0)) КАК ОстатокЗаявки,
СУММА(ЕСТЬNULL(СпецификацияОстатки.СуммаКОплатеОстаток, 0)) КАК Оплата,
СУММА(ЕСТЬNULL(СпецификацияОстатки.КоличествоКПолучениюОстаток, 0)) КАК поступление,
СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток,
СУММА(ЕСТЬNULL(РезервированиеТоваровТовары.Количество, 0)) КАК Резерв
ИЗ
тСпецификация КАК тСпецПлюсКол
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(, {(Номенклатура) КАК Номенклатура}) КАК СпецификацияОстатки
ПО тСпецПлюсКол.Номенклатура = СпецификацияОстатки.Номенклатура
И тСпецПлюсКол.Регистратор = СпецификацияОстатки.ЗаявкаНаКомплектацию
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Номенклатура) КАК Номенклатура}) КАК ТоварыНаСкладахОстатки
ПО тСпецПлюсКол.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РезервированиеТоваров.Товары КАК РезервированиеТоваровТовары
ПО тСпецПлюсКол.Регистратор = РезервированиеТоваровТовары.Ссылка
И тСпецПлюсКол.Номенклатура = РезервированиеТоваровТовары.Номенклатура
СГРУППИРОВАТЬ ПО
тСпецПлюсКол.Регистратор,
тСпецПлюсКол.Номенклатура,
тСпецПлюсКол.Проект,
тСпецПлюсКол.ДокументЗаявки,
тСпецПлюсКол.НомерСтроки,
тСпецПлюсКол.Проект
УПОРЯДОЧИТЬ ПО
Регистратор,
НомерСтроки
ИТОГИ ПО
Группировка ИЕРАРХИЯ
(26) Не совсем понял - но догадываюсь что вроде как таким образом загоняются переменые
надо попробывать
(25) Буду тестировать - на первый взгляд вроде работает
думаю к понедельнику вторнику дать заключение
Попробую обьяснить - в данном случае это обработка для контроля заявок-спецификаций по договорам
те вводим заявку у нас на форме появляется проект номенклатура и заявка и количество
соответственно прописываем в регистр спецификация
на основании данных заявки формируем заказ поставщику
соответственно прописываем в регистр спецификация
прошел платеж
соответственно прописываем в регистр спецификация
приходуем
соответственно прописываем в регистр спецификация
авансовый отчет
соответственно прописываем в регистр спецификация
Получается картинка в режиме реального времени
Вы можете привести пример дерева как оно должно выглядеть исходя из вашей задачи? Такое количество запросов, запрос в цикле - конечно сложно анализировать, попробуйте собрать таблицу значений сначала, отсортируйте её как вам требуется и потом по ней заполните дерево.
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Спецификация.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| тСпецификация.Номенклатура
| ИЗ
| тСпецификация КАК тСпецификация) {(Номенклатура) КАК Номенклатура}) КАК СпецификацияОстатки
(37) Мда тогда по-моему еще 8.3.10 была. Но спецификация работала - пришли эффективные менеджеры и никому ничего не стало нужно.....
Пару крупных договоров на ней сделали и все.