Удалить данные из регистра накопление

1. _7445_ 06.04.19 16:09 Сейчас в теме
В УТ 10.3
Не могу удалить запись РН остатки. Где ошибка ?
Процедура ПродавецПриИзменении(Элемент)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	БонусСотрудникаОстатки.Продавец,
		|	БонусСотрудникаОстатки.СуммаОстаток,
		|	БонусСотрудникаОстатки.КоличествоОстаток,
		|	БонусСотрудникаОстатки.СуммаПродажыОстаток
		|ИЗ
		|	РегистрНакопления.БонусСотрудника.Остатки(&КонецПериода, Продавец = &Продавец) КАК БонусСотрудникаОстатки";
	
	Запрос.УстановитьПараметр("КонецПериода", ДокументОбъект.Дата);
	Запрос.УстановитьПараметр("Продавец", Продавец);
	
	РезультатЗапроса = Запрос.Выполнить();
	Если НЕ РезультатЗапроса = Неопределено Тогда	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	ВыборкаДетальныеЗаписи.Следующий();
	Стоимость = ВыборкаДетальныеЗаписи.СуммаОстаток;
КонецЕсли;
	
КонецПроцедуры

Процедура СформироватьНажатие(Элемент)
	Набор = РегистрыНакопления.БонусСотрудника.СоздатьНаборЗаписей();
	Набор.Отбор.Регистратор.Значение = ДокументОбъектПродавец;
	Набор.Записать();
КонецПроцедуры
Показать


Выдают ошибки как - ошибка при установке значения атрибута контекста (значение) неверный тип значения.
Если написать так -
 Набор.Отбор.Продавец.Значение = ДокументОбъектПродавец

Тогда выдают токую ошибку - Поле объекта не обнаружено (Продавец)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. expandev 06.04.19 16:41 Сейчас в теме
В регистрах накопления отбор нужно устанавливать по регистратору. Регистратор - это документ, сформировавший движения в регистре, а не измерение.
3. _7445_ 06.04.19 16:56 Сейчас в теме
Процедура ПродавецПриИзменении(Элемент)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	БонусСотрудникаОстатки.Продавец,
		|	БонусСотрудникаОстатки.СуммаОстаток,
		|	БонусСотрудникаОстатки.КоличествоОстаток,
		|	БонусСотрудникаОстатки.СуммаПродажыОстаток
		|ИЗ
		|	РегистрНакопления.БонусСотрудника.Остатки(&КонецПериода, Продавец = &Продавец) КАК БонусСотрудникаОстатки";
	
	Запрос.УстановитьПараметр("КонецПериода", ДокументОбъект.Дата);
	Запрос.УстановитьПараметр("Продавец", Продавец);
	
	РезультатЗапроса = Запрос.Выполнить();
	Если НЕ РезультатЗапроса = Неопределено Тогда	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	ВыборкаДетальныеЗаписи.Следующий();
	Стоимость = ВыборкаДетальныеЗаписи.СуммаОстаток;
КонецЕсли;
	
КонецПроцедуры

Процедура СформироватьНажатие(Элемент)
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	ОтчетОРозничныхПродажах.Ссылка.Ссылка,
	               |	ОтчетОРозничныхПродажах.Продавец,
	               |	СУММА(ОтчетОРозничныхПродажах.Сумма) КАК Сумма
	               |ИЗ
	               |	Документ.ОтчетОРозничныхПродажах.ДвиженияПродавцам КАК ОтчетОРозничныхПродажах
	               |ГДЕ
	               |	ОтчетОРозничныхПродажах.Продавец = &Продавец
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ОтчетОРозничныхПродажах.Продавец,
	               |	ОтчетОРозничныхПродажах.Ссылка.Ссылка";
	Запрос.УстановитьПараметр("Продавец", ДокументОбъект.Продавец);
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
		
	Набор = РегистрыНакопления.БонусСотрудника.СоздатьНаборЗаписей();
	Набор.Отбор.Регистратор.Значение = Выборка.Ссылка;
	Набор.Записать();
КонецПроцедуры
Показать

Так надо?
4. expandev 06.04.19 22:42 Сейчас в теме
(3)
В теме поста описана возникшая проблема, но не постановка задачи, поэтому я не могу Вам ответить "как надо".
Касаемо Вашего кода:

Процедура "ПродавецПриИзменении"
1. Переменная РезультатЗапроса в данном случае никогда не будет равна Неопределено, поэтому такого вида условный оператор здесь лишний. Правильно будет
Если Не РезульатаЗапроса.Пустой() Тогда

2. Из выборки используете только поле "СуммаОстаток", а в тексте запроса просите систему посчитать ещё и поля "КоличествоОстаток" и "СуммаПродажыОстаток" (почему "Продажы" оканчивается на букву "ы"? :) ).

Процедура "СформироватьНажатие"
1. Запрос нужно строить к регистру (условие: Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах), а не к табличной части документа. В результат Вашего запроса в данном случае также попадут непроведённые документы, у которых нет движений.
2. Не понятно, Вы пытаетесь очистить движения в регистре накопления из формы документа по кнопке "Сформировать"?
Если да, то так не нужно делать. Во-первых, при перепроведении документов "Отчет о розничных продажах" данные в регистре накопления будут сформированы заново. Во-вторых, движения по регистру могут делать не только отчеты о розничных продажах, в результате остатки никуда не денутся (станут, например, отрицательными :)).
Есть два варианта:
а) Делаете Ваш документ регистратором в регистре накопления и в модуле документа в обработчике проведения формируете движения по списанию остатков в регистре (новые движения, а не очистку движений других документов).
б) Делаете обработку, которая получит нужные остатки и заполнит документ "Корректировка записей регистров".

Опустил детали: запись пустого набора, установка блокировок перед чтением остатков, остатки на момент времени и т.п.
5. Dmitrij-2 48 07.04.19 09:31 Сейчас в теме
Попробуйте так

Набор = РегистрыНакопления.БонусСотрудника.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Усиановить(ДокументОбъектПродавец);
Набор.Прочитать();
Набор.Очистить();
Набор.Записать();
6. meriferi 09.04.19 14:14 Сейчас в теме
Есть обработка на диске ИТС CleaneReg называется, она по регистрам сведений и накопления
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот