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

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

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

Автор: burza 12.04.18, 8:53

Есть 2 регистра в них записываются данные с 2х документов, Бюджет и заявка. Стоит задача сравнивать регистры,есть бюджет там есть статья и суммы и нужно при создании заявки чтобы она лезла в бюджет и смотрела можно ли провести сумму по статье. Иными словами проверка на расход.
Сделал так, но почему то сравнивается только одна статья а не по каждой, сейчас только админ работает.Что не так?


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

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

Выборка = Результат.Выбрать();
Выборка.Следующий();

    Для Каждого Строка Из Объект.ФинЗаявка Цикл
        
    Если Выборка.СуммаФинПлана < Выборка.СуммаФинЗаявка Тогда
Отказ = Истина;
Сообщить("Сумма больше чем ФинПлан на " + (Выборка.СуммаФинЗаявка - Выборка.СуммаФинПлана)+ " по статье " + Выборка.Статья )
КонецЕсли;
            
КонецЦикла;

Автор: Petre 12.04.18, 9:20

burza @ Today, 8:53 * ,
Во-первых, сгруппируйте запрос по статьям.
Во-вторых, переделайте обработку результата. Сейчас у вас в цикле происходит обход по ТЧ объекта, но внутри каждый раз обрабатываются данные первой записи результата запроса.

Автор: burza 12.04.18, 9:48

Petre @ Сегодня, 10:20 * ,
Можно код?))

Автор: Petre 12.04.18, 10:22

burza @ Today, 9:48 * ,
По первому, вот вам пример группировки:

ВЫБРАТЬ
    СчетНаОплату.Контрагент КАК Контрагент,
    СУММА(СчетНаОплату.СуммаДокумента) КАК СуммаДокумента
ИЗ
    Документ.СчетНаОплату КАК СчетНаОплату

СГРУППИРОВАТЬ ПО
    СчетНаОплату.Контрагент

По второму, на словах: либо выгружайте тч в запрос и там сразу обрабатывайте, либо обходите тч в цикле и ищите соответствующую запись результата запроса (по статье, как я полагаю).

Автор: logist 12.04.18, 10:27

ВНУТРЕННЕЕ СОЕДИНЕНИЕ получает совпадения в двух таблицах, вам вероятно надо использовать ЛЕВОЕ, иначе расход будет разрешен по статьям которых нет в бюджете

Автор: Vidocq05 12.04.18, 10:40

burza @ Сегодня, 9:53 * ,
Вам следует ознакомится с кодом контроля остатков номенклатуры при продажах. В интернете примеров данного кода хватает. И использовать его как основу в вашем коде.

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