Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: НазначитьТип обрезается строка

v7: НазначитьТип обрезается строка
Я
   Масянька
 
23.08.18 - 13:22
День добрый!
Реквизит таб. части имеет тип неопределенный.
По условию задается:
НазначитьТип("ДокументыЗачета", "Документ.Реализация");
или
НазначитьТип("ДокументыЗачета", "Строка", 150);
Все вроде норм.
Но после записи и открытия документа в строке нет конца (т. е. строка обрезалась).
Почему?
Спасибо.
 
 
   ADirks
 
1 - 23.08.18 - 13:27
потому что тип Неопределенный - это char(23)
   Сияющий в темноте
 
2 - 23.08.18 - 13:28
Тип неопределенно может хранить только строки длиной до 23 символов,если нужно больше,то создайте справочник и в тип неопределено пихайте ссылку на него.
п.с это самая большая засада от 1с,что они не смогли совместить строки неограниченной длины и параметр произвольного типа,но это так.
   Franchiser
 
3 - 23.08.18 - 13:28
до 22х будет обрезаться, сохраняй в доп. строковом реквизите
   Масянька
 
4 - 23.08.18 - 13:30
(1) (2) (3) Вас, блин, пока до дождешься...
Я уже знаю.
   Масянька
 
5 - 23.08.18 - 13:32
Блин... А выводить как?
   Гад
 
6 - 23.08.18 - 13:34
кто на ком стоит?
   Масянька
 
7 - 23.08.18 - 14:02
Что реально так?
ПриОткрытии()
    Если (Выбран() = 1) Тогда
        Если (КоличествоСтрок() > 0) Тогда
            ВыбратьСтроки();
            Пока ПолучитьСтроку() = 1 Цикл
                Если (ПустоеЗначение(КредДокумент) = 0) Тогда
                    ДокументыЗачета = СокрЛП(КредДокумент);
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
   Эльниньо
 
8 - 23.08.18 - 17:44
Начнём сначала.
Что будет в реквизите (варианты)?
   Масянька
 
9 - 23.08.18 - 17:46
(8) Ты бы еще в 2 ночи пришел и начал сначала :)
Тама - или релаизация (док-т такой), или строка. Зависит от вида долга.
   Salimbek
 
10 - 23.08.18 - 17:48
(9) А если сделаешь справочник вместо строки, то что там будет?
 
 Рекламное место пустует
   Масянька
 
11 - 23.08.18 - 17:49
(10) На фига?
   Salimbek
 
12 - 23.08.18 - 17:52
(11) Потому что тип Неопределенный хранится в базе в виде строки из 23-х символов, поэтому у тебя твоя строка и обрезается. Поэтому тебе в (2) предложили засовывать Справочник, вместо строки.
   Salimbek
 
13 - 23.08.18 - 17:54
(13) Либо можешь сделать два реквизита у документа, в одном хранишь Документ, в другом Строку, и в зависимости от условий показываешь соответствующий элемент диалога.
   Масянька
 
14 - 23.08.18 - 17:55
(12) В (7) написан код. Если использовать все-таки Неопределенный так отображать?
   Масянька
 
15 - 23.08.18 - 17:55
(13) Табличная часть.
   Salimbek
 
16 - 23.08.18 - 17:57
(14) Расскажи мне, сначала, как ты будешь отображать на экране свою строку в 150 символов, если у тебя физически туда влезает 21 (23-2 служебных). Где эта твоя строка будет храниться?
   Масянька
 
17 - 23.08.18 - 17:59
(16) Не знаю. Она нормально отображается.
   Salimbek
 
18 - 23.08.18 - 18:02
(17) Кто "она"? Где отображается? Если все нормально отображается, то почему пишешь, что "после записи и открытия документа в строке нет конца (т. е. строка обрезалась)."?
   Масянька
 
19 - 23.08.18 - 18:04
(18) В (7) код. После написания которого, все стало норм отображаться.
Мне только код не нравится.
Вот и спросила - реально так выводить? Или можно по другому.
   Эльниньо
 
20 - 23.08.18 - 18:05
Спр.ГрёбанныеРеквизиты с реквизитами "Док", "НомерСтроки" и "ЗначениеГрёбанногоРеквизита" неопределённого типа.

ПриЗаписи() записываешь в него. При пролистывании ТЧ берёшь оттудова и отображаешь в текстовом реквизите на форме
   Salimbek
 
21 - 23.08.18 - 18:11
(19) Не верю. Может ты длинный текст там не пробовала сохранить? Или сейчас это поле - просто строка? Кроме того - при таком подходе у тебя всегда в этом поле будет просто строка, и ты не сможешь штатным способом открыть Документ через поле выбора.
   Эльниньо
 
22 - 23.08.18 - 18:34
Вообще. Что за реквизит в котором может быть либо Документ, либо роман "Тихий дон"?
   Сияющий в темноте
 
23 - 23.08.18 - 21:05
Сделайте как в восьмерке отднэельнл полн документ с типом любой документ и о делтно поле предствление с типом строка,тогда вме получится.
   Сияющий в темноте
 
24 - 23.08.18 - 21:08
У меня,например,в семерке было поле неограниченной длины куда писался текст,а если в него нужно было вставить ссылку на обьект базы,то писали #TypeChar-TypeId-ItemId,и можно было открыть любой обьект базы,просто преобразовав такое значение во внутреннее представление.
   Злопчинский
 
25 - 23.08.18 - 21:38
(0) "в строке нет конца (т. е. строка обрезалась)."
вы как бы фильтруйте базар. обрезается не строка, а представление документа, то есть визуальное отображение ссылки, сохраненнной в реквизите неопределенного типа
   Salimbek
 
26 - 23.08.18 - 22:08
(25) Ты, уважаемый, перечитай тему еще раз, с утра.
   Злопчинский
 
27 - 24.08.18 - 00:28
(26) Согласен, ступил.
   Масянька
 
28 - 24.08.18 - 08:20
(25) Фильтруй базар (С)
   Провинциальный 1сник
 
29 - 24.08.18 - 08:22
Ход конем. Делаешь реквизит строку неограниченной длины, и в неё запихиваешь всё сериализуемое через ЗначениеВСтрокуВнутр()
:)
   Масянька
 
30 - 24.08.18 - 08:27
Мужики!
Еще раз...
В таб. части док-та есть реквизит с типом Неопределенный. В зависимости от моего "хочу" этот реквизит становится либо док-ом (ссылкой), либо строкой.
В связи с (1) (пардон, была не в курсе) пришлось сделать еще один реквизит таб. части, в который пихается значение реквизита с типом Неопределенный, если по моему хотению там строка.
Возник вопрос: как отображать строку в реквизите Неопределенный в сохраненном док-те. В (7) накарябала код. Работает. Но мне не нравится.
Может быть есть лучше варианты по вопросу? (см. предыдущий абзац).
   Масянька
 
31 - 24.08.18 - 08:29
(22) На "Тихий Дон" не тянет...
Максимум, на "Мишку" А. Барто.
   Сияющий в темноте
 
32 - 24.08.18 - 09:56
Два реквизита,один с типом неопределено,а второй с типом строка неограниченной длины.
когда пишем,если тип строка,то во второй,если другой тип,то в первый,не забываем при записи в один реквизит стирать другой.
при чтении читаем сначала первое поле,если там неопределено,читаем второе.
просто и ясно.
   Эльниньо
 
33 - 24.08.18 - 10:20
(32) Масло масляное.
Там реквизит ТЧ.
 
 
   НЕА123
 
34 - 24.08.18 - 10:23
(0)
строка не обрезается.
максимальная длина 999.
первые 16 символов - как и у оригинала. остальные пробелы.
   Эльниньо
 
35 - 24.08.18 - 10:43
(34) Ага. Попробуй создать реквизит строка неограниченной в табличной части.
Только назови его "ЩаКакОбломаюсь"
   Cthulhu
 
36 - 24.08.18 - 11:45
Два реквизита - неопределенный и строка.
Выводить только строку. В свойствах - запрет редактирования и кнопка выбора.
В модуле формы:
1) в ПриНачалеВыбораЗначения - перехватывать этот реквизит, обнулять флаг стандартной обработки и открывать нужную форму (она откроется для выбора значения) - там же по контексту можно предварительно активизировать объект данных, вписанный в скрытый рекв.неопр.типа...
прим.: тут же, если(!) надо - можно предварительно(!) самому выкатывать выпадающее меню с вариантами выбора, и (если надо при определенном выборе) из этого меню - даже не открывать ничего дальше - прописывать в строку что надо.
2) в ОбработкаВыбораЗначения - в отлавливать выбор в этот (строчный) реквизит и выбранное значение, прописывать при необходимости (с предварительной типизацией) выбранное значение в скрытый рекв.неопр.типа, а текст, построенный по выбранному значению (например - текстовое представление выбранного значения) - прописывать в текстовый реквизит.
   Salimbek
 
37 - 24.08.18 - 12:13
+(36) Для (30) - Добавлю, выводить рекомендую даже не строковый реквизит, а вычисляемую колонку, и тогда в ней прописываешь формулу, которая сама при выводе все будет подтягивать как нужно.
Примерно так: Как добавить и заполнять вычисляемое поле в таб. часть документа
   Salimbek
 
38 - 24.08.18 - 12:19
А в формуле пишешь: ?(ПустоеЗначение(КредДокумент) = 0, СокрЛП(КредДокумент), ДокументыЗачета)
   Эльниньо
 
39 - 24.08.18 - 12:23
(36) См.(35)
   Cthulhu
 
40 - 24.08.18 - 12:26
(37)?(38): да. такой вариант - тоже рассматривался в подобных случаях. однако в данном конкретном случае он не лучше, потому что позволяет только отображать(!) то что надо. предложенный же мной вариант позволяет полностью(!) управлять как изменением данных (с использованием штатных "прозрачных" механизмов 1с), так и отображением.
прим.: кстати, есть ещё третий вариант - только строка (без рекв.неопр.типа), а в эту строку при сохранении всовывать (а при отображении вырезать) префикс = внутренний Id объекта данных - и использовать вычисляемый по Id объект данных его как заблагорассудится (в том числе с использованием упомянутых тобой вычисляемых текстовых колонках) при отображении. тоже можно гибко разрулить - но там тонкостей и кодинга (неочевидного в том числе) поболее будет, да и ссылочная целостность может (при некоторых стечениях обстоятельств) пострадать...
   Cthulhu
 
41 - 24.08.18 - 12:29
(39): а теперь ты - см.(35) и найди там хоть одно упоминание о неограниченной длине текстового реквизита.
   Эльниньо
 
42 - 24.08.18 - 12:52
(41) Прочитай ветку с начала.
У ТС в ТЧ реквизит неопределенного типа. При:
НазначитьТип("ДокументыЗачета", "Строка", 150);
строка обрезается до 22 символов.
В (20) решение. ТС не устраивает. Ну пусть ищет среди советов невъехавший в тему ыспердов
   Cthulhu
 
43 - 24.08.18 - 13:12
(42): в моих комментариях нет ни намека на то, что я ее не читал - так что твое приписывание мне того, чего не было, более похоже на нестерпимо зудящее желание оказаться правым, не более того.
в (20) - один из вариантов решения, технологически связанный с усложнением структуры метаданных. мною предложен другой вариант решения, более изящный и "в коде".
прим.: и непонятно - нахрена ты мне все это тут пересказываешь.. ну разве что у тебя не просто сильно зудит, а очень сильно...
   Эльниньо
 
44 - 24.08.18 - 13:27
(43) "твое приписывание мне того, чего не было, более похоже на нестерпимо зудящее желание оказаться правым, не более того...

" у тебя не просто сильно зудит, а очень сильно...

Я больно уязвил твоё ЧСВ?
Ну тогда извини.
   Вафель
 
45 - 24.08.18 - 13:29
лучше сделать отдельное поле для хранения строки, а на форму выводить обычный реквизит без данных
   Сияющий в темноте
 
46 - 25.08.18 - 00:10
А если вообще вместо табличной части просто таблицу вывести, а потом всю её как есть сохранить в поле неограниченной длины ?
И ничего программировать не надо, кроме чтения и сохранения.
   Злопчинский
 
47 - 25.08.18 - 01:50
(35) угу, люди видно никогда не видели типовой счф на аванс в типовой конфиге, где в ТЧ как раз неопределенный тип. и максиму туда влазит "Предварительная оплата" если подставлять туда строку...
   Провинциальный 1сник
 
48 - 27.08.18 - 08:49
(46) Гениально. Даешь всю конфу в виде одного справочника с реквизитом неограниченной длины. А в нём всё сериализовано.
   ADirks
 
49 - 27.08.18 - 08:56
(48) сдаётся мне, что это была шутка юмора :)

кстати, у меня такая табличка (с полем типа Image) есть, для пихания туда всякого эпизодического и иррегулярного.

а вообще прикольно, стока нафлудили из ничего :))
 
 Рекламное место пустует
   Масянька
 
50 - 27.08.18 - 09:00
(49) +100.
А, вообще, всегда приятно послушать умных людей. Особенно, когда они начинают (м-м-м-м, скажем так) спорить.
:))))))


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует