Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Удаление строк открытого документа через контекст (число прочтений - 18112 )
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Удаление строк открытого документа через контекст
22. Июня 2006 :: 21:51
Печать  
Подскажите, есть ли способ удалять/добавлять строки в открытом документе из вызванного им класса?
Я пробовал делать это вызывая объявленный в модуле формы метод "УдалениеСтроки" с помощью "ВыполнитьПроцедуру" Объекта "Сервис". Работает, но не всегда.
Ситуация такая: в процедуре модуля формы документа создаётся класс, который открывает форму обработки. На форме обработки есть кнопка, по нажатию которой нужно обновлять строки ТЧ открытого документа. Через ВыполнитьПроцедуру работает, но только если перед нажатием заветной кнопки активизировать форму документа, а потом опять вернуться на форму обработки. Иногда работает сразу, но, по ощущениям, в том случае, если форма документа почти не закрыта формой вызванной обработки. Вобщем, тёмные электрические силы.

Через подбор -- не предлагать, это я, слава Богу, умею.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #1 - 22. Июня 2006 :: 22:22
Печать  
Эээ... а не проще передать в класс Контекст и работать именно с ним?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #2 - 23. Июня 2006 :: 06:43
Печать  
Только так и нужно. Т.к. это наиболее прозрачный и простой способ Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #3 - 23. Июня 2006 :: 08:18
Печать  
Через контекст не получается. Если я правильно всё понимаю, в 1с добавлять/удалять строки в открытом документе штатными средствами можно только из предопределённых процедур и из обработчиков реквизитов формы. Суть вопроса заключалась в том, а есть ли в 1c++ или в FormExt возможности обойти это ограничение, причём, работающие стабильно.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Удаление строк открытого документа через контекст
Ответ #4 - 23. Июня 2006 :: 08:34
Печать  
Я делал не из класса, а из форм отчетов и обработок.

В документе определял процедуру (Обработчик());
В обработку при вызове передавал контекст документа (конт).
В обработке для заполнения документа вызывал Обработчик через этот контекст и передавал ТЗ.
По этой ТЗ заполнял МНЧ.

Соответственно, чтобы не обламываться с добавлением строк в документе, добавлена простая процедура
Система::EnableNewLine(Конт), пока так. Позволяет добавлять строки в контексте Конт.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #5 - 23. Июня 2006 :: 08:42
Печать  
kms, а можно немного подробнее:
1. Как вызывается метод "Обработчик()"? Через "ВыполнитьПроцедуру()"?
2. Можно пример вызова "Система::EnableNewLine(Конт)"? В каком месте нужно его выполнять?
3. Основные проблемы возникают в связи с необходимостью именно удаления строк.
Заранее спасибо.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Удаление строк открытого документа через контекст
Ответ #6 - 23. Июня 2006 :: 08:52
Печать  
Да все просто, по памяти напишу, смысл такой:

В обработке пишу:
Код
Выбрать все
// конт - это сохраненный контекст документа
Если ТипЗначения(конт) = 100 Тогда
    // контекст жив
    конт.Обработчик(ТЗ); // передаем данные
КонецЕсли;
 



В документе:
Код
Выбрать все
Процедура Обработчик(__тз)
    // разрешим удаление
    _сист =СоздатьОбъект("Система");
    _сист.EnableNewLine(Контест);

    // здесь нужно установить модифицированность, сама не установится
    Форма.Обновить(1);

    // дальше обработак данных
    УдалитьСтроки();
    ...
КонецПроцедуры
 



EnableNewLine - это некий тестовый метод, недокументированный и возможно подлежащий перемещению в другой объект 1cpp.
Если будет работать - дай мне знать, если нет - тоже, плз.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #7 - 23. Июня 2006 :: 09:09
Печать  
kms, не получилось. Ругается,
Код
Выбрать все
_сист.EnableNewLine(Контекст);
{Документ.ПриходнаяНакладная.Форма.Модуль(40)}: Поле агрегатного объекта не обнаружено (EnableNewLine)
 


У меня 1c++ версии 2022, может нужна какая-то другая?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Удаление строк открытого документа через контекст
Ответ #8 - 23. Июня 2006 :: 09:14
Печать  
Возьми для тестов nightbuild, это недавно добавлено, в пределах месяца.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #9 - 23. Июня 2006 :: 09:14
Печать  
Вообще я нашёл способ. Немного мудрёный, но работает. Все возможности полностью документированы.
Через подбор  Улыбка.

В модуле формы документа создаётся метод "ОткрытиеФормыДляПодбора". Он вызывается из созданного класса в методе "ПоказатьФорму" через "ВыполнитьПроцедуру". В качестве параметров передаётся имя обработки и ссылка на сам класс. Метод "ОткрытиеФормыДляПодбора" открывает для подбора обработку по имени, и передаёт в класс контекст открытой для подбора формы. Дальше, наверное, понятно. Если кого интересует подробнее, пишите.
  
Наверх
 
IP записан
 
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #10 - 23. Июня 2006 :: 09:16
Печать  
Обязательно попробую nightbuild, но позже. Сейчас время поджимает. Спасибо!
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Удаление строк открытого документа через конте
Ответ #11 - 23. Июня 2006 :: 09:19
Печать  
kbakaras писал(а) 23. Июня 2006 :: 09:14:
Вообще я нашёл способ. Немного мудрёный, но работает. Все возможности полностью документированы.
Через подбор  Улыбка.

Чего только наши люди не придумают, чтобы не строить дороги Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #12 - 23. Июня 2006 :: 09:26
Печать  
Да, всё было б гораздо проще, если бы не было этих граблей с добавлением/удалением строк. Просто вызывать метод через контекст. В 1с 7.7. много подобных заморочек.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #13 - 23. Июня 2006 :: 13:07
Печать  
Пару лет назад поднимался уже подобный вопрос.
Насколько я помню, для добавления/удаления строк ТЧ через контекст достаточно было просто загрузить 1C++.
Нашел вот это: http://itland.ru/forum//lofiversion/index.php/t1120.html
Может покажешь свой код полностью?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kbakaras
Junior Member
**
Отсутствует


Ребята, давайте жить дружно!

Сообщений: 20
Зарегистрирован: 22. Июня 2006
Пол: Мужской
Re: Удаление строк открытого документа через конте
Ответ #14 - 23. Июня 2006 :: 13:14
Печать  
1c++ у меня ввсё врямя загружен. Это не помогает.

А какой код интересует? Который не работал? Или который сейчас работает?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать