Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 ноя 2024, 05:50

Работа с регистром

Автор SW, 14 ноя 2010, 18:13

0 Пользователей и 2 гостей просматривают эту тему.

SW

Есть общий модуль РаботаСоСправочниками, в котором есть функция:
Функция ЦенаКом(АктуальнаяДата, ЭлементКомната) Экспорт
Отбор = Новый Структура("Комната", ЭлементКомната);
ЗначенияРесурсов = РегистрыСведений.ЦенаНомера.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.Цена;
КонецФункции


И есть документ ЗаселениеГостя с процедурами:
Процедура КомнатаПриИзменении(Элемент)
Если ИнфНомер.Количество() Тогда
ИнфНомер[0].Тип = Комната.Тип;
ИнфНомер[0].Этаж = Комната.Этаж;
Если ДокОснование.Пустая() Тогда
ИнфНомер[0].Цена = РаботаСоСправочниками.ЦенаКом(Дата, Элемент.Значение);
    Иначе ИнфНомер[0].Цена = РаботаСоСправочниками.ЦенаКом(Дата, Элемент);
КонецЕсли;
ИнфНомер[0].ОтвЛицо = Комната.ОтветственноеЛицо;
ИнфНомер[0].ДопИнф = Комната.ДопИнф;
Иначе
НС = ИнфНомер.Добавить();
НС.Тип = Комната.Тип;
НС.Этаж = Комната.Этаж;
НС.Цена = РаботаСоСправочниками.ЦенаКом(Дата, Элемент.Значение);
НС.ОтвЛицо = Комната.ОтветственноеЛицо;
НС.ДопИнф = Комната.ДопИнф;
КонецЕсли;
ЗаселениеИзменение(Комната);
КонецПроцедуры

Процедура ДокОснованиеПриИзменении(Элемент)
Клиент = ДокОснование.Клиент;
Комната = ДокОснование.Комната;
ДатаВъезда = ДокОснование.ДатаВъезда;
ДатаВыезда = ДокОснование.ДатаВыезда;
КомнатаПриИзменении(Комната);
Если СтандартУслуги.Количество()=2 Тогда
СтандартУслуги.Удалить(1);
Иначе
НоваяСтрока = СтандартУслуги.Добавить();
НоваяСтрока.Услуга = "Бронирование индивидуальное";
НоваяСтрока.Количество = 1;
НоваяСтрока.Цена = 200;
НоваяСтрока.Сумма = НоваяСтрока.Количество*НоваяСтрока.Цена;
КонецЕсли;

КонецПроцедуры

Процедура ЗаселениеИзменение(Элемент)
СтандартУслуги[0].Количество = (ДатаВыезда-ДатаВъезда)/86400;
СтандартУслуги[0].Цена = РаботаСоСправочниками.ЦенаКом(Дата, Элемент);
СтандартУслуги[0].Сумма = СтандартУслуги[0].Количество*СтандартУслуги[0].Цена;
КонецПроцедуры


В отладке, при выборе поля документ основания все нормально заполняется, но при удалении данного поля выдает ошибку:
Цитировать{Документ.ЗаселениеГостя.Форма.ФормаДокумента(6)}: Поле объекта не обнаружено (Значение)
      ИнфНомер[0].Цена = РаботаСоСправочниками.ЦенаКом(Дата, Элемент.Значение);
Как исправить код, чтоб избежать ошибки?

progmikon

А при пустом основании у вас реквизит "Комната" заполнен?
Есть возможность выложить конфигурацию?

progmikon

И еще...
Элемент.Значение замените сразу на реквизит "Комната".

SW

Спасибо) Если не указывать откуда извлекать значение, а напрямую подать значение ссылочного типа, то все работает, т.е. Элемент.Значение заменить на "Комната".

progmikon

Т.е заработало как надо?

SW

Да, практически :) нашёл другой косяк %)

SW

Писал ранее про заменение строки в регистре при проведении документа, а как можно удалить строку из регистра, при проведении документа?

progmikon

Ну для начала вам нужно будет его прочитать:

НужныйРегистр=РегистрыНакопления.Регистр;
Набор=НужныйРегистр.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(СсылкаНаРегистратора);
Набор.Прочитать();
//!!!!!
Набор.Записать();

SW

И сразу такой вопрос, можно ли открывать форму выбора у справочника и документа с включенным сразу фильтром?

progmikon


Форма = Справочники.Справочник1.ПолучитьФормуВыбора();
Форма.СправочникСписок.Отбор.РЕКВИЗИТ.Установить(ЗНАЧЕНИЕ_РЕКВИЗИТА);
Форма.Открыть();


П.С. SW просьба: для каждого вопроса (не относящегося к текущей теме) - отдельная тема. Чтоб порядок был :)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск