Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Копирование строки документа СВОЕЙ кнопкой. К тем, кто помнит 77 (http://forums.kuban.ru/f1040/kopirovanie_stroki_dokumenta_svoej_knopkoj_k_tem_kto_pomnit_77_a-7618020.html)

Nthnsq 24.03.2016 16:10

Копирование строки документа СВОЕЙ кнопкой. К тем, кто помнит 77
 
Собственно, сабж. Находимся в заполненной табличной части документа, курсор стоит на одной из строк.
Нужно, нажав на кнопку на форме - частично скопировать строку, на которой находится курсор. Контекстное "Копировать" не прокатывает - копирует все реквизиты, а все они не нужны.
Есть у кого пример кода процедуры?

Dump 20031 24.03.2016 16:18

А что именно не получается?

Nthnsq 24.03.2016 16:22

1-Dump 20031 >
Да ничего. Жму на кнопку, попадаю в процедуру, определяю - где курсор.
НоваяСтрока()
и все, сразу перепозиционирование. А как с той, где поначалу был курсор - данные стянуть - хз.

Dump 20031 24.03.2016 16:25

Правильно. Сначала запоминаем что надо и только потом НоваяСтрока()

Nthnsq 24.03.2016 16:27

Во, сенкс, я так и думал: загоняем все, что нужно в переменные - иначе никак не выйдет. Щас попробую.

Чучундер 24.03.2016 16:28

//получить текущую строку ТЧ дока = поз
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗ);
ТЗ.НоваяСтрока();
ТЗ.Часть1 = ТЗ.ПолучитьЗначение(поз,"Часть1");
ТЗ.Часть2 = ТЗ.ПолучитьЗначение(поз,"Часть2");
ТЗ.Часть3 = ФигняКакаяТо;
ЗагрузитьТабличнуюЧасть(ТЗ);

Nthnsq 24.03.2016 16:31

5-Чучундер >
Серег, через ТЗ - понятно, думаешь проще?

Чучундер 24.03.2016 16:32

//получить текущую строку ТЧ дока = поз
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗраб = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЗ);
ТЗ.Выгрузить(ТЗраб,поз,поз);
ТЗ.НоваяСтрока();
ТЗ.Заполнить(ТЗраб,ТЗ.НомерСтроки,ТЗ.НомерСтроки);
ТЗ.ЧтоПереинициализировать1=Фигня;
ТЗ.ЧтоПереинициализировать2=Херня;
ЗагрузитьТабличнуюЧасть(ТЗ);

Чучундер 24.03.2016 16:33

6-Valery > если запоминать в пром.буфере - придется цикл по колонкам крутить.

Чучундер 24.03.2016 16:35

Можно третий вариант
программно:
открываем док.
позиционируемся на нужную строку
эмулируем Ф9
записатьдок
закрываем форму
переписываем некопируемые значения

Чучундер 24.03.2016 16:37

Епрст придет - придумает еще красивше

Nthnsq 24.03.2016 16:38

Дальше усложнение идет:
я программно заполняю документ.
например
Товар1 колво
Фигня 250
Юзер потом копирует строку, а количество, котрое он ввел - должно отминусоваться от оригинальной строки.
Т.е. при окончании редактирвания ячейки - 250 минус точтовверюзер.

Nthnsq 24.03.2016 16:52

Но пока и этого хватит.

MagAN 24.03.2016 17:24

Перед тем как создать строку запиши в переменные все что нужно или номер строки ТЧ, потом будешь заполнять новую строку по этим данным.
А в чем проблема?
КопТовар=Товар1;
КопКол=колво;
НоваяСтрока();
Товар1=КопТовар;
колво=КопКол;

Чучундер 24.03.2016 17:52

В (7) - красивше. Нигде никаких присвоений существующего не идет. Присваиваются только значения, которые не совпадают с копируемыми

USSR 24.03.2016 18:04

(14 по моему можно еще проще, скопировать строку штатно и использовать процедуру

Процедура ПриРедактированииНовойСтроки()
КонецПроцедуры //

В ней поправить что не нужно копировать

VZ 24.03.2016 19:07

Методанные сообщат расклад строки любого документа.
Следовательно, можно собрать СписокЗначений: значение столбца + название столбца (название столбца уникально в ТЗ).
Потом можешь кушать этот список, как угодно.

Чучундер 24.03.2016 19:37

15-USSR > это если интерактивно

USSR 24.03.2016 19:53

(17)Так автор и собирался аж кнопку вешать на форму
А если не интерактивно, то (16) - иетаданные

DeiMos 24.03.2016 20:46

У меня вопрос к автору:
- Владельцы бизнеса знают о том, что ты занимаешься вот такой вот фигней, и на цырлах перед пользователями ходишь?

У мну был похожий вариант недавно.
Но там шла речь о копировании документа. С многими тысячами строк в табличной части.

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

Ладно, в итоге убедили...

Написал им эту хню из нескольких строк и получил премию в размере 380 тысяч рублей.

Nthnsq 24.03.2016 21:03

19-DeiMos >
Знают и поддерживают юзера в этом. Смысл данного действа:
- я делаю сводные данные по продаже товара определенному контрагенту
- обученный юзер сбивает эти продажи по датам и по поставщикам
- я программно формирую Поступление ТМЦ
Ну, понятно - для чего.
Так вот, товар весовой, и если запендюрить одну строку с ходовым товаром в одно Поступление - возникает перевес у транспорта (более 20Т). Потому умный юзверь делит первоначальную строку на несколько, чтоб все было чисто.
И все бы ничего, но у меня там есть несколько скрытых реквизитов для формирования и проверки, которые надо очистить. И оставить всего 3.

Nthnsq 24.03.2016 21:09

15-USSR > Так и сделал. Не нужна лишняя кнопка, все штатно. Спасибо всем :)

VZ 24.03.2016 21:16

18-USSR > А чем метаданные мешают интерактивности?
В чем задача-то? Частичное заполнение новой строки?
Надо иметь копию строки. Заполнять этот список при открытии документа.
после окончания редактировани строки заполняем список значениями (см. предопределенные функции формы).
При создании новой строки сразу ее заполняем из этого шаблона, и возветаемся на начало. Собственно,вся схема.
Токо я "бы повосьмерошному" кнопоцки прменил к табличной части.

Morrison 24.03.2016 22:14

2(19) Мда. Дела у тебя идут явно неплохо. И как ты умудряешься себя продавать? У меня 7-ка в постоянном обслуживании, не могу, хоть убей не могу с каждым днем ее вести. Какая-то чушь отнимать начинает часы. В (0), мне сейчас кажется, невозможно просто скопировать строку, нужно все заполнять. Я просто помню , как очень радовался появлению ЗаполнитьЗначенияСвойств в 8-ке. А теперь, кстати, считаю, что наоборот - это зло. У людей элементарно падают компетенции, знания, все молодые - боже прости меня. Такое херачат... А главное - это отношение к делу. Сделал ошибку - ну подумаешь. А ошибка то детская, видно, что системности у человека нет, видно, что Паскаль даже не изучал. Показывает многое. И похреническое отношение показывает - "ну и хрен с ним". И правильно делают - никто их не уволит даже. А если повезет - повысят. И такая вот у нас страна получается, с низкой эффективностью труда.

Morrison 24.03.2016 22:23

+(23) И самое отвратительное, что эти люди считают себя правыми. Считают, что они мега-специалисты. Черт возьми, даже я тройку свое время схватил по информатике (ну там были нюансы), в институте схватил тройку за программирование (там правда тоже были нюансы), но эти люди то все отличники! Это что за бред такой? Как будто, в мой мир попала параллельная реальность.

Morrison 24.03.2016 22:24

+(24) А дебил, которому я указал на ошибочность его построения кода и даже ВПРЯМУЮ ему сказал почему он медленно работает. Чем он мне ответил? Для упр. приложения оказывается нужна более мощная видеокарта. Это ад. Мы уже в нем.

Morrison 24.03.2016 22:33

+(25) Что еще мне интересного "объясняют". Оказывается вложенные запросы использовать нельзя. Вы знаете такое? Вот , мотайте на ус. А когда я говорю - "Для 1С все решает вложенность", мне говорят - "Нет, вы что! Их нельзя использовать!". И дальше они просто стесняются добавить - "Вы дебил". Я спрашиваю - "Почему их нельзя использовать?". В ответ очевидное. Хорошо, дальше я задаю вопрос на который никто не смог ответить, но я больше, чем уверен ушли с мыслями - "Он дебил". Вопрос простой - "Вложенные запросы использовать нельзя, но, что мне делать, если запрос с вложенными запросами работает быстрее, чем с временными таблицами?".

DeiMos 25.03.2016 00:44

26-Моррисон > Обращайтесь в Лигу Сексуальных Реформ.

@& Некто Остап Бендер.

USSR 25.03.2016 06:17

(22)Я не говорил, что метаданные отменяют интерактивность или интерактивность метаданные. Просто штатное копирование строки это уже и есть скрытое использование метаданных, зачем еще что-то писать. Платформа сама скопирует, а нам лишь "подчистить"
(Моррисон)"Дебилы, [filolog]бля[/filolog]" (Сергей Лавров) А вообще я не понял про что ты

DeiMos 25.03.2016 19:16

В модуле формы документа, в процедуре ПриВводеНовойСтроки() пропиши обнуление ненужных реквизитов ТЧ.

DeiMos 25.03.2016 19:18

И не надо никакой лишней кнопки...

qweqwe123123 26.03.2016 02:15

через метаданные не катит, ибо документ может быть ещё не записан.
и я бы дополнил обработку тч проверкой на запрет редактирования/удаления видимо первой строки (очевидно, введённой программно).

qweqwe123123 26.03.2016 02:19

минусовать с первой строки я бы ничего не стал. можно вывести на форму разницу, если это нужно, а обрабатывать (минусовать) количество первой строки при проведении. иначе потом не узнаешь, какое количество изначально содержалось в первой строке, если юзер ввёл в тч дока что-то не то и надо док юзеру перезаполнить.

USSR 26.03.2016 06:09

(31)по моему абсолютно неважно записан документ или нет. Метаданные к этому не имеют никакого отношения. Они лишь предоставляют нам возможность получить перечень общих реквизитов, реквизитов шапки и табличной части. Копируется строка объекта, а не ссылки

DeiMos 26.03.2016 21:25

Ну и дураки же вы все...

А что, (29) еще никто не удосужился прочесть?

USSR 27.03.2016 04:57

(34)А ты прочитал (15) ?)) Нужно кстати использовать именно ПриРедактированииНовойСтроки, а не при ВводеНовойСтроки. Я даже попробовал, прежде чем в (15) ответил и попробовал сначала с ПриВводеНовойСтроки тоже думая что с ней работает

DeiMos 27.03.2016 08:07

35-USSR > Респект тебе и уважуха.
Сорри, я облажался..


Текущее время: 15:48. Часовой пояс GMT +3.