Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
DEaD_EGOR
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 103
1

Внешняя обработка, создание формы

23.03.2016, 10:19. Просмотров 3270. Ответов 72
Метки нет (Все метки)

Всем доброго времени суток. Народ, подскажите, пишу с нуля внешнюю обработку для загрузки данных в документ из файлов Excel.. Проблема возникла в моменте создания формы.
Задача такая-"Обработка читает документ и на основании прочтённого создаёт документ Реализации товаров. При написании кода в модуле Сначала в объекте нужно заполнить все, что нужно для формы, потом нужно сделать вызов на клиент, на сервере поместить объект в реквизит и получить его на клиенте..."

Имею кусок уже написанного кода
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&НаСервере
Процедура ЗагрузитьФайлНаСервере ()
 
(тут много кода по открытию и чтению эксель-документа) 
 
 //Создаём новый документ и списываем в него данные
     мДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
     НоваяСтрока = мДокумент.Товары.Добавить();
 
//Создаём форму документа
     Если НЕ ЗначениеЗаполнено(Объект.ИмяФайла) Тогда
        Сообщить("Не выбран файл загрузки!");
    Иначе       
        ИмяФайла = Объект.ИмяФайла; 
    мФорма = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары");
    ДокОбъект = мФорма.Объект;
постоянно ругается на то, что "Процедура или функция с указанным именем не определена (ПолучитьФорму)"

как реализовать вызов на клиент?

Добавлено через 13 минут
Прошу прощения, сам разобрался))

Добавлено через 16 часов 52 минуты
Собственно, вопрос с загрузкой формы я решил. Теперь возник вопрос, какой набор команд необходим для заполнения формы?
Сам код выглядит вот так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
&НаСервере
Процедура ЗагрузитьФайлНаСервере (ФормаОбъект)
    
    
    //подключаемся к эксель
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Книга = Excel.WorkBooks.Open(Объект.ИмяФайла);
    Исключение
        Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
        
    Попытка 
        //Открываем необходимый лист
        Excel.Sheets(1).Select();  // лист 1, по умолчанию  
    Исключение
        //Закрываем Excel
        Excel.ActiveWorkbook.Close();   
        Excel = 0;
        Сообщить("Файл "+Строка(Объект.ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!");
        ОтменитьТранзакцию();
        Возврат;
    КонецПопытки;   
    
 
    //Получим количество строк и колонок.
    //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
    Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
    Если Версия = "8" тогда
        ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;
        ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
        ФайлСтрок   = Excel.Cells(1,1).SpecialCells(11).Row;
        ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;   
    Конецесли;
    
    //// Создание колонок табличного документа
    ТабЗнач = Новый ТаблицаЗначений;
    ТабЗнач.Колонки.Добавить("Артикул"); 
    ТабЗнач.Колонки.Добавить("Номенклатура"); 
    ТабЗнач.Колонки.Добавить("Количество"); 
    ТабЗнач.Колонки.Добавить("Цена");
    ТабЗнач.Колонки.Добавить("Ставка"); 
        
    //считываем первую строку и генерируем колонки  
            
    Для НС = 2 по ФайлСтрок Цикл  // НС указываем с какой строки начинать обработку        
            
        НоваяСтрока = ТабЗнач.Добавить();       
        НоваяСтрока.Номенклатура = Excel.Cells(НС, 2).Text;
        НоваяСтрока.Количество = Excel.Cells(НС, 3).Text;
        НоваяСтрока.Цена= Excel.Cells(НС, 4).Text;
        НоваяСтрока.Ставка= Excel.Cells(НС, 6).Text;
                            
    КонецЦикла;   
                
     // Закрыть COM соединение для экономии памяти
     Excel.Application.Quit();
                
 КонецПроцедуры
 
 &НаСервере
 Процедура ЗаполнитьНаСервере (ФормаОбъект)
     
     
     
 КонецПроцедуры
 
 
&НаКлиенте 
Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.Заголовок = "Выберите файл";
        
    Если ДиалогВыбора.Выбрать() Тогда
        Объект.ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
    КонецЕсли;
    
КонецПроцедуры
 
&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
    
     мФорма = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары");
     ФормаОбъект = мФорма.Объект;
     ЗагрузитьФайлНаСервере (ФормаОбъект);  
     КопироватьДанныеФормы(ФормаОбъект,Мформа.Объект);
     мФорма.Модифицированность = Истина;
     мФОрма.ЦеныИВалюта = "НДС сверху";
     Мформа.Открыть();
     МФорма.ЦеныИВалюта = "НДС сверху";
    
КонецПроцедуры
Подскажите неучу...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2016, 10:19
Ответы с готовыми решениями:

Внешняя обработка, создание документа Заказ Поставщику
Здравствуйте, подскажите, пожалуйста! Во внешней обработке создаю Заказ...

Внешняя обработка
Здравствуйте! как из формы внешней обработки сформировать типовой отчет и...

Внешняя обработка
Нужно создать внешнюю обработку. Ввести в поле ввода дату. По кнопке...

Внешняя обработка
Всем привет! Помогите пожалуйста составить такой вот код - (перебирает целые...

Внешняя обработка печати
Добрый день, не разу не работал со внешней обработкой печати, подскажите что не...

72
DEaD_EGOR
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 103
24.03.2016, 16:48  [ТС] 61
Jackshi, Блин, торможу.. Спасибо большое..

Добавлено через 32 минуты
Ну вроде всё работает. осталось только регистрацию обработки в модуль объекта прикрутить по идее... Спасибо Вам за помощь!!!
0
DEaD_EGOR
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 103
28.03.2016, 12:10  [ТС] 62
Блин, а как теперь сделать так, чтобы по умолчанию в создающемся документа было значение НДС Сверху? Умом понимаю, что это надо изменить реквизит документа СуммаВключаетНДС по типу СуммаВключаетНДС = ложь. Но не могу понять, как это реализовать... Мы же в данном коде документ получаем уже готовый, с формой... Пробовал в процедуре
1C
1
2
3
4
5
6
7
8
9
10
&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
    
     //Создаём форму документа
     мФорма = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары");                                                                     
     ЗагрузитьФайлНаКлиенте(мФорма);
     мФорма.Открыть();
     
                          
 КонецПроцедуры
прописывать мФорма.СуммаВключаетНДС = Ложь, но тут же ругательство всплывает-не найдено поле...
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
28.03.2016, 12:14 63
DEaD_EGOR,
1C
1
мФорма.Объект.СуммаВключаетНДС = Ложь;
1
DEaD_EGOR
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 103
28.03.2016, 12:39  [ТС] 64
GreenkO, Ольга, доброго дня) Так тоже пробовал, в итоге-всё равно по умолчанию стоит Документ без НДС. Я так понял, из-за того, что я пытаюсь изменить реквизит формы, а не документа...

Добавлено через 15 минут
посмотрел по отладчику, значение всё равно Истина у выражения мФорма.Объект.СуммаВключаетНДС
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
28.03.2016, 12:42 65
DEaD_EGOR, посмотрите в форме документа самого процедуру ПриОткрытии(), может выставляется этот реквизит равным Истине.
1
DEaD_EGOR
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 103
28.03.2016, 12:48  [ТС] 66
GreenkO, То ли я ослеп в начале недели, то ли ничего не понимаю. в форме документа Товары (которая собсна и открывается), нет такого значения.... БП 3,0 демо... может я что-то не понимаю?
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
28.03.2016, 12:54 67
DEaD_EGOR, документ у вас РеализацияТоваровУслуг, а не Товары. Товары - это табличная часть документа. Открываете форму документа РеализацияТоваровУслуг и ищите в модуле процедуру ПриОткрытии() - смотрите там, где устанавливается значение реквизита документа СуммаВключаетНДС.
Если это БП 3 - то вероятен вызов процедур общего модуля и установка реквизита именно там.
1
DEaD_EGOR
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 103
28.03.2016, 14:16  [ТС] 68
GreenkO, Я просто неправильно выразился, прошу прощения. Форму я открыл. Там в процедуре ПриОткрытии(Отказ) ПроверкаКонтрагентов и ОбработкаНовостей.. Буду тогда искать в общих модулях..

Добавлено через 51 минуту
GreenkO, прошёлся, немного переделал..
1C
1
2
3
4
5
6
7
//Создаём форму документа
     мФорма = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары");                                                                     
     ЗагрузитьФайлНаКлиенте(мФорма);
     мФорма.Объект.ДокументБезНДС = Ложь;
     мФорма.Объект.СуммаВключаетНДС = Ложь;
     
     мФорма.Открыть();
по отладчику значения присваиваются, но в форме документа всё равно стоит Документ без НДС.. Мне тут поступило предложение после заполнения обновлять форму, видимо "сначала что-то устанавливаете, а затем типовой код, например в ПриОткрытии выполняет собственную установку.", но как это сделать?..

Добавлено через 24 минуты
только при указании мФорма.Объект.ДокументБезНДС = Ложь; значения суммы и счетов учета не заполняются автоматически....
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
28.03.2016, 14:30 69
Цитата Сообщение от DEaD_EGOR Посмотреть сообщение
только при указании мФорма.Объект.ДокументБезНДС = Ложь; значения суммы и счетов учета не заполняются автоматически
думаю, дело не в этом. Посмотрите в модуле формы, где заполняются эти реквизиты. Счета учета расчетов по Контрагенту обычно заполняются при изменении Контрагента, в табличной части счета учета заполняются при изменении Номенклатуры. Найдите код заполнения счетов и пропишите в вашей обработке заполнения формы документа.
1
DEaD_EGOR
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 103
28.03.2016, 14:32  [ТС] 70
GreenkO, там кроме счетов всё остальное автоматически тоже не считает в этом случае. только заполняет данные, считанные с экселя...
и в моём случае счета учета заполняются при выборе организации на основании номенклатуры
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
28.03.2016, 14:35 71
DEaD_EGOR, писала выше - смотрите обработчики ПриИзменении() реквизитов табличной части Товары в форме документа - и переносите в обработку. Можно сделать процедуры пересчета экспортными и вызывать через мФорма. Но это все зависит от кода. У меня нет под рукой БП 3.
1
Jackshi
59 / 59 / 6
Регистрация: 16.01.2013
Сообщений: 155
28.03.2016, 18:10 72
DEaD_EGOR, плюс ко всему есть правила форума. В одной теме один вопрос. И в начале нужно писать платформу и конфигурацию. Это поможет быстрее решить проблему. Не нужно будет звать экстрасенсов)))
1
DEaD_EGOR
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 103
29.03.2016, 09:05  [ТС] 73
Jackshi, Спасибо, буду знать..
0
29.03.2016, 09:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2016, 09:05

Внешняя обработка из Далион
Ситуация такая имеется обработка из 1С:8 далион, надо переделать в 1С:8...

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

Внешняя обработка 1С, ввод и вывод числа пользователю
Всем привет! Помогите, пожалуйста, сделать внешнюю обработку в 1С. Необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
73
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru