Имя: Пароль:
1C
1С v8
Создание нового значения регистра сведений из формы документа
0 re-code
 
31.03.13
19:04
У меня задание: Если в табличной части накладной изменяется значение одной из колонок, то необходимо записать это новое значение в периодический регистр сведений.
При попытке создать движение
&НаСервере
Процедура ОбработкаПроведения(Отказ, Режим)
   Движения.Продажи.Записывать = Истина;
   Движение = Движения.Продажи.Добавить();
   Движение.Активность = Истина;
   Движение.Период = Дата;
   Движение.Регистратор = ЭтотОбъект.Ссылка;
   Движение.Товар = ТекСтрокаСписокТоваров.Товар;
   Движение.ЦенаПродажи = ТекСтрокаСписокТоваров.Цена;
КонецПроцедуры

у меня ничего не выходит
1 EugeniaK
 
31.03.13
19:07
(0) Ну а что не выходит то?
Активность и регистратор заполнять не нужно, сами заполнятся.
Документ вообще является регистратором для этого РС?
2 EugeniaK
 
31.03.13
19:09
(0) И как система должна понять, к какой  строке табличной части ты обращаешься?
Цикл по строкам еще нужен.
И сравнение со старым значением желательно.
3 re-code
 
31.03.13
19:12
Да является.
На счет активности ничего сказать не могу, а вот колонка регистратор при проведении у меня не заполнялась.

Движения с формы не проходят, не знаю пока почему, появляется ошибка
{Документ.РасхНакл.Форма.ФормаДокумента.Форма(38,5)}: Переменная не определена (Движения)
   <<?>>Движения.Продажи.Записывать = Истина; (Проверка: Сервер)
{Документ.РасхНакл.Форма.ФормаДокумента.Форма(39,13)}: Переменная не определена (Движения)
   Движение = <<?>>Движения.Продажи.Добавить(); (Проверка: Сервер)
{Документ.РасхНакл.Форма.ФормаДокумента.Форма(41,20)}: Переменная не определена (Дата)
   Движение.Период = <<?>>Дата; (Проверка: Сервер)
{Документ.РасхНакл.Форма.ФормаДокумента.Форма(42,25)}: Переменная не определена (ЭтотОбъект)
   Движение.Регистратор = <<?>>ЭтотОбъект.Ссылка; (Проверка: Сервер)
{Документ.РасхНакл.Форма.ФормаДокумента.Форма(43,19)}: Переменная не определена (ТекСтрокаСписокТоваров)
   Движение.Товар = <<?>>ТекСтрокаСписокТоваров.Товар; (Проверка: Сервер)
{Документ.РасхНакл.Форма.ФормаДокумента.Форма(44,25)}: Переменная не определена (ТекСтрокаСписокТоваров)
   Движение.ЦенаПродажи = <<?>>ТекСтрокаСписокТоваров.Цена; (Проверка: Сервер)
4 re-code
 
31.03.13
19:15
EugeniaK, Я хочу вызвать движение при измении реквезита табличной части
Движения в модуле объекта проходят, а вот в модуле формы нет
5 EugeniaK
 
31.03.13
19:15
(3) А при чем тут вообще форма?
"Обработка проведения" вообще-то в модуле объекта расположена.
6 EugeniaK
 
31.03.13
19:18
(4) В контексте формы нет переменной Движения.
Нужно обращаться Объект.Движения
И не Движения.Продажи.Записывать = Истина (эта команда используется только в обработке проведения в модуле объекта)
а Объект.Движения.Продажи.Записать()
7 EugeniaK
 
31.03.13
19:21
(4) Только такой подход изначально неверный.
У тебя получается. что пользователь ходит по форме и что-то меняет, а ты сразу пишешь в регистр.
Пользователь вообще может передумать и закрыть документ без сохранения.
Движения должны делаться только при сохранении формы.
Т.е. перед записью в транзакции вытащить из базы данных старые значения, сравнить с табличной частью, и если что-то поменялось, то сформировать движения.
8 re-code
 
31.03.13
19:50
Евгения, спасибо. Не буду оправдываться тем, что я новичек, мысли у тебя разумные, постараюсь реализовать твой вариант.

Реализовывать думаю следующим образом.
При сохранении я получаю актуально значение регистра по данному товару, если значение отличается или товар отсутствует в регистре - создаю новую запись. Верно ?
9 EugeniaK
 
31.03.13
20:17
(8) Да, все верно.
В этом случае можно использовать обработку проведения в модуле объекта.
10 re-code
 
31.03.13
20:54
Скажите, как создать регистр сведений, общий для расходных накладных, но в тоже время от них зависящий ?
Попробую по-русски объяснить.
Необходимо создать периодический регистр сведений с измерением типа Справочник "Товары" и ресурсом "ЦенаПродажи", значение которого может изменяться только документом РасхНакл. В расходной накладной при выборе товара в графу "Цена" должно заноситься значение из реквизита "ЦенаПродажи" регистра сведений на дату документа. Если в накладной значение цены продажи изменяется, то новое значение должно быть записано в периодический регистр сведений "ЦенаПродажи"

Я понимаю это так:
Записи в регистре создаются строго РасхНакл -> Режим записи я ставлю: подчинение регистратору.
Далее, допустим в первой накладной я указал цену продажи стола 200р , эта цена при проведении записалась в регистр "ЦенаПродажи" и при добавлении стола в табличную часть второй накладной актуальная цена должна автоматически подставиться из регистра сведений, но этого не происходит...

Объясните, где я ошибаюсь и каким способом мне реализовать поставленную передо мной задачу ?
11 EugeniaK
 
31.03.13
21:20
(10)
Обычныый периодический регистр сведений с регистратором "Расходная накладная"

"актуальная цена должна автоматически подставиться из регистра сведений"
Добавить процедуру на событие "При изменении" элемента формы "Номенклатура". Процедура должна получать значение цены  из РС "ЦенаПродажи" по текущей номенклатуре на дату документа (в процедуре определять цену запросом или функцией "ПролучитьПоследнее") и записывать эту цену в поле "Цена".

При проведении докумнта для каждой строки определять, совпадает ли цена в строке с ценой в РС. Если не совпадает, то добавить запись в РС.
12 toypaul
 
гуру
31.03.13
21:32
(4) если отслеживать изменения в форме надо, то делаем через СоздатьНаборЗаписей
13 re-code
 
31.03.13
21:50
(11) Если установить режим записи Регистратор, тогда к каждой накладной будут соответствовать свои записи в регистраторе.
Мне же исходя из условия задачи, нужно чтобы эти записи были общими, поскольку сначала цена указывается из накладной, после чего при создании новых накладных цена должна получаться из регистра сведений.
Но если установить режим записи Независимый, тогда значение ресурса ЦенаПродажи может изменяться не только Приходной накладной...
или я снова не в верном направлении размышляю ?
14 EugeniaK
 
31.03.13
22:16
(13) Регистратор это просто автор записи.
При считывании значения учитывается только измерение номенклатура.
Т.е. это общая запись, считывать ее может любой документ.
Имеет значение только Период записи. По нему определяется последнее значение. Регистратор не важен.