Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Корисні прийоми при розв'язанні задач , постимо, обговорюємо          
Cthulhu Подменю пользователя
сообщение 14.09.12, 13:25
Сообщение #1

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

Использование в измерениях регистров / видах субконто агрегатных типов данных (Документ,Справочник) с не указанным явно видом.
В модулях проведения документов типовых конфигураций как правило стоит "присвоение в лоб" значения субконто/измерения из реквизита документа. При этом реквизит документа может быть пустым(!!!!) Документом/Справочником определенного(!!!!) вида.
В результате такой безалаберности могут копиться итоги с НЕСКОЛЬКИМИ ПУСТЫМИ значениями СУБКОНТО/ИЗМЕРЕНий. Особенно феерично это выглядит, например, когда в ОСВ "откуда ни возьмись" болтаются несколько сальдо/оборотов по совершенно "одинаковым" пустым значениям субконто.
С некоторых пор лично я для избегания такой ситуации сразу перелопачиваю модули проведения документов: прямые присвоения значений субконто-измерениям "обрамляю" в если-проверку этих значений на непустое значение (если таки там это значение пустое - лучше вообще не присваивать значение субконто/измерению, это гарантирует отсутствие "расползания" итогов/оборотов по нескольки "одинаковым, но все-таки разным" пустым значениям субконто/измерений, и кроме того, упрощает последующий доступ к итогам/оборотам по именно пустым значениям субконто/измерений в случае необходимости).

Сообщение отредактировал mister-x - 17.09.12, 16:21

Спасибо сказали: Alex729, andreykyiv@bigmir.net, mister-x, XBrut, Читатель,

Cthulhu Подменю пользователя
сообщение 15.09.12, 19:56
Сообщение #2

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

Ускорение получения остатков по "неполным" разрезам измерений с методом "ПолучитьСводныйОстаток". В 1с к регистрам (как правило) строятся индексы, которые составляются из значений измерений, идущих в порядке их следования в метаданных. при этом, если в списке измерений при использовании подобного метода измерения идут с самого начала списка парамептров без "пропусков" - то движок 1с для получения этих данных использует указанные индексы; если жде в списке фильтра по измерениям встречается пропуск измерения - а это бывает нужно, если нужен итог по всем значениям такого измерения сводно, без фильтации - то для получения итогов используется простой перебор(!) таблицы итогов. Поэтому в случаях, когда это возможно, вместо получения сводного остатка с пропуском значений измерений бывает оптимальнее совершать вместо одного запроса с пропуском несколько запросов без пропусков, с подстановкой в это реквизит всех возможных значений и подсуммированием.


Сообщение отредактировал mister-x - 15.09.12, 20:11
Причина редактирования: для приховання офтопу, використовуйте Спрятать або тег hide

Спасибо сказали: Alex729, mister-x, XBrut,

Cthulhu Подменю пользователя
сообщение 17.09.12, 14:19
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

Возможность проверки изменений Документа, записанного в реквизит типа Документ, с момента открытия формы (объекта) с таким реквизитом.
<НаименованиеРеквизитаСДокументом>.<МетодыПолученияДанныхИлиПростоСсылкиНаРеквизиты> - дадут те значения, которые были в этом документе на момент откытия формы (объекта?) с таким реквизитом;
ВремДок=<НаименованиеРеквизитаСДокументом>.ТекущийДокумент();
ВремДок.<МетодыПолученияДанныхИлиПростоСсылкиНаРеквизиты> - дадут актуальные данные из этого документа (на момент выполнения кода).
Иногда бывает полезным, напримерЮ, при проверке в ПриЗаписи подчиненного документа - а не был ли кем-то вдруг как-то изменен ДокументОснование?.. Хотя и не только для этого.
(да, парадоксально, но факт - если знать, что при открытии формы движок 1с кэширует все объекты данных агрегатных типов, ссылки на которые есть в открываемой форме)

ЗЫ: там лишняя точка, клипборд ей в печенку...

Сообщение отредактировал mister-x - 17.09.12, 14:41

Спасибо сказали: mister-x, Читатель,

mister-x Подменю пользователя
сообщение 18.09.12, 16:53
Сообщение #4

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

Цікавить така річ: нехай на довільній формі (обробка, звіт) є N реквізитів, індентифікатор яких "рекв1", "рекв2"..."реквN". Як їм автоматично в циклі присвоїти значення? Така річ як Форма.ПолучитьАтрибут(ИмяРеквизита) викор. успішно для встановлення в циклі видимості, доступності реквізиту; от присвоїти значення не вийде. Чи можливо це зробити стандартними можливостями 1С? от тут http://pro1c.org.ua/index.php?showtopic=8336 і тут http://pro1c.org.ua/index.php?showtopic=2054&st=20 почали мову

Сообщение отредактировал mister-x - 18.09.12, 17:00

Cthulhu Подменю пользователя
сообщение 18.09.12, 19:09
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

Цитата(mister-x @ 18.09.12, 16:53) *
Цікавить така річ: нехай на довільній формі (обробка, звіт) є N реквізитів, індентифікатор яких "рекв1", "рекв2"..."реквN". Як їм автоматично в циклі присвоїти значення? Така річ як Форма.ПолучитьАтрибут(ИмяРеквизита) викор. успішно для встановлення в циклі видимості, доступності реквізиту; от присвоїти значення не вийде. Чи можливо це зробити стандартними можливостями 1С?

Потом смотрим в "описание встроенного языка", глава "процедуры и функции форматирования" - а именно на описание функции "Шаблон". И внезапно ловим озарение - обана, да ведь там в параметре можно любое выражение всунуть - в том числе вызов функции, которая как-то изменяет свои параметры!!!
Под действием озарения и в продолжение его пишем (лучше сразу в ГМ) вот такую, например, полезную функцию:
Функция глПрисвоитьЗначение(Знач парИсточник,парПриемник="") Экспорт
    Перем тТип;
    тТип=ТипЗначенияСтр(парИсточник);
    Если Прав(тТип,8)="Значений" Тогда
        парПриемник=СоздатьОбъект(тТип); парИсточник.Выгрузить(парПриемник);
    ИначеЕсли тТип="Справочник" Тогда
        парПриемник=парИсточник.ТекущийЭлемент();
    ИначеЕсли тТип="Документ" Тогда
        парПриемник=парИсточник.ТекущийДокумент();
    ИначеЕсли тТип="Счет" Тогда
        парПриемник=парИсточник.ТекущийСчет();
    Иначе
        парПриемник=парИсточник;
    КонецЕсли;
    Возврат(парИсточник);
КонецФункции //глПрисвоитьЗначение

А в модуле формы, где нам надо присвоить реквизиту(!)формы с именем, ну, допустим, "Фигня1" значение, хранящееся в переменной, ну, допустим, "ЗначениеДляФигни1", озаренные такие, смело пишем:
Шаблон("[глПрисвоитьЗначение(ЗначениеДляФигни1,Фигня1)]");

Кстати, эта "задняя дверь" сильно не нравится самой фирме 1С. Настолько не нравится, что использование функции "Шаблон" для чего-либо кроме форматирования в любой конфигурации - практически крест на возможности сделать её "1с-совместимо".

Сообщение отредактировал Cthulhu - 19.09.12, 9:51

Спасибо сказали: Flexy, mister-x, Домовик, Читатель,

Cthulhu Подменю пользователя
сообщение 01.02.13, 19:36
Сообщение #6

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

О кнопках выбора (в смысле "педалек" у реквизитов),
Все знают, что наличие таких педалек устанавливается в свойствах реквизита, на закладке "Дополнительно", галкой "Имеет кнопку выбора" (внизу-справа). У реквизитов т.н. агрегатного типа (Справочник,Документ, итп) эта педалька устанавливается движком автоматически (и не может быть снята) - но сейчас не об этом.

1. У реквизитов примитивных типов (в частности, у строк) эта педальта тоже может быть установлена. И тогда, например, можно в процедуре формы "ПриНачалеВыбораЗначения" нажатие на эту педальку поймать, и закодировать какой-нибудь процесс выбора значения с последующей установкой в реквизит значения, вычисленного по выполненному выбору. Если для выбора будет открыта какая-то форма (с помощью "ОткрытьФорму") - то она откроется в режиме выбора(!), а выбранное значение попадет в по окончании выбора в процедуру "ОбработкаВыбораЗначения" (в ее первый параметр), и в этой процедуре переменную, указанную в первом параметре, можно пере-назначить как будда на душу положит - если при этом не обнулять значение третьего параметра этой процедуры (т.н. "флаг стандартной обработки") - то в реквизит будет установлено именно вот таким образом "переиначенный" в этой процедуре первый параметрр (изначально содержащий выбранное значение)!
В качестве небезынтересного примера.
Создайте внешнюю обработку с единственным реквизитом "ВыбКонтрагентНаим" типа "строка неограниченной длины", добавьте в этот реквизит педальку (см.выше как). А в модуле - вот такой код:
Процедура ПриНачалеВыбораЗначения(НаимРекв,ФСО) //предопределенная
    Если НаимРекв="ВыбКонтрагентНаим" Тогда
        ОткрытьФорму("Справочник.Контрагенты");//ну или любой другой, который есть в конфигурации
    КонецЕсли;
КонецПроцедуры //ПриНачалеВыбораЗначения
//------------------------------------------------------------------------------
Процедура ОбработкаВыбораЗначения(ВыбЗнач,НаимРекв,ФСО) //предопределенная
    Если НаимРекв="ВыбКонтрагентНаим" Тогда
        ВыбЗнач=ВыбЗнач.ПолноеНаименование();
    КонецЕсли;
КонецПроцедуры //ОбработкаВыбораЗначения
//==============================================================================

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


2. Теперь о педальке и выборе. В приложенном выше варианте - убираем педальку (отключаем галку "Имеет кнопку выбора" в свойствах текстового реквизита). И - снова открываем (если была открыта до сохранения - пере-открываем!) эту обработку. И - вспоминаем о том, что для выбора значения в реквизит можно использовать хот-кей F4 - и, став в этот текстовый реквизит, не обращая внимания на отсутствие педальки, смело жмём F4 - что получилось? Ага, всё верно, движок 1с при нажатии на любом(!) реквизите (хоть с педалькой выбора, хоть без неё!) хот-кея F4 выполняет предопределенную процедуру ПриНачалеВыбораЗначения модуля формы. Что иногда может пригодиться - для экономии места на форме (не расставляя педальки на реквизиты, для которых нужно организовывать выбор(!) значения с его преобразованием перед занесением в сам реквизит).


3. Иногда бывает нужным выбирать, например, для реквизита сначала элемент из справочника, показывая при этом не весь справочник. Или просто открывать для выбора какую-то не предназначенную для выбора "кем угодно" специальную форму выбора, не предназначенную в конфигурации явно для выбора значения какого-то типа+вида. Или вообще - выбирать из списка в виде ТЗ, размещенной на форме обработки, или даже - о, будда! - выбирать значение из формы документа! В таких случаях может пригодиться прием "подмена формы выбора". Для этого в ПриНачалеВыбораЗначения необходимо обнулить флаг стандартной обработки (что отменит открытие для выбора значения формы списка, предназначенной "по умолчанию" для выбора в конфигурации) и - аналогично приведенному выше примеру - открыть любую другую форму. При этом, тут же, сразу после "ОткрытьФорму" в переменной, указанной соответствующем параметре, можно получить контекст(!!!) открытой формы (сразу после того, как в открываемой форме отработает предопределенная процедура "ПриОткрытии") - и через этот самый полученный контекст можно много чего с этой формой налопатить, через точку обращаясь к реквизитам формы, к самой форме и к методам формы и реквизитов! например, если для выбора открыта форма списка справочника - можно в ней принудительно установить отбор, отключить/включить режим иерархического отображения, наложить фильтр с помощью "<ПеремКонтекст>.ИспользоватьСписокЭлементов(..)", ограничить виды отборов, открыть только нужного родителя, и т.д. - тут, как говорится, надо "играться"...

прим.: в открываемых формах режим выбора - т.е. открыта форма (любая!) для выбора или нет - можно определить с помощью "Форма.РежимВыбора()" (см.синтакс-помощник), а выполнить выбор по нажатию на кнопку - можно конкретизировать выбираемое значение, используя в формуле кнопки (или в процедуры, вызываемой по формуле кнопки) "Форма.ВыполнитьВыбор(<ЧтоИменноНадоВернуть>)".

Сообщение отредактировал Cthulhu - 01.02.13, 19:38

Спасибо сказали: Flexy, Vofka, Читатель,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 23:59
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!