Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Получить сумма регистра текущего док-та
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
bereznoy
Док-т реализация товаров и услуг, проводиться в управленческом учете, затем в бухгалтерском (разрыв по времени примерно месяц,но думаю не столь важно), мне необходимо что бы в журнале документов реализации товаров и услуг в колонке "Сумма БУ" отображалась сумма проводок соотвествующей строки

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

    
    ОформлениеСтроки.Ячейки.СуммаБУ.ОтображатьТекст = Истина;
    ОформлениеСтроки.Ячейки.СуммаБУ.УстановитьТекст(РезультатЗапроса.СуммаБУ);
    
КонецПроцедуры
logist
Ну типа запрос хороший, только откуда он знает что выбирать надо какой-то конкретный документ...

Ну и собсно реализация задачи ужасна. производительность упадет в разы.
bereznoy
Цитата(logist @ 31.12.11, 0:15) необходимо зарегистрироваться для просмотра ссылки
Ну типа запрос хороший, только откуда он знает что выбирать надо какой-то конкретный документ...

Ну и собсно реализация задачи ужасна. производительность упадет.

А каким способом можно сделать что б компьютер при открытии журнала не выполнял 100500 запросов и при этой не открывая документ видеть общую сумму по проводкам? (Может при проведении документа помещать суммы проводок в реквизит, а потом его уже отображать при выводе строки?)

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

    
    ОформлениеСтроки.Ячейки.СуммаБУ.ОтображатьТекст = Истина;
    ОформлениеСтроки.Ячейки.СуммаБУ.УстановитьТекст(РезультатЗапроса.СуммаБУ);
    
КонецПроцедуры
logist
Цитата(bereznoy @ 31.12.11, 0:18) необходимо зарегистрироваться для просмотра ссылки
(Может при проведении документа помещать суммы проводок в реквизит, а потом его уже отображать при выводе строки?)

Ну даsmile.gif

Цитата(bereznoy @ 31.12.11, 0:18) необходимо зарегистрироваться для просмотра ссылки
По запросу я так понимаю надо указать параметр на текущий документ

И тут верно, только параметр еще и в тексте запроса надо использовать.

Ну и
| СУММА(ХозрасчетныйОбороты.СуммаОборот)
bereznoy
Цитата(logist @ 31.12.11, 0:24) необходимо зарегистрироваться для просмотра ссылки
Ну даsmile.gif


И тут верно, только параметр еще и в тексте запроса надо использовать.

Ну и
| СУММА(ХозрасчетныйОбороты.СуммаОборот)

В отладчике посмотрел ссылка на документ текущий остается прежней при выполнении процедуры по следующим строкам 19000000.gif
logist
    Запрос.УстановитьПараметр("СсылкаНаТекущийДокумент",ДанныеСтроки.Ссылка);



Цитата(bereznoy @ 31.12.11, 0:40) необходимо зарегистрироваться для просмотра ссылки
В отладчике посмотрел ссылка на документ текущий остается прежней при выполнении процедуры по следующим строкам 19000000.gif

Разумеется, Вы же тем кодом передаете туда текущую позицию курсора.
Ardi
"Сумма БУ" - несколько бессмысленная цифра.
Осмысленная - это оборот по определённым счетам.

Например
Запрос=Новый Запрос;
     Запрос.Текст = "ВЫБРАТЬ
    СУММА(Хозрасчетный.Сумма) КАК Сумма
ИЗ
    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ГДЕ
    Хозрасчетный.Регистратор = &Регистратор
    И Хозрасчетный.СчетКт = &СчетКт";

  Запрос.УстановитьПараметр("СчетКт",Тут281Счет);


Ну и тормоза дополнительные запрос даст.
bereznoy
Решил сделать так, что б при проведении сумма проводок по БУ присваивалась реквизиту, а в списке документов просто указал чтоб отображало данный реквизит, запрос вставил в конце процедуры проведения обработки, только запрос не получает сумму

Запрос=Новый Запрос;                        
Запрос.Текст = "ВЫБРАТЬ
               |    СУММА(Хозрасчетный.Сумма) КАК Сумма
               |ИЗ
               |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
               |ГДЕ
               |    Хозрасчетный.Регистратор = &Регистратор
               |    И Хозрасчетный.СчетКт = &СчетКт";

  Запрос.УстановитьПараметр("СчетКт",ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговлеВПродажныхЦенахНТТ);
  Запрос.УстановитьПараметр("Регистратор",ЭтотОбъект.Ссылка);
   РезультатЗапроса=запрос.Выполнить().Выбрать();
   РезультатЗапроса.Следующий();
   СуммаБух = РезультатЗапроса.Сумма;
logist
Цитата(bereznoy @ 01.01.12, 12:57) необходимо зарегистрироваться для просмотра ссылки
только запрос не получает сумму

При выполнении ОбработкаПроведения объекта в базе нету, т.е. записей с таким регистратором в регистре не существует, они появятся после фактической записи документа.
Вам надо получить эту цифру не запросом к регистру, а из данных участвующих в обработке проведения.

Короче сделайте вот что:
В модуле в процедуре ДвиженияПоРегистрамРегл добавьте одну строчку
    СуммаБух = ТаблицаПоТоварам.Итог("ПроводкиСуммаСНДСРегл") + ТаблицаПоКомплектам.Итог("СуммаПродажная") + ТаблицаПоУслугам.Итог("ПроводкиСуммаСНДСРегл") + ТаблицаПоТаре.Итог("ПроводкиСуммаСНДСРегл");

и все.
bereznoy
Цитата(logist @ 01.01.12, 14:37) необходимо зарегистрироваться для просмотра ссылки
При выполнении ОбработкаПроведения объекта в базе нету, т.е. записей с таким регистратором в регистре не существует, они появятся после фактической записи документа.
Вам надо получить эту цифру не запросом к регистру, а из данных участвующих в обработке проведения.

Короче сделайте вот что:
В модуле в процедуре ДвиженияПоРегистрамРегл добавьте одну строчку
    СуммаБух = ТаблицаПоТоварам.Итог("ПроводкиСуммаСНДСРегл") + ТаблицаПоКомплектам.Итог("СуммаПродажная") + ТаблицаПоУслугам.Итог("ПроводкиСуммаСНДСРегл") + ТаблицаПоТаре.Итог("ПроводкиСуммаСНДСРегл");

и все.

ТаблицаПоТоварам.Итог("ПроводкиСуммаСНДСРегл")
у меня этим выражением получает суммарное число по регистру равное сумме документа, а не сумме по проводкам

мои проводки по списанию вычисляются в процедуре "Процедура ДвижениеПартийТоваров", т.е. как я понимаю там формируется проводка
bereznoy
Вот сам допетрил, так получаю итоговую сумму по проводкам регистра бухгалтерии, но насколько она надежна вплане что мне повлиять нанеправильное отображение суммы

СуммаБух = ПроводкиБУ.ЭтотОбъект.Итог("Сумма");
logist
Это сумма всех проводок. Вам же нужно только те у которых по кредиту нужный счет.
И где Вы вставляете этот код?

Вам надо что-то типа такого
    Если Не Отказ И ОтражатьВБухгалтерскомУчете Тогда
        БухПроводки = Движения.Хозрасчетный.Выгрузить(,"СчетКт,Сумма");
        БухПроводки.Свернуть("СчетКт","Сумма");
        Результат = БухПроводки.Найти(ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговлеВПродажныхЦенахНТТ,"СчетКт");
        Если Результат <> Неопределено Тогда
            СуммаБух = Результат.Сумма;
        Иначе
            СуммаБух = 0;
        КонецЕсли;
    КонецЕсли;
bereznoy
Цитата(logist @ 01.01.12, 23:27) необходимо зарегистрироваться для просмотра ссылки
Это сумма всех проводок. Вам же нужно только те у которых по кредиту нужный счет.
И где Вы вставляете этот код?


Код вставляю там где Вы говорили, все работает как надо, проводку по расчетам с контрагентами, вроде 361 счет убрал, там только по материальным счетам формируется,
что впринцыпе и надо было изначально, думаю тогда оставлю вариант свой, который Вы мне подсказали как сделать, жму спасибо
Batchir
Ну не знаю, я бы всё таки сделал в списке документов в процедуре "ПриПолученииДанных" обращение к БД и отображал бы в ячейке нужную инфу.
При грамотном написании кода падения в производительности не заметны (не раз проделывал подобную операцию)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.