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

Опишу ситуацию. Это пример того, как реализованы банковские выписки в 7-ке. У меня есть такой же документ, где в табличной части построчно вписаны мои платежи с соответствующим видом ДДС. Так вот. Существует ли возможность при проведении учитывать движение по регистру после обработки каждой такой строки? В том смысле, что если у меня есть приход по какому-то измерению по одной строке, и если у меня будет еще такая строка с таким же измерением, но только расход, чтобы произошёл сразу взаимозачет. Поясню на своем примере:

У меня есть 3 платежа (3 строки):
- Платеж входящий на сумму 50;
- Платеж исходящий на сумму 70;
- Платеж входящий на сумму 50.


В регистре у меня есть 2 ресурса: "НашДолг" и "ДолгКонтрагента".

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


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



Но пока транзакция не пройдет по конца ТЧ документа, у меня запрос не видит никаких остатков, хотя они там реально появляются!( Должна картина быть примерно такой (это условно):

sava1
ВременныйРасчет + Актуальность
vitaliklibra
Цитата(sava1 @ 28.05.15, 9:24) необходимо зарегистрироваться для просмотра ссылки
ВременныйРасчет + Актуальность


Эммм... Разъясни, если не трудно: что делать с этими свойствами/методами? 09000000.gif
sava1
из КЖК:
Устанавливает флаг актуальности временного расчета.
Синтаксис:
Актуальность(<ФлагАктуальности>)
Англоязычный синоним:
Actual
Параметры:

<ФлагАктуальности>    Необязательный параметр. Число: 1 — временный расчет поддерживать в актуальном состоянии; 0 — не поддерживать актуальность временного расчета. Если параметр не задан, то метод просто возвращает текущий флат актуальности не меняя его.
Возвращаемое значение:
Текущее состояние флага актуальности временного расчета. Число: 1 — временный расчет поддерживается в актуальном состоянии; 0 — не поддерживается.
Описание:
Метод Актуальность устанавливает для объекта типа «Регистры» флаг актуальности временного расчета. Если флаг установлен, то все последующие движения регистров будут изменять итоги временного расчета, а значит итоги регистров временного расчета будут все время (при проведении документа) находиться в актуальном состоянии.

Внимание. Данный метод можно использовать только в модуле проведения документа.

Пример:
// стоимости берем из временного расчета
// регистра УчетРеализации
СпецРег = СоздатьОбъект("Регистры");
СпецРег.Актуальность(1);
Рег = СпецРег.УчетРеализации;
Рег.ВременныйРасчет();
СпецРег.РассчитатьРегистрыНа(ТекущийДокумент());
Рег.Товар = Товар;
Рег.Клиент = Клиент;
Рег.ОстаткиПолучить();
ТекОстаток = Рег.ОстатокТовара;
ТекСтоимость = Рег.Стоимость;
ТекПродСтоимость = Рег.ПродСтоимость;
vitaliklibra
Цитата(sava1 @ 28.05.15, 9:31) необходимо зарегистрироваться для просмотра ссылки
из КЖК:


Что это?

Цитата(sava1 @ 28.05.15, 9:31) необходимо зарегистрироваться для просмотра ссылки
Устанавливает флаг актуальности временного расчета.
Синтаксис:
Актуальность(<ФлагАктуальности>)


В принципе, судя из описания, это то, что надо! Но я такого свойства в СП не могу найти... ПодскажиТЕ, где размещать этот код из ВАШЕГО примера? По логике в обработке проведения. Верно?


 ! 

Правила, п.1
 
logist
Цитата(vitaliklibra @ 28.05.15, 9:56) необходимо зарегистрироваться для просмотра ссылки
Но я такого свойства в СП не могу найти..

И не найдете, потому, что Вам дали совет для платформы 7.7
vitaliklibra
Цитата(logist @ 28.05.15, 10:06) необходимо зарегистрироваться для просмотра ссылки
И не найдете, потому, что Вам дали совет для платформы 7.7


Я ведь тему создал в разделе "1С 8.2 Обычный интерфейс"!

Но, правила есть правила... Прошу прощения.

1С:Предприятие 8.2 (8.2.19.130).

Есть ли аналог для 8.2?
sava1
УПС. Не посмотрел на платформу...

Цитата(vitaliklibra @ 28.05.15, 9:10) необходимо зарегистрироваться для просмотра ссылки
как обойтись здесь без цикла

Выбрать остатки для всех контрагентов в тз
Цикл по строкам
ищем в тз контрагента, меняем текущий остаток
добавляем запись в набор записей
конеццикла
vitaliklibra
Цитата(sava1 @ 28.05.15, 10:19) необходимо зарегистрироваться для просмотра ссылки
Выбрать остатки для всех контрагентов в тз
Цикл по строкам
ищем в тз контрагента, меняем текущий остаток
добавляем запись в набор записей
конеццикла


В принципе, хороший вариант! Только получается, что цикл первый будет тот, который переберет ТЧ и найдет всех контрагентов, для которых нужно запросить остатки. Вот только проблема одна: если у нас есть еще измерения, к примеру, статья затрат, основание оплаты и др, то это будет та же самая ТЧ, которую я сначала и перебираю для передачи её значений в ТЗ.

Цитата(vitaliklibra @ 28.05.15, 9:56) необходимо зарегистрироваться для просмотра ссылки
Устанавливает флаг актуальности временного расчета.
Синтаксис:
Актуальность(<ФлагАктуальности>)


Так все же, есть ли аналог в 8.2?
sava1
Нет и не может быть. в 8 другой подход к работе с БД.
В-принципе можно каждый раз делать Записать(), ВыполнитьЗапрос - но это дико кривое решение.
vitaliklibra
Цитата(sava1 @ 28.05.15, 11:07) необходимо зарегистрироваться для просмотра ссылки



Такое дико-кривое решение я пробовал тестировать - результат не тот: система записывает в регистр только первую строку (первую итерацию), хотя обрабатывает в цикле все. Посему, коллега, это не подходит тоже... =( Спасибо, что помогли разбираться! Я оставил всего один ресурс в регистре и на нем буду накапливать все суммы, а в зависимости от знака буду выводить в отчете, соответственно, либо наш долг (если +), либо долг контрагента перед нами (если -).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.