gifts2017

Предлагаю на Ваш суд свою идею заполнения табличной части нового документа при его открытии.

Опубликовал defini (defini) в раздел Программирование - Теория программирования

Вот небольшой кусочек кода внешней обработки, которая открывает форму нового документа с заполненной табличной частью. Без ВК и не меняя конфигурацию.
 
Перем ДокКонт;

Процедура Сформировать()
    ОткрытьФорму("Документ.ИмяДокумента",ДокКонт);
    Sc = CreateObject("WScript.Shell");
    //добавляем новые строки, пока пустые,
    //к примеру добавим 3 строки
    Стр = "INSERT";//здесь и далее служебные клавиши в фигурных скобках
    Для к = 1 По 5 Цикл
        Стр = Стр + "ENTER";
    КонецЦикла;
    //где "к" - количество реквизитов табличной части доступных для ввода,
    //если реквизит имеет кнопку выбора значения из списка
    //тогда перед "ENTER" надо добавить "ESC", для отмены
    //интерактивного выбора
    Для с = 1 По 3 Цикл
        Sc.SendKeys(Стр);
    КонецЦикла;
    //обязательно пауза
    Форма.ОбработкаОжидания("Заполним",1);
КонецПроцедуры

//заполняем строки документа
Процедура Заполним()
    Попытка
        Если ДокКонт.КоличествоСтрок() = 3 Тогда
            Форма.ОбработкаОжидания("Заполним",0);
            ДокКонт.ВыбратьСтроки();
            Пока ДокКонт.ПолучитьСтроку() = 1 Цикл
                //ну и заполняем пустые строки
            КонецЦикла;
            ДокКонт.Форма.Обновить();
        КонецЕсли;
    Исключение
    КонецПопытки;
КонецПроцедуры

Недостаток: на медленных тачках будет довольно прикольно смотреться заполнение таблицы.

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Аркадий Кучер (Abadonna) 21.03.07 18:19
Красиво! Вот только никак не въеду - зачем?
2. defini (defini) 22.03.07 11:54
Данному вопросу была посвящена предыдущая статья, как я понял, стояла задача: открыть новый документ и заполнить его табличную часть, не записывая документ в базу, и не меняя кода самой конфигурации. А т.к. документ не записан, методы "ЗагрузитьТабличнуюЧасть()" и "НоваяСтрока()" не срабатывают.
3. Аркадий Кучер (Abadonna) 23.03.07 17:04
Какая задача стояла я понял, не понял я ПОЧЕМУ она ВСТАЛА...
4. defini (defini) 23.03.07 17:56
:-) Да мало ли, что юзверя у человека захотели...
Меня заинтересовал сам концепт, идея.
5. Аркадий Кучер (Abadonna) 24.03.07 06:46
Ну вообще-то мой вопрос и не к тебе был, а к автору предыдущего решения ;)
6. Олег Пономаренко (O-Planet) 04.04.07 06:09
А вот мне скажите что... Ентот WScript.Shell - описан ГЕДЕ?
7. Anonymous 04.04.07 17:15
Тебе доки нужны? Стучись в 205460258
8. Евгений Мартыненков (JohnyDeath) 05.04.07 10:38
To O-Planet: посмотри сюда: http://www.script-coding.info/ .Очень толковый сайт
9. Sasha_H (logarifm) 24.04.07 17:55
Интересно как оно будет работать на больших базах и в особенности когда много пользхователей, сдесь явно вопрос в оптимизации отвалится! Все реально зависнет!
10. artbear2 (artbear) 26.04.07 10:15
А если просто загрузить ВК 1С++ и ФормЕкс, то НоваяСтрока() для нового документа будет отлично работать.
И не нужно никаких извращений :)
ЗЫ этой фичой пользуюсь уже несколько лет, больше трех точно.
11. artbear2 (artbear) 26.04.07 10:16
Читать - ВК 1С++ ИЛИ ВК ФормЕКС
12. defini (defini) 26.04.07 14:23
так задача стояла, без изменения конфы и ВК, вот и прикольнулся.
14. АЛьФ (АЛьФ) 06.11.08 10:37
2(12) Так "WScript.Shell" - это уже встроенный объект 1С?
Душелов; +1 Ответить 1
15. defini (defini) 07.11.08 09:09
(14) Не встроенный, но зачем изобретать велосипед, если можно использовать стандартные вещи?
16. Епрст (Ёпрст) 07.11.08 09:17
17. defini (defini) 07.11.08 09:33
Чой-то вы проснулись? Статейка полтора года валялась тихо-мирно..
18. Илья (i132) 20.03.12 15:56
(стоит указать в заголовке что это 7.7)
Добавлять из обработки в еще не записанный документ без внешних компонент и скриптов, штатными средствами можноделать через подбор: Открыть подбор в форме нвого документа, и врентуть таблицу подбора.
например в типовой торговле из формы документа вызвается глОбработкаПодбора(Контекст, ВыбЗнач, 1, 1, 1);, где выбЗнач таблицаЗначений с номенлатурой и количеством + доп реквизиты.

пример кода:

Процедура ВвестиОтменуЗаявок(ТЗ) //+Илья 160806
Перем КОнтПобора;

КОнтекстНовогоДокумента="";
ОткрытьФорму("Документ.ОтменаЗаявок#",КОнтекстНовогоДокумента,);
КОнтекстНовогоДокумента.ОткрытьПодбор("Обработка.ПустаяФорма",, КонтПобора,1);
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
КонтПобора.Форма.ВыполнитьВыбор(Тз.Заявка);
КонецЦикла;
КонтПобора.Форма.Закрыть();

КонецПроцедуры

примечание: Обработка Пустаяформа все-таки мелькает, чтобы код работал на ней должен быть хотябы один элемент, например кнопка "ОК", модуль формы может быть пустым.