gifts2017

Полезные мелочи...

Опубликовал Вадим 1С911.BY (Вадимко) в раздел Программирование - Практика программирования

Буду сюда писать воспоминания...
Возможно и набояню... звиняйте...
Простейшее получение Вида документа по ИД

Адресовано любителям прямых запросов, которые не хотят использовать функций и соединений со своими
таблицами... и не могут ждать появления метода в MetaDataWork

Вот так можно получить вид документа из IDDOCDEF (полностью штатно):

Стр 
= "{" +"""O"""+","+"""0"""+","+"""0"""+","+"""*"""+","+"""0"""+","+"""0"""+","+""" 0 """+"}"
;
Стр 
=
СтрЗаменить
(
Стр
, "*",
Строка
(
Вид
))
; 
//Вид - это что-то вроде 3508, тот что в DD и DDS (десятичное число)
Вид 
=
ЗначениеИзСтрокиВнутр
(
Стр
).
Вид
()
; 
//А вот это уже идентификатор :)

Аккуратнее с однотипными группировками в SQL

Казалось бы безобидный запрос работает под SQL некорректно из-за того, что разные реквизиты ссылаются на один и тот же справочник. По отдельности работать будет (а также если перенести вторую группировку вперед и поставить между свойствами еще какую-то группировку)
Можете попробовать

Вот пример для ТиС:

ЗначениеСвойства = Справочник.Контрагенты.ОсновноеСвойство.ЗначениеСвойства;
ЗначениеСвойства1 = Справочник.Контрагенты.ОсновноеСвойство1.ЗначениеСвойства;
Группировка ЗначениеСвойства;
Группировка ЗначениеСвойства1;

Вот просто отсебятина:

|Организация = Справочник.МестаХранения.Организация;
|Организация1 = Справочник.МестаХранения.Организация1;
|Группировка Организация;
|Группировка Организация1;

Тип реквизитов Организация и Организация1 - "Справочник.Контрагенты"


Как найти битую ссылку?

Это знакомое

А вот так можно, например:

Если (
ПустоеЗначение
(
Док
.
Докум
) = 0)
и 
(
Док
.
Докум
.
Выбран
() = 0) Тогда
Сообщить
("В документе " +
Док 
+ " есть битая ссылка")
;
КонецЕсли
;


ЗЫ. Аккуратно с непосредственным удалением объектов


Как узнать является ли строка числом?

Примерчики...
"0004" - число, "440ф0" - не число, "43.045" - число, "-33" - число, "5453.54.4" - не число и т.п.
В процессе интереснейшего обсуждения на риалнете http://abelov.com/forum/f.php?ac=ar&ak=35693#0
родил вот такую простенькую но вполне работоспособную функцию:

Функция
ЭтоЧисло
(Знач
ТекСтр
)
ТекСтр 
=
СокрЛП
(
ТекСтр
)
;
	ТекСтр 
=
СтрЗаменить
(
ТекСтр
,"0","9")
;
	
	
Если (
СтрДлина
(
Число
(
ТекСтр
)) <>
СтрДлина
(
ТекСтр
))
или 
((
СтрДлина
(
ТекСтр
) = 1)
и 
(
Найти
("0123456789",
ТекСтр
) = 0)) Тогда Возврат 0
;
	
КонецЕсли
;
	
	
Возврат 1
;
КонецФункции // ЭтоЧисло()
 
Оригинал статьи
http://1c911.by/stati_1s/statya-poleznye-melochi.htm
Изменения и новые публикации смотрите на http://1c911.by/stati-1s.htm

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Аркадий Кучер (Abadonna) 30.07.07 20:50
А вот так не проще будет? :
Код
Функция ЭтоЧисло(Стр)
   Если СтрДлина(Строка(Число(Стр)))=СтрДлина(Стр) Тогда
      Возврат 1; // число
   Иначе
      Возврат 0; // не число
   КонецЕсли;
КонецФункции
Показать полностью

2. Сhe Burashka (CheBurator) 30.07.07 21:15
Не проще, потому что не прокатит на строке "0002"
3. Аркадий Кучер (Abadonna) 30.07.07 21:39
Прошу прощения, немного погорячился...
Нижеприведенная сработает во всех случая, кроме Стр="00001" и т.п.
Хотя можно можно и убрать незначащие нули, но тогда функция получится не проще, чем у автора
4. Аркадий Кучер (Abadonna) 30.07.07 21:49
А вообще вот так:
Код
Функция ЭтоЧисло(Стр)   
   Стр=СтрЗаменить(Стр,"0",""); // нам неважно, значащий ноль или нет
   Если СтрДлина(Строка(Число(Стр)))=СтрДлина(Стр) Тогда
      Возврат 1;
   Иначе
      Возврат 0;
   КонецЕсли;
КонецФункции
Показать полностью
5. Аркадий Кучер (Abadonna) 30.07.07 21:54
Для "чистого" нуля надо еще строчеку добавить в самом начале функции
Код
Если Стр="0" Тогда Возврат 1; КонецЕсли;
Показать полностью
6. Сhe Burashka (CheBurator) 30.07.07 21:56
Кругом двоешники... ;-)
"9009"
7. Сhe Burashka (CheBurator) 30.07.07 22:00
Не, это я двоешник... ;-)
Abadonna; +1 Ответить
8. Аркадий Кучер (Abadonna) 31.07.07 05:30
Не сильно ты двоечник, не нашел, где я проколося ;)
После
Код
Стр=СтрЗаменить(Стр,"0","");
Показать полностью

надо поставить
Код
Если (Стр="") ИЛИ (Стр=".") Тогда // было что-то типа "00000" или "00.0000"
          Возврат 1;
КонецЕсли;
Показать полностью
9. Аркадий Кучер (Abadonna) 31.07.07 05:42
А вобщем, вышло почти то же, что и автора, поэтому за беспокойство ему +1
10. Вадим 1С911.BY (Вадимко) 31.07.07 14:04
Оооо
Началось обсуждение :)
Подкину еще что-нить потом, пока совсем мало времени и голова опухла
11. Сhe Burashka (CheBurator) 31.07.07 15:53
Воспользовался "битыми ссылками", работает.
+1
;-)
12. Аркадий Кучер (Abadonna) 31.07.07 17:06
>Началось обсуждение :)
Вишь как! Мы с Чебуром пообсуждали, мы ж тебе по плюсику и поставили ;)
Кидай чего-нить еще...
13. Lustin (Lustin_is) 11.08.07 15:22
За вид документа спасибки
14. Вадим 1С911.BY (Вадимко) 14.08.07 16:27
Что-то слабовато с плюсиками... больше боянить не буду :)
15. Юрий (gero) 05.09.07 13:09
оригинально, хоть и не то что хотелось. но проголосовать за вот это
Стр = "{" +"""O"""+","+"""0"""+","+"""0"""+","+"""*"""+","+"""0"""+","+"""0"""+","+""" 0 """+"}"
не помешает:)
16. Шухер (Шухер) 25.10.07 10:36