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

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

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

Автор: kayfatuch 20.02.25, 0:22

Доброго времени суток, у меня 1С 7,70,048 Торговля с клад для Украины. Встал такой вопрос что есть у нас счёт(который ведётся не совсем правильно но с этим я уже поделать не могу) в котором отображаются траты и поступления по треминалу банковском. Стоит задача в 1с ежедневно в конце дня проводить расходку на фиксированный процент что бы наш счёт совпадал с банковским. На данный момент я написал вот такую обработку(да местами кривую но она ещ1 в процессе доработки) и сложность возникла в том что я не могу получить остаток денег на конец дня на определённом счету. Помогите пожалуйста разобраться где я в запросе допустил ошибку или быть может можно это сделать по другому. Всем спасибо за дельные советы

//*******************************************
Процедура Выполнить()
    Накладная = СоздатьОбъект("Документ.РасходныйКассовый");
    Накладная.Новый();
    ДатаДок = РабочаяДата(Контекст, "Запись");  
    // Получаем текущую дату заранее
    ТекДата = ТекущаяДата();
    
    // Устанавливаем фирму
    спрФирма = СоздатьОбъект("Справочник.Фирмы");
    спрФирма.НайтиПоКоду(2, 0);
    Если спрФирма.Код <> 0 Тогда
        Накладная.Фирма = спрФирма.ТекущийЭлемент();
    Иначе
        Сообщить("Фирма с кодом 2 не найдена.");
    КонецЕсли;
    
    // Устанавливаем кассу    
    спрКасса = СоздатьОбъект("Справочник.НашиДенежныеСчета");
    спрКасса.НайтиПоКоду(24, 0);
    Если спрКасса.Код <> 0 Тогда
        Накладная.РСчет = спрКасса.ТекущийЭлемент();
    Иначе
        Сообщить("Касса с кодом 24 не найдена.");
    КонецЕсли;
    
    // Поиск контрагента по наименованию из файла
    спрКонтрагент = СоздатьОбъект("Справочник.Контрагенты");
    спрКонтрагент.НайтиПоНаименованию("тут должна быть ваша реклама", 0, 1);  
    Если спрКонтрагент.Код <> 0 Тогда
        
        Накладная.Контрагент = спрКонтрагент.ТекущийЭлемент();  
        Накладная.СуммаСНДС = 5000;       //вот здесь вместо фиксированной суммы должно итогово быть результат вычета процента из остатка
        Накладная.СтавкаНДС = "безНДС";
        Накладная.Дата_курса = ТекущаяДата();
        Накладная.Курс = "1";    
        
        // Устанавливаем валюту
        Курс = СоздатьОбъект("Справочник.Валюты");
        Курс.НайтиПоНаименованию("Гривня");
        Накладная.Валюта = Курс.ТекущийЭлемент();
        
        // Выполняем запрос на поступления
        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса =
        "
        |ВЫБРАТЬ СУММА(Сумма) КАК Поступления
        |ИЗ Регистр.Деньги
        |ГДЕ Счет = 24
        |И Дата >= " + Формат(ТекДата, "ДФ='yyyy-MM-dd'") + "
        |И Дата <= " + Формат(ТекДата, "ДФ='yyyy-MM-dd'") + "
        |";
        
        Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда
            Запрос.Выбрать();
            Пока Запрос.Получить() = 1 Цикл
                СуммаПоступлений = Запрос.Поступления;
            КонецЦикла;
            
            Сообщить("Поступления на счёт 24 за сегодня: " + Формат(СуммаПоступлений, "ЧДЦ=2"));
        Иначе
            Сообщить("Нет данных за сегодня.");
        КонецЕсли;
    КонецЕсли;
    
    // Записываем документ
    Накладная.Записать();
КонецПроцедуры

Автор: Vofka 20.02.25, 8:54

Цитата(kayfatuch @ 20.02.25, 0:22) *
остаток денег на конец дня


Цитата(kayfatuch @ 20.02.25, 0:22) *
|И Дата >= " + Формат(ТекДата, "ДФ='yyyy-MM-dd'") + "
|И Дата <= " + Формат(ТекДата, "ДФ='yyyy-MM-dd'") + "


Формат yyyy-MM-dd - это дата вида год-месяц-день, начало дня. Вы выбираете данные из регистра на момент времени условно 20.02.2025 00:00:00. Но другой момент еще в том, что если вам нужен остаток, то выбирайте данные из виртуальной таблицы Остатков регистра. Ну и на конец дня, а не на начало.

Автор: tibank 20.02.25, 9:59

kayfatuch @ Сегодня, 0:22 * ,
Текст запроса похож на восьмерочный

По идее, должно быть что-то типа

ТекстЗапроса =     "
|ПЕРИОД С Дата2 По Дата2;
|Фирма      =Регистр.Деньги.Фирма;
|Счет      =Регистр.Деньги.Счет;
|Сумма      =Регистр.Деньги.Сумма;
|Функция КонОст = КонОст(Сумма);
|Группировка Счет;
|";

Автор: denis84 20.02.25, 11:44

kayfatuch @ Сегодня, 0:22 * ,
запрос у Вас не для 1с 7.7! В предыдущем сообщении добрый человек Вам уже написал приблезительный запрос, как это должно быть.

Автор: kayfatuch 20.02.25, 17:36

denis84 @ Сегодня, 11:44 * ,
Я увидел что ошибся. Как я уже писал(может не совсем корректно) это все ещё тестовый код и я пытался к нему подступить по разному иза разные варианты так как выборку сделать по всем счетам не так сложно оказалось как по одному конкретному(

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