Платежное поручение входяшее - список документа
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Можно, но при условии, если вы согласны сделать конфигурацию нетиповой. Ибо в настройке списка этот реквизит(наверное, реквизит документа, хотя не буду утверждать, в конфигуратор не залезал) отсутствует. Его нужно добавлять через конфигуратор, дело минутное.
представьте что у вас будет несколько строк в табличной части документа. Какое значение Запланировано захотите видеть в списке документов?
Несколько строк по одному документу в списке выводить нельзя, или это уже будет не список.
Несколько строк по одному документу в списке выводить нельзя, или это уже будет не список.
(3) Buster,
Можно в одну строку вывести теоретически..
(1) bluntschi,
Добавляете колонку и создаете/изменяете соответствующим образом обработчик табличного поля ПриВыводеСтроки или ПриПолученииДанных. Есть один нюанс - для того, чтобы не делать запрос по запланированным платежам по каждой выводимой строке, нужно данные сначала закэшировать.
Можно в одну строку вывести теоретически..
(1) bluntschi,
Добавляете колонку и создаете/изменяете соответствующим образом обработчик табличного поля ПриВыводеСтроки или ПриПолученииДанных. Есть один нюанс - для того, чтобы не делать запрос по запланированным платежам по каждой выводимой строке, нужно данные сначала закэшировать.
(4) AlX0id, я так понимаю, нужно что-то типо такого:
только я не совсем понимаю, как в запросе обратися к текущему документу, он ругается
Процедура ПриОткрытии()
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| ПлатежноеПоручениеВходящее.Ссылка,
| ПлатежноеПоручениеВходящее.ДокументПланированияПлатежа КАК ДокументПланированияПлатежа
|ИЗ
| Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа
| ПО ПлатежноеПоручениеВходящее.Ссылка = ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка
|И ППлатежноеПоручениеВходящееРасшифровкаПлатежа.НомерСтроки = 1
|ГДЕ
|
| ПлатежноеПоручениеВходящее.Ссылка = &ПлатежноеПоручениеВходящее";
Запрос.УстановитьПараметр("ПлатежноеПоручениеВходящее", ЭтотОбъект.Ссылка);
тзОстатки = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
Процедура СписокПриВыводеСтроки(Элемент, ОформленияСтрок, ДанныеСтроки)
Если Элемент.Колонки.Запланировано.Видимость Тогда
Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
СтрТЗ = тзОстатки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "ПлатежноеПоручениеВходящее.Ссылка");
Если СтрТЗ <> Неопределено Тогда
ОформлениеСтроки.Ячейки.Запланировано.УстановитьТекст(СтрТЗ.ДокументПланированияПлатежа);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Показатьтолько я не совсем понимаю, как в запросе обратися к текущему документу, он ругается
(7) bluntschi,
Ну собсн, да - тзОстатки и будет кэшем в Вашем случае. А вот зачем Вам текущий документ для кэша как раз таки не понятно - он же должен представлять собой как раз таблицу вида "Ссылка" - "Запланировано".
Под кэшированием я подразумеваю, что данные должны быть вытащены с сервера одним запросом в виде таблицы значений, например. Работа с таблицей значений, хранящейся в оперативной памяти, осуществляется как правило на порядок быстрее, нежели последовательное выполнение кучи запросов к серверу.
Ну собсн, да - тзОстатки и будет кэшем в Вашем случае. А вот зачем Вам текущий документ для кэша как раз таки не понятно - он же должен представлять собой как раз таблицу вида "Ссылка" - "Запланировано".
Под кэшированием я подразумеваю, что данные должны быть вытащены с сервера одним запросом в виде таблицы значений, например. Работа с таблицей значений, хранящейся в оперативной памяти, осуществляется как правило на порядок быстрее, нежели последовательное выполнение кучи запросов к серверу.
а теперь ругается, что итератор не определен... не правильно обращаюсь к запросу?
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ОформленияСтрок, ДанныеСтроки)
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| ПлатежноеПоручениеВходящее.Ссылка,
| ПлатежноеПоручениеВходящее.ДокументПланированияПлатежа КАК ДокументПланированияПлатежа
|ИЗ
| Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа
| ПО ПлатежноеПоручениеВходящее.Ссылка = ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка
|ГДЕ
|
| ПлатежноеПоручениеВходящее.Ссылка = &Ссылка";
//ТекущийДокумент = Элемент.Ссылка;
Запрос.УстановитьПараметр("Ссылка", Элемент.ТекущаяСтрока.Ссылка);
тзОстатки = Запрос.Выполнить().Выгрузить();
//Если Элемент.Колонки.Запланировано.Видимость Тогда
Для Каждого Строка ИЗ ОформленияСтрок Цикл
СтрТЗ = тзОстатки.Найти(Строка.ДанныеСтроки.Ссылка, "Элемент.ТекущаяСтрока.Ссылка");
Если СтрТЗ <> Неопределено Тогда
Строка.Ячейки.Запланировано.УстановитьТекст(СтрТЗ.ДокументПланированияПлатежа);
КонецЕсли;
КонецЦикла;
//КонецЕсли;
КонецПроцедуры
Показать
(16)Для списка из 10 тысяч документов будешь ТЗ в глобальной переменной на форме хранить? и перебирать ее для каждой строки списка при заполнении поля? Это несомненно куда более оптимальное решение, нежели получать данные только для видимой части списка. Наверно в 1С совсем конченые программисты, что не додумались на форме хранить цельные ТЗ, а реализовали какие-то бесполезные порционные выборки.
(17)Идеальное решение, вот только про отборы, группировки, сортировки можно забыть, но для списка документов это же такая мелочь, правда?
(17)Идеальное решение, вот только про отборы, группировки, сортировки можно забыть, но для списка документов это же такая мелочь, правда?
(19)Точно, сортировка в форме списка это абсолютный левак. Выводим реквизит мы не для того, чтобы пользователь имел к нему быстрый доступ и мог визуально отобрать документ по признаку в списке, а только из исключительной любви к программированию. Наличие over9k обработок ожидания, которые запустят over9k запросов, при перемещении по списку клавишей "вниз", в памяти нас не волнует, а еще 1С внезапно научилась использовать критерии отбора для расчетного значения документа.
(28)/фейспалм, все? доводы кончились? я расписал только самые явные недостатки твоего предложения (если вылет 1С с переполнением стека запросов при перемещении по списку зажатой кнопкой "вниз" можно вообще назвать "недостатком"). +Критерий отбора выведет все записи хотя бы частично удовлетворяющие условию, что из постановки задачи отнюдь не следует, так что "учить матчасть" придется, наверно, все же тебе.
(30)Доводы, где? хоть 1?
Несомненный довод в пользу твоего решения, отсутствие функции это плюс.
Как уже говорилось, отсутствие функции это плюс - меньше пользователю объяснять придется.
Критерий отбора, который вернет нам ссылку на документ, при заполненности хотя бы одной строки из ТЧ. Зачем нам гибкий механизм задания условий? Есть же типовые костыли. Всего то надо добавить объект базы и изменить регистрацию типового документа.
Отдельный запрос на каждую выбранную строку + обработчик ожидания + перебор строк = краш 1С, пользователи же так любят, когда 1С вылетает.
Ну и самый весомый довод на десерт )
мелочь. Правда
Несомненный довод в пользу твоего решения, отсутствие функции это плюс.
Сортировка? О дааа, для реквизита, в котором фиг пойми что самое то сортировать его.
Как уже говорилось, отсутствие функции это плюс - меньше пользователю объяснять придется.
Если нужен отбор по ТЧ, то пожалуйста - критерий отбора в помощь.
Критерий отбора, который вернет нам ссылку на документ, при заполненности хотя бы одной строки из ТЧ. Зачем нам гибкий механизм задания условий? Есть же типовые костыли. Всего то надо добавить объект базы и изменить регистрацию типового документа.
добавление табличной части снизу списка и заполнение его при активизации строки с ожиданием в 0.1 секунду.
Отдельный запрос на каждую выбранную строку + обработчик ожидания + перебор строк = краш 1С, пользователи же так любят, когда 1С вылетает.
совет - учи мат часть
Ну и самый весомый довод на десерт )
(18) mymyka,
10к документов ~ 100к оперативки на ссылку на документ + сумму планового платежа + индекс таблицы. Один запрос только при открытии формы.
Перебор при наличии индекса - несомненно, сложнейшая операция.
А интересно, каким образом получать данные только для видимой части списка? 30 запросов? Которые так же будут лезть в БД, перебирать ее, только один нюанс - пройдут перед этим 30 раз еще через два звена архитектуры. Оч.мило.
Программисты 1С хорошо бы поступили, если бы дали возможность получить список получаемых ссылок в событии ПриПолученииДанных.
10к документов ~ 100к оперативки на ссылку на документ + сумму планового платежа + индекс таблицы. Один запрос только при открытии формы.
Перебор при наличии индекса - несомненно, сложнейшая операция.
А интересно, каким образом получать данные только для видимой части списка? 30 запросов? Которые так же будут лезть в БД, перебирать ее, только один нюанс - пройдут перед этим 30 раз еще через два звена архитектуры. Оч.мило.
Программисты 1С хорошо бы поступили, если бы дали возможность получить список получаемых ссылок в событии ПриПолученииДанных.
(20)Ну замерь чтоли суммарное время поиска нужного значения для 30 строк ТЧ в ТЗ из 10 тысяч строк(даже без учета формирования самой этой ТЗ). И так, для общего развития, ознакомься на досуге со структурой ОформленияСтрок и что именно она содержит в процедуре ПриПолученииДанных()/ПриВыводеСтроки().
(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 секунды.
Для прикрепленной обработки на серверной базе 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 секунды.
А почему не добавить реквизит в документ (невидимый на форме), при записи заполнять его и хранить значение в нем. А в списке документов отображать его? Тогда не нужно ни кеширования, ни постоянного считывания, ведь изменяться он будет только при перезаписи документа?
фигню вы городите товарищи. не предлагайте кривой реализации. Хоть как вы сделайте, у всего есть свои подводные камни.
Самым эффективным решением данного вопроса будет добавление табличной части снизу списка и заполнение его при активизации строки с ожиданием в 0.1 секунду.
Самым эффективным решением данного вопроса будет добавление табличной части снизу списка и заполнение его при активизации строки с ожиданием в 0.1 секунду.
(33) AlX0id,
сейчас там так)
сейчас там так)
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ОформленияСтрок, ДанныеСтроки)
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| ПлатежноеПоручениеВходящее.Ссылка как СсылкаДок,
| ПлатежноеПоручениеВходящее.ДокументПланированияПлатежа КАК ДокументПланированияПлатежа
|ИЗ
| Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа
| ПО ПлатежноеПоручениеВходящее.Ссылка = ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка";
тзОстатки = Запрос.Выполнить().Выгрузить();
Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
СтрТЗ = тзОстатки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "СсылкаДок");
Если СтрТЗ <> Неопределено Тогда
ОформлениеСтроки.Ячейки.Запланировано.УстановитьТекст(СтрТЗ.ДокументПланированияПлатежа);
КонецЕсли;
КонецЦикла;
Показать
(34) bluntschi,
Шибко много параметров у ПриВыводеСтроки.. Там только ОформлениеСтроки доступно. ОформленияСтрок - это для ПриПолученииДанных.
Если хотите оставить ПриВыводеСтроки - то цикл убирайте и вроде как все.. Ну и параметры в порядок приведите:
табЧастьПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Шибко много параметров у ПриВыводеСтроки.. Там только ОформлениеСтроки доступно. ОформленияСтрок - это для ПриПолученииДанных.
Если хотите оставить ПриВыводеСтроки - то цикл убирайте и вроде как все.. Ну и параметры в порядок приведите:
табЧастьПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
(37) bluntschi,
И все же:
1. Если запрос оставляете в ПриВыводеСтроки, то делайте его только по одному документу.
2. Если используете ПриПолученииДанных, то сначала из ОформленияСтрок вытащите все ссылки, для которых надо получить планы, и делайте запрос только для них.
3. Если будете использовать кэш, то надо его формировать не в ПриВыводеСтроки или ПриПолученииДанных, а при открытии формы. И уже таблицу кэша использовать в обработчиках оформления.
И все же:
1. Если запрос оставляете в ПриВыводеСтроки, то делайте его только по одному документу.
2. Если используете ПриПолученииДанных, то сначала из ОформленияСтрок вытащите все ссылки, для которых надо получить планы, и делайте запрос только для них.
3. Если будете использовать кэш, то надо его формировать не в ПриВыводеСтроки или ПриПолученииДанных, а при открытии формы. И уже таблицу кэша использовать в обработчиках оформления.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот