Поиск по наименованию; вывод части слова
Здравствуйте! нуждаюсь в помощи... может кто подскажет как реализовать. у меня идет обход результата запроса по наименованию товара... мне необходимо, чтобы у меня был поиск по одинаковым начальным словам,затем в группировку "наименование товара" выводились одинаковые первые слова , а уже в таблицу заполнялось последующие. Например, покажу.
Наименование товара ---> мороженное шоколадное
Таблица -->|код|ндс|цена| наименование |количество|
| с орехами в ваф.стакан |
| с карамелью в рожке |
Вот что пыталась сделать, получается обрезается, все кроме первого слова....Но я понимаю,что надо реализовать это как-то иначе.
Помогите по
Наименование товара ---> мороженное шоколадное
Таблица -->|код|ндс|цена| наименование |количество|
| с орехами в ваф.стакан |
| с карамелью в рожке |
ВыборкаНаименование = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"НаименованиеТовара");
Пока ВыборкаНаименование.Следующий() Цикл
ОбработкаПрерыванияПользователя();
//Товар = ВыборкаНаименование.НаименованиеТовара;
НайтиНаименование = Найти(ВыборкаНаименование.НаименованиеТовара," ");
//ЧастьНаименования = СтрДлина(ВыборкаНаименование.НаименованиеТовара)-НайтиНаименование;
Наименование = Лев(ВыборкаНаименование.НаименованиеТовара,?(НайтиНаименование=0,СтрДлина(ВыборкаНаименование.НаименованиеТовара),НайтиНаименование-1));
//Лев(ВыборкаНаименование.НаименованиеТовара, ЧастьНаименования);
//Товар = СтрЗаменить(ВыборкаНаименование.НаименованиеТовара, "Наименование", "ВыборкаНаименование.НаименованиеТовара");
ОбластьТовар.Параметры.Товар = Наименование;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
ТабДокОснТаблица.Присоединить(ОбластьТовар,ВыборкаНаименование.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСтрока.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
ПоказатьВот что пыталась сделать, получается обрезается, все кроме первого слова....Но я понимаю,что надо реализовать это как-то иначе.
Помогите по
По теме из базы знаний
- Быстрый поиск дублей с четким/нечетким поиском по любому сочетанию реквизитов/реквизитов таб. частей с отбором и быстрой заменой значений в ЛЮБЫХ базах 8.1-8.3 (УТ 10.3, БП 2, ЗУП 2.5, КА 1.1, УТ 11, БП 3, УНФ 1.6/3.0, КА 2, ЗУП 3 и т.д.)
- Быстрый подбор по вхождению слова в наименование
- АРМ кладовщика для "Альфа-Авто: Автозапчасти+Автосервис." 2.0. 1С 7.7
- Использование типовых возможностей 1С и их расширение. Часть 1
- Умная Загрузка Номенклатуры - с автопоиском реквизитов из Excel, загрузка изображений и документов
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
наименование удалось обрезать, как нужно. вот только проблема с группировкой, он мне выводит группировку как по старому наименованию, а не обрезанному, каким образом можно это исправить...может кто поможет?
ВыборкаНаименование = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"НаименованиеТовара");
Пока ВыборкаНаименование.Следующий() Цикл
ОбработкаПрерыванияПользователя();
НайтиНаименование = СокрЛП(ВыборкаНаименование.НаименованиеТовара);
ПозицияСлева=Найти(НайтиНаименование," ");
СтрокаДо =Лев(НайтиНаименование,ПозицияСлева-1);
СтрокаПосле = Сред(НайтиНаименование,ПозицияСлева+1,СтрДлина(НайтиНаименование));
ОбластьТовар.Параметры.Товар = СтрокаДо;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
ТабДокОснТаблица.Присоединить(ОбластьТовар,ВыборкаНаименование.Уровень());
//ТабДокОснТаблица.Присоединить(ОбластьТовар);
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСтрока.Следующий() Цикл
Показать
Это решение
Чтобы сработал код как в пункте (2), то из запроса уже должны приходить урезанные наименования. Следовательно надо или их получать в запросе, или в обходе результата предварительно заполнять новую таблицу значений, отсортировать её, а дальше пройтись по ней и выводить в табличный документ.
тз = новый таблицаЗначений;
тз.колонки.добавить("СтрокаДо"); //ну и остальные нужные колонки. возможно потребуется указывать тип колонки
//далее ваш код
ВыборкаНаименование = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"НаименованиеТовара");
Пока ВыборкаНаименование.Следующий() Цикл
...
но вместо вывода (ОбластьТовар.Параметры.Товар = СтрокаДо;) сделать
НовСтр = ТЗ.Добавить();
НовСтр.СтрокаДо = СтрокаДо;
...
КонецЦикла;
тз.Сортировать("СтрокаДо");
ну и дальше уже обходя таблицу (либо запрос из неё же)
для каждого стр из тз Цикл
Показать
Это решение
(5) BackinSoda,
Понимаю, что глупо спрашивать, если я правильно
дальше пойдет мой следующий обход
но вместо вывода (ОбластьТовар.Параметры.Товар = СтрокаДо;) сделать
но потом же я все равно буду выводить эту область, и он не все равно выводит не так как надо...
Понимаю, что глупо спрашивать, если я правильно
ну и дальше уже обходя таблицу (либо запрос из неё же)
для каждого стр из тз Цикл
для каждого стр из тз Цикл
дальше пойдет мой следующий обход
ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСтрока.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
Показать
Это решение
(6) Гость, как то так:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("СтрокаДо");
ТЗ.Колонки.Добавить("Код");
//ТЗ.Колонки.Добавить("НДС");
//ТЗ.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
//тут идёт какой-то запрос
ВыборкаНаименование = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"НаименованиеТовара");
Пока ВыборкаНаименование.Следующий() Цикл
ОбработкаПрерыванияПользователя();
НайтиНаименование = СокрЛП(ВыборкаНаименование.НаименованиеТовара);
ПозицияСлева=Найти(НайтиНаименование," ");
СтрокаДо =Лев(НайтиНаименование,ПозицияСлева-1);
СтрокаПосле = Сред(НайтиНаименование,ПозицияСлева+1,СтрДлина(НайтиНаименование));
НовСтр = ТЗ.Добавить();
НовСтр.СтрокаДо = СтрокаДо;
ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСтрока.Следующий() Цикл
//заполняем другие колонки нашей таблицы, идущие в этой группировке, напр. Код, ндс и остальное
ЗаполнитьЗначенияСвойств(НовСтр, ВыборкаСтрока); //это аналог НовСтр.НДС = ВыборкаСтрока.НДС; и т.д.
КонецЦикла;
КонецЦикла;
ТЗ.Сортировать("СтрокаДо");
Для Каждого стр из ТЗ Цикл
ОбластьТовар.Параметры.Товар = СтрокаДо;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
ТабДокОснТаблица.Присоединить(ОбластьТовар,ВыборкаНаименование.Уровень());
//ТабДокОснТаблица.Присоединить(ОбластьТовар);
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
//тут по идее заполнение других параметров
КонецЦикла;
Показать
Это решение
в запросе наименование не обрезать до пробела ибо не известно где он и существует ли.
(5) BackinSoda,
Начало было верно, но это нет. сортировать смысла нет.
Предлагаю вместо этого
(5) BackinSoda,
тз.Сортировать("СтрокаДо");
ну и дальше уже обходя таблицу (либо запрос из неё же)
для каждого стр из тз Цикл
ну и дальше уже обходя таблицу (либо запрос из неё же)
для каждого стр из тз Цикл
Начало было верно, но это нет. сортировать смысла нет.
Предлагаю вместо этого
тз = ВыборкаСклад.Выгрузить();
тз = Новый ТаблицаЗначений;
тз.колонки.добавить("СтрокаДо");
Имена = Новый Соответствие;
Для каждого стр из тз Цикл
ПозПробела = Найти(стр.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
стр.СтрокаДо = стр.НаименованиеТовара;
Иначе
стр.СтрокаДо = Лев(стр.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
Если Имена.Получить(стр.СтрокаДо)=Неопределено Тогда
Имена.Вставить(стр.СтрокаДо,Истина);
КонецЕсли;
КонецЦикла;
Для Каждого Элемент из Имена Цикл
Наименование = Элемент.Ключ;
НайденныеСтроки = тз.НайтиСтроки(Новый Структура("СтрокаДо",Наименование);
ОбластьТовар.Параметры.Товар = Наименование;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
//ТабДокОснТаблица.Присоединить(ОбластьТовар,ВыборкаНаименование.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
//ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//Пока ВыборкаСтрока.Следующий() Цикл
Для Каждого ВыборкаСтрока из НайденныеСтроки Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
КонецЦикла;
КонецЦикла;
Показать
Это решение
(9) oleg21592,
Принцип тот же, но экономичней
Принцип тот же, но экономичней
ВыборкаНаименование = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"НаименованиеТовара");
Имена = Новый Соответствие;
Пока ВыборкаНаименование.Следующий() Цикл
ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСтрока.Следующий() Цикл
ПозПробела = Найти(ВыборкаСтрока.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаСтрока.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаСтрока.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо)
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаСтрока);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
КонецЦикла;
КонецЦикла;
Для Каждого Элемент из Имена Цикл
Наименование = Элемент.Ключ;
//НайденныеСтроки = тз.НайтиСтроки(Новый Структура("СтрокаДо",Наименование);
ОбластьТовар.Параметры.Товар = Наименование;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
//ТабДокОснТаблица.Присоединить(ОбластьТовар,ВыборкаНаименование.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
//ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//Пока ВыборкаСтрока.Следующий() Цикл
Для Каждого ВыборкаСтрока из Элемент.Значение Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
КонецЦикла;
КонецЦикла;
Показать
Это решение
Как вариант:
1. Берешь свой начальный запрос и выгружаешь в ТЗ.
2. Проходишься по этой ТЗ и добавляешь 2 новые колонки НаменованиеКороткое НаименованиеТовара
в Наименование короткое забиваеш короткую часть в НаименованиеТовара остаток наименования (можно заменой короткого наименования в полном пустой строкой)
3. Теперь получившуюся ТЗ помещаеш запросом во временную таблицу и выбираешь запросом уже с нужными тебе группировками.
1. Берешь свой начальный запрос и выгружаешь в ТЗ.
2. Проходишься по этой ТЗ и добавляешь 2 новые колонки НаменованиеКороткое НаименованиеТовара
в Наименование короткое забиваеш короткую часть в НаименованиеТовара остаток наименования (можно заменой короткого наименования в полном пустой строкой)
3. Теперь получившуюся ТЗ помещаеш запросом во временную таблицу и выбираешь запросом уже с нужными тебе группировками.
Это решение
Если для отчета, попробуйте использовать в запросе ПОДСТРОКА, ПОДОБНО и выводите в СКД.
Запрос типа:
Если сложная группировка, поддерживаю (8)
Запрос типа:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
Номенклатура.Наименование,
ПОДСТРОКА(Номенклатура.Наименование, 1, 5) КАК НаименованиеКороткое
ИЗ
Справочник.Номенклатура КАК Номенклатура
Если сложная группировка, поддерживаю (8)
Это решение
вот как пытаюсь сделать
Получается, что он почему-то моё наименование товара,если через точку останова, изначально все нормально идет, но в конечном результате получается, что наименование товара он вообще нигде не вывел, ну а в таблице наименование, тоже каким-то не понятным образом... Скидываю скринщот
Пока ВыборкаПоставщик.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьПоставщик.Параметры.Поставщик = ВыборкаПоставщик.Поставщик;
ТабДокОснТаблица.Вывести(ОбластьПоставщикКод);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикСрок);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикНДС);
ТабДокОснТаблица.Присоединить(ОбластьПоставщик, ВыборкаПоставщик.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьПоставщикКол);
ВыборкаСклад = ВыборкаПоставщик.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
Пока ВыборкаСклад.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьСклад.Параметры.Склад = ВыборкаСклад.Склад;
ТабДокОснТаблица.Вывести(ОбластьСкладКод);
ТабДокОснТаблица.Присоединить(ОбластьСкладСрок);
ТабДокОснТаблица.Присоединить(ОбластьСкладНДС);
ТабДокОснТаблица.Присоединить(ОбластьСклад, ВыборкаСклад.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьСкладКол);
ВыборкаНаименование = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"НаименованиеТовара");
Имена = Новый Соответствие;
Пока ВыборкаНаименование.Следующий() Цикл
ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСтрока.Следующий() Цикл
ПозПробела = Найти(ВыборкаСтрока.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаСтрока.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаСтрока.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо);
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаСтрока);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
// КонецЦикла;
//КонецЦикла;
//
Для Каждого Элемент из Имена Цикл
Наименование = Элемент.Ключ;
//НайденныеСтроки = тз.НайтиСтроки(Новый Структура("СтрокаДо",Наименование);
ОбластьТовар.Параметры.Товар = Наименование;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
//ТабДокОснТаблица.Присоединить(ОбластьТовар,ВыборкаНаименование.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
//ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//Пока ВыборкаСтрока.Следующий() Цикл
Для Каждого ВыборкаСтрока из Элемент.Значение Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
ОбластьСтрока.Параметры.опт = ВыборкаСтрока.ОптоваяНадбавка;
ОбластьСтрока.Параметры.колво = ВыборкаСтрока.КоличествоВГрузовомМесте;
ОбластьСтрокаКол = Макет.ПолучитьОбласть("Строка|Количество");
Если ВыборкаСтрока.КоличествоМестНовый = 0 Тогда
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоВсего;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,Истина,,Истина);
Иначе
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоМестНовый;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,,,Ложь);
КонецЕсли;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьСтрока);
Если Не ТабДокОснТаблица.ПроверитьВывод(МассивОбластей) Тогда
ТабДокОснТаблица.ВывестиГоризонтальныйРазделительСтраниц();
МассивОбластей.Очистить();
НомерСтраницы = НомерСтраницы + 1;
ОбластьСтраница.Параметры.НомерСтраницы =НомерСтраницы;
ТабДокОснТаблица.Вывести(ОбластьСтраница);
ТабДокОснТаблица.Вывести(ОбластьКартинка);
ТабДокОснТаблица.Вывести(ОбластьШапка);
КонецЕсли;
ТабДокОснТаблица.Вывести(ОбластьСтрокаКод);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаСрок);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаНДС);
//ТабДокОснТаблица.Присоединить(ОбластьСтрока,ВыборкаСтрока.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьСтрока);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаКол);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ПоказатьПолучается, что он почему-то моё наименование товара,если через точку останова, изначально все нормально идет, но в конечном результате получается, что наименование товара он вообще нигде не вывел, ну а в таблице наименование, тоже каким-то не понятным образом... Скидываю скринщот
Прикрепленные файлы:
Это решение
(13) не надо принцип коверкать было
Пока ВыборкаПоставщик.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьПоставщик.Параметры.Поставщик = ВыборкаПоставщик.Поставщик;
ТабДокОснТаблица.Вывести(ОбластьПоставщикКод);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикСрок);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикНДС);
ТабДокОснТаблица.Присоединить(ОбластьПоставщик, ВыборкаПоставщик.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьПоставщикКол);
ВыборкаСклад = ВыборкаПоставщик.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
Пока ВыборкаСклад.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьСклад.Параметры.Склад = ВыборкаСклад.Склад;
ТабДокОснТаблица.Вывести(ОбластьСкладКод);
ТабДокОснТаблица.Присоединить(ОбластьСкладСрок);
ТабДокОснТаблица.Присоединить(ОбластьСкладНДС);
ТабДокОснТаблица.Присоединить(ОбластьСклад, ВыборкаСклад.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьСкладКол);
//ВыборкаНаименование = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"НаименованиеТовара"); = что За группировка??
ВыборкаНаименование = ВыборкаСклад.Выбрать();
Имена = Новый Соответствие;
Пока ВыборкаНаименование.Следующий() Цикл
//ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//
//Пока ВыборкаСтрока.Следующий() Цикл
ПозПробела = Найти(ВыборкаСтрока.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаСтрока.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаСтрока.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо);
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаСтрока);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
//КонецЦикла;
КонецЦикла;
Для Каждого Элемент из Имена Цикл
Наименование = Элемент.Ключ;
ОбластьТовар.Параметры.Товар = Наименование;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
//ТабДокОснТаблица.Присоединить(ОбластьТовар,ВыборкаНаименование.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
//ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//Пока ВыборкаСтрока.Следующий() Цикл
Для Каждого ВыборкаСтрока из Элемент.Значение Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
ОбластьСтрока.Параметры.опт = ВыборкаСтрока.ОптоваяНадбавка;
ОбластьСтрока.Параметры.колво = ВыборкаСтрока.КоличествоВГрузовомМесте;
ОбластьСтрокаКол = Макет.ПолучитьОбласть("Строка|Количество");
Если ВыборкаСтрока.КоличествоМестНовый = 0 Тогда
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоВсего;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,Истина,,Истина);
Иначе
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоМестНовый;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,,,Ложь);
КонецЕсли;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьСтрока);
Если Не ТабДокОснТаблица.ПроверитьВывод(МассивОбластей) Тогда
ТабДокОснТаблица.ВывестиГоризонтальныйРазделительСтраниц();
МассивОбластей.Очистить();
НомерСтраницы = НомерСтраницы + 1;
ОбластьСтраница.Параметры.НомерСтраницы =НомерСтраницы;
ТабДокОснТаблица.Вывести(ОбластьСтраница);
ТабДокОснТаблица.Вывести(ОбластьКартинка);
ТабДокОснТаблица.Вывести(ОбластьШапка);
КонецЕсли;
ТабДокОснТаблица.Вывести(ОбластьСтрокаКод);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаСрок);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаНДС);
//ТабДокОснТаблица.Присоединить(ОбластьСтрока,ВыборкаСтрока.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьСтрока);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаКол);
КонецЦикла;
КонецЦикла;
//КонецЦикла;
//КонецЦикла;
//КонецЦикла;
//КонецЦикла;
КонецЦикла;
КонецЦикла;
Показать
Это решение
отлично наименование товара он выводит, осталось разобраться с табличной частью....т.к.
Для Каждого ВыборкаСтрока из Элемент.Значение Цикл
затычка, передается ВыборкаИзРезультатаЗапроса, но она пустая.Может где-та затычка в циклах...
Это решение
(16) Nastya-chajkovskaya,
да не досмотрел. в массив собираем строки выборки.
да не досмотрел. в массив собираем строки выборки.
Пока ВыборкаНаименование.Следующий() Цикл
//ВыборкаСтрока = ВыборкаНаименование.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//
//Пока ВыборкаСтрока.Следующий() Цикл
ПозПробела = Найти(ВыборкаНаименование.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаНаименование.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаНаименование.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо);
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаНаименование);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
//КонецЦикла;
КонецЦикла;
Показать
Это решение
(17) oleg21592, у меня так и есть
тут, что-то другое.. получается наименование есть, а таблица пустая
тут, что-то другое.. получается наименование есть, а таблица пустая
ВыборкаПоставщик = ВыборкаТоварнаяГруппа.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поставщик");
Пока ВыборкаПоставщик.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьПоставщик.Параметры.Поставщик = ВыборкаПоставщик.Поставщик;
ТабДокОснТаблица.Вывести(ОбластьПоставщикКод);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикСрок);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикНДС);
ТабДокОснТаблица.Присоединить(ОбластьПоставщик, ВыборкаПоставщик.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьПоставщикКол);
ВыборкаСклад = ВыборкаПоставщик.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
Пока ВыборкаСклад.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьСклад.Параметры.Склад = ВыборкаСклад.Склад;
ТабДокОснТаблица.Вывести(ОбластьСкладКод);
ТабДокОснТаблица.Присоединить(ОбластьСкладСрок);
ТабДокОснТаблица.Присоединить(ОбластьСкладНДС);
ТабДокОснТаблица.Присоединить(ОбластьСклад, ВыборкаСклад.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьСкладКол);
ВыборкаНаименование = ВыборкаСклад.Выбрать();
Имена = Новый Соответствие;
Пока ВыборкаНаименование.Следующий() Цикл
ПозПробела = Найти(ВыборкаНаименование.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаНаименование.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаНаименование.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо);
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаНаименование);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
//КонецЦикла;
КонецЦикла;
Для Каждого Элемент из Имена Цикл
Наименование = Элемент.Ключ;
ОбластьТовар.Параметры.Товар = Наименование;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
ТабДокОснТаблица.Присоединить(ОбластьТовар,ВыборкаНаименование.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
Для Каждого ВыборкаСтрока из Элемент.Значение Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
ОбластьСтрока.Параметры.опт = ВыборкаСтрока.ОптоваяНадбавка;
ОбластьСтрока.Параметры.колво = ВыборкаСтрока.КоличествоВГрузовомМесте;
ОбластьСтрокаКол = Макет.ПолучитьОбласть("Строка|Количество");
Если ВыборкаСтрока.КоличествоМестНовый = 0 Тогда
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоВсего;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,Истина,,Истина);
Иначе
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоМестНовый;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,,,Ложь);
КонецЕсли;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьСтрока);
Если Не ТабДокОснТаблица.ПроверитьВывод(МассивОбластей) Тогда
ТабДокОснТаблица.ВывестиГоризонтальныйРазделительСтраниц();
МассивОбластей.Очистить();
НомерСтраницы = НомерСтраницы + 1;
ОбластьСтраница.Параметры.НомерСтраницы =НомерСтраницы;
ТабДокОснТаблица.Вывести(ОбластьСтраница);
ТабДокОснТаблица.Вывести(ОбластьКартинка);
ТабДокОснТаблица.Вывести(ОбластьШапка);
КонецЕсли;
ТабДокОснТаблица.Вывести(ОбластьСтрокаКод);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаСрок);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаНДС);
//ТабДокОснТаблица.Присоединить(ОбластьСтрока,ВыборкаСтрока.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьСтрока);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаКол);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Показать
Это решение
группировка в запросе лишняя "НаименованиеТовара". Удалить ее.
или
или
ВыборкаНаименование = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"НаименованиеТовара");
// ВыборкаНаименование = ВыборкаСклад.Выбрать();
Имена = Новый Соответствие;
Пока ВыборкаНаименование.Следующий() Цикл
ВыборкаСтрока = ВыборкаНаименование.Выбрать();
Пока ВыборкаСтрока.Следующий() Цикл
ПозПробела = Найти(ВыборкаСтрока.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаСтрока.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаСтрока.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо);
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаСтрока); // Проверить что ВыборкаСтрока = строке выборки!
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
КонецЦикла;
КонецЦикла;
Показать
Это решение
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаСтрока); // Проверить что ВыборкаСтрока = строке выборки!
в этой строке ВыборкаСтрока равна строке выборки со всеми полями готовыми для заполнения строки отчета?
если да то можно заменить например структурой. я так понял группировку в запросе "НаименованиеТовара" так и не удалили?
можно код из запроса после слова ИТОГИ
Это решение
Процедура КнопкаСформироватьНажатие(Кнопка)
ТабДокСодерж = Новый ТабличныйДокумент;
ТабДокОснТаблица = Новый ТабличныйДокумент;
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
МассивОбластей = Новый Массив;
НомерСтраницы = 1;
ОбластьСтраница = Макет.ПолучитьОбласть("Страница");
ОбластьСтраница.Параметры.НомерСтраницы = НомерСтраницы;
ТабДокОснТаблица.Вывести(ОбластьСтраница);
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ТабДокСодерж.Вывести(ОбластьЗаголовок);
ОбластьКартинка = Макет.ПолучитьОбласть("Картинка");
ОбластьКартинка.Параметры.Дата = Формат(ДатаКон, "ДФ=dd.MM.yyyy");
ТабДокОснТаблица.Вывести(ОбластьКартинка);
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДокОснТаблица.Вывести(ОбластьШапка);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТМЦНаСкладах_КоличествоОстатки.Склад КАК Склад,
| ТМЦНаСкладах_КоличествоОстатки.Партия КАК НаименованиеПартии,
| ТМЦНаСкладах_КоличествоОстатки.Партия.СрокГодности КАК СрокРеализации,
| СУММА(ТМЦНаСкладах_КоличествоОстатки.КоличествоВЕдиницеХраненияОстаток) КАК КоличествоВсего,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.СтавкаНДС КАК НДС,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ШтрихКодОсновной КАК ШтрихКод,
| ЦеныТМЦСрезПоследних.ОтпускнаяЦена КАК Цена,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ОптоваяНадбавка КАК ОптоваяНадбавка,
| СУММА(ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КоличествоВГрузовомМесте) КАК КоличествоВГрузовомМесте,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа КАК ТоварнаяГруппа,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Наименование КАК НаименованиеТовара,
| ТМЦНаСкладах_КоличествоОстатки.Партия.Контрагент КАК Поставщик,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.Наименование КАК НаименованиеСклада,
| СУММА(ВЫБОР
| КОГДА ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КоличествоВГрузовомМесте = 0
| ТОГДА 0
| ИНАЧЕ ВЫРАЗИТЬ(ТМЦНаСкладах_КоличествоОстатки.КоличествоВЕдиницеХраненияОстаток / ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КоличествоВГрузовомМесте - 0.5 КАК ЧИСЛО(15, 0))
| КОНЕЦ) КАК КоличествоМестНовый,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Код КАК КодТовара,
| ТМЦНаСкладах_КоличествоОстатки.Склад.Код КАК КодСклада
|ИЗ
| РегистрНакопления.ТМЦНаСкладах_Количество.Остатки(&ДатаКон,
| НЕ ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа = ЗНАЧЕНИЕ(Перечисление.ВидыТоварныхГрупп.ПустаяСсылка)
| И ТМЦНаСкладах_КоличествоОстатки.Склад.Код = ""000008""
//| ТМЦНаСкладах_КоличествоОстатки.ТМЦ ПОДОБНО &ТМЦ
| ) КАК ТМЦНаСкладах_КоличествоОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныТМЦ.СрезПоследних КАК ЦеныТМЦСрезПоследних
| ПО ТМЦНаСкладах_КоличествоОстатки.ТМЦ = ЦеныТМЦСрезПоследних.ТМЦ
//|ГДЕ
//| НЕ ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа = ЗНАЧЕНИЕ(Перечисление.ВидыТоварныхГрупп.ПустаяСсылка)
//| И ТМЦНаСкладах_КоличествоОстатки.Склад.Код = ""000008""
////| ТМЦНаСкладах_КоличествоОстатки.ТМЦ ПОДОБНО &ТМЦ
|
|СГРУППИРОВАТЬ ПО
| ТМЦНаСкладах_КоличествоОстатки.Партия.СрокГодности,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.СтавкаНДС,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ШтрихКодОсновной,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ОптоваяНадбавка,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Наименование,
| ТМЦНаСкладах_КоличествоОстатки.Партия.Контрагент,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.Наименование,
| ТМЦНаСкладах_КоличествоОстатки.Партия,
| ТМЦНаСкладах_КоличествоОстатки.Склад,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Код,
| ТМЦНаСкладах_КоличествоОстатки.Склад.Код,
| ЦеныТМЦСрезПоследних.ОтпускнаяЦена
|
|УПОРЯДОЧИТЬ ПО
| Склад,
| ТоварнаяГруппа
|ИТОГИ
| СУММА(КоличествоВсего)
|ПО
| Склад,
| ТоварнаяГруппа,
| Поставщик";
//| НаименованиеТовара";
Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон)+1);
Результат = Запрос.Выполнить();
ОбластьСкладКод = Макет.ПолучитьОбласть("Склад|Код");
ОбластьТоварнаяГруппаКод = Макет.ПолучитьОбласть("ТоварнаяГруппа|Код");
ОбластьПоставщикКод = Макет.ПолучитьОбласть("Поставщик|Код");
ОбластьТоварКод = Макет.ПолучитьОбласть("Товар|Код");
ОбластьСклад = Макет.ПолучитьОбласть("Склад|Основная");
ОбластьТоварнаяГруппа = Макет.ПолучитьОбласть("ТоварнаяГруппа|Основная");
ОбластьПоставщик = Макет.ПолучитьОбласть("Поставщик|Основная");
ОбластьТовар = Макет.ПолучитьОбласть("Товар|Основная");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Основная");
ОбластьЗаголовокСтрока = Макет.ПолучитьОбласть("ЗаголовокСтрока");
ОбластьСкладКол = Макет.ПолучитьОбласть("Склад|Количество");
ОбластьТоварнаяГруппаКол = Макет.ПолучитьОбласть("ТоварнаяГруппа|Количество");
ОбластьПоставщикКол = Макет.ПолучитьОбласть("Поставщик|Количество");
ОбластьТоварКол = Макет.ПолучитьОбласть("Товар|Количество");
ОбластьСтрокаКол = Макет.ПолучитьОбласть("Строка|Количество");
ОбластьСкладСрок = Макет.ПолучитьОбласть("Склад|Срок");
ОбластьТоварнаяГруппаСрок = Макет.ПолучитьОбласть("ТоварнаяГруппа|Срок");
ОбластьПоставщикСрок = Макет.ПолучитьОбласть("Поставщик|Срок");
ОбластьТоварСрок = Макет.ПолучитьОбласть("Товар|Срок");
ОбластьСкладНДС = Макет.ПолучитьОбласть("Склад|НДС");
ОбластьТоварнаяГруппаНДС = Макет.ПолучитьОбласть("ТоварнаяГруппа|НДС");
ОбластьПоставщикНДС = Макет.ПолучитьОбласть("Поставщик|НДС");
ОбластьТоварНДС = Макет.ПолучитьОбласть("Товар|НДС");
ОбластьСтрокаНДС = Макет.ПолучитьОбласть("Строка|НДС");
ТабДок.Очистить();
ТабДок.НачатьАвтогруппировкуСтрок();
//ТЗ = Результат.Выгрузить();
//ТЗ.Свернуть("ТоварнаяГруппа, КодСклада");
//ТЗ для страниц
ТЗСтраницы = Новый ТаблицаЗначений;
ТЗСтраницы.Колонки.Добавить("Код");
ТЗСтраницы.Колонки.Добавить("Группа");
ТЗСтраницы.Колонки.Добавить("Страница");
ТекущаяГруппа = Неопределено;
ТекущийКод = Неопределено;
ТекущаяСтраница = 0;
ВыборкаЗаголовокСтрока = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаЗаголовокСтрока.Следующий()Цикл // обход Склад
ОбработкаПрерыванияПользователя();
КодСклада = ВыборкаЗаголовокСтрока.КодСклада;
ВыборкаТоварнаяГруппа = ВыборкаЗаголовокСтрока.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ТоварнаяГруппа");
Пока ВыборкаТоварнаяГруппа.Следующий() Цикл // обход ТоварнаяГруппа
ОбработкаПрерыванияПользователя();
КодСклада = ВыборкаТоварнаяГруппа.КодСклада;
ОбластьТоварнаяГруппа.Параметры.ТоварнаяГруппа =ВыборкаТоварнаяГруппа.ТоварнаяГруппа;
//Добавим страницу...
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Код", КодСклада);
ПараметрыОтбора.Вставить("Группа", ВыборкаТоварнаяГруппа.ТоварнаяГруппа);
НайденныеСтроки = ТЗСтраницы.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
НайденныеСтроки[0].Страница = НомерСтраницы;
Иначе
НоваяСтрока = ТЗСтраницы.Добавить();
НоваяСтрока.Код = КодСклада;
НоваяСтрока.Группа = ВыборкаТоварнаяГруппа.ТоварнаяГруппа;
НоваяСтрока.Страница = НомерСтраницы;
КонецЕсли;
////////////////////////////////////////////////
ТабДокОснТаблица.Вывести(ОбластьТоварнаяГруппаКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппаСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппаНДС);
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппа,ВыборкаТоварнаяГруппа.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппаКол);
ВыборкаПоставщик = ВыборкаТоварнаяГруппа.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поставщик");
Пока ВыборкаПоставщик.Следующий() Цикл // обход Поставщик
ОбработкаПрерыванияПользователя();
ОбластьПоставщик.Параметры.Поставщик = ВыборкаПоставщик.Поставщик;
ТабДокОснТаблица.Вывести(ОбластьПоставщикКод);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикСрок);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикНДС);
ТабДокОснТаблица.Присоединить(ОбластьПоставщик, ВыборкаПоставщик.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьПоставщикКол);
//ВыборкаСклад = ВыборкаПоставщик.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
ВыборкаНаименование = ВыборкаПоставщик.Выбрать(); // дальше нет группировок И правильней переименовать было бы ВыборкаНаименование в ВыборкаТовары
Пока ВыборкаНаименование.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьСклад.Параметры.Склад = ВыборкаНаименование.Склад;
ТабДокОснТаблица.Вывести(ОбластьСкладКод);
ТабДокОснТаблица.Присоединить(ОбластьСкладСрок);
ТабДокОснТаблица.Присоединить(ОбластьСкладНДС);
ТабДокОснТаблица.Присоединить(ОбластьСклад, ВыборкаНаименование.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьСкладКол);
//ВыборкаНаименование = ВыборкаСклад.Выбрать();
Имена = Новый Соответствие;
//Пока ВыборкаНаименование.Следующий() Цикл
ПозПробела = Найти(ВыборкаНаименование.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаНаименование.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаНаименование.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо);
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаНаименование);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
//КонецЦикла;
КонецЦикла; // относится к // Пока ВыборкаСклад.Следующий() Цикл
Для Каждого Элемент из Имена Цикл
Наименование = Элемент.Ключ;
ОбластьТовар.Параметры.Товар = Наименование;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
ТабДокОснТаблица.Присоединить(ОбластьТовар);
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
Для Каждого ВыборкаСтрока из Элемент.Значение Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
ОбластьСтрока.Параметры.опт = ВыборкаСтрока.ОптоваяНадбавка;
ОбластьСтрока.Параметры.колво = ВыборкаСтрока.КоличествоВГрузовомМесте;
ОбластьСтрокаКол = Макет.ПолучитьОбласть("Строка|Количество");
Если ВыборкаСтрока.КоличествоМестНовый = 0 Тогда
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоВсего;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,Истина,,Истина);
Иначе
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоМестНовый;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,,,Ложь);
КонецЕсли;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьСтрока);
Если Не ТабДокОснТаблица.ПроверитьВывод(МассивОбластей) Тогда
ТабДокОснТаблица.ВывестиГоризонтальныйРазделительСтраниц();
МассивОбластей.Очистить();
НомерСтраницы = НомерСтраницы + 1;
ОбластьСтраница.Параметры.НомерСтраницы =НомерСтраницы;
ТабДокОснТаблица.Вывести(ОбластьСтраница);
ТабДокОснТаблица.Вывести(ОбластьКартинка);
ТабДокОснТаблица.Вывести(ОбластьШапка);
КонецЕсли;
ТабДокОснТаблица.Вывести(ОбластьСтрокаКод);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаСрок);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаНДС);
ТабДокОснТаблица.Присоединить(ОбластьСтрока);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаКол);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
// КонецЦикла;
ТЗСтраницы.Сортировать("Страница");
Для Каждого Стр Из ТЗСтраницы Цикл
ОбработкаПрерыванияПользователя();
Если ЗначениеНеЗаполнено(Стр.Группа) Тогда
Продолжить;
КонецЕсли;
ОбластьЗаголовокСтрока.Параметры.КодСклада = Стр.Код;
ОбластьЗаголовокСтрока.Параметры.Наименование = Стр.Группа;
ОбластьЗаголовокСтрока.Параметры.Страница = Стр.Страница;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьЗаголовокСтрока);
Если Не ТабДокСодерж.ПроверитьВывод(МассивОбластей) Тогда
ТабДокСодерж.ВывестиГоризонтальныйРазделительСтраниц();
МассивОбластей.Очистить();
ТабДокСодерж.Вывести(ОбластьЗаголовок);
КонецЕсли;
ТабДокСодерж.Вывести(ОбластьЗаголовокСтрока);
КонецЦикла;
Если ФлагВывестиРеквизиты Тогда
ОбластьРеквизиты = Макет.ПолучитьОбласть("Реквизиты");
ТабДокСодерж.Вывести(ОбластьРеквизиты);
Иначе
КонецЕсли;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ТабДокСодерж);
ТабДок.Вывести(ТабДокОснТаблица);
ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
ТабДок.ОтображатьСетку = Истина;
ТабДок.АвтоМасштаб = Истина;
ТабДок.Показать();
КонецПроцедуры
Процедура ПриОткрытии()
Склад = Справочники.МестаХранения.ВыбратьИерархически(Справочники.МестаХранения.НайтиПоНаименованию("СКЛАД НЕПРОДОВОЛЬСТВЕННЫХ ТОВАРОВ"));
ДатаКон = ТекущаяДата();
КонецПроцедуры
Показать
Это решение
(25) oleg21592, вот все же сделано как и говорили
а в результате вот что на картинке
Процедура КнопкаСформироватьНажатие(Кнопка)
ТабДокСодерж = Новый ТабличныйДокумент;
ТабДокОснТаблица = Новый ТабличныйДокумент;
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
МассивОбластей = Новый Массив;
НомерСтраницы = 1;
ОбластьСтраница = Макет.ПолучитьОбласть("Страница");
ОбластьСтраница.Параметры.НомерСтраницы = НомерСтраницы;
ТабДокОснТаблица.Вывести(ОбластьСтраница);
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ТабДокСодерж.Вывести(ОбластьЗаголовок);
ОбластьКартинка = Макет.ПолучитьОбласть("Картинка");
ОбластьКартинка.Параметры.Дата = Формат(ДатаКон, "ДФ=dd.MM.yyyy");
ТабДокОснТаблица.Вывести(ОбластьКартинка);
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДокОснТаблица.Вывести(ОбластьШапка);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТМЦНаСкладах_КоличествоОстатки.Склад КАК Склад,
| ТМЦНаСкладах_КоличествоОстатки.Партия КАК НаименованиеПартии,
| ТМЦНаСкладах_КоличествоОстатки.Партия.СрокГодности КАК СрокРеализации,
| СУММА(ТМЦНаСкладах_КоличествоОстатки.КоличествоВЕдиницеХраненияОстаток) КАК КоличествоВсего,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.СтавкаНДС КАК НДС,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ШтрихКодОсновной КАК ШтрихКод,
| ЦеныТМЦСрезПоследних.ОтпускнаяЦена КАК Цена,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ОптоваяНадбавка КАК ОптоваяНадбавка,
| СУММА(ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КоличествоВГрузовомМесте) КАК КоличествоВГрузовомМесте,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа КАК ТоварнаяГруппа,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Наименование КАК НаименованиеТовара,
| ТМЦНаСкладах_КоличествоОстатки.Партия.Контрагент КАК Поставщик,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.Наименование КАК НаименованиеСклада,
| СУММА(ВЫБОР
| КОГДА ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КоличествоВГрузовомМесте = 0
| ТОГДА 0
| ИНАЧЕ ВЫРАЗИТЬ(ТМЦНаСкладах_КоличествоОстатки.КоличествоВЕдиницеХраненияОстаток / ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КоличествоВГрузовомМесте - 0.5 КАК ЧИСЛО(15, 0))
| КОНЕЦ) КАК КоличествоМестНовый,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Код КАК КодТовара,
| ТМЦНаСкладах_КоличествоОстатки.Склад.Код КАК КодСклада
|ИЗ
| РегистрНакопления.ТМЦНаСкладах_Количество.Остатки(&ДатаКон,
| НЕ ТМЦ.КлассТМЦ.ТоварнаяГруппа = ЗНАЧЕНИЕ(Перечисление.ВидыТоварныхГрупп.ПустаяСсылка)
| И Склад.Код = ""000008""
//| ТМЦНаСкладах_КоличествоОстатки.ТМЦ ПОДОБНО &ТМЦ
| ) КАК ТМЦНаСкладах_КоличествоОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныТМЦ.СрезПоследних КАК ЦеныТМЦСрезПоследних
| ПО ТМЦНаСкладах_КоличествоОстатки.ТМЦ = ЦеныТМЦСрезПоследних.ТМЦ
|
|СГРУППИРОВАТЬ ПО
| ТМЦНаСкладах_КоличествоОстатки.Партия.СрокГодности,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.СтавкаНДС,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ШтрихКодОсновной,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ОптоваяНадбавка,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Наименование,
| ТМЦНаСкладах_КоличествоОстатки.Партия.Контрагент,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.Наименование,
| ТМЦНаСкладах_КоличествоОстатки.Партия,
| ТМЦНаСкладах_КоличествоОстатки.Склад,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Код,
| ТМЦНаСкладах_КоличествоОстатки.Склад.Код,
| ЦеныТМЦСрезПоследних.ОтпускнаяЦена
|
|УПОРЯДОЧИТЬ ПО
| Склад,
| ТоварнаяГруппа
|ИТОГИ
| СУММА(КоличествоВсего)
|ПО
| Склад,
| ТоварнаяГруппа,
| Поставщик";
//| НаименованиеТовара";
Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон)+1);
Результат = Запрос.Выполнить();
ОбластьСкладКод = Макет.ПолучитьОбласть("Склад|Код");
ОбластьТоварнаяГруппаКод = Макет.ПолучитьОбласть("ТоварнаяГруппа|Код");
ОбластьПоставщикКод = Макет.ПолучитьОбласть("Поставщик|Код");
ОбластьТоварКод = Макет.ПолучитьОбласть("Товар|Код");
ОбластьСклад = Макет.ПолучитьОбласть("Склад|Основная");
ОбластьТоварнаяГруппа = Макет.ПолучитьОбласть("ТоварнаяГруппа|Основная");
ОбластьПоставщик = Макет.ПолучитьОбласть("Поставщик|Основная");
ОбластьТовар = Макет.ПолучитьОбласть("Товар|Основная");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Основная");
ОбластьЗаголовокСтрока = Макет.ПолучитьОбласть("ЗаголовокСтрока");
ОбластьСкладКол = Макет.ПолучитьОбласть("Склад|Количество");
ОбластьТоварнаяГруппаКол = Макет.ПолучитьОбласть("ТоварнаяГруппа|Количество");
ОбластьПоставщикКол = Макет.ПолучитьОбласть("Поставщик|Количество");
ОбластьТоварКол = Макет.ПолучитьОбласть("Товар|Количество");
ОбластьСтрокаКол = Макет.ПолучитьОбласть("Строка|Количество");
ОбластьСкладСрок = Макет.ПолучитьОбласть("Склад|Срок");
ОбластьТоварнаяГруппаСрок = Макет.ПолучитьОбласть("ТоварнаяГруппа|Срок");
ОбластьПоставщикСрок = Макет.ПолучитьОбласть("Поставщик|Срок");
ОбластьТоварСрок = Макет.ПолучитьОбласть("Товар|Срок");
ОбластьСкладНДС = Макет.ПолучитьОбласть("Склад|НДС");
ОбластьТоварнаяГруппаНДС = Макет.ПолучитьОбласть("ТоварнаяГруппа|НДС");
ОбластьПоставщикНДС = Макет.ПолучитьОбласть("Поставщик|НДС");
ОбластьТоварНДС = Макет.ПолучитьОбласть("Товар|НДС");
ОбластьСтрокаНДС = Макет.ПолучитьОбласть("Строка|НДС");
ТабДок.Очистить();
ТабДок.НачатьАвтогруппировкуСтрок();
//ТЗ = Результат.Выгрузить();
//ТЗ.Свернуть("ТоварнаяГруппа, КодСклада");
//ТЗ для страниц
ТЗСтраницы = Новый ТаблицаЗначений;
ТЗСтраницы.Колонки.Добавить("Код");
ТЗСтраницы.Колонки.Добавить("Группа");
ТЗСтраницы.Колонки.Добавить("Страница");
ТекущаяГруппа = Неопределено;
ТекущийКод = Неопределено;
ТекущаяСтраница = 0;
ВыборкаЗаголовокСтрока = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаЗаголовокСтрока.Следующий()Цикл // обход Склад
ОбработкаПрерыванияПользователя();
КодСклада = ВыборкаЗаголовокСтрока.КодСклада;
ВыборкаТоварнаяГруппа = ВыборкаЗаголовокСтрока.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ТоварнаяГруппа");
Пока ВыборкаТоварнаяГруппа.Следующий() Цикл // обход ТоварнаяГруппа
ОбработкаПрерыванияПользователя();
КодСклада = ВыборкаТоварнаяГруппа.КодСклада;
ОбластьТоварнаяГруппа.Параметры.ТоварнаяГруппа =ВыборкаТоварнаяГруппа.ТоварнаяГруппа;
//Добавим страницу...
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Код", КодСклада);
ПараметрыОтбора.Вставить("Группа", ВыборкаТоварнаяГруппа.ТоварнаяГруппа);
НайденныеСтроки = ТЗСтраницы.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
НайденныеСтроки[0].Страница = НомерСтраницы;
Иначе
НоваяСтрока = ТЗСтраницы.Добавить();
НоваяСтрока.Код = КодСклада;
НоваяСтрока.Группа = ВыборкаТоварнаяГруппа.ТоварнаяГруппа;
НоваяСтрока.Страница = НомерСтраницы;
КонецЕсли;
////////////////////////////////////////////////
ТабДокОснТаблица.Вывести(ОбластьТоварнаяГруппаКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппаСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппаНДС);
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппа,ВыборкаТоварнаяГруппа.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппаКол);
ВыборкаПоставщик = ВыборкаТоварнаяГруппа.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Поставщик");
Пока ВыборкаПоставщик.Следующий() Цикл // обход Поставщик
ОбработкаПрерыванияПользователя();
ОбластьПоставщик.Параметры.Поставщик = ВыборкаПоставщик.Поставщик;
ТабДокОснТаблица.Вывести(ОбластьПоставщикКод);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикСрок);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикНДС);
ТабДокОснТаблица.Присоединить(ОбластьПоставщик, ВыборкаПоставщик.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьПоставщикКол);
//ВыборкаСклад = ВыборкаПоставщик.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
ВыборкаТовары = ВыборкаПоставщик.Выбрать(); // дальше нет группировок И правильней переименовать было бы ВыборкаНаименование в ВыборкаТовары
Пока ВыборкаТовары.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьСклад.Параметры.Склад = ВыборкаТовары.Склад;
ТабДокОснТаблица.Вывести(ОбластьСкладКод);
ТабДокОснТаблица.Присоединить(ОбластьСкладСрок);
ТабДокОснТаблица.Присоединить(ОбластьСкладНДС);
ТабДокОснТаблица.Присоединить(ОбластьСклад, ВыборкаТовары.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьСкладКол);
//ВыборкаНаименование = ВыборкаСклад.Выбрать();
Имена = Новый Соответствие;
//Пока ВыборкаНаименование.Следующий() Цикл
ПозПробела = Найти(ВыборкаТовары.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаТовары.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаТовары.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо);
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаТовары);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
//КонецЦикла;
КонецЦикла; // относится к // Пока ВыборкаСклад.Следующий() Цикл
Для Каждого Элемент из Имена Цикл
Наименование = Элемент.Ключ;
ОбластьТовар.Параметры.Товар = Наименование;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
ТабДокОснТаблица.Присоединить(ОбластьТовар);
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
Для Каждого ВыборкаСтрока из Элемент.Значение Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
ОбластьСтрока.Параметры.опт = ВыборкаСтрока.ОптоваяНадбавка;
ОбластьСтрока.Параметры.колво = ВыборкаСтрока.КоличествоВГрузовомМесте;
ОбластьСтрокаКол = Макет.ПолучитьОбласть("Строка|Количество");
Если ВыборкаСтрока.КоличествоМестНовый = 0 Тогда
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоВсего;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,Истина,,Истина);
Иначе
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоМестНовый;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,,,Ложь);
КонецЕсли;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьСтрока);
Если Не ТабДокОснТаблица.ПроверитьВывод(МассивОбластей) Тогда
ТабДокОснТаблица.ВывестиГоризонтальныйРазделительСтраниц();
МассивОбластей.Очистить();
НомерСтраницы = НомерСтраницы + 1;
ОбластьСтраница.Параметры.НомерСтраницы =НомерСтраницы;
ТабДокОснТаблица.Вывести(ОбластьСтраница);
ТабДокОснТаблица.Вывести(ОбластьКартинка);
ТабДокОснТаблица.Вывести(ОбластьШапка);
КонецЕсли;
ТабДокОснТаблица.Вывести(ОбластьСтрокаКод);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаСрок);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаНДС);
ТабДокОснТаблица.Присоединить(ОбластьСтрока);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаКол);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
// КонецЦикла;
ТЗСтраницы.Сортировать("Страница");
Для Каждого Стр Из ТЗСтраницы Цикл
ОбработкаПрерыванияПользователя();
Если ЗначениеНеЗаполнено(Стр.Группа) Тогда
Продолжить;
КонецЕсли;
ОбластьЗаголовокСтрока.Параметры.КодСклада = Стр.Код;
ОбластьЗаголовокСтрока.Параметры.Наименование = Стр.Группа;
ОбластьЗаголовокСтрока.Параметры.Страница = Стр.Страница;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьЗаголовокСтрока);
Если Не ТабДокСодерж.ПроверитьВывод(МассивОбластей) Тогда
ТабДокСодерж.ВывестиГоризонтальныйРазделительСтраниц();
МассивОбластей.Очистить();
ТабДокСодерж.Вывести(ОбластьЗаголовок);
КонецЕсли;
ТабДокСодерж.Вывести(ОбластьЗаголовокСтрока);
КонецЦикла;
Если ФлагВывестиРеквизиты Тогда
ОбластьРеквизиты = Макет.ПолучитьОбласть("Реквизиты");
ТабДокСодерж.Вывести(ОбластьРеквизиты);
Иначе
КонецЕсли;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ТабДокСодерж);
ТабДок.Вывести(ТабДокОснТаблица);
ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
ТабДок.ОтображатьСетку = Истина;
ТабДок.АвтоМасштаб = Истина;
ТабДок.Показать();
КонецПроцедуры
Процедура ПриОткрытии()
Склад = Справочники.МестаХранения.ВыбратьИерархически(Справочники.МестаХранения.НайтиПоНаименованию("СКЛАД НЕПРОДОВОЛЬСТВЕННЫХ ТОВАРОВ"));
ДатаКон = ТекущаяДата();
КонецПроцедуры
Показатьа в результате вот что на картинке
Прикрепленные файлы:
Это решение
а если так
Процедура КнопкаСформироватьНажатие(Кнопка)
ТабДокСодерж = Новый ТабличныйДокумент;
ТабДокОснТаблица = Новый ТабличныйДокумент;
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
МассивОбластей = Новый Массив;
НомерСтраницы = 1;
ОбластьСтраница = Макет.ПолучитьОбласть("Страница");
ОбластьСтраница.Параметры.НомерСтраницы = НомерСтраницы;
ТабДокОснТаблица.Вывести(ОбластьСтраница);
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ТабДокСодерж.Вывести(ОбластьЗаголовок);
ОбластьКартинка = Макет.ПолучитьОбласть("Картинка");
ОбластьКартинка.Параметры.Дата = Формат(ДатаКон, "ДФ=dd.MM.yyyy");
ТабДокОснТаблица.Вывести(ОбластьКартинка);
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДокОснТаблица.Вывести(ОбластьШапка);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТМЦНаСкладах_КоличествоОстатки.Склад КАК Склад,
| ТМЦНаСкладах_КоличествоОстатки.Партия КАК НаименованиеПартии,
| ТМЦНаСкладах_КоличествоОстатки.Партия.СрокГодности КАК СрокРеализации,
| СУММА(ТМЦНаСкладах_КоличествоОстатки.КоличествоВЕдиницеХраненияОстаток) КАК КоличествоВсего,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.СтавкаНДС КАК НДС,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ШтрихКодОсновной КАК ШтрихКод,
| ЦеныТМЦСрезПоследних.ОтпускнаяЦена КАК Цена,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ОптоваяНадбавка КАК ОптоваяНадбавка,
| СУММА(ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КоличествоВГрузовомМесте) КАК КоличествоВГрузовомМесте,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа КАК ТоварнаяГруппа,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Наименование КАК НаименованиеТовара,
| ТМЦНаСкладах_КоличествоОстатки.Партия.Контрагент КАК Поставщик,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.Наименование КАК НаименованиеСклада,
| СУММА(ВЫБОР
| КОГДА ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КоличествоВГрузовомМесте = 0
| ТОГДА 0
| ИНАЧЕ ВЫРАЗИТЬ(ТМЦНаСкладах_КоличествоОстатки.КоличествоВЕдиницеХраненияОстаток / ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КоличествоВГрузовомМесте - 0.5 КАК ЧИСЛО(15, 0))
| КОНЕЦ) КАК КоличествоМестНовый,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Код КАК КодТовара,
| ТМЦНаСкладах_КоличествоОстатки.Склад.Код КАК КодСклада
|ИЗ
| РегистрНакопления.ТМЦНаСкладах_Количество.Остатки(&ДатаКон,
| НЕ ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа = ЗНАЧЕНИЕ(Перечисление.ВидыТоварныхГрупп.ПустаяСсылка)
| И ТМЦНаСкладах_КоличествоОстатки.Склад.Код = ""000008""
//| ТМЦНаСкладах_КоличествоОстатки.ТМЦ ПОДОБНО &ТМЦ
| ) КАК ТМЦНаСкладах_КоличествоОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныТМЦ.СрезПоследних КАК ЦеныТМЦСрезПоследних
| ПО ТМЦНаСкладах_КоличествоОстатки.ТМЦ = ЦеныТМЦСрезПоследних.ТМЦ
//|ГДЕ
//| НЕ ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа = ЗНАЧЕНИЕ(Перечисление.ВидыТоварныхГрупп.ПустаяСсылка)
//| И ТМЦНаСкладах_КоличествоОстатки.Склад.Код = ""000008""
////| ТМЦНаСкладах_КоличествоОстатки.ТМЦ ПОДОБНО &ТМЦ
|
|СГРУППИРОВАТЬ ПО
| ТМЦНаСкладах_КоличествоОстатки.Партия.СрокГодности,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.СтавкаНДС,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ШтрихКодОсновной,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.ОптоваяНадбавка,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.ТоварнаяГруппа,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Наименование,
| ТМЦНаСкладах_КоличествоОстатки.Партия.Контрагент,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.КлассТМЦ.Наименование,
| ТМЦНаСкладах_КоличествоОстатки.Партия,
| ТМЦНаСкладах_КоличествоОстатки.Склад,
| ТМЦНаСкладах_КоличествоОстатки.ТМЦ.Код,
| ТМЦНаСкладах_КоличествоОстатки.Склад.Код,
| ЦеныТМЦСрезПоследних.ОтпускнаяЦена
|
|УПОРЯДОЧИТЬ ПО
| Склад,
| ТоварнаяГруппа
|ИТОГИ
| СУММА(КоличествоВсего)
|ПО
| ТоварнаяГруппа,
| Поставщик,
| Склад";
//| НаименованиеТовара";
Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон)+1);
Результат = Запрос.Выполнить();
ОбластьСкладКод = Макет.ПолучитьОбласть("Склад|Код");
ОбластьТоварнаяГруппаКод = Макет.ПолучитьОбласть("ТоварнаяГруппа|Код");
ОбластьПоставщикКод = Макет.ПолучитьОбласть("Поставщик|Код");
ОбластьТоварКод = Макет.ПолучитьОбласть("Товар|Код");
ОбластьСклад = Макет.ПолучитьОбласть("Склад|Основная");
ОбластьТоварнаяГруппа = Макет.ПолучитьОбласть("ТоварнаяГруппа|Основная");
ОбластьПоставщик = Макет.ПолучитьОбласть("Поставщик|Основная");
ОбластьТовар = Макет.ПолучитьОбласть("Товар|Основная");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка|Основная");
ОбластьЗаголовокСтрока = Макет.ПолучитьОбласть("ЗаголовокСтрока");
ОбластьСкладКол = Макет.ПолучитьОбласть("Склад|Количество");
ОбластьТоварнаяГруппаКол = Макет.ПолучитьОбласть("ТоварнаяГруппа|Количество");
ОбластьПоставщикКол = Макет.ПолучитьОбласть("Поставщик|Количество");
ОбластьТоварКол = Макет.ПолучитьОбласть("Товар|Количество");
ОбластьСтрокаКол = Макет.ПолучитьОбласть("Строка|Количество");
ОбластьСкладСрок = Макет.ПолучитьОбласть("Склад|Срок");
ОбластьТоварнаяГруппаСрок = Макет.ПолучитьОбласть("ТоварнаяГруппа|Срок");
ОбластьПоставщикСрок = Макет.ПолучитьОбласть("Поставщик|Срок");
ОбластьТоварСрок = Макет.ПолучитьОбласть("Товар|Срок");
ОбластьСкладНДС = Макет.ПолучитьОбласть("Склад|НДС");
ОбластьТоварнаяГруппаНДС = Макет.ПолучитьОбласть("ТоварнаяГруппа|НДС");
ОбластьПоставщикНДС = Макет.ПолучитьОбласть("Поставщик|НДС");
ОбластьТоварНДС = Макет.ПолучитьОбласть("Товар|НДС");
ОбластьСтрокаНДС = Макет.ПолучитьОбласть("Строка|НДС");
ТабДок.Очистить();
ТабДок.НачатьАвтогруппировкуСтрок();
//ТЗ = Результат.Выгрузить();
//ТЗ.Свернуть("ТоварнаяГруппа, КодСклада");
//ТЗ для страниц
ТЗСтраницы = Новый ТаблицаЗначений;
ТЗСтраницы.Колонки.Добавить("Код");
ТЗСтраницы.Колонки.Добавить("Группа");
ТЗСтраницы.Колонки.Добавить("Страница");
ТекущаяГруппа = Неопределено;
ТекущийКод = Неопределено;
ТекущаяСтраница = 0;
ВыборкаЗаголовокСтрока = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаЗаголовокСтрока.Следующий()Цикл // обход "ТоварнаяГруппа"
ОбработкаПрерыванияПользователя();
//КодСклада = ВыборкаЗаголовокСтрока.КодСклада;
ВыборкаТоварнаяГруппа = ВыборкаЗаголовокСтрока.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // , "ТоварнаяГруппа"
Пока ВыборкаТоварнаяГруппа.Следующий() Цикл // обход Поставщик
ОбработкаПрерыванияПользователя();
КодСклада = ВыборкаТоварнаяГруппа.КодСклада;
ОбластьТоварнаяГруппа.Параметры.ТоварнаяГруппа =ВыборкаТоварнаяГруппа.ТоварнаяГруппа;
//Добавим страницу...
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Код", КодСклада);
ПараметрыОтбора.Вставить("Группа", ВыборкаТоварнаяГруппа.ТоварнаяГруппа);
НайденныеСтроки = ТЗСтраницы.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
НайденныеСтроки[0].Страница = НомерСтраницы;
Иначе
НоваяСтрока = ТЗСтраницы.Добавить();
НоваяСтрока.Код = КодСклада;
НоваяСтрока.Группа = ВыборкаТоварнаяГруппа.ТоварнаяГруппа;
НоваяСтрока.Страница = НомерСтраницы;
КонецЕсли;
////////////////////////////////////////////////
ТабДокОснТаблица.Вывести(ОбластьТоварнаяГруппаКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппаСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппаНДС);
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппа,ВыборкаТоварнаяГруппа.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьТоварнаяГруппаКол);
ВыборкаПоставщик = ВыборкаТоварнаяГруппа.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); // ОбходРезультатаЗапроса.ПоГруппировкам, "Поставщик"
Пока ВыборкаПоставщик.Следующий() Цикл // обход Склад
ОбработкаПрерыванияПользователя();
ОбластьПоставщик.Параметры.Поставщик = ВыборкаПоставщик.Поставщик;
ТабДокОснТаблица.Вывести(ОбластьПоставщикКод);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикСрок);
ТабДокОснТаблица.Присоединить(ОбластьПоставщикНДС);
ТабДокОснТаблица.Присоединить(ОбластьПоставщик, ВыборкаПоставщик.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьПоставщикКол);
//ВыборкаСклад = ВыборкаПоставщик.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
ВыборкаНаименование = ВыборкаПоставщик.Выбрать(); // дальше нет группировок И правильней переименовать было бы ВыборкаНаименование в ВыборкаТовары
Пока ВыборкаНаименование.Следующий() Цикл
ОбработкаПрерыванияПользователя();
ОбластьСклад.Параметры.Склад = ВыборкаНаименование.Склад;
ТабДокОснТаблица.Вывести(ОбластьСкладКод);
ТабДокОснТаблица.Присоединить(ОбластьСкладСрок);
ТабДокОснТаблица.Присоединить(ОбластьСкладНДС);
ТабДокОснТаблица.Присоединить(ОбластьСклад, ВыборкаНаименование.Уровень());
ТабДокОснТаблица.Присоединить(ОбластьСкладКол);
//ВыборкаНаименование = ВыборкаСклад.Выбрать();
Имена = Новый Соответствие;
//Пока ВыборкаНаименование.Следующий() Цикл
ПозПробела = Найти(ВыборкаНаименование.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаНаименование.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаНаименование.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо);
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями.Добавить(ВыборкаНаименование);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
//КонецЦикла;
КонецЦикла; // относится к // Пока ВыборкаСклад.Следующий() Цикл
Для Каждого Элемент из Имена Цикл
Наименование = Элемент.Ключ;
ОбластьТовар.Параметры.Товар = Наименование;
ТабДокОснТаблица.Вывести(ОбластьТоварКод);
ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
ТабДокОснТаблица.Присоединить(ОбластьТовар);
ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
Для Каждого ВыборкаСтрока из Элемент.Значение Цикл
ОбработкаПрерыванияПользователя();
ОбластьСтрокаКод = Макет.ПолучитьОбласть("Строка|Код");
ОбластьСтрокаКод.Параметры.КодТовара = ВыборкаСтрока.КодТовара;
СрокОкончанияГодности = ДобавитьМесяц(ДатаКон, -2);
ОбластьСтрокаСрок = Макет.ПолучитьОбласть("Строка|Срок");
ОбластьСтрокаСрок.Параметры.Срок = ВыборкаСтрока.СрокРеализации;
Попытка
Если СрокОкончанияГодности >= ВыборкаСтрока.СрокРеализации Тогда
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.Бирюзовый;
Иначе
ОбластьСтрокаНДС.Область().ЦветФона = WebЦвета.ПризрачноБелый;
КонецЕсли;
Исключение
КонецПопытки;
ОбластьСтрокаНДС.Параметры.НДС = ВыборкаСтрока.НДС;
ОбластьСтрока.Параметры.ШтрихКод = ВыборкаСтрока.ШтрихКод;
ОбластьСтрока.Параметры.Товар = СокрЛП(ВыборкаСтрока.НаименованиеТовара);
ОбластьСтрока.Параметры.цена = ВыборкаСтрока.Цена;
ОбластьСтрока.Параметры.опт = ВыборкаСтрока.ОптоваяНадбавка;
ОбластьСтрока.Параметры.колво = ВыборкаСтрока.КоличествоВГрузовомМесте;
ОбластьСтрокаКол = Макет.ПолучитьОбласть("Строка|Количество");
Если ВыборкаСтрока.КоличествоМестНовый = 0 Тогда
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоВсего;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,Истина,,Истина);
Иначе
ОбластьСтрокаКол.Параметры.КолвоМест = ВыборкаСтрока.КоличествоМестНовый;
ОбластьСтрокаКол.Область(1,1).Шрифт = Новый Шрифт(,,,,Ложь);
КонецЕсли;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьСтрока);
Если Не ТабДокОснТаблица.ПроверитьВывод(МассивОбластей) Тогда
ТабДокОснТаблица.ВывестиГоризонтальныйРазделительСтраниц();
МассивОбластей.Очистить();
НомерСтраницы = НомерСтраницы + 1;
ОбластьСтраница.Параметры.НомерСтраницы =НомерСтраницы;
ТабДокОснТаблица.Вывести(ОбластьСтраница);
ТабДокОснТаблица.Вывести(ОбластьКартинка);
ТабДокОснТаблица.Вывести(ОбластьШапка);
КонецЕсли;
ТабДокОснТаблица.Вывести(ОбластьСтрокаКод);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаСрок);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаНДС);
ТабДокОснТаблица.Присоединить(ОбластьСтрока);
ТабДокОснТаблица.Присоединить(ОбластьСтрокаКол);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
// КонецЦикла;
ТЗСтраницы.Сортировать("Страница");
Для Каждого Стр Из ТЗСтраницы Цикл
ОбработкаПрерыванияПользователя();
Если ЗначениеНеЗаполнено(Стр.Группа) Тогда
Продолжить;
КонецЕсли;
ОбластьЗаголовокСтрока.Параметры.КодСклада = Стр.Код;
ОбластьЗаголовокСтрока.Параметры.Наименование = Стр.Группа;
ОбластьЗаголовокСтрока.Параметры.Страница = Стр.Страница;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьЗаголовокСтрока);
Если Не ТабДокСодерж.ПроверитьВывод(МассивОбластей) Тогда
ТабДокСодерж.ВывестиГоризонтальныйРазделительСтраниц();
МассивОбластей.Очистить();
ТабДокСодерж.Вывести(ОбластьЗаголовок);
КонецЕсли;
ТабДокСодерж.Вывести(ОбластьЗаголовокСтрока);
КонецЦикла;
Если ФлагВывестиРеквизиты Тогда
ОбластьРеквизиты = Макет.ПолучитьОбласть("Реквизиты");
ТабДокСодерж.Вывести(ОбластьРеквизиты);
Иначе
КонецЕсли;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ТабДокСодерж);
ТабДок.Вывести(ТабДокОснТаблица);
ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
ТабДок.ОтображатьСетку = Истина;
ТабДок.АвтоМасштаб = Истина;
ТабДок.Показать();
КонецПроцедуры
Процедура ПриОткрытии()
Склад = Справочники.МестаХранения.ВыбратьИерархически(Справочники.МестаХранения.НайтиПоНаименованию("СКЛАД НЕПРОДОВОЛЬСТВЕННЫХ ТОВАРОВ"));
ДатаКон = ТекущаяДата();
КонецПроцедуры
Показать
Это решение
вот смоделировал ситуацию.
&НаСервере
Процедура Команда1НаСервере()
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
| ЗаказКлиентаТовары.СтавкаНДС КАК СтавкаНДС,
| ЗаказКлиентаТовары.Номенклатура.Родитель КАК ТоварнаяГруппа,
| ЗаказКлиентаТовары.Номенклатура.Наименование КАК НаименованиеТовара,
| ЗаказКлиентаТовары.Склад КАК Склад,
| ЗаказКлиентаТовары.ВидЦены КАК Поставщик,
| СУММА(ЗаказКлиентаТовары.Количество) КАК Количество
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
|ГДЕ
| ЗаказКлиентаТовары.Ссылка.Дата МЕЖДУ ДАТАВРЕМЯ(2016, 5, 1) И ДАТАВРЕМЯ(2016, 5, 20)
|
|СГРУППИРОВАТЬ ПО
| ЗаказКлиентаТовары.Номенклатура,
| ЗаказКлиентаТовары.СтавкаНДС,
| ЗаказКлиентаТовары.Номенклатура.Родитель,
| ЗаказКлиентаТовары.Номенклатура.Наименование,
| ЗаказКлиентаТовары.Склад,
| ЗаказКлиентаТовары.ВидЦены
|ИТОГИ
| СУММА(Количество)
|ПО
| ТоварнаяГруппа,
| Поставщик,
| Склад";
РезультатЗапроса = Запрос.Выполнить();
ИменаПолей="";
Для каждого Поля Из РезультатЗапроса.Колонки Цикл
ИменаПолей=ИменаПолей + "," + Поля.Имя;
КонецЦикла;
ИменаПолей=Сред(ИменаПолей,2);
ВыборкаТоварнаяГруппа = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаТоварнаяГруппа.Следующий() Цикл
// Вставить обработку выборки ВыборкаТоварнаяГруппа
ВыборкаПоставщик = ВыборкаТоварнаяГруппа.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоставщик.Следующий() Цикл
// Вставить обработку выборки ВыборкаПоставщик
ВыборкаСклад = ВыборкаПоставщик.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСклад.Следующий() Цикл
ВыборкаНаименование = ВыборкаСклад.Выбрать();
Имена = Новый Соответствие;
Пока ВыборкаНаименование.Следующий() Цикл
ПозПробела = Найти(ВыборкаНаименование.НаименованиеТовара," ");
Если ПозПробела = 0 тогда
СтрокаДо = ВыборкаНаименование.НаименованиеТовара;
Иначе
СтрокаДо = Лев(ВыборкаНаименование.НаименованиеТовара,ПозПробела-1);
КонецЕсли;
СписокСтрокСОдинаковымиНаименованиями = Имена.Получить(СтрокаДо);
Если СписокСтрокСОдинаковымиНаименованиями = Неопределено Тогда
СписокСтрокСОдинаковымиНаименованиями = Новый Массив;
КонецЕсли;
СтрВыборки = Новый Структура(ИменаПолей);
ЗаполнитьЗначенияСвойств(СтрВыборки,ВыборкаНаименование);
СписокСтрокСОдинаковымиНаименованиями.Добавить(СтрВыборки);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
КонецЦикла;
Для Каждого Элемент из Имена Цикл
Наименование = Элемент.Ключ;
Сообщить("===== "+Наименование+" =======");
//ОбластьТовар.Параметры.Товар = Наименование;
//
//ТабДокОснТаблица.Вывести(ОбластьТоварКод);
//ТабДокОснТаблица.Присоединить(ОбластьТоварСрок);
//ТабДокОснТаблица.Присоединить(ОбластьТоварНДС);
//ТабДокОснТаблица.Присоединить(ОбластьТовар);
//ТабДокОснТаблица.Присоединить(ОбластьТоварКол);
Для Каждого ВыборкаСтрока из Элемент.Значение Цикл
Сообщить(" "+ВыборкаСтрока.НаименованиеТовара);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
Показать
Это решение
Тоесть исправить два места
первое
первое
Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон)+1);
Результат = Запрос.Выполнить();
// чтоб не переписывать == добавить
ИменаПолей="";
Для каждого Поля Из Результат.Колонки Цикл
ИменаПолей=ИменаПолей + "," + Поля.Имя;
КонецЦикла;
ИменаПолей=Сред(ИменаПолей,2);
Показать СтрВыборки = Новый Структура(ИменаПолей);
ЗаполнитьЗначенияСвойств(СтрВыборки,ВыборкаНаименование);
СписокСтрокСОдинаковымиНаименованиями.Добавить(СтрВыборки);
Имена.Вставить(СтрокаДо,СписокСтрокСОдинаковымиНаименованиями);
Это решение
Внимание! Не забывайте отмечать решение на ваш вопрос, если оно найдено. Это повысит ваш рейтинг на форуме.
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)