Имя: Пароль:
1C
1С v8
Не производится запись в регистр накопления
,
0 Yukki
 
28.05.21
12:10
Нужна помощь, не понимаю почему все записи записываются в регистр накопления "ОборотыПоРасходамВнеЗарплаты"
А нужно чтобы данные записывались в регистр "РасходыСубсидий" , а когда заканчивались деньги из субсидии и сотрудники платили свои деньги,то это бы записывалось в "ОборотыПоРасходамВнеЗарплаты"
Помогите пожалуйста)


Процедура ОбработкаПроведения(Отказ, Режим)
    
    Движения.РасходыСубсидий.Записать();
    Движения.ОборотыПоРасходамВнеСубсидий.Записать();
//Получение времени покупки еды в столовой    
    МоментВремениДокумента=Ссылка.Дата;
    Сообщить("Питание в столовой в "+ Час(МоментВремениДокумента)+ ":"+Минута(МоментВремениДокумента));
//Проверка времени покупки еды в столовой    
Если Час(МоментВремениДокумента)<12 ИЛИ Час(МоментВремениДокумента)>= 13 тогда
    
    // регистр ОборотыПоРасходамВнеСубсидий
    Движения.ОборотыПоРасходамВнеСубсидий.Записывать = Истина;
    Движение = Движения.ОборотыПоРасходамВнеСубсидий.Добавить();
    Движение.Период = Дата;
    Движение.Сотрудник = Сотрудник;
    Движение.Сумма = Сумма;
    
        Иначе  
                          
    //регистр РасходыСубсидий
    Движения.РасходыСубсидий.Записывать = Истина;
    Движение = Движения.РасходыСубсидий.Добавить();
    Движение.Период = Дата;
    Движение.Сотрудник = Сотрудник;
    Движение.Сумма = Сумма;
    // получение начисленной субсидии ученику    
    отбор=новый структура("Сотрудник",Сотрудник);
    СубсидияСотрудника = РегистрыСведений.Субсидии.ПолучитьПоследнее(Дата, отбор);
    
        Сообщить("Сотруднику в этом месяце была назначена субсидия " +СубсидияСотрудника.РазмерСубсидии + " руб.");
//Получение данных об истраченной сумме субсидий за  месяц    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    док.Сотрудник КАК Сотрудник,
        |    док.Сумма КАК Сумма,
        |    ЕСТЬNULL(траты.СуммаОборот,0) КАК СуммаОборот
        |ИЗ
        |    Документ.ПитаниеВСтоловой КАК док
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасходыСубсидий.Обороты(&НачПериод,&КонПериод,,Сотрудник =&Сотрудник) КАК траты
        |        ПО док.Сотрудник = траты.Сотрудник
        |ГДЕ
        |    док.Ссылка = &ссылка";
    
    Запрос.УстановитьПараметр("ссылка", ссылка);
    Запрос.УстановитьПараметр("НачПериод", НачалоМесяца(ссылка.Дата));
    Запрос.УстановитьПараметр("КонПериод", КонецМесяца(ссылка.Дата));
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         сообщить("Этот сотрудник уже потратил из субсидии " + выборкаДетальныеЗаписи.СуммаОборот + " руб.");
        
         Траты=выборкадетальныеЗаписи.сумма+выборкаДетальныеЗаписи.СуммаОборот;
         //сообщить(Траты);
         разница=Траты-СубсидияСотрудника.РазмерСубсидии ;
         //Проверка хватит ли оставшишся средств субсидии на текущую покупку
         Если разница>0 тогда
             Сообщить("Превышен лимит субсидии на " + разница + " руб.");
             МожноПотратить= СубсидияСотрудника.РазмерСубсидии-выборкаДетальныеЗаписи.СуммаОборот;
            
             Сообщить("Можно потратить " + Можнопотратить+ " руб."+ "Необходимо доплатить "+ разница+ " руб.");
             Движения.РасходыСубсидий.Записать(Ложь);
             // запись движений документа в один или разные регистры в зависимости от остаточной суммы субсидии
             Если  МожноПотратить<>0 тогда

             Движения.РасходыСубсидий.Записывать = Истина;
             Движение = Движения.РасходыСубсидий.Добавить();
             Движение.Период = Дата;
             Движение.Сотрудник = Сотрудник;
             Движение.Сумма = МожноПотратить;
             КонецЕсли;
             Движения.ОборотыПоРасходамВнеСубсидий.Записывать = Истина;
             Движение = Движения.ОборотыПоРасходамВнеСубсидий.Добавить();
             Движение.Период = Дата;
             Движение.Сотрудник = Сотрудник;
             Движение.Сумма = разница;
            

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


КонецПроцедуры
1 brainguard
 
28.05.21
12:13
(0) В тексте нет такого регистра ОборотыПоРасходамВнеЗарплаты
2 Yukki
 
28.05.21
12:22
(1) Это я не правильно выразилась, он есть, но называется "ОборотыПоРасходамВнеСубсидий"
3 mistеr
 
28.05.21
12:57
(0) Какая конфа?

Помнится, я это штатными механизмами делал.
4 ДенисЧ
 
28.05.21
13:03
А что, в регистре накопления регистратор уже не модно указывать?
5 mistеr
 
28.05.21
13:10
(4) Оно само
6 ДенисЧ
 
28.05.21
13:16
(5) Сами только кошки и блохи заводятся
7 mikecool
 
28.05.21
13:17
(6) про кошек подтверждаю
8 Yukki
 
28.05.21
13:26
(4) Там все указано
9 acht
 
28.05.21
13:34
(8) При каких условиях в коде выполняется строка
Движение = Движения.РасходыСубсидий.Добавить();

?
10 ДенисЧ
 
28.05.21
13:48
(8)
Движение = Движения.ОборотыПоРасходамВнеСубсидий.Добавить();
Движение.Период = Дата;
Движение.Сотрудник = Сотрудник;
Движение.Сумма = разница;


Можно пальцем ткнуть?
11 mistеr
 
28.05.21
14:05
(10) Ты видать привык чужие движения курочить. :)
При проведении отбор уже стоит и регистратор заполняется автоматически.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан