Глюк 1С….?

19.03.08

Разработка - Механизмы платформы 1С

Работая со справочником "Должности организаций", никак не мог получить элемент по коду по следующему коду программы:

кодПроф = "22446";  //наименование по справочнику -  инженер;
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);

1С на это послание ничего мне отвечает… Естественно, потратил «кучу» времени на выяснение причин… в итоге написал такой проверочный код:

Платформа: 1С:Предприятие 8.0 (8.0.17.25)
Конфигурация: УПП, редакция 1.2 (1.2.5.1)

//
// справочник.ДолжностиОрганизаций ТипКод: строка; ОсновноеПредставление: В виде наименования;
Сообщить("справочник.ДолжностиОрганизаций");
кодПроф = 22446; // число инженер
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("число код "+ссПроф.Код+" "+ссПроф.Наименование);
//
кодПроф = "22446"; //строка" инженер
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("строка код "+ссПроф.Код+" "+ссПроф.Наименование);
//
// справочник.ФизЛица; ТипКод: строка; ОсновноеПредставление: В виде наименования;
Сообщить("справочник.ФизическиеЛица");
кодФЛ1 = 670001119; // число ФИО работника орг
кодФЛ2 = "670001119"; // строка ФИО работника орг
//
кодФизЛицас1 = Справочники.ФизическиеЛица.НайтиПоКоду(кодФЛ1);
Сообщить("число код "+кодФизЛицас1.Код+" "+кодФизЛицас1.Наименование);
//
кодФизЛицас1 = Справочники.ФизическиеЛица.НайтиПоКоду(кодФЛ2);
Сообщить("строка код "+кодФизЛицас1.Код+" "+кодФизЛицас1.Наименование);
//
//1С отвечает:
//
//справочник.ДолжностиОрганизаций
//число код 22 446 ИНЖЕНЕР
//строка код 
//
//справочник.ФизическиеЛица
//число код 
//строка код 670001119 КОРНЕЕВА МАРИНА ВИКТОРОВНА //

Получается, справочник.ДолжностиОрганизаций его код заявлен как «строка» но требует «число».

Воо-о-оот такие у меня дела….

См. также

Сервисы интеграции без Шины и интеграции

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    3259    dsdred    16    

65

Как готовить и есть массивы

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    7607    YA_418728146    25    

69

Планы обмена VS История данных

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    7826    dsdred    38    

115

1С-ная магия

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    20188    SeiOkami    46    

124

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    14123    human_new    27    

77

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    10482    YA_418728146    7    

148

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    7049    sebekerga    54    

99
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tango 543 19.03.08 10:40 Сейчас в теме
может в том, что код - строка, длина - 9?
если строкой - то все девять знаков надо, а если числом - то она сама выполняет преобразование типа?
__
а вообще надо название начать с "8х: знаете ли вы платформу"
2. Шёпот теней 1781 19.03.08 11:01 Сейчас в теме
(1) СПАСИБО tango за сообщение...

пробовал... доводил текст до 9 символов ... результат тот же...


во-о-оот...
5. Шёпот теней 1781 19.03.08 11:09 Сейчас в теме
(1) может в том, что код - строка, длина - 9?
если строкой - то все девять знаков надо, а если числом - то она сама выполняет преобразование типа?

вопрос: если обозначить код числом, тогда почему не найден, в справочнике.ФизЛица, элемент...? в таком случае...? а только по заданию кода "строкой"...

воо-о-от...
3. coder1cv8 3471 19.03.08 11:06 Сейчас в теме
Та не, какой глюк? Просто код - это строка фиксированной длины, соответственно, если мы забиваем код меньший по длине, то справа он дополняется пробелами... В результате Код у тебя действительно не равен "22446", а равен скорее всего "22446 ". Вот такие вот дела... Отсюда вывод, пользуйтесь автоматически сформированными кодами или, если уж приспичило, добавляйте нолики до нужной длины строки.
4. coder1cv8 3471 19.03.08 11:08 Сейчас в теме
+(3) Пробелы порезались :) я иммел ввиду 22446+4 пробела :)
6. Шёпот теней 1781 19.03.08 11:15 Сейчас в теме
для всех кому интересно:

пишу:
//
// справочник.ДолжностиОрганизаций ТипКод: строка; ОсновноеПредставление: В виде наименования;
Сообщить("справочник.ДолжностиОрганизаций");
//
кодПроф = 22446; // число инженер
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("число код "+ссПроф.Код+" "+ссПроф.Наименование);
// 123456789
кодПроф = "22446"; //строка инженер
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("строка без код "+ссПроф.Код+" "+ссПроф.Наименование);
// 123456789
кодПроф = "22446 "; //строка до 9 символов инженер
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("строка 9 символов код "+ссПроф.Код+" "+ссПроф.Наименование);
//
Ответ 1С:
справочник.ДолжностиОрганизаций
число код 22 446 ИНЖЕНЕР
строка без код
строка 9 символов код

написал всё дословно....

воо-оо-оот...
7. Шёпот теней 1781 19.03.08 11:34 Сейчас в теме
кому интересно:

написал следущий код:

//
// справочник.ДолжностиОрганизаций ТипКод: строка; ОсновноеПредставление: В виде наименования;
Сообщить("справочник.ДолжностиОрганизаций");
// 123456789
кодПроф = "22 446"; //строка "22_446" инженер
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("строка ""22_446"" 6 символов код "+ссПроф.Код+" "+ссПроф.Наименование);
// 123456789
кодПроф = "22 446 "; //строка "22_446___" инженер
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("строка ""22_446____"" 9 символов код "+ссПроф.Код+" "+ссПроф.Наименование);

получил от 1С:
//
справочник.ДолжностиОрганизаций
строка "22_446" 6 символов код 22 446 ИНЖЕНЕР
строка "22_446____" 9 символов код 22 446 ИНЖЕНЕР


воо-о-от такие дела....

обнаружил... в справочники.ДожностиОрганизации коды указаны с пробелом например: "22_446"...
8. Шёпот теней 1781 19.03.08 12:12 Сейчас в теме
ну, и, уж кому совсем интересно:

После всех мытарств, выводы:

Первое:
Строки:
//
кодПроф = "22447"; //строка "22447" 5 символов - «инженер а»
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("строка ""22447"" 5 символов код "+ссПроф.Код+" "+ссПроф.Наименование);
//
кодПроф = "22447 "; //строка "22_446___" 9 символов «инженер а»
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("строка ""22447____"" 9 символов код "+ссПроф.Код+" "+ссПроф.Наименование);
//
Для 1С - идентичны, будет выдан результат один и тот же: «инженер а»
Ввёл в справочник.ДолжностиОрганизаций код: 22447 и наименование: «инженер а»

На строку:
//
кодПроф = 22447; //число 22447 5 символов «инженер а»
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("число ""22447"" 5 символов код "+ссПроф.Код+" "+ссПроф.Наименование);
//
1с не ответила….

Второе:
В справочники.ДолжностиОрганизаций введены коды должностей через пробел, вместо «22446____» ввели «22_446___» вследствии этого стали возможны следующие строки:
//
кодПроф = 22446; // число инженер
ссПроф = справочники.ДолжностиОрганизаций.НайтиПоКоду(кодПроф);
Сообщить("число код "+ссПроф.Код+" "+ссПроф.Наименование);
//
Где 1С запросто давала ответ, но не давала ответ на строку типа «22446» или «22446____»…


Воо-о-от и все выводы…. …и такие вооо-о-оот интересные особенности бухгалтерской и программной работы на местах….


П.С. ...кого "достало" может ставить БОЛЬШИЕ минусы...

Удачи… всем...!
9. Шёпот теней 1781 19.03.08 13:53 Сейчас в теме
ну и совсем уже обнаглев, мне уж это стало интересным, можете сделать смелый творческий эксперемент:

Можно ввести в любой справочник, в котором код обозначен строкой, и где в программе 1С работает штатно или принудительно группировка чисел: "ЧГ=3,0" новый элемент, например:

// создать элемент справочника
Новый_Код = 123123; //(или с форматной строкой новыйКод = формат(123123, "ЧГ=3,0"); )
новое_Наименование = “здесь был Вася”;
//
….
// записать(); элемент;

И задать следующую строку поиска по коду:

Спр.ИскомыйСправочник.НайтиПоКоду(123123).Наименование; //123123 как «число» и вам ответят: “здесь был Вася”;

А на поиск «123123» , как строка, ответят молчанием… и на «123_123» тем же и на «123_123__» тем же…. и только на строку где кодом будет:
спрКод = "3"+Символы.НПП+"331"+Символы.НПП+"111"; вам "Вася" ответит положительно...!


Только вот проблема: в поиске, в справочнике, по коду, не сможете отыскать нужный вам элемент ни в построчном, ни в общем поиске дальше цифр до первого
пробела...

воо-оо-от такие метаморфозы….

всем удачи...
10. tango 543 19.03.08 14:11 Сейчас в теме
Ок. резюме: неразрывный пробел в некоторых случаях имеет место быть (при задании строкового кода числом), в некоторых - нет (при поиске по коду).
Что считать глюком - не понятно, толи в первом случае (а с какой стати?), толи во втором (опять же - с какой стати?). в любом случае казус проходит по разряду "знаете ли вы платформу" :))
11. tango 543 19.03.08 14:31 Сейчас в теме
Шепот, замути мульку "поиск неразрыных пробелов в кодах справочников", получишь ++++
пока - авансом, за мысль :)
12. Шёпот теней 1781 19.03.08 15:13 Сейчас в теме
...tango Спасибо за все твои сообщения, пожелания, действия...

маленькое П.С.: являясь человеком очень неуверенным с т.з. "высказывать своё мнение" и осознавая свой "опыт" постижения 1С в целом и 1С 8.0 в частности, именно поэтому заголовок данной ветки и озвучен как: "гЛЮк 1С….?", именно с вопросительным знаком... "?" - это же "вопросительный" знак....?

воо-о-оот такой блин сегодня получился почти диалог-с....

СПАСИБО.... и.... УДАЧИ...
13. tango 543 19.03.08 15:24 Сейчас в теме
Есть шанс иметь это грабло и в номерах доков. Так что - замути, хуже не будет. Уже.
пс: будешь в наших краях - дай знать :)
14. Шёпот теней 1781 19.03.08 15:29 Сейчас в теме
... и всё можно было бы улыбнуться читая "всё это", но только одно но: наши бухгалтера, например запросто могут организовать в справочниках не только "задва"ения но и "три" и "пять"-двоений, уж как пример, на прошлой моей работе наши бухи умудрились одну и туже улицу "обозвать" 17-ю разными именами... воо-о-оот...

в данном случае обнаружили, что у нас разные "инженер-технолог"-и их было два, с разными кодами и целых трое "инженеров"... в итоге должность есть, их три и они все разные

как всегда, бухи а это наши милейшие существа - женщина, кричат (орут), жалуются на 1С, друг – на - друга, и объединившись общим, дружным порывом объявили виноватым наш доблестный отдел АСУ.... ну-ууу и началось....

такое бывает у всех... и все наверное знают, что бывает..... ну... и я в частности ничего не понимаю, ха.... код такой..... а ничего не работает.... вообщем...

воо-о-оот такая "грусть" история...

п.с. спасибо tango…

удачи!...
16. poppy 19.03.08 23:48 Сейчас в теме
(14)
Как всегда бухши виноваты?

Зачем было что-то кодить? Ведь можно было воспользоваться обработкой ПоискИЗаменаЗначений.epf с диска ИТС?
18. Шёпот теней 1781 20.03.08 07:51 Сейчас в теме
(16)

не-ееее, дорогая poppy!

бухши как всегда не виноваты....? у них работа такая не быть виноватыми, они же женщины... они, что дуры....

моё опыт, рисует мне такую картину, повторяющуюся в 80% случаях... крик... гам... в дружных рядах женского гарема под названием "Бухгалтерия" ... что-то не "идёт".... или что "утеряно".... все бегают ищут, вспоминают... потом дружно обвиняют АСУ.... в итоге... проблема лежала в области "бухгалтерского учёта" а не в программе.... но никогда еще ни одна бухша не извинилась.... и считает это рабочей средой.... гы.... получается, что 80 % всех вопросов от бухш их же собственные, но путём обвинения АСУ они их прекрасно решают не за свой счёт.... за свой дорого и читать надо, или думать.... или "попу" поднять....

воо-оо-оот такие не веселые мысли о бухш-ах.... но они не виноваты.... "весна" - однако... полететь охота.... или улететь... ветер одним словом - зашелестел...

П.С. .... а насчёт ИТС... у нас их не выписывют... опять же бухи говорят.... эконмить надо.... а нам, это им значит, это не надо.... они и так всё знают.... видали мы ваши диски, типа, ничего там хорошоге нету... после этого ни о книгах, ни о журналах даже и не заикаемся... ладно хоть интернет не перекрывают... Экономика... блин её с бухшами....

П.С. если бы знать где, что лежит, или где упадешь...? А, вообще.... очередной поклон... poppy... наверное скоро надо будет... вернее прошу вашу фотография на память... я её поставлю в рамку на рабочее место, как лучшиё образец программо-бухгалтерского ведения учёта.... позвольте попросить... моё е-майл найдёте в профайле... Это я серьёзно, с уважением, и просьбой, и поклоном....

воо-оо-от ...
15. poppy 19.03.08 23:46 Сейчас в теме
Имхо рассматриваемая проблема состоит в том, что при преобразовании из числа в строку восьмерка, в отличии от семерки производит преобразование к региональным особенностям. В частности, перед каждым третьим разрядом добавляется неразрывный пробел.
Т.е. число 123123 не равно строке "123123", но равно строке "123(пробел)123".

Соответственно, при выполнении кода Спр.Код = 123123; на самом деле будет выполнено Спр.Код = "123(пробел)123".
При выпонении НайтиПоКоду("123123") ничего не найдено, а при НайтиПоКоду(123123) будет найден созданный ранее элемент, также как и пр Спр.НайтиПоКоду("123(пробел)123").

Имхо надо избегать таких значений в качестве кодов элементов, поэтому лучше явно преобразовавать число в строку Спр.Код = Формат(123123, "ЧГ=0");

З.Ы. Мне показалось, что неразрывный пробел в коде подменяется обычным.
17. murat_ 34 20.03.08 07:47 Сейчас в теме
Мне кажется, изначально нужно административно запрещать изменять код пользователям, хоть в доках, хоть в справочниках.
19. Abadonna 3961 20.03.08 08:48 Сейчас в теме
>... вернее прошу вашу фотография на память
Губозакаточную машинку подарить? ;)
21. Шёпот теней 1781 20.03.08 11:16 Сейчас в теме
(19) подари abadonna ... от тебя с радостью... приму... и память будет на всю жизнь … :-)))
(20) !!!
20. larisab 160 20.03.08 09:54 Сейчас в теме
<моё опыт, рисует мне такую картину, повторяющуюся в 80% случаях... крик... гам... в дружных рядах женского гарема под названием "Бухгалтерия" ... что-то не "идёт".... >
е еще знаменитое тошнотворное - "не село"!!!
22. victuan 4242 26.03.08 06:23 Сейчас в теме
ИМХО: Какой-то у "Шепота теней" тошнотворный стиль изложения материала (прошу прощения за оцену) - еле дочитал ветку до конца!
23. vasilykushnir 63 26.03.08 08:34 Сейчас в теме
(22) Не стреляйте в пианиста - он играет, как умеет...
24. MagSolD 20.02.09 11:52 Сейчас в теме
Йееех... Всем привет)

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