Версия для печати темы (https://pro1c.org.ua/index.php?s=b0c8157c112223df2c8625c75e4aff5c&showtopic=55551)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Проведение по не типовому регистру собственного (созданного) документа

Автор: maxst22 04.12.19, 11:03

Конфигурация: BAS ERP (2.1.13.2)
1С:Предприятие 8.3 (8.3.15.1565)

Делаю собственную систему бонусов (не хочу, нет возможности использовать типовую как мне нужно)
Создал новый документ "СписаниеБонусов"
Создал регистр накопления "м_БонусныеБаллыПоЗаказам"



где
БонуснаяПрограммаЛояльности - СправочникСсылка.БонусныеПрограммыЛояльности
СеткаНачисленияБонусов - ДокументСсылка.СеткаНачисленияБонусов (новый документ - правила по которым рассчитываются бонусы)
Партнер - СправочникСсылка.Партнеры
Заказ - ДокументСсылка.ЗаказКлиента
-------------
Начислено - Число (собственно бонусы)

Движения приход делаются в подписке на события в документе "ЗаказКлиента" - тут все Ок. Движения записываются

Проблема в новом документе "СписаниеБонусов".

Хочу сделать все как в типовом проведении:

Код

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


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

В этой процедуре вызывается функция

Код
        МассивИменРегистров = ПолучитьМассивИспользуемыхРегистров(
            Объект.Ссылка,
            МетаданныеДвижения,
            ИсключаемыеРегистры);


Вот она ничего не возвращает sad.gif а должна вернуть массив регистров по которым двигается документ. Мой документ "двигается" только по ОДНОМУ моему регистру "м_БонусныеБаллыПоЗаказам"
говорю сразу: в регистратор для этого регистра данный документ ДОБАВЛЕН



что не срабатывает конкретно: функция ПолучитьМассивИспользуемыхРегистров()

Код
// Функция формирует массив имен регистров, по которым документ имеет движения.
// Вызывается при подготовке записей к регистрации движений.
//
Функция ПолучитьМассивИспользуемыхРегистров(Регистратор, Движения, МассивИсключаемыхРегистров = Неопределено) Экспорт

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Регистратор", Регистратор);

    Результат = Новый Массив;
    МаксимумТаблицВЗапросе = 256;

    СчетчикТаблиц   = 0;
    СчетчикДвижений = 0;

    ВсегоДвижений = Движения.Количество();
    ТекстЗапроса  = "";
    Для Каждого Движение Из Движения Цикл

        СчетчикДвижений = СчетчикДвижений + 1;

        ПропуститьРегистр = МассивИсключаемыхРегистров <> Неопределено
                            И МассивИсключаемыхРегистров.Найти(Движение.Имя) <> Неопределено;

        Если Не ПропуститьРегистр Тогда

            Если СчетчикТаблиц > 0 Тогда

                ТекстЗапроса = ТекстЗапроса + "
                |ОБЪЕДИНИТЬ ВСЕ
                |";

            КонецЕсли;

            СчетчикТаблиц = СчетчикТаблиц + 1;

            ТекстЗапроса = ТекстЗапроса +
            "
            |ВЫБРАТЬ ПЕРВЫЕ 1
            |""" + Движение.Имя + """ КАК ИмяРегистра
            |
            |ИЗ " + Движение.ПолноеИмя() + "
            |
            |ГДЕ Регистратор = &Регистратор
            |";

        КонецЕсли;

        Если СчетчикТаблиц = МаксимумТаблицВЗапросе Или СчетчикДвижений = ВсегоДвижений Тогда

            Запрос.Текст  = ТекстЗапроса;
            ТекстЗапроса  = "";
            СчетчикТаблиц = 0;

            Если Результат.Количество() = 0 Тогда

                Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ИмяРегистра");

            Иначе

                Выборка = Запрос.Выполнить().Выбрать();
                Пока Выборка.Следующий() Цикл
                    Результат.Добавить(Выборка.ИмяРегистра);
                КонецЦикла;

            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    Возврат Результат;

КонецФункции


текст запроса в отладчике:

Код
ВЫБРАТЬ ПЕРВЫЕ 1
"м_БонусныеБаллыПоЗаказам" КАК ИмяРегистра

ИЗ РегистрНакопления.м_БонусныеБаллыПоЗаказам

ГДЕ Регистратор = &Регистратор


Получаем пустой результат запроса







а должен быть массив с именем регистра

Посоветуйте, где может быть ошибка?


 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 8
 

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua