Формируя отчет столкнулась со следующей проблемой, не могу сообразить как вытащить и отсортировать ТМЦ по какому-либо значению, для примера взяла счет учета ТМЦ:
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Заголовок");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|ОбрабатыватьДокументы Проведенные;
|Док = Документ.ПриходнаяНакладнаяГТД.ТекущийДокумент, Документ.ПриходнаяНакладнаяЗапасы.ТекущийДокумент, Документ.ПриходнаяНакладнаяПрочие.ТекущийДокумент;
|ТМЦ = Документ.ПриходнаяНакладнаяГТД.ТМЦ, Документ.ПриходнаяНакладнаяЗапасы.ТМЦ, Документ.ПриходнаяНакладнаяПрочие.ТМЦ;
|Группировка Док;";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка(1) = 1 Цикл
ТМЦ = Запрос.ТМЦ;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
После КонецЕсли вставить:
тз = создатьОбъект("ТаблицаЗначений")
Запрос.Выгрузить(тз)
тз.ВыбратьСтроку()
Если это ПУБ почему запрос по документам, а не по регистру Партии? Там и счет есть. И ТМЦ это ТМЦ.
В документах ТМЦ справочник неопределенного вида, поэтому и сортировать кроме как в ТЗ не получится.
в 7.7 в запиті сортування відбувається після службового слова Группировка:
і тоді
Упорядочить по
Получается сортировать только по наименованию ТМЦ:
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Заголовок");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|ОбрабатыватьДокументы Проведенные;
|Док = Документ.ПриходнаяНакладнаяГТД.ТекущийДокумент, Документ.ПриходнаяНакладнаяЗапасы.ТекущийДокумент, Документ.ПриходнаяНакладнаяПрочие.ТекущийДокумент;
|ТМЦ = Документ.ПриходнаяНакладнаяГТД.ТМЦ, Документ.ПриходнаяНакладнаяЗапасы.ТМЦ, Документ.ПриходнаяНакладнаяПрочие.ТМЦ;
|Группировка ТМЦ упорядочить по ТМЦ.Счет;
|Группировка Док;";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТЗ);
ТЗ.ВыбратьСтроку();
Пока Запрос.Группировка(1) = 1 Цикл
ТМЦ = Запрос.ТМЦ;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
Все равно ничего не сортирует:
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Заголовок");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|ОбрабатыватьДокументы Проведенные;
|Док = Документ.ПриходнаяНакладнаяГТД.ТекущийДокумент, Документ.ПриходнаяНакладнаяЗапасы.ТекущийДокумент, Документ.ПриходнаяНакладнаяПрочие.ТекущийДокумент;
|Группировка Док;";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Товар");
ТЗ.НоваяКолонка("Вид");
Док = "";
Пока Запрос.Группировка(1) = 1 Цикл
Док = Запрос.Док;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если ПустоеЗначение(Док.ТМЦ) = 1 Тогда
Продолжить;
КонецЕсли;
ТЗ.НоваяСтрока();
ТЗ.Товар = Док.ТМЦ;
КонецЦикла;
ТЗ.Сортировать("Вид");
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
Пока Запрос.Группировка(1) = 1 Цикл
Док = Запрос.Док;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если ПустоеЗначение(Док.ТМЦ) = 1 Тогда
Продолжить;
КонецЕсли;
ТЗ.НоваяСтрока();
ТЗ.Товар = Док.ТМЦ;
ТЗ.Вид = Док.ТМЦ.Вид;//нужно заполнить колонку вид
КонецЦикла;
КонецЦикла;
ТЗ.Сортировать("Вид"); //сортировка после заполения таблицы
//теперь вывод на печать
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку(); Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
пишет:
ТЗ.Вид = Док.ТМЦ.Вид;
{C:\DOCUMENTS AND SETTINGS\WMATIK\РАБОЧИЙ СТОЛ\КОПИЯ РЕЕСТРТОВАРОВ.ERT(35)}: Поле агрегатного объекта не обнаружено (Вид)
Сделала сортировку по реквизиту "Счет", все получилось, но все же интересно почему по реквизиту "ВидТМЦ" не сортирует, выдает ошибку:
Поле агрегатного объекта не обнаружено (ВидТМЦ)
ТЗ.Вид = Док.ТМЦ.ВидТМЦ;//нужно заполнить колонку вид
Все равно поле агрегатного объекта не обнаружено. Я так понимаю это потому что тип значения у реквизита "ВидТМЦ" - перечисление. И как же быть в таком случае
Если Док.ТМЦ.Вид()="ТМЦ" Тогда
ТЗ.Вид = Док.ТМЦ.ВидТМЦ;
КонецЕсли;
Потому что приходная накладная прочие приходует "Необоротные активы" и "Бланки СО". И у ТМЦ и 2-х других есть реквизит счет. А реквизит ВидТМЦ присутствует только у ТМЦ
теперь все стало ясно,спасибо большое
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua