|
1С:Предприятие
:: 1С:Предприятие 7.7 и ранее
|
|
| ||
Андрей_Андреич 04.12.20 - 06:05 | Решил освоить - помогите сделать это максимально эффективно, не наступая на пройденные другими грабли. Пока на примере справочника.
1. Если в формах списка справочника удалить табличную часть справочника и воткнуть табличную часть Поставщика - будет ли это правильным решением (кто его знает - вдруг платформа все равно будет справочник дергать, раз объявлено, что это форма списка) 2. В форме подбора у меня выводятся остатки из различных регистров. Как правильнее - присоединить запрос (добавить соединение данных) или выполнять запрос при выводе строки и затем заполнять вычисляемые колонки? | ||
hhhh 1 - 04.12.20 - 06:15 | (0) это точно семерка? | ||
Андрей_Андреич 2 - 04.12.20 - 06:18 | (1) Это 7.7 + компонента 1С++ + написанные на ней классы. | ||
ДенисЧ 3 - 04.12.20 - 07:19 | |||
Sserj 4 - 04.12.20 - 07:26 | (0) По поводу 2 на мой взгляд правильней выгребать остатки из регистров в ИндексированнуюТаблицу с индексом по элементу и при выводе строки брать из нее данные. Если нужно то эти остатки по таймеру обновлять. | ||
Андрей_Андреич 5 - 04.12.20 - 07:39 | (3) Я не проверял. Похоже возражений нет?
Про запрос в цикле. У меня сейчас в форме списка первой колонкой текстовое поле с формулой ПолучитьОстатки() - эта функция выполняет параметризованный запрос и рассчитывает значения для остальных колонок. Вроде пашет лет 15 беспроблемно. Но тогда по другому было никак - вот и спрашиваю как правильно. (4) А как узнавать,когда надо обновлять? Поставщик генерит событие при обновлении? | ||
Sserj 6 - 04.12.20 - 07:47 | (5) А никак не узнавать, просто по таймеру перезаполнять ИТЗ и вызывать у табличного поля ПерерисоватьСтроки.
Оно обновляется не дергая поставщика, но при этом отрабатывается ПриВыводеСтроки. | ||
ADirks 7 - 04.12.20 - 08:04 | Остатки лучше в запросе собирать, на ТА - это не сильно напрягает сервер, зато удобнее. | ||
Андрей_Андреич 8 - 04.12.20 - 08:16 | (7) То есть присоединить запрос (добавить соединение данных)? Ок
Кстати обнаружил - не работает поиск по коду при наборе в колонке. Код текстовый. По другим текстовым полям работает | ||
Mikeware 9 - 04.12.20 - 08:28 | (0)
1. даже если и дернет разок - хотя какой элемент формы и зачем будет дергать данные? 2. зависит от формы, и соединения. если в подборе даннне ы таблице - то соединение, а если встал на строку - а в реквизитах формы вываливюется дополнительные данные - то доп.данные получать отдельно. (1) абсолютно точно | ||
ADirks 10 - 04.12.20 - 13:47 | (8) возможно, надо вместо Алиас.Code написать LTrim(Алиас.Code) | ||
alyuev 11 - 04.12.20 - 16:04 | "Поставщик данных" - это класс? Который http://catalog.mista.ru/public/67841/? | ||
Mikeware 12 - 04.12.20 - 18:40 | (11) да | ||
Андрей_Андреич 13 - 06.12.20 - 06:34 | (10) Не понял. Я использую готовый класс. То есть или не та версия или ошибка в классе. Ну или я тупой, что вполне вероятно. | ||
Mikeware 14 - 06.12.20 - 11:13 | (13) любой из этих трех вариантов не мешает попробовать... | ||
Cthulhu 15 - 06.12.20 - 19:15 | оффтопик(ли?)
"когда динозавры вымирают - остаются крысы" (с) не моё | ||
Андрей_Андреич 16 - 09.12.20 - 06:51 | (15) Спасибо, добрый человек. Это у Райкина миниатюра была. Вроде не крысы, а тараканы.
С соединением разобрался. Теперь дальше. Реквизиты на форме выводятся, по-видимому, в процедуре ПриАктивизацииСтроки. Часть колонок табличной части надо вычислять ПриВыводеСтроки. Подскажите, как добавить эту вычислямую колонку? | ||
Sserj 17 - 09.12.20 - 06:56 | (16) Дэк просто добавь колонку без пути к данным.
Т.е. поле Данные не указывай при создании колонки. Она будет пустая и делай ПриВыводеСтроки с ней что хочешь. | ||
Андрей_Андреич 18 - 09.12.20 - 07:04 | (17) Да уже много вариантов перепробовал. Только что сработал "ПоставщикДанных.ТабличноеПоле.Колонки.Добавить". Сейчас попробую заполнять. Или есть более простой вариант? Не люблю много точек :)
Еще вопросик - если колонка невидимая, то обрабатывать ее ПриВыводеСтроки необязательно? Вроде при изменении видимости все перерисуется по новой? | ||
Sserj 19 - 09.12.20 - 07:17 | (18)
1. Ну более простой: Колонки = ПоставщикДанных.ТабличноеПоле.Колонки; Колонка = Колонки.Добавить();:) 2. Честно не помню таких тонкостей. (16) А иногда соединение не выгодно делать. К примеру если тебе нужно показывать последнюю цену на дату то выгодней сделать колонку с подзапросом. Тогда вычисления будут только для строк которые уже непосредственно попадают в табличное поле а не расчет среза последних для всех. К примеру вывод последней цены для номенклатуры из ТиС (SQL): select товары.id as [Товар $Справочник.Номенклатура] , coalesce(cast($ПоследнееЗначение.Цены.Цена(цены.id, :датаЦены) as numeric(10,2), 0) as [Цена $Число] from $Справочник.Номенклатура as товары with (nolock) left join $Справочник.Цены as цены with (nolock) on цены.parentext = товары.id where $цены.ТипЦены = :НужныйТипЦенЗапрос не точный, просто по памяти написал, главное смысл. ПоставщикДанных сначала отберет нужное ему количество строк и только для них будет расчет цен. | ||
Sserj 20 - 09.12.20 - 07:21 | +(19) Хотя косяк, тут только с типом цены товары выберутся. Условие нужно бы заменить на APPLY select товары.id as [Товар $Справочник.Номенклатура] , coalesce(cast($ПоследнееЗначение.Цены.Цена(цены.цена, :датаЦены) as numeric(10,2), 0) as [Цена $Число] from $Справочник.Номенклатура as товары with (nolock) outer apply ( select спрЦены.id as [Цена] from $Справочник.Цены as спрЦены with (nolock) where спрЦены.parentext = товары.id and $цены.ТипЦены = :НужныйТипЦен ) as цены | ||
Андрей_Андреич 21 - 09.12.20 - 07:30 | (19) Понятно, благодарю. Ну и сразу следующий вопрос - реализовано ли дерево групп и как? Имеется в виду как в типовой семерке два взаимодействующих объекта на форме. | ||
alyuev 22 - 09.12.20 - 15:21 | (8) Для быстрого поиска по коду я уже делал как-то правку: http://www.1cpp.ru/forum/YaBB.pl?num=1285520767/627#627 | ||
alyuev 23 - 09.12.20 - 15:23 | Перенесу оттуда текст моего сообщения:
Нужно заменить в функции БыстрыйПоискПоПодстроке() класса ПоставщикДанных.Справочник для условия:
Если Врег(ИмяКолонки) = "КОД" Тогда
на нижеследующий код:
Если МетаСправочник.ТипКода="Числовой" Тогда
ТекстЗапросаПоиска = ТекстЗапросаПоиска + "
|"+КлючевоеСлово+" ТекущийОбъект.code = '"+Формат(Значение,"Ч"+МетаСправочник.ДлинаКода+" ")+"'
|";
Иначе
ТекстЗапросаПоиска = ТекстЗапросаПоиска + "
|"+КлючевоеСлово+" substr"+?(ЭтоSQL = 1,"ing","")+"(ТекущийОбъект.code,1,"+СтрДлина(СокрЛП(Значение))+") "+?(ЭтоSQL = 0,"collate _1C ","")+"= '"+Нрег(СокрЛП(Значение))+"'
|";
КонецЕсли;
Здесь использую СокрЛП(Значение) потому как ранее вызывалась функция ПодготовитьЗначениеПоиска() и в ней текстовое Значение форматируется в полную строку с длиной кода, т.е. ввели "8" - получили "8 ". А оно нам не надо... | ||
koala45 24 - 09.12.20 - 15:44 | Но тогда по другому было никак - вот и спрашиваю как правильно. | ||
Андрей_Андреич 25 - 10.12.20 - 05:22 | (23) Спасибо, поправил - заработало. Как бы до автора донести чтобы внес исправления? | ||
Андрей_Андреич 26 - 10.12.20 - 08:20 | (25) + код все-таки привычней по первым символам, а не по вхождению. Впрочем, это уже несложно доделать будет при необходимости |
|
Список тем форума |