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

как правильно получить запись из регистра накопления

Автор Yamuna, 28 мая 2019, 08:32

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

Yamuna

Добрый день Уважаемые коллеги! При проведении документа выбираем из регистра накопления данные о количестве,выдаем сообщение когда проводим документ и при проведении в сообщении показывает число на 1 меньше чем в регистре.И если документ провести еще раз, то тогда все показывает правильно.  Документ является регистратором для этого регистра. Почему так происходит?

Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

// регистр РегистрацияЧерезДокумент
Движения.РегистрацияЧерезДокумент.Записывать = Истина;
Движение = Движения.РегистрацияЧерезДокумент.Добавить();
Движение.Период = Дата;
Движение.Клиент = Клиент;
Движение.Рефер = Рефер;
Движение.Количество = Количество;

// регистр КонтрагентыОбороты
Движения.КонтрагентыОбороты.Записывать = Истина;
Движение = Движения.КонтрагентыОбороты.Добавить();
Движение.Период = Дата;
Движение.Клиент = Клиент;
Движение.Рефер = Рефер;
Движение.Количество = Количество;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
ПроверитьПодчиненныеЭлементы(Рефер);
//ПроверитьФлагАктивирован(Рефер);
КонецПроцедуры

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


//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

Запрос.УстановитьПараметр("Рефер", Рефер);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.КоличествоПодчиненных = 5 Тогда
СсылкаОбъекта = Справочники.КабинетНачинающихУчастников.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.Рефер).ПолучитьОбъект();
СсылкаОбъекта.Активирован = Истина;
СсылкаОбъекта.Записать();
КонецЕсли;
КонецЦикла;

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Строка(ВыборкаДетальныеЗаписи.Рефер)+" имеет подчиненных - "+ВыборкаДетальныеЗаписи.КоличествоПодчиненных+" человек.";
Сообщение.Сообщить();


//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

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

LexaK

Процедура ПроверитьПодчиненныеЭлементы(Рефер)
    Движения.РегистрацияЧерезДокумент.Записать();
//это движение записать - есть

//а где запись - Движения.КонтрагентыОбороты ???
при первом проходе нет, после проведения - появляется
если помогло нажмите: Спасибо!

Yamuna

Цитата: LexaK от 28 мая 2019, 09:03
Процедура ПроверитьПодчиненныеЭлементы(Рефер)
    Движения.РегистрацияЧерезДокумент.Записать();
//это движение записать - есть

//а где запись - Движения.КонтрагентыОбороты ???
при первом проходе нет, после проведения - появляется
спасибо! я нажал кнопку, есть еще вопрос как правильно поставить условие проверки для записи движений в регистр сведений на пустое значение? если есть запись с такими измерениями, то тогда продолжить,а если нет то записать?
Процедура ПроверитьПодчиненныеЭлементы(Рефер)
Движения.КонтрагентыОбороты.Записать();
Движения.РегистрСведенийДляАктивированных.Записывать = Истина;
   

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

Запрос.УстановитьПараметр("Рефер", Рефер);

РезультатЗапроса = Запрос.Выполнить();

Движение = Движения.РегистрСведенийДляАктивированных.Добавить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.КоличествоПодчиненных = 5 Тогда
СсылкаОбъекта = Справочники.СписокНачинающихУчастников.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.Рефер).ПолучитьОбъект();
СсылкаОбъекта.Активирован = Истина;
СсылкаОбъекта.Записать();
Если Движение.Рефер.ПустойКлюч()  Тогда
Движение.Рефер = ВыборкаДетальныеЗаписи.Рефер;
Движение.Активирован = Истина;
иначе
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Движения.Записать();
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Строка(ВыборкаДетальныеЗаписи.Рефер)+" имеет подчиненных - "+ВыборкаДетальныеЗаписи.КоличествоПодчиненных+" человек.";
Сообщение.Сообщить();
КонецПроцедуры

LexaK

для вас примерно так

Движения.КонтрагентыОбороты.Записывать = Истина;
Если ЗначениеЗаполнено(Дата)
    и ЗначениеЗаполнено(Клиент)
    и ЗначениеЗаполнено(Рефер)
    и ЗначениеЗаполнено(Количество) Тогда

    //все данные заполнены, помещаем в Регистр
    Движение = Движения.КонтрагентыОбороты.Добавить();
    Движение.Период = Дата;
    Движение.Клиент = Клиент;
    Движение.Рефер = Рефер;
    Движение.Количество = Количество;

КонецЕсли;   
если помогло нажмите: Спасибо!

Yamuna

Цитата: LexaK от 28 мая 2019, 12:29
для вас примерно так

Движения.КонтрагентыОбороты.Записывать = Истина;
Если ЗначениеЗаполнено(Дата)
    и ЗначениеЗаполнено(Клиент)
    и ЗначениеЗаполнено(Рефер)
    и ЗначениеЗаполнено(Количество) Тогда

    //все данные заполнены, помещаем в Регистр
    Движение = Движения.КонтрагентыОбороты.Добавить();
    Движение.Период = Дата;
    Движение.Клиент = Клиент;
    Движение.Рефер = Рефер;
    Движение.Количество = Количество;

КонецЕсли;   

пока не получилось ошибка Запись с такими ключевыми полями существует! а как проверить есть ли запись с такими ключевыми полями?

LexaK

а зачем проверять? просто удалите старые записи.
сделайте автоматическое удаление движений
Конфигуратор - Свойства документа - Движения - Удаление движений = Удалять автоматически
(или сами перед записью удаляйте старые движения)
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск