Конфигурация: BAS ERP (2.1.13.2)
1С:Предприятие 8.3 (8.3.15.1565)
Делаю собственную систему бонусов (не хочу, нет возможности использовать типовую как мне нужно)
Создал новый документ "СписаниеБонусов"
Создал регистр накопления "м_БонусныеБаллыПоЗаказам"
где
БонуснаяПрограммаЛояльности - СправочникСсылка.БонусныеПрограммыЛояльности
СеткаНачисленияБонусов - ДокументСсылка.СеткаНачисленияБонусов (новый документ - правила по которым рассчитываются бонусы)
Партнер - СправочникСсылка.Партнеры
Заказ - ДокументСсылка.ЗаказКлиента
-------------
Начислено - Число (собственно бонусы)
Движения приход делаются в подписке на события в документе "ЗаказКлиента" - тут все Ок. Движения записываются
Проблема в новом документе "СписаниеБонусов".
Хочу сделать все как в типовом проведении:
Код // Инициализация дополнительных свойств для проведения документа
ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(Ссылка, ДополнительныеСвойства, РежимПроведения);
// Инициализация данных документа
Документы.СписаниеБонусов.ИнициализироватьДанныеДокумента(Ссылка, ДополнительныеСвойства);
// Подготовка наборов записей
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
// не срабатывает в процедуре ПодготовитьНаборыЗаписейКРегистрацииДвижений()
// МассивИменРегистров = ПолучитьМассивИспользуемыхРегистров(
Движения.м_БонусныеБаллыПоЗаказам.Записывать = Истина; // заплатка
ПроведениеСервер.ЗаписатьНаборыЗаписей(ЭтотОбъект);
Проблема в
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
В этой процедуре вызывается функция
Код МассивИменРегистров = ПолучитьМассивИспользуемыхРегистров(
Объект.Ссылка,
МетаданныеДвижения,
ИсключаемыеРегистры);
Вот она ничего не возвращает
а должна вернуть массив регистров по которым двигается документ. Мой документ "двигается" только по ОДНОМУ моему регистру "м_БонусныеБаллыПоЗаказам"
говорю сразу: в регистратор для этого регистра данный документ ДОБАВЛЕН
что не срабатывает конкретно: функция ПолучитьМассивИспользуемыхРегистров()
Код// Функция формирует массив имен регистров, по которым документ имеет движения.
// Вызывается при подготовке записей к регистрации движений.
//
Функция ПолучитьМассивИспользуемыхРегистров(Регистратор, Движения, МассивИсключаемыхРегистров = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Регистратор", Регистратор);
Результат = Новый Массив;
МаксимумТаблицВЗапросе = 256;
СчетчикТаблиц = 0;
СчетчикДвижений = 0;
ВсегоДвижений = Движения.Количество();
ТекстЗапроса = "";
Для Каждого Движение Из Движения Цикл
СчетчикДвижений = СчетчикДвижений + 1;
ПропуститьРегистр = МассивИсключаемыхРегистров <> Неопределено
И МассивИсключаемыхРегистров.Найти(Движение.Имя) <> Неопределено;
Если Не ПропуститьРегистр Тогда
Если СчетчикТаблиц > 0 Тогда
ТекстЗапроса = ТекстЗапроса + "
|ОБЪЕДИНИТЬ ВСЕ
|";
КонецЕсли;
СчетчикТаблиц = СчетчикТаблиц + 1;
ТекстЗапроса = ТекстЗапроса +
"
|ВЫБРАТЬ ПЕРВЫЕ 1
|""" + Движение.Имя + """ КАК ИмяРегистра
|
|ИЗ " + Движение.ПолноеИмя() + "
|
|ГДЕ Регистратор = &Регистратор
|";
КонецЕсли;
Если СчетчикТаблиц = МаксимумТаблицВЗапросе Или СчетчикДвижений = ВсегоДвижений Тогда
Запрос.Текст = ТекстЗапроса;
ТекстЗапроса = "";
СчетчикТаблиц = 0;
Если Результат.Количество() = 0 Тогда
Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ИмяРегистра");
Иначе
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Результат.Добавить(Выборка.ИмяРегистра);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
текст запроса в отладчике:
КодВЫБРАТЬ ПЕРВЫЕ 1
"м_БонусныеБаллыПоЗаказам" КАК ИмяРегистра
ИЗ РегистрНакопления.м_БонусныеБаллыПоЗаказам
ГДЕ Регистратор = &Регистратор
Получаем пустой результат запроса
а должен быть массив с именем регистра
Посоветуйте, где может быть ошибка?
Сообщение отредактировал Vofka - 04.12.19, 11:42