Имя: Пароль:
1C
 
Как вставить в список значений ссылку на документ?
0 Zhuravlik
 
22.04.11
08:20
Подскажите пожалуйста, хочу при проведении документа делать на него ссылку в справочнике. В справочнике создал реквизит "Строка", в документе при обработке проведения прописал процедуру, которая добавляет строчку ТекущийДокумент() в реквизит справочника, но добавляется видимо именно строчка, и в справочнике, когда я из реквизита делаю список, этот док не открывается.
1 1Сергей
 
22.04.11
08:21
(0) а ты создай реквизит с типом документ
2 Guk
 
22.04.11
08:22
(0) т.е. ты создал реквизит типа "Строка", а сохранять хочешь ссылку?...
3 miki
 
22.04.11
08:24
ну разве только какой-нить внутренний идентификатор туда (в строку) пихать...
4 1Сергей
 
22.04.11
08:24
да, и как это ты "из реквизита делаешь список"?
5 miki
 
22.04.11
08:25
(4)и такое можно тоже...
6 1Сергей
 
22.04.11
08:27
(5) я знаю, что можно, если правильно заносить в этот реквизит документы. Но меня интересует как это делает Zhuravlik
7 Одиночка
 
22.04.11
08:30
(0) значениевстрокувнутр(), значениеизстрокивнутр()... ток никчему это ты затеял
8 ДенисЧ
 
22.04.11
08:36
Специалиста позови...
9 andrewks
 
22.04.11
08:53
В справочнике создал реквизит "Строка"... но добавляется видимо именно строчка...

феерично
10 Skom
 
22.04.11
08:59
(0) а чего именно хочешь добиться то?
11 KUBIK
 
22.04.11
09:05
(0) "...хочу при проведении документа делать на него ссылку в справочнике" = еще надо подумать а что должно быть при отмене проведения дока
12 Skom
 
22.04.11
09:06
(11) да нафига это­­
13 Zhuravlik
 
22.04.11
09:13
(1) Зачем мне реквизит, который может хранить только одно значение? Доков может быть несколько.
(4) При открытии загружаю строку реквизита в список значений на форме.
(7) К чему) Попросили сделать систему аналитики по дегустации (когда контрам "дарят" изделие с целью добиться его последующих покупок). Контрагент может быть новым (его нет в справочнике, но возможно будет), может быть существующим. я сделал справочник "Карточка дегустации", в документе реализации сделал на нее ссылку. До всего этого дегустация учитывалась только по контру "Дегустатор" из справочника контрагентов. Я делаю ссылку на справочник "Карточка дегустации", где меня попросили отображать список документов, по которым была отгрузка этому контру. Спасибо за совет, сейчас попробую.
(11) Уже реализовал и проведение и отмену оперируя ВстрокуСразделителями и ИзСтрокиСРазделителями.
14 Guk
 
22.04.11
09:15
(13) делай подчиненный документ или используй справочник. через строку, в данной ситуации, это очень плохая реализация...
15 Zhuravlik
 
22.04.11
09:16
(9) гдупо выразился) просто при проведении дока я заношу туда строчку вида "Реализация(№)(Дата)", и при открытии справочника выгружаю в список значений на форме. Я думал, что список значений сохранит ссылку на документ, но ИзСтрокиСРазделителями на выходе дает строчку.
16 Zhuravlik
 
22.04.11
09:17
(14) почему?
17 Guk
 
22.04.11
09:18
(16) потому что очень велика вероятность потери ссылки на документ при таком хранениии...
18 KUBIK
 
22.04.11
09:19
(13) Регистр (оборотный) предлагать?
19 Zhuravlik
 
22.04.11
09:20
(17) ее сейчас и нет, все в строках
(18) Зачем?
20 KUBIK
 
22.04.11
09:21
(19) Для дегустации :)))
21 andrewks
 
22.04.11
09:22
(18) +18
22 Guk
 
22.04.11
09:22
(19) у тебя, например, при удалении документа прописано, чтобы во всех текстовых реквизитах, где этот документ прописан через строковое внутреннее представление, он бы тоже удалялся?...
23 Zhuravlik
 
22.04.11
09:27
(19) Да.
У меня основная проблема в новом контрагенте. Если продукцию дают кому-нибудь на пробу - его еще нет в справочнике, но если начнут заводить, надо как-то связывать существующую карточку с этим контром. При этом сам справочник контрагентов старый программист сказал не трогать, т.е. не менять ничего в конфе. При том, что дегустации всего процентов 10 от общей массы контров, сообщение-напоминалку при вводе нового контра тоже не хочется делать. Сейчас для этого связь только по наименованию нового контра в карточке дегустации и наименованию его в справочнике контрагентов. Может можно как-нибудь поумнее?
24 Zhuravlik
 
22.04.11
09:28
+ в смысле не (19) да, а (22) =)
25 Zhuravlik
 
22.04.11
09:46
(6) Вот так:


//Обработка проведения

   Если ПустоеЗначение(КонтДегустатор) = 0 Тогда
       СпрКД = СоздатьОбъект("Справочник.КарточкаДегустации");
       
       Если (СпрКд.НайтиЭлемент(КонтДегустатор) = 1)
       Тогда
           Сп = СоздатьОбъект("СписокЗначений");
           сп.ДобавитьЗначение(ТекущийДокумент());
           СпрКд.СписокДокументов =  СпрКд.СписокДокументов + Сп.ВСтрокуСРазделителями() + ", ";
           СпрКд.Записать();    
       КонецЕсли;
   КонецЕсли

//Обработка удаления проведения


   Если ПустоеЗначение(КонтДегустатор) = 0 Тогда
       СпрКД = СоздатьОбъект("Справочник.КарточкаДегустации");
       
       Если (СпрКд.НайтиЭлемент(КонтДегустатор) = 1)
       Тогда
           Сп = СоздатьОбъект("СписокЗначений");
           Сп.ДобавитьЗначение(ТекущийДокумент());
           СтрТек = Сп.ВСтрокуСРазделителями() + ", ";
           СтрКД = СпрКд.СписокДокументов;
           СтрИтог = СтрЗаменить(СтрКд, СтрТек, "");
           СпрКД.СписокДокументов = СтрИтог;
           СпрКд.Записать();    
       КонецЕсли;
       
   КонецЕсли    

//Справочник, форма при открытии

   Если ПустоеЗначение(СписокДокументов) = 0 Тогда
       Стр = Сред(СписокДокументов, 1, СтрДлина(СписокДокументов) - 2);
       СписокДок.ИзСтрокиСРазделителями(Стр);
   КонецЕсли;
26 Zhuravlik
 
22.04.11
09:48
+


// а потом открываю

Процедура ПриВыбореДокумента()
   ТекДок = СписокДок.ПолучитьЗначение(СписокДок.ТекущаяСтрока());
   ДлинаНомера = СтрДлина(ТекДок) - 22;
   Номер = Сред(ТекДок, 12,ДлинаНомера);
   ДатаДок = Дата(Сред(ТекДок, 20, 28));
   Если Док.НайтиПоНомеру(Номер, ДатаДок) = 1 Тогда
       ОткрытьФорму(Док.ТекущийДокумент());
   КонецЕсли;
   
КонецПроцедуры // ПриВыбореДокумента
27 Zhuravlik
 
22.04.11
09:58
Нашел ошибку, номер может менять длину, значит позиция вхождения даты - тоже


Процедура ПриВыбореДокумента()
   ТекДок = СписокДок.ПолучитьЗначение(СписокДок.ТекущаяСтрока());
   ДлинаНомера = СтрДлина(ТекДок) - 22;
   ПозВхожденияДаты = 14 + ДлинаНомера;
   Номер = Сред(ТекДок, 12,ДлинаНомера);
   ДатаДок = Дата(Сред(ТекДок, ПозВхожденияДаты, 8));
   Если Док.НайтиПоНомеру(Номер, ДатаДок) = 1 Тогда
       ОткрытьФорму(Док.ТекущийДокумент());
   КонецЕсли;
   
КонецПроцедуры // ПриВыбореДокумента
28 1Сергей
 
22.04.11
10:01
(25) фигня какая-то
Почему бы не использовать (7)?
29 Zhuravlik
 
22.04.11
10:04
(28) я еще не сделал, попробую но позже. А почему фигня? Что именно здесь фигового? Формат названия документа не изменится никогда, изменение длины номера я учел, что не так?
30 1Сергей
 
22.04.11
10:13
(29) дело твоё. но я бы не хранил в справочниках такую информацию
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс