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

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

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

Автор: burza 06.03.18, 11:52

Есть Документ связанный с регистром накопления. В документе есть поле номер договора, как мне при создании нового документа он лез в накопление и выводил мне информацию в поле(СуммаОплачено)сумму всех предыдущих документов по полю сравнения номера договора.
Можно хотя бы пример какой-то)


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 4,5
 


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

    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("Накра"));

   Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();

    
    Объект.ДолгКлиента = Выборка.СуммаПоСчету;

Автор: podcast 06.03.18, 11:56

burza @ Сегодня, 11:52 * ,

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

    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("Накра"));
  Запрос.УстановитьПараметр("НомерДоговора ",НомерДоговора ); //Указать нужный номер договора.
   Выборка = Запрос.Выполнить().Выбрать();
СуммаПоСчету = 0;    
Пока Выборка.Следующий() Цикл

    СуммаПоСчету  = СуммаПоСчету + Выборка.СуммаПоСчету;

КонецЦикла
Возврат СуммаПоСчету;

Это самый простой вариант, можно Итог с запроса взять.

Автор: burza 06.03.18, 11:58

podcast @ Сегодня, 11:56 * ,
Напишите как) в смысле код

Автор: logist 06.03.18, 11:59

ВЫБРАТЬ
    СУММА(ЕСТЬNULL(Расчеты.СуммаПоСчету , 0)) КАК СуммаПоСчету
ИЗ
    РегистрНакопления.РегистрСчетов.Обороты(, , , НомерДоговора = &НомерДоговора И Организация = &Организация) КАК Расчеты

Автор: podcast 06.03.18, 12:00

burza @ Сегодня, 11:58 * ,

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

    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("Накра"));
  Запрос.УстановитьПараметр("НомерДоговора ",НомерДоговора ); //Указать нужный номер договора.
   Выборка = Запрос.Выполнить().Выгрузить();
СуммаПоСчету = Выборка.Итог("СуммаПоСчету");    

Возврат СуммаПоСчету;

Автор: burza 06.03.18, 14:09

podcast @ Сегодня, 12:00 * ,
А как сравнивать если не указать номер договора чтобы он сам сравнивал если несколько документов с одинаковым номером договора выводил сумму

burza @ Сегодня, 13:47 * ,
То есть у меня есть заявки и у них свой номер при формировании счета нужно сравнивать предыдущие по номеру(номер заполняется с заявки) он один для всех документов одной заявки.

Здела так, вроде работает)

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

Выборка = Запрос.Выполнить().Выгрузить();
  
   Объект.ДолгКлиента = Выборка.Итог("СуммаПоСчету");

Автор: burza 06.03.18, 15:25

Подскажите еще как вот это впихнуть в цикл чтобы проверило всю табличную часть документа и проставило

Элементы.ОписаниеПутевки.ТекущиеДанные.Количество = Элементы.ОписаниеПутевки.ТекущиеДанные.Количество / 100 * 20;
    Элементы.ОписаниеПутевки.ТекущиеДанные.СуммаПоСчету = Объект.СуммаПоСчетуБезСкидок / 100 * 20;
     Элементы.ОписаниеПутевки.ТекущиеДанные.ЦенаПутевки = Элементы.ОписаниеПутевки.ТекущиеДанные.СуммаПоСчету / Элементы.ОписаниеПутевки.ТекущиеДанные.Количество;

Автор: podcast 06.03.18, 15:32

burza @ Сегодня, 15:25 * ,
В Событии ПриИзменении реквизита который вы водите вручную, либо сделать команду и пройти циклом всю таблицу.

Автор: burza 06.03.18, 15:35

podcast @ Сегодня, 15:32 * ,
Я не ввожу вручную при изменение не подходит, документ делается на основании и втягивает данные с родителя.
Ну команда есть а что то дописать?)у меня с цыклами проблемы)

&НаКлиенте
Процедура ЗаполнитьПоетапам(Команда)
    
    
        

    //Элементы.ОписаниеПутевки.ТекущиеДанные.Количество = Элементы.ОписаниеПутевки.ТекущиеДанные.Количество / 100 * 20;
    //Элементы.ОписаниеПутевки.ТекущиеДанные.СуммаПоСчету = Объект.СуммаПоСчетуБезСкидок / 100 * 20;
    // Элементы.ОписаниеПутевки.ТекущиеДанные.ЦенаПутевки = Элементы.ОписаниеПутевки.ТекущиеДанные.СуммаПоСчету / Элементы.ОписаниеПутевки.ТекущиеДанные.Количество;

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

Автор: logist 06.03.18, 15:47

Цитата(burza @ 06.03.18, 15:35) *
документ делается на основании и втягивает данные с родителя.

У документа нет Родителя, это у справочников. В модуле объекта есть процедура ОбработкаЗаполнения вот там и пишите ваш цикл который будет заполнять в каждой строке.

Автор: burza 06.03.18, 15:54

logist @ Сегодня, 15:47 * ,
Или вы меня не так поняли или я вас, мне нужно чтобы вот эта формула

 Элементы.ОписаниеПутевки.ТекущиеДанные.Количество = Элементы.ОписаниеПутевки.ТекущиеДанные.Количество / 100 * 20;
    Элементы.ОписаниеПутевки.ТекущиеДанные.СуммаПоСчету = Объект.СуммаПоСчетуБезСкидок / 100 * 20;
     Элементы.ОписаниеПутевки.ТекущиеДанные.ЦенаПутевки = Элементы.ОписаниеПутевки.ТекущиеДанные.СуммаПоСчету / Элементы.ОписаниеПутевки.ТекущиеДанные.Количество;
заполнялась по нажатию кнопки для всего табличного документа а не для на которого навели мышкой как сейчас.

Автор: sava1 06.03.18, 15:57

чуть не в тему - кто помнит приоритетность математ. операций ?

Автор: logist 06.03.18, 16:03

Цитата(burza @ 06.03.18, 15:54) *
Или вы меня не так поняли или я вас,

Тут вообще много непонятного. Я процитировал часть вашего сообщения на которое ответил. Вы там говорили что документ создается на основании другого.

Извините, но на самом деле нихуя не понятно, сначала вы пишите что это поле в документе, потом это оказывается реквизит в табличной части, потом оказывается что это должно заполнятся при вводе на основании другого,... а в итоге окажется что мы запускаем шатл на марс, просто постановщик стесняется это сразу пояснить, думая, что на каком-то этапе он сам разберется. Не бойтесь быть глупым, говорите всё сразу, это, как минимум, упрощает жизнь отвечающим

Автор: burza 06.03.18, 16:05

Как его правильно дописать Подскажите

 
Для каждого СтрКоличество  Из Документы.РегистрСчетов.ОписаниеПутевки  Цикл
Элементы.ОписаниеПутевки.ТекущиеДанные.Количество = Элементы.ОписаниеПутевки.ТекущиеДанные.Количество / 100 * 20
КонецЦикла;

Автор: logist 06.03.18, 16:06

&НаСервере
//
Для каждого СтрКоличество  Из Объект.ОписаниеПутевки  Цикл
СтрКоличество.Количество = СтрКоличество.Количество / 100 * 20
КонецЦикла;

Автор: burza 06.03.18, 16:43

logist @ Сегодня, 16:06 * ,
Неа не то

Как с этого сделать цикл

&НаКлиенте
Процедура ЗаполнитьПоетапам(Команда)
        
    Элементы.ОписаниеПутевки.ТекущиеДанные.Количество = Элементы.ОписаниеПутевки.ТекущиеДанные.Количество / 100 * 20;
    Элементы.ОписаниеПутевки.ТекущиеДанные.СуммаПоСчету = Объект.СуммаПоСчетуБезСкидок / 100 * 20;
     Элементы.ОписаниеПутевки.ТекущиеДанные.ЦенаПутевки = Элементы.ОписаниеПутевки.ТекущиеДанные.СуммаПоСчету / Элементы.ОписаниеПутевки.ТекущиеДанные.Количество;

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

Автор: logist 06.03.18, 17:04

Цитата(burza @ 06.03.18, 16:43) *
Неа не то

Почему не то? Вы фидбек умеете давать, или надо догадываться?

&НаКлиенте
Процедура ЗаполнитьПоетапам(Команда)
Для Каждого Строка Из Объект.ОписаниеПутевки Цикл
    Строка.Количество = Строка.Количество / 100 * 20;
    Строка.СуммаПоСчету = Объект.СуммаПоСчетуБезСкидок / 100 * 20;
     Строка.ЦенаПутевки = Строка.СуммаПоСчету / Строка.Количество;
КонецЦикла;
КонецПроцедуры

Если и это будет не то, без подробного описания проблемы - уйдете в бан.

Автор: burza 07.03.18, 9:43

logist @ Вчера, 17:04 * ,
Спасибо оно)
Теперь наткнулся на другое. В табличной части например 5 полей а СуммаПоСчету ставит на каждое поле (20 процентов), как эту сумму разбить на количество полей и добавить в СуммаПоСчету уже посредственно для самой строки.
Тоесть сейчас

burza @ Сегодня, 9:37 * ,
А надо

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