1 C 8.0 вопрос такой, кто прогает
Выборка = Рез.Выбрать;
Для каждого строкаВыборки из Выборка Цикл
Строка.Остаток = строкаВыборки.Остаток;
КонецЦикла;
Это при том что Запрос должен возвращать Остаток и при этом только по нужной тебе номенклатуре (по идее в выборке должна быть только одна строка, но обратицца к ней можно и через цикл).
И всё это дело нужно поместить в процедуру что то типа ПриВыводеСтроки причём обработчик стандартным путём может и нельзя создать.
А хотя вообще то для каждой строки выполнять запрос - неправильно. Правильнее будет уже после Открытия сделать запрос на остатки, сгруппировать по номенклатуре, создать списокзначений с номенклатурой в форме списка, передать его в качестве параметра запросу и потом двойным циклом оббежать всю номенклатуру в списке сравнивая с номенклатурой в выборке и при совпадении доставать остаток из выборки.
Хотя мб и это неправильно
Ща 1с-ники увидят и чочонить напишут.
более правильно будет
1. "При открытии" формы получать остатки в таблицу значений
2. "При выводе строки" уже писать тект в конкретную ячейку
запос состоит из одного элемента, с помощью выборки тоже пробовал. 1 с жутко ругается.
обращение к ячейке: а=Элементыформы.СправочникСписок.текущие данные;
ячейкаОстатки=а.остаток;
И твоя задача решается что где то в подобном русле:
ОформлениеСтроки.Ячейки.НужнаяЯчейка.ОтображатьТекст = Истина;
ОформлениеСтроки.Ячейки.НужнаяЯчейка.Текст = "Остаток";
спасибо всем!
Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
сн=справочники.Номенклатура;
тн=элементыформы.СправочникСписок.ТекущиеДанные;
эсн=сн.НайтиПоНаименованию(тн);
если эсн.ЭтоГруппа=Ложь тогда
пер1=эсн.Наименование;
новыйзапрос= новый запрос;
новыйзапрос.текст=
"ВЫБРАТЬ
| ОстаткиМатериаловОстатки.материал.Наименование как наим,
| ОстаткиМатериаловОстатки.количествоОстаток как ост
|ИЗ
| РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки";
рез=новыйзапрос.Выполнить;
выборка=рез.Выбрать;
пока выборка.Следующий цикл
если выборка.наим=пер1 тогда
тн.Остаток=Выборка.ост;
break;
иначе
продолжить;
конецесли;
конеццикла;
конецесли;
КонецПроцедуры
Удаление гланд через задницу успешно выполнено
Нельзя так делать! Представь что у тебя номенклатуры тысяч 5, хотя бы и одновременно в базе работает человек 10-15, и они надумают полистать твой справочник. Что будет?
Если ты готовишься к экзамену по 1С, то там тебя за такой алгоритм поимеют
Причем некоторые дьдьки это сделают без вазилина
надо двойной цикл по таблице запросов делать?
Перем ТаблицаОстатков;
Процедура ПриОткрытии
ЗапросПоОстаткам = Новый Запрос;
ЗапросПоОстаткам.Текст = "ВЫБРАТЬ
| ОстаткиМатериаловОстатки.Материал КАК Номенклатура,
| ОстаткиМатериаловОстатки.количествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки";
ТаблицаОстатков = ЗапросПоОстаткам.Выполнить.Выгрузить;
КонецПроцедуры
Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ТекНоменклатура = ДанныеСтроки.Номенклатура;
РезПоиска = ТаблицаОстатков.Найти(ТекНоменклатура, "Номенклатура");
ОформлениеСтроки.Ячейки.НужнаяЯчейка.ОтображатьТекст = Истина;
Если РезПоиска = Неопределено Тогда
ОформлениеСтроки.Ячейки.НужнаяЯчейка.Текст = "-";
Иначе
ОформлениеСтроки.Ячейки.НужнаяЯчейка.Текст = РезПоиска.Количество;
КонецЕсли;
КонецПроцедуры
ЗЫ. в 8.1 еще можно проиндексировать таблицу значений.
Допустим за время просмотра кто-то взял да поставил резерв или продал часть товара.. а справочник может быть открыт и 10 и 20 минут, вероятность увеличивается..
Самое оптимальное на мой взгляд сделать горячую кнопку типа F12 по которой где-нить снизу будет выдаваться информация об остатках, или кнопку с подобным действием..
А вешать на каждый элемент справочника справочника запрос - реально очень ресурсоёмко.
Эх, жаль нет в 8-ке функции "СводныйОстаток".
Для этого можно сделать кнопочку "Обновить", а делать полновесный запрос для обновления каждой строки - это нехорошо, даже если добавить фильтр по номенклатуре.
и время последнего обновления...
ЗЫ. в 8.1 еще можно проиндексировать таблицу значений.А можно с этого места поподробнее?
Элементы коллекции:
СтрокаТаблицыЗначений
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс строки.
Свойства:
Индексы (Indexes)
Колонки (Columns)
Методы:
Вставить (Insert)
ВыбратьСтроку (ChooseRow)
ВыгрузитьКолонку (UnloadColumn)
Добавить (Add)
ЗагрузитьКолонку (LoadColumn)
ЗаполнитьЗначения (FillValues)
Индекс (IndexOf)
Итог (Total)
Количество (Count)
Найти (Find)
НайтиСтроки (FindRows)
Очистить (Clear)
Получить (Get)
Свернуть (GroupBy)
Сдвинуть (Move)
Скопировать (Copy)
СкопироватьКолонки (CopyColumns)
Сортировать (Sort)
Удалить (Delete)
Конструкторы:
По умолчанию
Описание:
Таблица значений предназначена для хранения значений в табличном виде. Все основные операции с таблицей производятся именно через этот объект. Он позволяет манипулировать строками таблицы значений и предоставляет доступ к коллекции колонок. Колонки могут быть различных типов (в том числе множественных).
Возможен обмен с сервером. Сериализуется.
Элементы коллекции:
ИндексКоллекции
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются ИндексКоллекции.
Методы:
Добавить (Add)
Количество (Count)
Очистить (Clear)
Удалить (Delete)
Описание:
Список индексов коллекции.
См. также:
ИндексКоллекции
ТаблицаЗначений, свойство Индексы
ОК. Спасибо, попробую. Осталось найти какую-нибудь громадную ТЗ
Оставить комментарий
UAV27
такая вот задачка: в справочнике "материалы" в форме списка надо добавить колноку, которая будет отображать остатки материалов из регистра накоплений "остаткиМатериалов". запрос я написал, но как результат запроса отобразить в этой колонке?пробовал так:
Строка=ЭлементыФормы.ФормаСписка.ТекущиеДанные;
НЗ=Новый запрос;
нз.текст="здесь текст запроса"
рез=НЗ.выполнить;
Строка.Остаток=рез;
ошибка в этой строке, что не нравится?