Имя: Пароль:
1C
1С v8
Почему не видит поля ДатаОкончаниеС?
,
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
Спасибо всем, разобрался как правильно работать с набором.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший