Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
LeMorales
2 / 2 / 1
Регистрация: 17.12.2013
Сообщений: 95
1

Планирование статей бюджетов и внешняя обработка

04.10.2018, 17:01. Просмотров 273. Ответов 15

Добрый день!

Подскажите алгоритм(хотя бы на пункта три, уже будет прекрасно) действий в конфигураторе 1С для планирования статей бюджетов:
  1. Загружаю excel файл, с помощью внешней обработки
  2. Потом, у меня уже должна быть обработка, в шапке которой три поля: валюта, курс usd, курс рубля
  3. При нажатии на кнопку выбираем файл и автоматически заполняется программа

буду благодарен любому отталкивающему на верный путь ответу
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2018, 17:01
Ответы с готовыми решениями:

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

Внешняя Обработка
добрый день! Очень нужна помощь.В 1с8.2 есть справочник контрагенты.Необходимо в наименовании...

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

Внешняя обработка
Здравствуйте, конфигурация УТ 10.3, создал внешнюю обработку для отправки вложений по почте. Как...

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

15
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
04.10.2018, 18:49 2
LeMorales, ну у вас на все три пункта один ответ - создать внешнюю обработку
Надо больше информации. Какая программа? Это типовая конфигурация? Из Эксель куда грузим информацию?
Может можно воспользоваться готовой типовой обработкой "Загрузка данных из табличного документа"?
1
LeMorales
2 / 2 / 1
Регистрация: 17.12.2013
Сообщений: 95
05.10.2018, 12:10  [ТС] 3
GreenkA, Спасибо Вам за ответ.

Программа "1С:Предприятие 8.3 (8.3.10.2252)"
Конфигурация "Управление торговым предприятием для Украины ред. 1.2"

Так как я нуб, понял все так:
  • есть excel документ (скриншот прикрепил) с тремя ключевыми полями (наверное так это назвать могу), они сверху: валюта и два курса
  • мне нужно создать обработку, которая должна выгружать информацию в табличную часть документа, ссылка "Планирование статей бюджетов", небольшой каркас прикрепил к сообщению
    • в шапке которой будет три поля - Валюта [ ], Курс USD [ ], Курс грн [ ] (при переключении пункта поля валюты, например, с доллара на гривну, должен поменяться курс в этих двух полях валют)
    • кнопка "Выбрать файл..", выбирается xsl или xslx файл и все с него выгружается в табличный документ формы
  • вроде бы, пока так
Если можете, подскажите, типовая обработка "Загрузка данных из табличного документа", что она может сделать из списка моего задания?
0
Миниатюры
Планирование статей бюджетов и внешняя обработка   Планирование статей бюджетов и внешняя обработка  
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
05.10.2018, 14:22 4
LeMorales, а куда вы данные эксель файла грузить будете?) Загруженные данные из самой обработки никуда не сохраняются.
Судя по содержимому файла у вас какие-то документы и суммы... Или это справочник?

Цитата Сообщение от LeMorales Посмотреть сообщение
типовая обработка "Загрузка данных из табличного документа", что она может сделать из списка моего задания
Загружает в уже готовую обработку данные из файла. Вы можете настроить соответствие полей определенного справочника и полей загруженного документа. И соответственно - загрузить в базу данных!
1
05.10.2018, 14:22
LeMorales
2 / 2 / 1
Регистрация: 17.12.2013
Сообщений: 95
05.10.2018, 15:06  [ТС] 5
GreenkA, скриншот прикрепил, эта обработка та что надо?

Цитата Сообщение от GreenkA Посмотреть сообщение
а куда вы данные эксель файла грузить будете?)
Нажимаю на "Ссылка", и выбираю там документ "Планирование статей бюджетов" (по заданию, час назад уточнил информацию просто)
А потом выбираю какую-то табличную часть.. правильно?

После, в настройках уже манипулирую под свой excel-файлик(под его поля) и нажимаю загрузить, верно?
0
Миниатюры
Планирование статей бюджетов и внешняя обработка  
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
05.10.2018, 15:13 6
LeMorales, да-да-да
Потом расскажете о результатах.
0
LeMorales
2 / 2 / 1
Регистрация: 17.12.2013
Сообщений: 95
08.10.2018, 16:29  [ТС] 7
GreenkA, здравствуйте.
Оказывается, мне надо было все делать в обычной форме. Так вот, столкнулся с такой проблемой: не могу правильно указать названия колонок и нумерацию строк (и это тоже, наверное).
Подскажите, пожалуйста, если это в Ваших силах

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
Процедура КнопкаВыполнитьНажатие(Кнопка)
    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
      
      ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
      ДиалогВыбораФайла.Фильтр    = "Табличный документ Лист Excel (*.xls,*.xlsx)|*.xls*";
        
      Если ДиалогВыбораФайла.Выбрать() Тогда
        Excel = Новый COMОбъект("Excel.Application");
        Books = Excel.WorkBooks;
        
        Попытка
          Book = Books.Open(ДиалогВыбораФайла.ПолноеИмяФайла);
        Исключение
          Предупреждение("Невозможно открыть файл "+ДиалогВыбораФайла.ПолноеИмяФайла+"!!!"+Символы.ПС+ОписаниеОшибки());
          Возврат;
        КонецПопытки;
        
        Попытка
          Sheet = Book.Sheets( 1 );
          ВсегоСтрок = Sheet.Cells(1,1).SpecialCells(11).Row;
          Колво = ВсегоСтрок - 1;
        Исключение
          Сообщить( "Не удалось открыть лист таблицы 1",
          СтатусСообщения.Внимание );
          Excel.Application.Quit();
          Возврат;
        КонецПопытки;
        Массив = Новый Массив;
        Массив.Добавить(Тип("Булево"));
        ОписаниеТиповБ = Новый ОписаниеТипов(Массив); < - не знаю нужно ли это, также
 
        ТЗЕксель = Новый ТаблицаЗначений;
        //ТЗЕксель.Колонки.Добавить("Загружать",ОписаниеТиповБ); комментарий ибо не знаю что за колонка
    ТЗЕксель.Колонки.Добавить("Проект");
        ТЗЕксель.Колонки.Добавить("ДоходРасход");
        ТЗЕксель.Колонки.Добавить("БлокЗатрат");
        ТЗЕксель.Колонки.Добавить("СтатьяЗатрат");
        ТЗЕксель.Колонки.Добавить("FirstQ");
        ТЗЕксель.Колонки.Добавить("SecondQ");
        ТЗЕксель.Колонки.Добавить("ThirthQ");        
        ТЗЕксель.Колонки.Добавить("FourthQ");
        ТЗЕксель.Колонки.Добавить("ИТОГО");
        
        
        Для НомерСтроки = 2 По ВсегоСтрок Цикл
          СтрокаТЗ = ТЗЕксель.Добавить();
          СтрокаТЗ.Проект = СокрЛП(Sheet.Cells(НомерСтроки, 1).text);  
          СтрокаТЗ.ДоходРасход = СокрЛП(Sheet.Cells(НомерСтроки, 2).text);
          СтрокаТЗ.БлокЗатрат = СокрЛП(Sheet.Cells(НомерСтроки, 3).text);
          СтрокаТЗ.СтатьяЗатрат = СокрЛП(Sheet.Cells(НомерСтроки, 4).text);
          СтрокаТЗ.FirstQ = СокрЛП(Sheet.Cells(НомерСтроки, 5).Value);
          СтрокаТЗ.SecondQ = СокрЛП(Sheet.Cells(НомерСтроки, 6).Value);
          СтрокаТЗ.ThirthQ = СокрЛП(Sheet.Cells(НомерСтроки, 7).Value);
          СтрокаТЗ.FourthQ = СокрЛП(Sheet.Cells(НомерСтроки, 8).Value);
          СтрокаТЗ.ИТОГО = СокрЛП(Sheet.Cells(НомерСтроки, 9).Value);
          КонецЦикла;
      Иначе
        Возврат;
      КонецЕсли;
      Excel.Application.Quit();
      
      ТабличноеПоле = ТЗЕксель.Скопировать();
      ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
    
КонецПроцедуры
0
Миниатюры
Планирование статей бюджетов и внешняя обработка  
GreenkA
Форумчанин
Эксперт 1С
2994 / 1920 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
08.10.2018, 16:35 8
LeMorales, Думаю, проблема в том, что у вас в файле основная таблица начинается не со 2 строки, а с 8
1C
1
Для НомерСтроки = 8 По ВсегоСтрок Цикл
0
LeMorales
2 / 2 / 1
Регистрация: 17.12.2013
Сообщений: 95
08.10.2018, 17:43  [ТС] 9
GreenkA, вот, код выглядит так
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
Процедура КнопкаВыполнитьНажатие(Кнопка)
    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
      
      ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
      ДиалогВыбораФайла.Фильтр    = "Табличный документ Лист Excel (*.xls,*.xlsx)|*.xls*";
        
      Если ДиалогВыбораФайла.Выбрать() Тогда
        Excel = Новый COMОбъект("Excel.Application");
        Books = Excel.WorkBooks;
        
        Попытка
          Book = Books.Open(ДиалогВыбораФайла.ПолноеИмяФайла);
        Исключение
          Предупреждение("Невозможно открыть файл "+ДиалогВыбораФайла.ПолноеИмяФайла+"!!!"+Символы.ПС+ОписаниеОшибки());
          Возврат;
        КонецПопытки;
        
        Попытка
          Sheet = Book.Sheets( 1 );
          ВсегоСтрок = Sheet.Cells(1,1).SpecialCells(11).Row;
          Колво = ВсегоСтрок - 1;
        Исключение
          Сообщить( "Не удалось открыть лист таблицы 1",
          СтатусСообщения.Внимание );
          Excel.Application.Quit();
          Возврат;
        КонецПопытки;
        Массив = Новый Массив;
        Массив.Добавить(Тип("Булево"));
        //ОписаниеТиповБ = Новый ОписаниеТипов(Массив);
 
        ТЗЕксель = Новый ТаблицаЗначений;
        //ТЗЕксель.Колонки.Добавить("Загружать",ОписаниеТиповБ);
        ТЗЕксель.Колонки.Добавить("Проект");
        ТЗЕксель.Колонки.Добавить("ДоходРасход");
        ТЗЕксель.Колонки.Добавить("БлокЗатрат");
        ТЗЕксель.Колонки.Добавить("СтатьяЗатрат");
        ТЗЕксель.Колонки.Добавить("Один");
        ТЗЕксель.Колонки.Добавить("Два");        
        ТЗЕксель.Колонки.Добавить("Три");
        ТЗЕксель.Колонки.Добавить("Четыре");
        ТЗЕксель.Колонки.Добавить("Итого");
        //ТЗЕксель.Колонки.Добавить("НДС");
        
        Для НомерСтроки = 8 По ВсегоСтрок Цикл
          СтрокаТЗ = ТЗЕксель.Добавить();
          СтрокаТЗ.Проект = СокрЛП(Sheet.Cells(НомерСтроки, 1).text);  
          СтрокаТЗ.ДоходРасход = СокрЛП(Sheet.Cells(НомерСтроки, 2).text);
          СтрокаТЗ.БлокЗатрат = СокрЛП(Sheet.Cells(НомерСтроки, 3).Value);
          СтрокаТЗ.СтатьяЗатрат = СокрЛП(Sheet.Cells(НомерСтроки, 4).Value);
          СтрокаТЗ.Один = СокрЛП(Sheet.Cells(НомерСтроки, 5).Value);
          СтрокаТЗ.Два = СокрЛП(Sheet.Cells(НомерСтроки, 6).Value);
          СтрокаТЗ.Три = СокрЛП(Sheet.Cells(НомерСтроки, 7).Value);
          СтрокаТЗ.Четыре = СокрЛП(Sheet.Cells(НомерСтроки, 8).Value);
          СтрокаТЗ.Итого = СокрЛП(Sheet.Cells(НомерСтроки, 9).Value);
          //к = к+1;
          //Процент = Цел(к/(Колво/100)+1);
          //Состояние("Чтение файла "+ Процент + " %");
        КонецЦикла;
      Иначе
        Возврат;
      КонецЕсли;
      Excel.Application.Quit();
      
      ТабличноеПоле = ТЗЕксель.Скопировать();
      ЭлементыФормы.ТабличноеПоле.СоздатьКолонки(); 
КонецПроцедуры
{ВнешняяОбработка.ВнутрішняОбробка.Форма.Форма1.Форма(48)}: Ошибка при вызове метода контекста (Cells)
СтрокаТЗ.Проект = СокрЛП(Sheet.Cells(НомерСтроки, 1).text);
по причине:
Неизвестная ошибка

и так почти на каждое название столбца "СтрокаТЗ. ..."
0
Xomych
679 / 600 / 91
Регистрация: 01.11.2012
Сообщений: 2,133
08.10.2018, 17:45 10
Подскажу тебе более простой способ
Все колонки тип - Строка в результирующей таблице значений

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
      
      ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
      ДиалогВыбораФайла.Фильтр    = "Табличный документ Лист Excel (*.xls,*.xlsx)|*.xls*";
        
      Если ДиалогВыбораФайла.Выбрать() Тогда
        Таб = Новый ТабличныйДокумент;
    Таб.Прочитать(ДиалогВыбораФайла.ПолноеИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Текст);
    
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Таб.Область(НомерПервойСтроки, 1, Таб.ВысотаТаблицы, Таб.ШиринаТаблицы));
        Построитель.Выполнить();
        ТЗ = Построитель.Результат.Выгрузить();
КонецЕсли;
0
LeMorales
2 / 2 / 1
Регистрация: 17.12.2013
Сообщений: 95
08.10.2018, 17:47  [ТС] 11
Xomych, спасибо
но,подскажите,какие строки я могу убрать тогда, вместо этих(я не сильно разбираюсь еще)?
0
Xomych
679 / 600 / 91
Регистрация: 01.11.2012
Сообщений: 2,133
08.10.2018, 17:56 12
LeMorales, Я практически всё написал, тебе осталось только на форме ТЗ отразить
0
LeMorales
2 / 2 / 1
Регистрация: 17.12.2013
Сообщений: 95
09.10.2018, 16:21  [ТС] 13
GreenkA, добрый день!
Я продвинулся совсем немного далее, столкнулся с такой проблемой:
Хочу считать информацию с трех ведущих полей, и поместить ее на элемент формы, за что получаю ошибку -
{ВнешняяОбработка.ВнутрішняОбробка.Форма.Форма1.Форма(49)}: Поле объекта недоступно для записи (Валюта)
ЭлементыФормы.Валюта = Валюта; }

1C
1
2
3
4
5
6
7
8
9
10
11
12
//ПОЛЕ ВАЛЮТА
        Валюта = СокрЛП(Sheet.Cells(1, 5).text);
        Валюта = Справочники.Валюты.НайтиПоНаименованию(Валюта);
        ЭлементыФормы.Валюта = Валюта; 
        
        //ПОЛЕ КУРС ДОЛЛАРА
        КурсДоллара = СокрЛП(Sheet.Cells(2, 5).Value);
        ЭлементыФормы.КурсДоллара = КурсДоллара;
        
        //ПОЛЕ КУРС ГРИВНЫ
        КурсГрн = СокрЛП(Sheet.Cells(3, 5).Value);
        ЭлементыФормы.КурсГрн = КурсГрн;
Я Вам скриншоты снова же прикрепил, посмотрите.

Буду благодарен ответу.
0
Миниатюры
Планирование статей бюджетов и внешняя обработка   Планирование статей бюджетов и внешняя обработка   Планирование статей бюджетов и внешняя обработка  

LeMorales
2 / 2 / 1
Регистрация: 17.12.2013
Сообщений: 95
09.10.2018, 16:33  [ТС] 14
Xomych, может вы подскажете ответ на последнее?
0
Xomych
679 / 600 / 91
Регистрация: 01.11.2012
Сообщений: 2,133
09.10.2018, 16:36 15
ЭлементыФормы.Валюта это элемент формы, а не реквизит формы

Тогда уж ЭтаФорма.Валюта, хотя так никто не пишет. Пиши просто Валюта


Через ЭлементыФормы.Валюта можно управлять например Видимостью или Доступностью этого элемента, устнавливать шрифты и т.д.
0
LeMorales
2 / 2 / 1
Регистрация: 17.12.2013
Сообщений: 95
09.10.2018, 17:37  [ТС] 16
Xomych, спасибо за ответ

я оставил вот так
1C
1
2
3
4
5
6
7
8
9
10
11
//ПОЛЕ ВАЛЮТА
        ВалютаПер = СокрЛП(Sheet.Cells(1, 5).text);
        Валюта = Справочники.Валюты.НайтиПоНаименованию(ВалютаПер);
                
        //ПОЛЕ КУРС ДОЛЛАРА
        КурсДоллара = СокрЛП(Sheet.Cells(2, 5).Value);      
        КурсДоллара = КурсДоллара;
                
        //ПОЛЕ КУРС ГРИВНЫ
        КурсГрн = СокрЛП(Sheet.Cells(3, 5).Value);
                КурсГрн = КурсГрн;
сказали что на данном этапе пускай так и будет

Добавлено через 45 секунд
Xomych, извините, еще вопрос к Вам..
Мне нужно, по заданию, как я понял, связать этот мой горе excel файл с Документом программно
То есть, у меня в excel есть некий реквизит Job Morion (см. рис. 1), но и в 1С он уже есть (см. рис. 2), а вот как их кодом связать.. эх
Зна что туго обьясняю, но лишь потому, что принципа понять не могу
Хотел бы от Вас получить ссылку на какую-то информацию по данному вопросу, с которой уже детально ознакомлюсь
0
09.10.2018, 17:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2018, 17:37

Внешняя обработка
1С Предприятие 8.2 Как из внешней обработки создать элемент в корень какого-нибудь справочника? (В...

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

1с: Документооборот 8.2 + Внешняя Обработка
Доброго времени суток, господа и дамы. На днях попалась задачка - создать для ДО обработку, на...


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

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

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