|
Почему не видит поля ДатаОкончаниеС? | ☑ | ||
---|---|---|---|---|
0
RusProgKarps
25.11.16
✎
10:37
|
Доброго времени суток. Подскажите пожалуйста что я пишу не столько потому в цикле где идет обращение к полю ДатаОкончаниеС
(Если Выборка.ДатаОкончаниеС <Дата и НЕ Выборка.ДатаОкончаниеС = ДатаПуст Тогда НаборЗаписей.ДатаОкончаниеС = '0001-01-01';) выдает ошибку, что такого поля не существует, хотя по идее в набор при установке параметров должна передаваться ссылки и запись должна быть найден. Возможно процедура вообще зря составлена, просто я новичок и иного способа как извлечь записи из регистра по условию, а затем их изменить не придумал. Помогите ПЛИС. Процедура ПроверкаДатТовар() Экспорт Запрос= Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | sh_СистемныйСтатус2ДатаОкончание.Номенклатура Как Номенклатура, | sh_СистемныйСтатус2ДатаОкончание.ДатаОкончаниеС КАК ДатаОкончаниеС, | sh_СистемныйСтатус2ДатаОкончание.ДатаОкончаниеМ Как ДатаОкончаниеМ, | sh_СистемныйСтатус2ДатаОкончание.ДатаОкончаниеСМ Как ДатаОкончаниеСМ |ИЗ | РегистрСведений.sh_СистемныйСтатус2ДатаОкончание КАК sh_СистемныйСтатус2ДатаОкончание |ГДЕ | (ДатаОкончаниеС < &ДатаТек И ДатаОкончаниеС <> &ДатаПуст) | ИЛИ (ДатаОкончаниеМ < &ДатаТек И ДатаОкончаниеМ <> &ДатаПуст) | ИЛИ (ДатаОкончаниеСМ < &ДатаТек И ДатаОкончаниеСМ <> &ДатаПуст)"; Дата=ТекущаяДата(); ДатаПуст='0001-01-01'; Запрос.УстановитьПараметр("ДатаТек",Дата); Запрос.УстановитьПараметр("ДатаПуст",ДатаПуст); Выборка=Запрос.Выполнить().Выбрать(); Сообщить("Количество записей="+Выборка.Количество()); ЗаписСправочник=0; ПерСтатус=Перечисления.sh_СтатусыТоваров.НеЄВАсортименті; Пока Выборка.Следующий() Цикл НаборЗаписей=РегистрыСведений.sh_СистемныйСтатус2ДатаОкончание.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Номенклатура); НаборЗаписей.Прочитать(); Сообщить("Номенклатура="+Выборка.Номенклатура); Если Выборка.ДатаОкончаниеС<Дата И Не Выборка.ДатаОкончаниеС=ДатаПуст Тогда НаборЗаписей.ДатаОкончаниеС='0001-01-01'; ЗаписСправочник=Выборка.Номенклатура.Ссылка.ПолучитьОбъект(); ЗаписСправочник.sh_СтатусСельские=ПерСтатус; ЗаписСправочник.Записать(); КонецЕсли; Если Выборка.ДатаОкончаниеМ<Дата И Не Выборка.ДатаОкончаниеМ=ДатаПуст Тогда НаборЗаписей.ДатаОкончаниеМ='0001-01-01'; ЗаписСправочник=Выборка.Номенклатура.Ссылка.ПолучитьОбъект(); ЗаписСправочник.sh_СтатусГород=ПерСтатус; ЗаписСправочник.Записать(); КонецЕсли; Если Выборка.ДатаОкончаниеСМ<Дата И Не Выборка.ДатаОкончаниеСМ=ДатаПуст Тогда НаборЗаписей.ДатаОкончаниеСМ='0001-01-01'; ЗаписСправочник=Выборка.Номенклатура.Ссылка.ПолучитьОбъект(); ЗаписСправочник.sh_СтатусСамообслуживание=ПерСтатус; ЗаписСправочник.Записать(); КонецЕсли; Если НаборЗаписей.ДатаОкончаниеС='0001-01-01' И НаборЗаписей.ДатаОкончаниеМ='0001-01-01' И НаборЗаписей.ДатаОкончаниеСМ='0001-01-01' Тогда НаборЗаписей.Удалить(0); КонецЕсли; НаборЗаписей.Записать(); КонецЦикла; Сообщить("ГНуд"); КонецПроцедуры |
|||
1
h-sp
25.11.16
✎
10:53
|
НаборЗаписей - это такая таблица. у него вообще полей нет.
|
|||
2
RusProgKarps
25.11.16
✎
10:59
|
(1) Стоп, но я уже так делал и по данному регистру, работало все ...... я там передавал ссылки на номенклатуру и оно находило, я менял или удалял так запись.
|
|||
3
h-sp
25.11.16
✎
11:01
|
(2) ну вот это что за бред?
НаборЗаписей.ДатаОкончаниеС='0001-01-01'; у набора записей не может быть такого поля. Как оно у вас работало? |
|||
4
ВРедная
25.11.16
✎
11:03
|
(2) Набор записей - это таблица, как эксель. Ты пытаешься присвоить значение не ячейке, а всей колонке, т.к. строку ты не выбрал. Так оно не работает.
|
|||
5
RusProgKarps
25.11.16
✎
11:16
|
(3)Там работает, но я не ставлю НаборЗаписей.Прочитать(); , иначе выдает выше описанную ошибку.
Вот: &НаСервереБезКонтекста Процедура ЗаписуИлиЗамени(Номенклатура,ДатаКонцаС,ДатаКонцаМ,ДатаКонцаСМ ) НаборЗаписей=РегистрыСведений.sh_СистемныйСтатус2ДатаОкончание.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура); Если НаборЗаписей.Количество()=1 Тогда НаборЗаписей.ДатаОкончаниеС=ДатаКонцаС; НаборЗаписей.ДатаОкончаниеМ=ДатаКонцаМ; НаборЗаписей.ДатаОкончаниеСМ=ДатаКонцаСМ; Иначе НовыйНабор=НаборЗаписей.Добавить(); НовыйНабор.Период=ТекущаяДата(); НовыйНабор.Номенклатура=Номенклатура; НовыйНабор.ДатаОкончаниеС=ДатаКонцаС; НовыйНабор.ДатаОкончаниеМ=ДатаКонцаМ; НовыйНабор.ДатаОкончаниеСМ=ДатаКонцаСМ; НаборЗаписей.Записать(); КонецЕсли; КонецПроцедуры Правда там только одна запись всегда попадает .......... но по идее и здесь тоже должен вытянуться только одна запись, ведь в регистре не может быть больше одной записи номенклатуры. |
|||
6
RusProgKarps
25.11.16
✎
11:17
|
(4) А как по строкам пройти через цикл?
|
|||
7
RusProgKarps
25.11.16
✎
11:20
|
(4) И еще такой вопрос, здесь запрос в поле Выборка.Номенклатура сохраняет ссылки на номенклатуру или ее представления только?
|
|||
8
bodri
25.11.16
✎
11:23
|
(6)
Для Каждого ЗаписьНЗ из НаборЗаписей Цикл Конеццикла; |
|||
9
RusProgKarps
25.11.16
✎
12:31
|
Проверил сколько записей попадает в набор, выводит 0. А почему не ясно
Сообщить("Количество="+НаборЗаписей.Количество()); |
|||
10
h-sp
25.11.16
✎
12:34
|
(5) тут у вас всегда 0 записей. Поэтому никогда не было Количество() = 1. И ошибки этой не было поэтому.
|
|||
11
RusProgKarps
25.11.16
✎
12:44
|
(10) Та я уже ето понял, но почиму, почему не находит, ведь поиск в справочнике ниже дает правильный результат
|
|||
12
RusProgKarps
25.11.16
✎
12:48
|
(11) тоесть запрос передает ссылки на номенклатуру, а в той процедуре где у меня работает, я передавал именно ссылки
|
|||
13
Александр056
25.11.16
✎
12:48
|
"Подскажите пожалуйста что я пишу не столько потому в цикле где идет обращение к полю ДатаОкончаниеС"
спасибо большое, три раза прочитал, поржал) коллеги тоже)! |
|||
14
RusProgKarps
25.11.16
✎
12:53
|
(13) ладно вам смеяться, все начинали ....... а за текст извиняюсь, быстро набирал .............. лучше покажите профессионализм и подскажите как правильно написать чтобы изменить все записи в регистре подпадающих под условия в запросе .....
|
|||
15
Александр056
25.11.16
✎
12:57
|
(14) ну во первых не стоит говорит что лучше сделать другим, во вторых тебя лично никто не оскорблял, просто посмеялись над формулировкой) ничего такого и да, было такое у всех. А одна из причин по которой тебе не помогли, это как правило не корректная постановка вопроса.
|
|||
16
RusProgKarps
25.11.16
✎
13:08
|
(15) ну может и правы о неправильной формулировки вопроса.
Мне нужно найти в регистре записи даты в которых меньше настоящей и изменить. Чтобы не вытягивать весь регистер в набор решил вытянуть запросу, а затем найти эту запись в регистре через набор и поменять его ........ знаю что тупо, но ничего лучшего в голову не пришло. Поэтому вопрос такой: как правильно это сделать? |
|||
17
RusProgKarps
25.11.16
✎
13:30
|
(10) Извиняюсь, сначало не понял ето сообщение:
(5) тут у вас всегда 0 записей. Поэтому никогда не было Количество() = 1. И ошибки этой не было поэтому. Тепер появилось вопрос, а как тогда оно переписывает уже существующую запись? ......... удаляет старую и создает новую? если да, то как сделать чтобы найти запись и переписать его перестворюючы? ...... плис, помогите разобраться |
|||
18
HardBall
25.11.16
✎
13:39
|
НаборЗаписей=РегистрыСведений.sh_СистемныйСтатус2ДатаОкончание.СоздатьНаборЗаписей();
Тебе нужно использовать СоздатьМенеджерЗаписи() |
|||
19
h-sp
25.11.16
✎
13:46
|
(17) как и было
НовыйНабор=НаборЗаписей.Добавить(); НовыйНабор.Период=ТекущаяДата(); НовыйНабор.Номенклатура=Номенклатура; НовыйНабор.ДатаОкончаниеС=ДатаКонцаС; НовыйНабор.ДатаОкончаниеМ=ДатаКонцаМ; НовыйНабор.ДатаОкончаниеСМ=ДатаКонцаСМ; НаборЗаписей.Записать(); а про количество() = 1 просто выбросить. |
|||
20
RusProgKarps
25.11.16
✎
14:12
|
Спасибо всем, разобрался как правильно работать с набором.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |