Войти или зарегистрироваться
[РЕШЕНО] При копирование
Тема в разделе «Конфигурирование на платформе «1С:Предприятие 8″», создана пользователем Эмиль0690, 13 ноя 2015.
-
0/5,
Голосов: 0
-
Offline
Эмиль0690
Опытный в 1С- Регистрация:
- 3 фев 2014
- Сообщения:
- 331
- Симпатии:
- 2
- Баллы:
- 29
Добрый день!
Подскажите пожалуйста, каким образом можно очистить реквизит с типом строка при копирование документа?Код:Процедура ПриКопировании(ОбъектКопирования) СуммаПриходаNC = 0; Комментарий = 0; //ВидДокумент = Справочник.ВидДокумент.ПКОм3; КонецПроцедуры
реквизит называется Комментарий, есть процедура ПриКопирование в модуле документа но при копирование дока сумма не копируется т.е очистится
а реквизит Комментарий с типом строка вставляется (ноль) 0
как сделать что ровнялся не на нулю а на очистить?
Спасибо!
Эмиль0690,
13 ноя 2015
#1 -
Offline
Flash-Dance
Профессионал в 1С- Регистрация:
- 20 май 2012
- Сообщения:
- 365
- Симпатии:
- 42
- Баллы:
- 54
//двойные кавычки
Комментарий = «»;
Flash-Dance,
13 ноя 2015
#2 -
Offline
Эмиль0690
Опытный в 1С- Регистрация:
- 3 фев 2014
- Сообщения:
- 331
- Симпатии:
- 2
- Баллы:
- 29
Спасибо!
Эмиль0690,
13 ноя 2015
#3
- Похожие темы
-
8.х
Копирование документа
Tasya,
22 окт 2014, в разделе: Конфигурирование на платформе «1С:Предприятие 8»
- Ответов:
- 2
- Просмотров:
- 918
- Tasya
- 22 окт 2014
- Ваше имя или e-mail:
- У Вас уже есть учётная запись?
-
- Нет, зарегистрироваться сейчас.
- Да, мой пароль:
-
Забыли пароль?
-
Запомнить меня
-
- Искать только в заголовках
- Сообщения пользователя:
-
Имена участников (разделяйте запятой).
- Новее чем:
-
- Искать только в этой теме
- Искать только в этом разделе
- Отображать результаты в виде тем
-
Быстрый поиск
- Последние сообщения
Больше…
В 1С нет как такового события копирование строки табличной части, есть
Прошу обратить внимание, речь идет о событиях именно о табличной части (Табличное поле на форме), а не отдельных полей
ПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
//Где параметр Копирование (Булево) определяет скопирована строка или нет
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если Копирование Тогда
ПересчитатьСуммуДокумента(); //Пересчитываем сумму табличной части и выводим на форму
КонецЕсли;
КонецПроцедуры
С удалением строк несколько проще, есть событие ПослеУдаления()
ПослеУдаления(Элемент)
Процедура ТоварыПослеУдаления(Элемент)
ПересчитатьСуммуДокумента();//Пересчитываем сумму табличной части и выводим на форму
КонецПроцедуры
Доброго всем здоровья, Уважаемые Гуру и Гурии Солнцеликого 1С! У меня возник вопрос: можно ли при копировании документа очищать все поля на его форме? Если да, то напишите, пожалуйста, каким образом. Буду очень благодарен!
это в сам документ придется лесть и ПриОткритие чистить
поле очень много, нельзя ли универсально как-нибудь? запросом, например?
как это будет выглядеть в процедуре «ПриКОпировании»,можно пример?
поля на форме очищать не надо, они не копируются очищать нужно реквизиты документа, включая табличные части
как это будет выглядеть в процедуре «ПриКОпировании»?
тебе уже ответили: цикл по метаданным документа
а зачем тогда копировать документ, если все очищать?
нужно копировать, чтобы можно было создавать документ копированием, как ни странно. Только при этом все поля должны очищаться. Очень хотелось бы примерчик, как это через цикл по метаданным сделать, уважаемая!
Используй метод Новый для документа
не въеду никак, Уважаемый. Примерчик можно?
ну на кнопку «создавать копированием» прикрепляаешь процедуру «создавать новый»
А чего надо? Созать новый пустой, или очистить старый?
НовыйДок = Документы.ПеремещениеТоваров.СоздатьДокумент;
В таких случаях копировать надо кнопкой Insert
Нужно создать новый пустой
И зачем при этом пользоваться копипастой?
чтобы не отключать возможность копирования документов. Написал в процедуре «ПриКопировании» Документы.ДокументРаз.СОздатьДокумент, все равно заполняются поля. Что делаю не так?
ОбъектКопирования = Документы.ДокументРаз.ПустаяСсылка;
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
0
— 24.03.2016 — 16:10
Собственно, сабж. Находимся в заполненной табличной части документа, курсор стоит на одной из строк.
Нужно, нажав на кнопку на форме — частично скопировать строку, на которой находится курсор. Контекстное «Копировать» не прокатывает — копирует все реквизиты, а все они не нужны.
Есть у кого пример кода процедуры?
1
— 24.03.2016 — 16:18
А что именно не получается?
2
— 24.03.2016 — 16:22
1-Dump 20031 >
Да ничего. Жму на кнопку, попадаю в процедуру, определяю — где курсор.
НоваяСтрока()
и все, сразу перепозиционирование. А как с той, где поначалу был курсор — данные стянуть — хз.
3
— 24.03.2016 — 16:25
Правильно. Сначала запоминаем что надо и только потом НоваяСтрока()
4
— 24.03.2016 — 16:27
Во, сенкс, я так и думал: загоняем все, что нужно в переменные — иначе никак не выйдет. Щас попробую.
5
— 24.03.2016 — 16:28
//получить текущую строку ТЧ дока = поз
ТЗ=СоздатьОбъект(«ТаблицаЗначений»);
ВыгрузитьТабличнуюЧасть(ТЗ);
ТЗ.НоваяСтрока();
ТЗ.Часть1 = ТЗ.ПолучитьЗначение(поз,»Часть1″);
ТЗ.Часть2 = ТЗ.ПолучитьЗначение(поз,»Часть2″);
ТЗ.Часть3 = ФигняКакаяТо;
ЗагрузитьТабличнуюЧасть(ТЗ);
6
— 24.03.2016 — 16:31
5-Чучундер >
Серег, через ТЗ — понятно, думаешь проще?
7
— 24.03.2016 — 16:32
//получить текущую строку ТЧ дока = поз
ТЗ = СоздатьОбъект(«ТаблицаЗначений»);
ТЗраб = СоздатьОбъект(«ТаблицаЗначений»);
ВыгрузитьТабличнуюЧасть(ТЗ);
ТЗ.Выгрузить(ТЗраб,поз,поз);
ТЗ.НоваяСтрока();
ТЗ.Заполнить(ТЗраб,ТЗ.НомерСтроки,ТЗ.НомерСтроки);
ТЗ.ЧтоПереинициализировать1=Фигня;
ТЗ.ЧтоПереинициализировать2=Херня;
ЗагрузитьТабличнуюЧасть(ТЗ);
8
— 24.03.2016 — 16:33
6-Valery > если запоминать в пром.буфере — придется цикл по колонкам крутить.
9
— 24.03.2016 — 16:35
Можно третий вариант
программно:
открываем док.
позиционируемся на нужную строку
эмулируем Ф9
записатьдок
закрываем форму
переписываем некопируемые значения
10
— 24.03.2016 — 16:37
Епрст придет — придумает еще красивше
11
— 24.03.2016 — 16:38
Дальше усложнение идет:
я программно заполняю документ.
например
Товар1 колво
Фигня 250
Юзер потом копирует строку, а количество, котрое он ввел — должно отминусоваться от оригинальной строки.
Т.е. при окончании редактирвания ячейки — 250 минус точтовверюзер.
12
— 24.03.2016 — 16:52
Но пока и этого хватит.
13
— 24.03.2016 — 17:24
Перед тем как создать строку запиши в переменные все что нужно или номер строки ТЧ, потом будешь заполнять новую строку по этим данным.
А в чем проблема?
КопТовар=Товар1;
КопКол=колво;
НоваяСтрока();
Товар1=КопТовар;
колво=КопКол;
14
— 24.03.2016 — 17:52
В (7) — красивше. Нигде никаких присвоений существующего не идет. Присваиваются только значения, которые не совпадают с копируемыми
15
— 24.03.2016 — 18:04
(14 по моему можно еще проще, скопировать строку штатно и использовать процедуру
Процедура ПриРедактированииНовойСтроки()
КонецПроцедуры //
В ней поправить что не нужно копировать
16
— 24.03.2016 — 19:07
Методанные сообщат расклад строки любого документа.
Следовательно, можно собрать СписокЗначений: значение столбца + название столбца (название столбца уникально в ТЗ).
Потом можешь кушать этот список, как угодно.
17
— 24.03.2016 — 19:37
15-USSR > это если интерактивно
18
— 24.03.2016 — 19:53
(17)Так автор и собирался аж кнопку вешать на форму
А если не интерактивно, то (16) — иетаданные
19
— 24.03.2016 — 20:46
У меня вопрос к автору:
— Владельцы бизнеса знают о том, что ты занимаешься вот такой вот фигней, и на цырлах перед пользователями ходишь?
У мну был похожий вариант недавно.
Но там шла речь о копировании документа. С многими тысячами строк в табличной части.
Видели бы вы, какую истерику я закатил, пытаясь доказать что проще бухам в ста тыщ строк обнулить некоторые реквизиты вручную, чем мне милостиво написать им обнуление при копировании документа…
Ладно, в итоге убедили…
Написал им эту хню из нескольких строк и получил премию в размере 380 тысяч рублей.
20
— 24.03.2016 — 21:03
19-DeiMos >
Знают и поддерживают юзера в этом. Смысл данного действа:
— я делаю сводные данные по продаже товара определенному контрагенту
— обученный юзер сбивает эти продажи по датам и по поставщикам
— я программно формирую Поступление ТМЦ
Ну, понятно — для чего.
Так вот, товар весовой, и если запендюрить одну строку с ходовым товаром в одно Поступление — возникает перевес у транспорта (более 20Т). Потому умный юзверь делит первоначальную строку на несколько, чтоб все было чисто.
И все бы ничего, но у меня там есть несколько скрытых реквизитов для формирования и проверки, которые надо очистить. И оставить всего 3.
21
— 24.03.2016 — 21:09
15-USSR > Так и сделал. Не нужна лишняя кнопка, все штатно. Спасибо всем
22
— 24.03.2016 — 21:16
18-USSR > А чем метаданные мешают интерактивности?
В чем задача-то? Частичное заполнение новой строки?
Надо иметь копию строки. Заполнять этот список при открытии документа.
после окончания редактировани строки заполняем список значениями (см. предопределенные функции формы).
При создании новой строки сразу ее заполняем из этого шаблона, и возветаемся на начало. Собственно,вся схема.
Токо я «бы повосьмерошному» кнопоцки прменил к табличной части.
23
— 24.03.2016 — 22:14
2(19) Мда. Дела у тебя идут явно неплохо. И как ты умудряешься себя продавать? У меня 7-ка в постоянном обслуживании, не могу, хоть убей не могу с каждым днем ее вести. Какая-то чушь отнимать начинает часы. В (0), мне сейчас кажется, невозможно просто скопировать строку, нужно все заполнять. Я просто помню , как очень радовался появлению ЗаполнитьЗначенияСвойств в 8-ке. А теперь, кстати, считаю, что наоборот — это зло. У людей элементарно падают компетенции, знания, все молодые — боже прости меня. Такое херачат… А главное — это отношение к делу. Сделал ошибку — ну подумаешь. А ошибка то детская, видно, что системности у человека нет, видно, что Паскаль даже не изучал. Показывает многое. И похреническое отношение показывает — «ну и хрен с ним». И правильно делают — никто их не уволит даже. А если повезет — повысят. И такая вот у нас страна получается, с низкой эффективностью труда.
24
— 24.03.2016 — 22:23
+(23) И самое отвратительное, что эти люди считают себя правыми. Считают, что они мега-специалисты. Черт возьми, даже я тройку свое время схватил по информатике (ну там были нюансы), в институте схватил тройку за программирование (там правда тоже были нюансы), но эти люди то все отличники! Это что за бред такой? Как будто, в мой мир попала параллельная реальность.
25
— 24.03.2016 — 22:24
+(24) А дебил, которому я указал на ошибочность его построения кода и даже ВПРЯМУЮ ему сказал почему он медленно работает. Чем он мне ответил? Для упр. приложения оказывается нужна более мощная видеокарта. Это ад. Мы уже в нем.
26
— 24.03.2016 — 22:33
+(25) Что еще мне интересного «объясняют». Оказывается вложенные запросы использовать нельзя. Вы знаете такое? Вот , мотайте на ус. А когда я говорю — «Для 1С все решает вложенность», мне говорят — «Нет, вы что! Их нельзя использовать!». И дальше они просто стесняются добавить — «Вы дебил». Я спрашиваю — «Почему их нельзя использовать?». В ответ очевидное. Хорошо, дальше я задаю вопрос на который никто не смог ответить, но я больше, чем уверен ушли с мыслями — «Он дебил». Вопрос простой — «Вложенные запросы использовать нельзя, но, что мне делать, если запрос с вложенными запросами работает быстрее, чем с временными таблицами?».
27
— 25.03.2016 — 00:44
26-Моррисон > Обращайтесь в Лигу Сексуальных Реформ.
@& Некто Остап Бендер.
28
— 25.03.2016 — 06:17
(22)Я не говорил, что метаданные отменяют интерактивность или интерактивность метаданные. Просто штатное копирование строки это уже и есть скрытое использование метаданных, зачем еще что-то писать. Платформа сама скопирует, а нам лишь «подчистить»
(Моррисон)»Дебилы, [*****]» (Сергей Лавров) А вообще я не понял про что ты
29
— 25.03.2016 — 19:16
В модуле формы документа, в процедуре ПриВводеНовойСтроки() пропиши обнуление ненужных реквизитов ТЧ.
30
— 25.03.2016 — 19:18
И не надо никакой лишней кнопки…
31
— 26.03.2016 — 02:15
через метаданные не катит, ибо документ может быть ещё не записан.
и я бы дополнил обработку тч проверкой на запрет редактирования/удаления видимо первой строки (очевидно, введённой программно).
32
— 26.03.2016 — 02:19
минусовать с первой строки я бы ничего не стал. можно вывести на форму разницу, если это нужно, а обрабатывать (минусовать) количество первой строки при проведении. иначе потом не узнаешь, какое количество изначально содержалось в первой строке, если юзер ввёл в тч дока что-то не то и надо док юзеру перезаполнить.
33
— 26.03.2016 — 06:09
(31)по моему абсолютно неважно записан документ или нет. Метаданные к этому не имеют никакого отношения. Они лишь предоставляют нам возможность получить перечень общих реквизитов, реквизитов шапки и табличной части. Копируется строка объекта, а не ссылки
34
— 26.03.2016 — 21:25
Ну и дураки же вы все…
А что, (29) еще никто не удосужился прочесть?
35
— 27.03.2016 — 04:57
(34)А ты прочитал (15) ?)) Нужно кстати использовать именно ПриРедактированииНовойСтроки, а не при ВводеНовойСтроки. Я даже попробовал, прежде чем в (15) ответил и попробовал сначала с ПриВводеНовойСтроки тоже думая что с ней работает
36
— 27.03.2016 — 08:07
35-USSR > Респект тебе и уважуха.
Сорри, я облажался..
Табличные части существуют у многих объектов в 1С:
- Справочники
- Документы
- Отчеты и обработки
- Планы счетов
- Планы видов характеристик
- Планы видов расчета
- Бизнес-процессы и задачи
Табличные части позволяют хранить неограниченное количество структурированной информации, принадлежащей одному объекту.
Рассмотрим некоторые приемы работы с табличными частями.
Как обойти табличную часть
Для обхода табличной части можно использовать цикл Для каждого
Для каждого Строка из ТабличнаяЧасть Цикл
Сообщить(Строка.РеквизитТабличнойЧасти);
КонецЦикла;
На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.
Как получить и обойти выделенные строки табличной части
Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.
Для получения перечня выделенных строк используется следующий код:
ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;
Для того чтобы обойти выделенные строки используется цикл Для каждого:
ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;
Для каждого Строка из ВыделенныеСтроки Цикл
//содержимое цикла
КонецЦикла;
Как программно выделить строки табличной части (табличного поля) и снять выделение
Чтобы программно снять выделение строк табличного поля:
ЭлементыФормы.ИмяТабличногоПоля.ВыделенныйСтроки.Очистить();
Чтобы программно выделить все строки табличного поля:
Для каждого ТекущаяСтрока Из ТабличнаяЧасть Цикл
ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
Как очистить табличную часть
ТабличнаяЧасть.Очистить();
Как получить текущую строку табличной части
Текущая строка — это срока, в которой у пользователя в данный момент находится курсор. Чтобы ее получить, нужно обратиться к элементу управления на форме, который связан с табличной частью.
Для обычных форм код будет выглядеть так:
ЭлементыФормы.ИмяТабличногоПоля.ТекущиеДанные;
Для управляемых форм:
Элементы.ИмяТабличногоПоля.ТекущиеДанные;
Как добавить новую строку в табличную часть
Добавление новой строки в конец табличной части:
НоваяСтрока=ТабличнаяЧасть.Добавить();
НоваяСтрока.Реквизит1=«Значение»;
Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):
НоваяСтрока=ТабличнаяЧасть.Вставить(Индекс)
//Индекс — номер добавляемой строки. Нумерация строк начинается с нуля.
НоваяСтрока.Реквизит1=«Значение»;
Как программно заполнить реквизиты строки табличной части
Если нужно программно заполнить реквизиты строки табличной части, которую добавляет пользователь, необходимо использовать обработчик события табличной части ПриНачалеРедактирования.
Создаваемая обработчиком процедура имеет три параметра:
- Элемент — содержит элемент управления ТабличноеПоле.
- НоваяСтрока — булево. Содержит значение Истина, если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
- Копирование — булево. Содержит значение Истина, если пользователь копирует строку, и Ложь в остальных случаях.
Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.
Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат;
КонецЕсли;
//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент.ТекущиеДанные; //Получили текущую строку табличной части
ТекСтрока.СчетУчета = ПланыСчетов.Хозрасчетый.НужныйСчетУчета;
КонецПроцедуры