|
Обход записей регистра сведений с учетом отбора | ☑ | ||
---|---|---|---|---|
0
СэдКС
12.11.13
✎
10:39
|
Добрый день! Задача: на форме размещен список регистра сведений, над формой поле флажка, выставлен некоторый отбор по полям регистра. Отображаются записи соответственно отбору.
При включении флажка поле Выполнено включается у всех записей, а не только у отобранных записей. Подскажите пожалуйста, какое условие выставить перед условием обхода полей регистра, чтобы флажок ставился только у отобранных полей (те поля, которые на данный момент выставил пользователь)? условие на обход регистра: Рег = РегистрыСведений.ПланированиеПоЗакупу; Выборка = Рег.Выбрать(); Пока Выборка.Следующий() Цикл Запись = Выборка.ПолучитьМенеджерЗаписи(); Запись.Прочитать(); Если Выполнено = Истина тогда Запись.Выполнено = Истина; Иначе Запись.Выполнено = Ложь; КонецЕсли; Запись.Записать(); КонецЦикла; |
|||
1
Господин ПЖ
12.11.13
✎
10:41
|
за такой код принято бить по пальцам
|
|||
2
Господин ПЖ
12.11.13
✎
10:41
|
молотком как минимум
|
|||
3
СэдКС
12.11.13
✎
10:42
|
(1) я его нашла на сайте http://www.1c-h.ru/?p=235. Побейте их)
Вы мне подскажите как правильно, я исправлюсь |
|||
4
Ork
12.11.13
✎
10:43
|
(0) Читайте в СП за метод Выбрать(). Там одним из параметров идет "Отбор". Это то, что вам нужно. Установите так же как отбор в форме и получите такую же выборку.
(1) Хай тренируется. Вам жалко? |
|||
5
Maxus43
12.11.13
✎
10:44
|
(3) лучше запросом получай данные, так лучше во всех смыслах
|
|||
6
Defender aka LINN
12.11.13
✎
10:45
|
(4) Сегодня он тренируется, а завтра ты это найдешь в рабочем коде
|
|||
7
Maxus43
12.11.13
✎
10:47
|
(6) она.
понять и простить, научить, воспитать, взять замуж. Нормально |
|||
8
Ork
12.11.13
✎
10:47
|
(6) Я сам тренировки с этого начинал... пАтамучта после семерки. И "это" до сих пор продолжаю находить в своем жеШ коде. Такие дела...
|
|||
9
СэдКС
12.11.13
✎
10:52
|
(4) Хорошо, я попробую. Спасибо!
(7) :))) |
|||
10
Ork
12.11.13
✎
10:55
|
(9) Вам же сказали - не нужно так делать. Методически правильно - запросом. Если только потренироваться...
|
|||
11
СэдКС
12.11.13
✎
11:56
|
(10) Да нет же, я не буду так делать, я всё сразу поняла :) Над "попробую" я имела ввиду метод выбрать
|
|||
12
1dvd
12.11.13
✎
11:59
|
Кривой программист за год создает два рабочих места
|
|||
13
Михаил Козлов
12.11.13
✎
12:30
|
(0) Обход записей, соответствующих отборам попробуйте через построитель отчета:
построитель = Новый ПостроительОтчета; построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(<имя реквизита набора записей>); выборка = построитель.Результат.Выбрать(); |
|||
14
СэдКС
12.11.13
✎
12:37
|
Подождите, я еще не разобралась с записью полей. У меня не ставится флажок на поля регистра.
Я не поняла, как это написать. После запроса вывела: Пока Выборка.Следующий() Цикл Если Выполнено = Истина Тогда Выборка.Выполнено = Истина; Иначе Выборка.Выполнено = Ложь; КонецЕсли; КонецЦикла; Скорей всего неверно. Нужно через команду "СоздатьНаборЗаписей"? |
|||
15
Ofizer
12.11.13
✎
12:44
|
(14) Выборке из результата запроса нельзя что-то присвоить.
да, можно СоздатьНаборЗаписей, там установить необходимые значения, и потом записать этот набор |
|||
16
СэдКС
12.11.13
✎
12:55
|
С набором получилось, сохраняет значения. Теперь остался отбор
|
|||
17
Ofizer
12.11.13
✎
12:58
|
(16) отбор сразу в запросе установить можно
|
|||
18
СэдКС
12.11.13
✎
13:01
|
НаборЗаписей = РегистрыСведений.ПланированиеПоЗакупу.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл Если Выполнено = Истина Тогда Запись.Выполнено = Истина; КонецЕсли; КонецЦикла; НаборЗаписей.Записать(); Но я ведь снова сделала неправильно. Не через запрос. Кто мне может сказать, как это "через запрос" ? |
|||
19
Ofizer
12.11.13
✎
13:03
|
(18) посмтри в СП Запрос.Выполнить
|
|||
20
СэдКС
12.11.13
✎
13:06
|
(19) я знаю, как строить запрос, но я не могу понять, как сделать привязку. Вы же говорили, что
> Выборке из результата запроса нельзя что-то присвоить. А как тогда присвоить? |
|||
21
Ofizer
12.11.13
✎
13:08
|
(20) РезультатЗапроса = Запрос.Выполнить().Выгрузить();
получить ТаблицуЗначений, в ней делай все необходимое, потом НаборЗаписей.Загрузить(ТаблицаЗначений.Выгрузить()) |
|||
22
Ofizer
12.11.13
✎
13:14
|
(21) малость ошибся :) НаборЗаписей.Загрузить(ТаблицаЗначений)
вот так надо |
|||
23
СэдКС
12.11.13
✎
13:47
|
(21) сначала создаю таблицу значений, потом делаю выборку из запроса в эту таблицу, потом создаю набор записей, присваиваю значение флажка полю из регистра и затем выгражаю все значения из таблицы в набор. Схема такая? Запутано как-то
|
|||
24
Ofizer
13.11.13
✎
05:13
|
(23) ничего не запустано, метод Выгрузить() сразу возвращает ТаблицуЗначений: ТЗ = Запрос.Выполнить().Выгрузить();
дальше в ТЗ делаешь необходимые действия: для каждого СтрокаТЗ из ТЗ цикл .... конецЦикла создаешь набор записей НЗ = рег.СоздатьНаборЗаписей; загружаешь в него ТЗ НЗ.Загрузить(ТЗ); записываешь набор в БД - НЗ.Записать(); |
|||
25
СэдКС
13.11.13
✎
14:05
|
У меня получилось только очистить записи, которые соответствуют отбору списка регистра, но присвоить значение Булево определенному полю так и не удалось.
Если ставить такое условие, то не проходит, потому что выборке из результата запроса нельзя что-то присвоить, как показал опыт. Для каждого СтрокаТЗ из ТЗ цикл Если Выполнено = Истина Тогда СтрокаТЗ.Выполнено = Истина; Иначе СтрокаТЗ.Выполнено = Ложь; КонецЕсли; КонецЦикла; Если ставить такое условие, то не проходит, потому что ругается на то, что "Запись не верна! Значение поля не соответствует установленному отбору:..." Для Каждого ЗаписьНЗ Из НЗ Цикл ЗаписьНЗ.Выполнено = Истина; КонецЦикла; Может еще где можно дописать это условие? Конечный вариант: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПланированиеПоЗакупу.Автор, | ПланированиеПоЗакупу.Номенклатура, | ПланированиеПоЗакупу.ХарактеристикаНоменклатуры, | ПланированиеПоЗакупу.Контрагент, | ПланированиеПоЗакупу.ЗаказПоставщику, | ПланированиеПоЗакупу.Выполнено, | ПланированиеПоЗакупу.ВыполненоЧастично, | ПланированиеПоЗакупу.Отменено, | ПланированиеПоЗакупу.ДатаЗаявки, | ПланированиеПоЗакупу.ДатаЗаказа, | ПланированиеПоЗакупу.ПроверкаОТКФакт |ИЗ | РегистрСведений.ПланированиеПоЗакупу КАК ПланированиеПоЗакупу"; ТЗ = Запрос.Выполнить().Выгрузить(); //неработающий кусочек Для каждого СтрокаТЗ из ТЗ цикл Если Выполнено = Истина Тогда СтрокаТЗ.Выполнено = Истина; Иначе СтрокаТЗ.Выполнено = Ложь; КонецЕсли; КонецЦикла; // ОтборТЧ = ЭтаФорма.ПланированиеПоЗакупу.Отбор; НЗ = РегистрыСведений.ПланированиеПоЗакупу.СоздатьНаборЗаписей(); Для Каждого ЭлементОтбора Из ОтборТЧ Цикл Если ЭлементОтбора.Использование Тогда ЭлементОтбораРС = НЗ.Отбор.Найти(ЭлементОтбора.Имя); Если ЭлементОтбораРС=Неопределено Тогда Продолжить; КонецЕсли; ЭлементОтбораРС.Использование = Истина; ЭлементОтбораРС.ВидСравнения = ЭлементОтбора.ВидСравнения; ЭлементОтбораРС.Значение = ЭлементОтбора.Значение; КонецЕсли; КонецЦикла; НЗ.Прочитать(); //неработающий кусочек Для Каждого ЗаписьНЗ Из НЗ Цикл ЗаписьНЗ.Выполнено = Истина; КонецЦикла; // ТЗ = НЗ.Выгрузить(); НЗ.Записать(); НЗ.Отбор.Выполнено.Установить(); НЗ.Загрузить(ТЗ); |
|||
26
СэдКС
13.11.13
✎
14:10
|
+(25)Предпоследняя строка неправильная
НЗ.Отбор.Выполнено.Установить(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |