8.х Поменять значение периода в РС

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем sin_lgm, 1 июл 2010.

  1. TopicStarter Overlay
    sin_lgm
    Offline

    sin_lgm

    Регистрация:
    19 окт 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Добрый день всем.

    Подскажите, пожалуйста, как заменить во всем регистре сведений период с 1 апреля на 1 января.
    У регистра режим записи - независимый, периодичность в пределах квартала
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    а период в пределах квартала? иначе будет ошибка по поводу существующих записей......Я к тому, все ли записи имеют период 1 апреля? Или нужно отобрать по периоду и сменить период?
  3. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Используйте набор записей РС и все. Вот пример Вам поможет

  4. TopicStarter Overlay
    sin_lgm
    Offline

    sin_lgm

    Регистрация:
    19 окт 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    может кому и помогло бы, но до меня не дошло :smile:
    порылась в помошнике и написала вот так
    Код:
    ДатаЗамены=НачалоГода(ДатаЗаполнения);
    Запрос = Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |	ГМС_СоответствиеНоменклатурыИНоменклатурнымГруппамУпр.Период,
    |	ГМС_СоответствиеНоменклатурыИНоменклатурнымГруппамУпр.Организация,
    |	ГМС_СоответствиеНоменклатурыИНоменклатурнымГруппамУпр.Номенклатура,
    |	ГМС_СоответствиеНоменклатурыИНоменклатурнымГруппамУпр.НоменклатурнаяГруппаУУ
    |ИЗ
    |	РегистрСведений.ГМС_СоответствиеНоменклатурыИНоменклатурнымГруппамУпр КАК ГМС_СоответствиеНоменклатурыИНоменклатурнымГруппамУпр
    |ГДЕ
    |	ГМС_СоответствиеНоменклатурыИНоменклатурнымГруппамУпр.Период = &дата";
    Запрос.УстановитьПараметр("Дата", НачалоКвартала(ДатаЗаполнения));
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл 
    Запись=РегистрыСведений.ГМС_СоответствиеНоменклатурыИНоменклатурнымГруппамУпр.СоздатьМенеджерЗаписи();
    Запись.Период=ДатаЗамены;
    Запись.Организация=Выборка.Организация;
    Запись.Номенклатура=Выборка.Номенклатура;
    Запись.НоменклатурнаяГруппаУУ=Выборка.НоменклатурнаяГруппаУУ;
    Запись.Записать(); 
    КонецЦикла;
    
    
    Проблема в том, что раньше я работала с СУБД и пока ещё считаю :aua: , что можно было просто изменить значение реквизита. Но в регистрах сведений 1С такое, похоже, не прокатит. Мой код добавил тоже самое количество записей, но с другим периодом, а вот оставить неизменным количество записей, а изменить только реквизит мне не удалось, А возможно ли это? :unsure:
  5. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Да. возможно для этого и используется набор записей.

    Код:
    КурсыВалют = РегистрыСведений.КурсыВалют;
    НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();//создается набор записей
    НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));///устанавливается отбор по периоду т.е выбираются все записи На начало дня текущей даты у вас это будет 1 апреля
    НаборКурсов.Прочитать(); //считываем набор
    ////делаем с набором что надо
    
    НаборКурсов.Записать();//записываем этот набор
    
    
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Можно и через менеджер записи, но необходимо делать Запись.Записать(Истина), т.е. перезаписать существующую
  7. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здрастуйте!
    Дополнительно:
    Если Вы отбираете записи для изменения укажите это
    Код:
    ВЫБРАТЬ 
    ...
    ДЛЯ ИЗМЕНЕНИЯ
    
    
    Пока не наткнулись на конфликт группировок
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    мож на конфликт блокировок?
  9. TopicStarter Overlay
    sin_lgm
    Offline

    sin_lgm

    Регистрация:
    19 окт 2009
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Делаем, что надо,
    Код:
    Соответствие = РегистрыСведений.ГМС_СоответствиеНоменклатурыИНоменклатурнымГруппамУпр;
    НаборДанных = Соответствие.СоздатьНаборЗаписей();
    НаборДанных.Отбор.Период.Установить(НачалоКвартала(ДатаЗаполнения));
    НаборДанных.Прочитать();
    Для каждого Зап из НаборДанных Цикл
    Зап.Период=НачалоГода(ДатаЗаполнения);
    Сообщить("Поменяли дату у номенклатуры "+Зап.Номенклатура);
    КонецЦикла;
    НаборДанных.Записать();
    
    
    а при записи выходит сообщение
    Получается, что с новым периодом можно только добавить?
    Извините, если вам кажется что я не понимаю очевидного... :smile:
    Но это сообщение выходит при любом варианте работы, что с записью, что с набором записей(((
    и что нужно сделать? снять отбор, всё-равно будет создана новая запись, существующая не измениться :unsure:
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну можно создать ще один набор данных, и уже туда из набора данных прочитанного писать данные и новый период а в конце делать

    НаборДанных1. Очистить().
    НаборДанных1.Записать();

    НаборДанных2.Записать(Ложь);
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Пример из книги:
    Код:
    Процедура ЗаменаПериода()
    
    Запрос = Новый Запрос;
    
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	ОтветственныеЛицаОрганизации.Период,
    |	ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница,
    |	ОтветственныеЛицаОрганизации.ОтветственноеЛицо
    |ИЗ
    |	РегистрСведений.ОтветственныеЛицаОрганизации КАК ОтветственныеЛицаОрганизации
    |ГДЕ
    |	ОтветственныеЛицаОрганизации.Период <= ДАТАВРЕМЯ(2005, 1, 1)
    |	И 
    |	ОтветственныеЛицаОрганизации.СтруктурнаяЕдиница.Наименование ПОДОБНО ""Групп-Трейдинг""
    |	И 
    |	(ОтветственныеЛицаОрганизации.Должность.Наименование ЕСТЬ NULL 
    |	 ИЛИ 
    |	 НЕ(ОтветственныеЛицаОрганизации.Должность.Наименование ПОДОБНО ""Продавец"" 
    |		ИЛИ 
    |		ОтветственныеЛицаОрганизации.Должность.Наименование ПОДОБНО ""Кладовщик""))";
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Запись = РегистрыСведений.ОтветственныеЛицаОрганизации.СоздатьМенеджерЗаписи();
    
    Пока Выборка.Следующий() Цикл
    
    Запись.Период 			  = Выборка.Период;
    Запись.СтруктурнаяЕдиница = Выборка.СтруктурнаяЕдиница;
    Запись.ОтветственноеЛицо  = Выборка.ОтветственноеЛицо;
    
    Запись.Прочитать();
    
    Если Запись.Выбран() Тогда
    Запись.Период = Дата(2004, 1, 1);
    
    Запись.Записать();		 
    
    КонецЕсли;
    
    КонецЦикла;
    
    КонецПроцедуры;
    
    
Похожие темы
  1. Alex123
    Ответов:
    1
    Просмотров:
    242
Загрузка...

Поделиться этой страницей