Платежное поручение входяшее - список документа

1. bluntschi 17.10.12 13:56 Сейчас в теме
Добрый день, подскажите, а можно ли в списке документов "Платежное поручение входящее" вывести колонку табличной части документа "Запланировано" ? и если можно то как?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. setre 17.10.12 15:03 Сейчас в теме
Можно, но при условии, если вы согласны сделать конфигурацию нетиповой. Ибо в настройке списка этот реквизит(наверное, реквизит документа, хотя не буду утверждать, в конфигуратор не залезал) отсутствует. Его нужно добавлять через конфигуратор, дело минутное.
5. bluntschi 18.10.12 06:27 Сейчас в теме
(2) setre, добавить то я его добавлю, выходит нужно еще подцепить к нему значение этого реквизита из табличной части?
3. Buster 17.10.12 15:24 Сейчас в теме
представьте что у вас будет несколько строк в табличной части документа. Какое значение Запланировано захотите видеть в списке документов?

Несколько строк по одному документу в списке выводить нельзя, или это уже будет не список.
4. AlX0id 17.10.12 16:22 Сейчас в теме
(3) Buster,
Можно в одну строку вывести теоретически..

(1) bluntschi,
Добавляете колонку и создаете/изменяете соответствующим образом обработчик табличного поля ПриВыводеСтроки или ПриПолученииДанных. Есть один нюанс - для того, чтобы не делать запрос по запланированным платежам по каждой выводимой строке, нужно данные сначала закэшировать.
bluntschi; +1 Ответить
6. bluntschi 18.10.12 06:28 Сейчас в теме
(4) AlX0id, а не подскажите как сделать кэширование?)
7. bluntschi 18.10.12 08:52 Сейчас в теме
(4) AlX0id, я так понимаю, нужно что-то типо такого:

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




Процедура СписокПриВыводеСтроки(Элемент, ОформленияСтрок, ДанныеСтроки)
	Если Элемент.Колонки.Запланировано.Видимость Тогда
    Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
        
            СтрТЗ = тзОстатки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "ПлатежноеПоручениеВходящее.Ссылка");
            Если СтрТЗ <> Неопределено Тогда
                ОформлениеСтроки.Ячейки.Запланировано.УстановитьТекст(СтрТЗ.ДокументПланированияПлатежа);
            КонецЕсли;    
            
    КонецЦикла;    
  КонецЕсли;
КонецПроцедуры
Показать


только я не совсем понимаю, как в запросе обратися к текущему документу, он ругается
9. AlX0id 18.10.12 10:17 Сейчас в теме
(7) bluntschi,
Ну собсн, да - тзОстатки и будет кэшем в Вашем случае. А вот зачем Вам текущий документ для кэша как раз таки не понятно - он же должен представлять собой как раз таблицу вида "Ссылка" - "Запланировано".
Под кэшированием я подразумеваю, что данные должны быть вытащены с сервера одним запросом в виде таблицы значений, например. Работа с таблицей значений, хранящейся в оперативной памяти, осуществляется как правило на порядок быстрее, нежели последовательное выполнение кучи запросов к серверу.
13. bluntschi 18.10.12 10:28 Сейчас в теме
(9) AlX0id, то есть мне все значения из моего запроса в таблицу значений сохранить? правильно поняла?
8. bluntschi 18.10.12 10:16 Сейчас в теме
а теперь ругается, что итератор не определен... не правильно обращаюсь к запросу?

Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ОформленияСтрок, ДанныеСтроки)
	
	Запрос = Новый Запрос;
	Запрос.Текст ="ВЫБРАТЬ 
	| ПлатежноеПоручениеВходящее.Ссылка, 
	| ПлатежноеПоручениеВходящее.ДокументПланированияПлатежа КАК ДокументПланированияПлатежа
	|ИЗ 
	| Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее 
	| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа 
	| ПО ПлатежноеПоручениеВходящее.Ссылка = ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка 
	|ГДЕ 
	| 
	| ПлатежноеПоручениеВходящее.Ссылка = &Ссылка";
	//ТекущийДокумент = Элемент.Ссылка;
	Запрос.УстановитьПараметр("Ссылка", Элемент.ТекущаяСтрока.Ссылка);
	тзОстатки = Запрос.Выполнить().Выгрузить();
	
  //Если Элемент.Колонки.Запланировано.Видимость Тогда
    Для Каждого Строка ИЗ ОформленияСтрок Цикл
  	  
  		  СтрТЗ = тзОстатки.Найти(Строка.ДанныеСтроки.Ссылка, "Элемент.ТекущаяСтрока.Ссылка");
  		  Если СтрТЗ <> Неопределено Тогда
  			  Строка.Ячейки.Запланировано.УстановитьТекст(СтрТЗ.ДокументПланированияПлатежа);
  		  КонецЕсли;    
  		  
    КонецЦикла;    
  //КонецЕсли;
КонецПроцедуры
Показать
10. mymyka 18.10.12 10:20 Сейчас в теме
(8)Надеюсь вкурсе, что при такой реализации запрос выполнится столько раз, сколько отображено строк? Т.е. при обычном разрешении экрана примерно раз так...30?
bluntschi; +1 Ответить
12. bluntschi 18.10.12 10:26 Сейчас в теме
(10) mymyka, а как оптимизировать?)
15. mymyka 18.10.12 10:33 Сейчас в теме
(12)Вместо ПриВыводеСтроки() использовать ПриПолученииДанных(). Тогда и кешировать ничего не надо будет. При прокрутке все равно данные будут получаться порциями.
16. AlX0id 18.10.12 11:11 Сейчас в теме
(15) mymyka,
угу.. вместо того, чтобы программист поработал мозгом один раз - постоянно будет вкалывать сервер - хотя реально пользователь может тупо крутить колесико и ничего не делать при этом..

(13) bluntschi,
ага, только в первом варианте
18. mymyka 18.10.12 11:33 Сейчас в теме
(16)Для списка из 10 тысяч документов будешь ТЗ в глобальной переменной на форме хранить? и перебирать ее для каждой строки списка при заполнении поля? Это несомненно куда более оптимальное решение, нежели получать данные только для видимой части списка. Наверно в 1С совсем конченые программисты, что не додумались на форме хранить цельные ТЗ, а реализовали какие-то бесполезные порционные выборки.
(17)Идеальное решение, вот только про отборы, группировки, сортировки можно забыть, но для списка документов это же такая мелочь, правда?
19. Buster 18.10.12 11:42 Сейчас в теме
(18) мелочь. Правда.
Если нужен отбор по ТЧ, то пожалуйста - критерий отбора в помощь.
Группировки в обычной форме? Не, не слышал.
Сортировка? О дааа, для реквизита, в котором фиг пойми что самое то сортировать его.
24. mymyka 18.10.12 11:57 Сейчас в теме
(19)Точно, сортировка в форме списка это абсолютный левак. Выводим реквизит мы не для того, чтобы пользователь имел к нему быстрый доступ и мог визуально отобрать документ по признаку в списке, а только из исключительной любви к программированию. Наличие over9k обработок ожидания, которые запустят over9k запросов, при перемещении по списку клавишей "вниз", в памяти нас не волнует, а еще 1С внезапно научилась использовать критерии отбора для расчетного значения документа.
28. Buster 18.10.12 12:09 Сейчас в теме
(24) mymyka, совет - учи мат часть.
29. mymyka 18.10.12 12:15 Сейчас в теме
(28)/фейспалм, все? доводы кончились? я расписал только самые явные недостатки твоего предложения (если вылет 1С с переполнением стека запросов при перемещении по списку зажатой кнопкой "вниз" можно вообще назвать "недостатком"). +Критерий отбора выведет все записи хотя бы частично удовлетворяющие условию, что из постановки задачи отнюдь не следует, так что "учить матчасть" придется, наверно, все же тебе.
30. Buster 18.10.12 12:27 Сейчас в теме
(29) mymyka, я бы тебе объяснил, почему все твои доводы никчемны, но ты даже не пытаешься прочитать заново то, что я написал выше и подумать чуть-чуть - может тогда ты поймешь.
А мат часть я учу постоянно, чтобы не писать бреда как ты.
32. mymyka 18.10.12 12:41 Сейчас в теме
(30)Доводы, где? хоть 1?
мелочь. Правда

Несомненный довод в пользу твоего решения, отсутствие функции это плюс.
Сортировка? О дааа, для реквизита, в котором фиг пойми что самое то сортировать его.

Как уже говорилось, отсутствие функции это плюс - меньше пользователю объяснять придется.
Если нужен отбор по ТЧ, то пожалуйста - критерий отбора в помощь.

Критерий отбора, который вернет нам ссылку на документ, при заполненности хотя бы одной строки из ТЧ. Зачем нам гибкий механизм задания условий? Есть же типовые костыли. Всего то надо добавить объект базы и изменить регистрацию типового документа.
добавление табличной части снизу списка и заполнение его при активизации строки с ожиданием в 0.1 секунду.

Отдельный запрос на каждую выбранную строку + обработчик ожидания + перебор строк = краш 1С, пользователи же так любят, когда 1С вылетает.
совет - учи мат часть

Ну и самый весомый довод на десерт )
20. AlX0id 18.10.12 11:48 Сейчас в теме
(18) mymyka,
10к документов ~ 100к оперативки на ссылку на документ + сумму планового платежа + индекс таблицы. Один запрос только при открытии формы.
Перебор при наличии индекса - несомненно, сложнейшая операция.
А интересно, каким образом получать данные только для видимой части списка? 30 запросов? Которые так же будут лезть в БД, перебирать ее, только один нюанс - пройдут перед этим 30 раз еще через два звена архитектуры. Оч.мило.
Программисты 1С хорошо бы поступили, если бы дали возможность получить список получаемых ссылок в событии ПриПолученииДанных.
21. bluntschi 18.10.12 11:51 Сейчас в теме
(20) AlX0id, (19) Buster, (18) mymyka, ну вы не ругайтесь) а то мне неловко уже, что из-за моей темы вы тут спорите)
26. mymyka 18.10.12 12:07 Сейчас в теме
(20)Ну замерь чтоли суммарное время поиска нужного значения для 30 строк ТЧ в ТЗ из 10 тысяч строк(даже без учета формирования самой этой ТЗ). И так, для общего развития, ознакомься на досуге со структурой ОформленияСтрок и что именно она содержит в процедуре ПриПолученииДанных()/ПриВыводеСтроки().
35. AlX0id 18.10.12 13:07 Сейчас в теме
(26) mymyka,
Для прикрепленной обработки на серверной базе 30 пользователей 3000 искомых строк в таблице. Результат:
"КоличествоСтрокЗапроса: 18919 ВремяНачала: 18.10.2012 13:03:57 ВремяПослеЗапроса: 18.10.2012 13:03:58 ВремяПослеИндексации: 18.10.2012 13:03:58 ВремяКонца: 18.10.2012 13:03:59"

30 строк ваще незаметны.

З.ы. Хотя, возможно, не показательно время запроса, так как предварительно заполняется из почти такого же запроса табчасть и, возможно, играет роль кэш. Отдельно измерял время запроса - 0.5-0.8 секунды.
11. deniseek77 86 18.10.12 10:26 Сейчас в теме
А почему не добавить реквизит в документ (невидимый на форме), при записи заполнять его и хранить значение в нем. А в списке документов отображать его? Тогда не нужно ни кеширования, ни постоянного считывания, ведь изменяться он будет только при перезаписи документа?
14. bluntschi 18.10.12 10:29 Сейчас в теме
(11) deniseek77, типо при записи документа он будет приравниваться значению из ТЧ?
можно попробовать)))
17. Buster 18.10.12 11:30 Сейчас в теме
фигню вы городите товарищи. не предлагайте кривой реализации. Хоть как вы сделайте, у всего есть свои подводные камни.
Самым эффективным решением данного вопроса будет добавление табличной части снизу списка и заполнение его при активизации строки с ожиданием в 0.1 секунду.
22. bluntschi 18.10.12 11:52 Сейчас в теме
у меня почему-то он не выводит данные....пусто в той колонке получается...
23. AlX0id 18.10.12 11:55 Сейчас в теме
(22) bluntschi,
запрос-то выдает что-нибудь? )
25. bluntschi 18.10.12 11:59 Сейчас в теме
тзОстатки.Найти(ОформлениеСтрок.ДанныеСтроки.Ссылка, "Элемент.ТекущаяСтрока.Ссылка");
вот здесь в табло написано: ошибка в выражении)
27. AlX0id 18.10.12 12:08 Сейчас в теме
В запросе я бы заменил на
| ПлатежноеПоручениеВходящее.Ссылка КАК СсылкаДок,

Соответственно:
тзОстатки.Найти(ДанныеСтроки.Ссылка, "СсылкаДок");
31. bluntschi 18.10.12 12:37 Сейчас в теме
(27) AlX0id, пишет и пишет мне что итератор не определен для этого значения)
33. AlX0id 18.10.12 12:49 Сейчас в теме
(31) bluntschi,
Гляньте как колонки называются в тзОстатки. И код последний в студию ) А то как-то не очень понятно, что там творится )
34. bluntschi 18.10.12 12:54 Сейчас в теме
(33) AlX0id,
сейчас там так)
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ОформленияСтрок, ДанныеСтроки)
    
    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ 

    | ПлатежноеПоручениеВходящее.Ссылка как СсылкаДок, 
    | ПлатежноеПоручениеВходящее.ДокументПланированияПлатежа КАК ДокументПланированияПлатежа
    |ИЗ 
    | Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее 
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа 
    | ПО ПлатежноеПоручениеВходящее.Ссылка = ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка";
 
    тзОстатки = Запрос.Выполнить().Выгрузить();
    

    Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
        
            СтрТЗ = тзОстатки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "СсылкаДок");
            Если СтрТЗ <> Неопределено Тогда
                ОформлениеСтроки.Ячейки.Запланировано.УстановитьТекст(СтрТЗ.ДокументПланированияПлатежа);
            КонецЕсли;    
            
    КонецЦикла;    

Показать
36. AlX0id 18.10.12 13:20 Сейчас в теме
(34) bluntschi,
Шибко много параметров у ПриВыводеСтроки.. Там только ОформлениеСтроки доступно. ОформленияСтрок - это для ПриПолученииДанных.
Если хотите оставить ПриВыводеСтроки - то цикл убирайте и вроде как все.. Ну и параметры в порядок приведите:
табЧастьПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
bluntschi; +1 Ответить
37. bluntschi 18.10.12 13:36 Сейчас в теме
(36) AlX0id, спасибо)

видимо в запросе косяк)
потому что без соединений, не из табличной части если брать что-либо) выводит отлично)
38. AlX0id 18.10.12 13:50 Сейчас в теме
(37) bluntschi,
И все же:
1. Если запрос оставляете в ПриВыводеСтроки, то делайте его только по одному документу.
2. Если используете ПриПолученииДанных, то сначала из ОформленияСтрок вытащите все ссылки, для которых надо получить планы, и делайте запрос только для них.
3. Если будете использовать кэш, то надо его формировать не в ПриВыводеСтроки или ПриПолученииДанных, а при открытии формы. И уже таблицу кэша использовать в обработчиках оформления.
bluntschi; +1 Ответить
39. bluntschi 18.10.12 13:58 Сейчас в теме
(38) AlX0id, спасибо Вам...вы просто супер)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот