Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:07

Вычисления в строке документа

Автор Чернов Андрей, 01 мая 2013, 10:34

0 Пользователей и 1 гость просматривают эту тему.

Чернов Андрей

Цитата: Dethmontt от 02 мая 2013, 18:15Если ТекДанные = Неопределено Тогда
     Возврат;
  КонецЕсли;

Это означает, что при отсутствии данных вычисления производиться не будут. Верно?

Цитата: Dethmontt от 02 мая 2013, 18:15Если ТабличнаяЧасть.Количество() <= 1 или ТекДанные.НомерСтроки = ТабличнаяЧасть.Количество() Тогда
     Возврат;
  КонецЕсли;

Если в табличной части одна строка или нет вовсе, вычисления производиться не будут. А что значит вот это выражение?

Цитата: Dethmontt от 02 мая 2013, 18:15ТекДанные.НомерСтроки = ТабличнаяЧасть.Количество()

В целом я понял содержание этой процедуры, спасибо большое за помощь :) Завтра попробую применить, отпишусь о результатах
Добавлено: 02 мая 2013, 22:02


anonimous, а использование запроса не будет слишком трудоёмким для пользователя?

anonimous

Цитата: Чернов Андрей от 02 мая 2013, 21:56anonimous, а использование запроса не будет слишком трудоёмким для пользователя?
а причем тут пользователи, может вы имели ввиду что трудоемко для системы, вообще запросная модель обращения к данным более рекомендуемая чем объектная, так как при объектном обращении производятся те же запросы только не явно, а вообще попробуйте код предложенный Dethmontt, с первого взгляда должно работать
Если ТабличнаяЧасть.Количество() <= 1 или ТекДанные.НомерСтроки = ТабличнаяЧасть.Количество() Тогда
     Возврат;
  КонецЕсли;
а здесь проверяются два условия - первое это если в документе нет строк либо одна строка, и второе условие не вполне понятно, может и не заработать, оба условия направлены на возврат из этой процедуры без каких либо изменений

Dethmontt

То что написано, это работа в оперативной памяти, запросов к базе не выполняется.
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Dethmontt

Цитата: Чернов Андрей от 02 мая 2013, 21:56Если в табличной части одна строка или нет вовсе, вычисления производиться не будут. А что значит вот это выражение?

Цитата: Dethmontt от Сегодня в 18:15
ТекДанные.НомерСтроки = ТабличнаяЧасть.Количество()

Если это последняя строка, то не пересчитывать (тут я просто не знаю вашего условия... написал так)
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Чернов Андрей

Я попытался подстроить код под свои нужды, вот что получилось:

Процедура ТабличнаяЧастьВыданоПриИзменении(Элемент)
  СтрокаТЧ = ЭлементыФормы.ТабличнаяЧасть.ТекущиеДанные();
  Если СтрокаТЧ = Неопределено Тогда
     Возврат;
  КонецЕсли;

  Если ТабличнаяЧасть.Количество() <= 1 или СтрокаТЧ.НомерСтроки = ТабличнаяЧасть.Количество() Тогда
     Возврат;
  КонецЕсли;

  Для НомерСтроки = СтрокаТЧ.НомерСтроки По ТабличнаяЧасть.Количество()-1 Цикл
     ТабличнаяЧасть[НомерСтроки].Остаток =  ТабличнаяЧасть[НомерСтроки-1].Остаток + ТабличнаяЧасть[НомерСтроки-1].Принято -  ТабличнаяЧасть[НомерСтроки-1].Выдано - ТабличнаяЧасть[НомерСтроки-1].Забраковано;
   КонецЦикла;
КонецПроцедуры


При работе в режиме Предприятия при попытке изменить значение "Выдано" пишет следующее:


{Документ.КарточкаСкладскогоУчёта.Форма.ФормаДокумента(26)}: Метод объекта не обнаружен (ТекущиеДанные)
  СтрокаТЧ = ЭлементыФормы.ТабличнаяЧасть.ТекущиеДанные();

Что не так?:dfbsdfbsdf:
Добавлено: 03 мая 2013, 10:48


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

Dethmontt

Цитата: Чернов Андрей от 03 мая 2013, 08:53ТекущиеДанные();
ЭТО НЕ МЕТОД ЭТО СВОЙСТВО
Я вас сбил...
Замените ТекущиеДанные(); на ТекущиеДанные;
Добавлено: 03 мая 2013, 14:23


По всем методам и свойствам, которые вам не понятны, почаще обращайтесь в справку Ctrl+F1
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Besart

попробуйте вот это, при изменении верхних строк автоматически происходит пересчет в нижних
Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ПересчетОстатков();
КонецПроцедуры

Процедура ТабличнаяЧастьПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)     
ПересчетОстатков();
КонецПроцедуры 

Процедура ПересчетОстатков()

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

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


Добавлено: 03 мая 2013, 15:05


Цитата: Besart от 03 мая 2013, 14:46Для каждого Строка Из ЭтотОбъект.ТабличнаяЧасть Цикл
         Если  Строка.НомерСтроки >1  Тогда
             ПредыдущаяСтрока = ЭтотОбъект.ТабличнаяЧасть.Найти(Строка.НомерСтроки-1, "НомерСтроки");
             Строка.ВНаличии =  ПредыдущаяСтрока.Остаток;
             Строка.Остаток = Строка.ВНаличии + Строка.Принято - Строка.Выдано - Строка.Забраковано;
забыл, после этого добавьте еше Обновить()

Чернов Андрей

Спасибо, Besart, уже не нужно) Dethmontt, я уже понял, исправил)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск