Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Остаток по регистру в форме списка документа

Остаток по регистру в форме списка документа
Я
   Tolia_2016
 
08.10.16 - 11:26
Всем хороших выходных!
Если очень хочется, можно все таки добавить в форму списка колонку Остаток и в ПриВыводеСтроки высчитывать и прописывать в неё остаток по регистру?
Я знаю, что можно сделать реквизит шапки документа и при записи в него и вписывать, но мне так не подходит ((
А высчитывать на лету - тормозень же будет! Есть какие либо решения еще?
И чем быстрее будет, запросом или прямым обращением к регистру?
База файловая, пользователь будет один.
Спасибо.
 
 
   Злопчинский
 
1 - 08.10.16 - 11:33
Нувбабахешь туда допустим остаток по складу, а по Ом внезапно образуется ещё склад
   Tolia_2016
 
2 - 08.10.16 - 11:43
Ну и что? В документе может быть только один склад.
А в запросе по фильтру: ДанныеСтроки.Ссылка.Склад...
   Tolia_2016
 
3 - 08.10.16 - 11:45
Если бы обработчик подписки на событие разрешал обход программной записи документа...
И кстати, почему так мало предустановленных событий? А мне вот ПослеЗаписи надо, а нету!
   Lexey_
 
4 - 08.10.16 - 11:50
(0) "И чем быстрее будет, запросом или прямым обращением к регистру?", и чем же, по-твоему, одно от другого отличается?
   Tolia_2016
 
5 - 08.10.16 - 11:51
хз
   mistеr
 
6 - 08.10.16 - 11:55
(0) >База файловая, пользователь будет один.

При таких условиях можешь делать. Тормозить будет, но приемлемо. Только не в ПриВыводеСтроки, а в ПриПолученииДанных.
   Tolia_2016
 
7 - 08.10.16 - 11:56
Просто есть дата запрета редактирования документов, отслеживается в т.ч. и подпиской на событие, и если делать через реквизит шапки документа, заретные доки будут выдавать ошибку!
   Tolia_2016
 
8 - 08.10.16 - 12:00
(6) Спасибо, но не знаю.. Засада со всех сторон. Предустановленного события ПослеЗаписи нету, что бы держать актуальным реквизит шапки тот(иначе бы просто достаточно было открывать форму запретного дока только на чтение и всё), а расчет на лету - тормоза (
Напрашивается вывод - удалить к оленям колонку Остаток!
   mistеr
 
9 - 08.10.16 - 12:03
(8) >удалить к оленям колонку Остаток!

Самое правильное решение. Тем более, если остаток привязывается к ДОКУМЕНТУ, значит где-то в дизайне косяк.
   Tolia_2016
 
10 - 08.10.16 - 12:05
(9) Он и не привязывается! Если только через реквизит шапки для бытсрого показа в списке!
Есть заказ покупателя, ну удобно же сразу видеть сколько из него уже выбрано, правильно? Чем какие то дополнительные кнопки тыкать - показать остаток...
А если у заказа сделать реквизит остаток - его надо отгрузками-основаниями будет актуализировать!
А подписки на событие ПослеЗаписи нету! После того как отгрузка проведется! Что мне писать в реквизит?
 
 Рекламное место пустует
   Tolia_2016
 
11 - 08.10.16 - 12:07
+10 В самой отгрузке писать:
заказ = получитьобъект
заказ.остаток = ...
заказ. записать()
?
Это ж совсем бред.
   Tolia_2016
 
12 - 08.10.16 - 12:08
А если отгрузку удалят?
   Tolia_2016
 
13 - 08.10.16 - 12:09
Там гулинька наплакала предустановленных событий, может кто скажет которая как "ПриЗаписи", когда документ уже двинул регистры, срабатывает? И на удаление реагирует
   mistеr
 
14 - 08.10.16 - 12:10
(10) Да делай уже колонку, разрешаю.
   mistеr
 
15 - 08.10.16 - 12:12
(11) Это ты еще не подумал, что делать, если прошлые документы по заказу поменяли.
   Tolia_2016
 
16 - 08.10.16 - 12:16
Да, остается только ПриПолученииДанных ((
   Tolia_2016
 
17 - 08.10.16 - 12:21
Запрос хоть правильный написал?

ВЫБРАТЬ
Остатки.СуммаОстаток КАК Остаток
ИЗ
РегистрНакопления.ЗаказыПокупателей.Остатки(
            ,
            ЗаказПокупателя = &ЗаказПокупателя
                И Валюта = &Валюта) КАК Остатки
   Tolia_2016
 
18 - 08.10.16 - 12:22
Потом через 
Возврат Результат.Выполнить().Выгрузить()[0].Остаток
   Злопчинский
 
19 - 08.10.16 - 12:24
(10) все тупо и плохо
Документ - для фиксации действия, внёс, записал и провёл, причём это все желательеэно делать по одной кнопке из типа заказа или некоего арм,

А подготовку к выписке документа, осмотр состояния остатков, осмотр состояния заказа, коавряние в носу, чай с бухами и продпвагами - это все ПРОЦЕСС подготовки к мгновенному действию - вот здесь и отражай все что надо

А то начинают из тривиального документа городить многоплановый отчет-арм
   Tolia_2016
 
20 - 08.10.16 - 12:25
(19) :(
   RomanYS
 
21 - 08.10.16 - 12:26
(17) нет конечно
ЗаказПокупателя В (&ЗаказыПокупателей)
Результат запроса кешировать в соответствие, а оттуда
Остаток = ТвоеСоответствие[ТекЗаказ];
   Tolia_2016
 
22 - 08.10.16 - 12:28
(21) эээ... а можно плиз по подробнее?
Результат запроса кешировать в соответствие - это как?
   Lexey_
 
23 - 08.10.16 - 12:30
(22) Соответствие.Вставить(Заказ, Остаток);
   Tolia_2016
 
24 - 08.10.16 - 12:32
Запрос
ЗаказПокупателя В (&ЗаказыПокупателей) 
Запрос.Выполнить

А дальше?
Соответствие.Вставить(ДанныеСтроки.Ссылка.Закза, Запрос.Остаток)

Так что ли?
   RomanYS
 
25 - 08.10.16 - 12:32
(22)
Соответствие.Вставить(Выборка.Заказ, Выборка.Остаток);
   Tolia_2016
 
26 - 08.10.16 - 12:33
А, понял. Спасибо!!
   RomanYS
 
27 - 08.10.16 - 12:34
(24)
ДанныеСтроки.Ссылка.Закза???

У тебя что список не заказов?
Такая конструкция сама по себе тормоз, пока не уберешь дальше даже смысла оптимизировать нет
   Tolia_2016
 
28 - 08.10.16 - 12:42
(27) Да нет, я образно написал.

СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого Стр Из ОформленияСтрок Цикл
Стр.Ячейки.ОстатокПоЗаказу.Текст = Соответствие.Получить(Стр.ДанныеСтроки.Ссылка)
   RomanYS
 
29 - 08.10.16 - 12:45
(28) так нормально
   Tolia_2016
 
30 - 08.10.16 - 13:01
Долго думал почему  В (&ЗаказыПокупателей)  и где брать собственно &ЗаказыПокупателей.
Вот что получилось:

МассивЗаказов = Новый Массив;
Для Каждого Стр Из ОформленияСтрок Цикл
    МассивЗаказов (Стр.ДанныеСтроки.Ссылка);
КонецЦикла;

Соответствие = Новый Соответствие;

Запрос = Новый Запрос;
Запрос.Текст = 
ВЫБРАТЬ
    ЗаказПокупателяОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
    ЗаказПокупателяОстатки.СуммаОстаток КАК Остаток
ИЗ
    РегистрНакопления.ЗаказыПокупателей.Остатки(
            ,
            ЗаказПокупателя В (&МассивЗаказов)
                И Валюта = &Валюта) КАК ЗаказПокупателяОстатки 

Запрос.УстановитьПараметр("МассивЗаказов", МассивЗаказов);
Запрос.УстановитьПараметр("Валюта", Стр.ДанныеСтроки.Ссылка.Валюта);

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

Пока Результат.Следующий() Цикл
    Соответствие.Вставить(Результат.ЗаказПокупателя, Результат.Остаток);
КонецЦикла;    

Для Каждого Стр Из ОформленияСтрок Цикл
    Стр.Ячейки.НеоплаченныйОстаток.Значение = Соответствие.Получить(Стр.ДанныеСтроки.Ссылка);    
КонецЦикла;
   Tolia_2016
 
31 - 08.10.16 - 13:01
Работает.
   RomanYS
 
32 - 08.10.16 - 16:47
(30) единственно что смущает это
Стр.ДанныеСтроки.Ссылка.Валюта
Как по оптимальности (скорей всего есть Стр.ДанныеСтроки.Валюта), так и ещё по смыслу: зачем вообще валюта и почему берешь её из последней строки?
   Tolia_2016
 
33 - 08.10.16 - 17:02
(32) Да, ошибочка, хоть и работало, не заметил сразу.
Уже исправил, именно Стр.ДанныеСтроки.Валюта!
В смысле из последней, из текущей? Я вообще что то ПриПолученииДанных не очень понимаю, в смысле как вызывается.
Ставил в начало Сообщить("!"), ну сообщает три раза(три документа в списке). Кликание по докам и прочие дрыганья по списку не добавляет сообщений, но при этом закрыть табло не дает...
Просто пытался отбор сделать по этой колонке, типа:
ДокументСписок.Отбор.ДокументСсылка.ВидСравнения = ВидСравнения.ВСписке;
ДокументСписок.Отбор.ДокументСсылка.Использование = Истина;
ДокументСписок.Отбор.ДокументСсылка.Значение = СписокОтбора;

Где СписокОтбора = список значений, содержащий ТОЛЬКО документы с не нулевыми остатками. ДокументСсылка - реквизит шапки, содержащий ссылку на самого себя.
Как то странно работает, то не работает, а потом вообще, видимо, зацикливаться стал - кулер на i5-ом взлетал от процесса 1cv8.
 
 
   RomanYS
 
34 - 08.10.16 - 17:43
(33) ПриПолученииДанных вызывается для порции отображаемых (условно: попадающих на экран с небольшим запасом вверх/вниз). Почему у тебя 3 раза на 3 строки - непонятно.
По идее должно вызываться при сроллинге/обновлении/изменениях.
Отборы там ставить не стоит - получишь рекурсивный циклический вызов.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует