Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
23 Май 2018, 06:00
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Остатки товара в форме списка справочника на определённую дату  (Прочитано 8460 раз)

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

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
Остатки товара в форме списка справочника на определённую дату
У меня есть в форме списка для подбора в табличной части реквизит "Текст", там в сфойствах формула:  ОстатокТовараНаСкладе() , она вызывает из модуля

Функция ОстатокТовараНаСкладе()
   Если Склад.Выбран()=1 Тогда
      Возврат Формат(Регистр.ОстаткиТоваров.Остаток(Фирма,ТекущийЭлемент(),Склад,"ОстатокТовара"),"Ч6.1");
   Иначе
      Возврат Формат(Регистр.ОстаткиТоваров.СводныйОстаток(Фирма,ТекущийЭлемент(),,"ОстатокТовара"),"Ч6.1");
   КонецЕсли;
КонецФункции

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

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

Это работает, но ОООЧЕНЬ медленно, пока каждая строка пересчитает свой регистр... Подскажите, как можно поступить?


Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
возможно прямой запрос к базе быстрее будет работать, но не факт что намного быстрее.. пробовать надо.
временной расчет тяжелый, здесь ничего не придумаешь.

но уменьшить время все равно можно, вот эти операции выполняйте единожды, при открытии справочника или при смене даты, на которую вам нужно показать остатки:
   
   // спецРег и Рег сделайте глобальными переменными модуля формы списка справочника
   СпецРег = СоздатьОбъект("Регистры");
   Рег = СпецРег.ОстаткиТоваров;
   Рег.ВременныйРасчет();
   СпецРег.РассчитатьРегистрыНа(ДатаНачДвиж);

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

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
Хо-го! Заработало! В разы быстрее! Спасибо:) Сейчас ещё попробую от туда выдернуть движения (чтоб сразу показывало сколько приходило и уходило).
Я пытался при открытии формы пересчитать регистры, но не допёр переменными обозначить их:(
Добавлено: 06 Ноя 2012, 12:09

Не пойму почему не срабатывает смена даты: на форме поле ввода ДатаНач, в нём формула СменаДатыНачала(), а в модуле

Процедура СменаДатыНачала()
   ДатаНачПамять=ДатаНач;
КонецПроцедуры

Вот эта ДатаНачПамять не меняется после смены ДатаНач

Последний раз редактировалось: Сергей_1; 06 Ноя 2012, 12:09

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
а что это за "ДатаНачПамять"? она во временном расчете регистра участвует или где? 

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
Упс, простите, запарился уже, другую переменную смотр...
Добавлено: 06 Ноя 2012, 21:12

   // спецРег и Рег сделайте глобальными переменными модуля формы списка справочника
   СпецРег = СоздатьОбъект("Регистры");
   Рег = СпецРег.ОстаткиТоваров;
   Рег.ВременныйРасчет();
   СпецРег.РассчитатьРегистрыНа(ДатаНачДвиж);

А я могу сюда же добавить примерно следущее:
Рег.ВыбратьДвижения(ДатаНачДвиж,ДатаКон );

А в функциях
   Пока Рег.ПолучитьДвижение() >
???

Последний раз редактировалось: Сергей_1; 06 Ноя 2012, 21:12

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
смотря что хотите сделать. если выбираете движения для каждого товара, то нет.
для каждого товара нужно устанавливать свой фильтр и потом открывать выборку

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
Это получатся такие тормоза...
А запрос создать один раз, а потом с него выбирать получится?

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
из запроса данные вытягиваются быстро, но а сам запрос вы в какой момент будете выполнять?
при открытии? и будет справочник открываться "полчаса".

а показывать приход/расход в справочнике очень обязательно или вы делаете так... для общего развития?

Оффлайн Сергей_1

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-05
  • Сайт: 
  • Профессия: Программист 7.7
а показывать приход/расход в справочнике очень обязательно или вы делаете так... для общего развития?
Удобней работать будет. Я открываю подбор, и вижу сколько было скажем 10 дней назад, сколько пришло-ушло, и по этим движениям решаю сколько надо дозаказать.

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
а если создать механизм автоматического заказа/дозаказа?


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
154 Сообщений
oleg-x
68 Сообщений
alex0402
64 Сообщений
AIFrame AIFrame
59 Сообщений
wise wise
39 Сообщений
buketov.av buketov.av
36 Сообщений
KOI8-R
34 Сообщений
ilyay ilyay
29 Сообщений
Alter
28 Сообщений
trialex3
25 Сообщений

* Кто онлайн

  • Точка Гостей: 230
  • Точка Скрытых: 0
  • Точка Пользователей: 5
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal