Имя: Пароль:
1C
 
Текстовая колонка в форме журнала документа
0 IAm
 
03.08.04
20:27
Милый вопрос задал мне сейчас по аське знакомый начинающий программист 1С. Кратко формулируется так:
В форму списка журнала документов добавлена текстовая колонка.
Как по двойному щелчку мыши менять её значение с 2 на 1 и с 1 на 2?
1 gg
 
03.08.04
20:29
Ну так и ответь ему по аьске.
2 SnarkHunter
 
03.08.04
20:30
Его не Бублик ака Тор зовут?
3 IAm
 
03.08.04
20:31
1) С удовольствием скопирую Ваш вариант ответа.
4 IAm
 
03.08.04
20:32
Ни разу не слышал чтобы его кто-то куда-то звал, посему ответить не могу.
5 SnarkHunter
 
03.08.04
20:32
А вообще предложение забавно начинается... "Милый вопрос задал мне сейчас по аське..." :-)
 
(0)Ничего личного...
6 IAm
 
03.08.04
20:32
Я ответа не знаю, вариант один есть, но его надо пробовать, 100-процентно в нем не уверен, поэтому обращаюсь к спецам.
7 Crew
 
03.08.04
20:32
Похоже зовут его Работа с журналом
8 IAm
 
03.08.04
20:33
5 Смешно
9 Рупор абсурда
 
03.08.04
20:34
Это нужно на всех доках, любого вида?
Если да, то проблематично будет сделать именно двойным кликом ...
10 IAm
 
03.08.04
20:34
7 Непохоже, изменяемое значение колонки в реквизитах документа отсутствует.
11 IAm
 
03.08.04
20:36
9 Йес
12 IAm
 
03.08.04
20:37
9 В принципе упростим задачу, пусть по нажатию кнопки меняется значение текущей строки.
13 SnarkHunter
 
03.08.04
20:40
Общий реквизит спасет...
14 Рупор абсурда
 
03.08.04
20:41
(12) Какой кнопки?
Ващще, нужно будет менять док ...
Можно сделать общий реквизит, только под это дело, и манипулировать им ...
15 IAm
 
03.08.04
20:41
13 Несомненно.  Ещё 8-ка спасет или база на Access-e.
16 SnarkHunter
 
03.08.04
20:42
(14) :-)
17 IAm
 
03.08.04
20:46
13, 14
А если на другом компьютере кто-то будет работать с этим документом?
Тогда уж лучше ТЗ создать, в которое при открытии и смене интервала впихивать документы, вторая колонка Флаг.
Функция ПолучитьПометку()
Поз = 0;
ТЗ.НайтиЗначение(ТекущийДокумент(), Поз, "Документ");
Возврат ТЗ.ПолучитьЗначение(Поз, "Пометка");
КонецФункции
==================
Правда тормозить будет при открытии
18 Fеникс
 
03.08.04
20:46
Ну, вроде как можно в форме списка держать список значений, при щелчке по колонке добавлять/удалять из этого списка текущий документ, а в формуле этой колонки вызывать функцию, которая и вернёт результат в зависимости от (не)вхождения документа в этот список значений?
19 IAm
 
03.08.04
20:48
18 Отлично. Для кнопки сойдет. Теперь как щелчок отработать?
20 Рупор абсурда
 
03.08.04
20:50
(17) Имхо, лучше просто сказать в этом случае "Заблокирован ... и не городить огород ...
21 Fеникс
 
03.08.04
20:54
(19)
Процедура ПриВыбореСтроки()
   Если Форма.АктивныйЭлемент()="ТекстоваяКолонка" Тогда
       //добавить/убрать из списка
   Иначе
       ОткрытьФорму(ТекущийДокумент);
   КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
   Форма.ОбработкаВыбораСтроки(1);
КонецПроцедуры
22 Рупор абсурда
 
03.08.04
20:54
(19) приВыбореСтроки()
23 Рупор абсурда
 
03.08.04
20:55
(21) ПриВыбореСтроки() - предопределённая процедура
24 Fеникс
 
03.08.04
20:56
+21 Ну и конечно для выбора документа придётся создать отдельную форму и назначить её формой для выбора-по-умолчанию.
25 IAm
 
03.08.04
20:56
Вот и всё, а вы говорите ОбщийреквизитДокумента
Пять звездочек Фениксу.
26 Рупор абсурда
 
03.08.04
21:02
(25) С общим реквизитом гораздо проще получится ...
Не понимаю, почему ты его боишься? ...
А со списком, на этом всё не кончится ...
Заполнять его всеми доками очень долго, а не всеми - придётся следить за интервалом журнала (и может отборами) ...
При смене интервала (отбора) опять перезаполнять список ...
27 IAm
 
03.08.04
21:03
24 Не надо, подойдут Режимвыбора() и ВыполнитьВыбор(ТекущийДокумент)
Одну звездочку снимаем :))
28 IAm
 
03.08.04
21:03
26 Не надо ничего заполнять, если есть документ в списке - значит есть пометка, если нет - нету пометки.
29 IAm
 
03.08.04
21:09
Полный код:

Перем СписокПомеченных;

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

Процедура приоткрытии()
Списокпомеченных = СоздатьОбъект("СписокЗначений");
Форма.ОбработкаВыбораСтроки(1);
Конецпроцедуры

Функция ПолучитьПометку()
Возврат Списокпомеченных.Принадлежит(ТекущийДокумент.ТекущийДокумент()) + 1;
КонецФункции
30 Fеникс
 
03.08.04
21:13
(27) Хм... Попробовал...
In batch Start nested Error. + "1cv7s.exe вызвало ошибку и будет закрыто...."
31 IAm
 
03.08.04
21:13
30 Щас попробую
32 IAm
 
03.08.04
21:19
В обычном режиме все нормально, в режиме выбора сейчас попробую
33 IAm
 
03.08.04
21:21
Выбор тоже работает без ошибок.
В 29 конечно же не
ИначеЕсли РежимВыбора() = 1 Тогда
ВыполнитьВыбор(ТекущийДокумент.ТекущийДокумент());
а
ИначеЕсли Форма.РежимВыбора() = 1 Тогда
Форма.ВыполнитьВыбор(ТекущийДокумент.ТекущийДокумент());
34 Fеникс
 
03.08.04
21:22
(33) Релиз?
35 IAm
 
03.08.04
21:23
19й локально
В каком режиме вылетело?
36 Fеникс
 
03.08.04
21:29
(35) О! Вот где был баг...
Сперва делал
Процедура ПриВыбореСтроки()
 Если Форма.РежимВыбора()=1 Тогда
   Форма.ВыполнитьВыбор(ТекущийДокумент.ТекущийДокумент());
 КонецЕсли;
 Если Форма.АктивныйЭлемент()="Пометка" Тогда
   ...
- и вылетало.
А если через ИначеЕсли или Возврат добавить после Форма.ВыполнитьВыбор...
- всё нормально. :)
37 IAm
 
03.08.04
21:37
То есть Форма.ВыполнитьВыбор должен идти последним исполняемым
38 Fеникс
 
03.08.04
21:41
(37) Ага.
Хорошее решение с ВыполнитьВыбор() - мне нравится.
И как я его раньше не заметил? :)
39 Press
 
03.08.04
21:44
Классно, только для чего ТекущийДокумент.ТекущийДокумент(), а не просто ТекущийДокумент ?
40 IAm
 
03.08.04
21:47
Я к своему стыду не знаю, что есть ТекущийДокумент и возвращает ли он именно объект а не ссылку на место в памяти.
41 IAm
 
03.08.04
21:49
Завтра узнаю нафига ему это надо было
42 Fеникс
 
03.08.04
21:50
(39) Да как угодно можно
43 spock
 
03.08.04
21:55
2(0)А точно есть смысл менять ее значение документа с 2 на 1 и с 1 на 2????
Про список была правильная идея - если документ в списке есть (значит 2, нет 1). Короче, Форма.ОбработкаВыбораСтроки(1); вам поможет. Напоминаю, если сделать ЭТО, то если в журнале ткнуть по документу, то вызывается предопределенная процедура "ПриВыбореСтроки()". Есть вопросы - я сплю (тока начиная с 10-30 по МСК)
44 IAm
 
03.08.04
21:58
43 В 1980 году в Москве состоялась Олимпиада.
45 Press
 
03.08.04
22:05
(42)Да понятно, что как угодно можно, просто интересно было для чего, мож фишка какая ;). Кстати, ТекущийДокумент возвращает ссылку.
46 Press
 
03.08.04
22:06
(43) :)
47 NS
 
04.08.04
00:10
И тут тоже.
48 Fеникс
 
04.08.04
17:19
Что-то мы вчера стормозили...
ПриВыбореСтроки()+Форма.ВыполнитьВыбор() - тавтология.
Достаточно будет:
Процедура ПриВыбореСтроки()
 Если Форма.РежимВыбора()=1 Тогда
   Возврат;
 КонецЕсли;
 Если Форма.АктивныйЭлемент()="Пометка" Тогда
   ...
т.е. выбор в режиме выбора выполняется и сам, главное - не мешать ему :)