Имя: Пароль:
1C
1С v8
Пишу обработку загрузка данных в бух справку.(код)
0 anisa8310
 
04.12.12
09:15
1С:Предприятие 8.2 (8.2.16.368)
Бухгалтерия предприятия, редакция 2.0 (2.0.39.6)
для заполнения бух справки, файл так выглядет:  (TOYOTA CAMRY №12648|588673,8)-знак табуляции "|", всего одномерный массив [2] из двух  
Функция ПолучитьПоле(ВходСтрока,НомерПоля, Видразделителя)
   Перем Строка1, Строка2, НашеПоле;
   Перем Позиция1, Позиция2;
   Перем ДлинаРазд, ЧислоРазд;
   ДлинаРазд = СтрДлина(Видразделителя);
   ЧислоРазд = СтрЧислоВхождений(ВходСтрока,Видразделителя);
   Если (ЧислоРазд+1) < НомерПоля Тогда
       Сообщить("Номер поля за пределами строки!!!", СтатусСообщения.ОченьВажное);
       Возврат "ЭтоФигня"
   КонецЕсли;
   Колполей = 0;
   Строка1 = ВходСтрока;
   Для ии = 1 По ЧислоРазд Цикл
       Позиция1 = Найти(Строка1, Видразделителя);
       НашеПоле = Лев(Строка1, Позиция1-1);
       Если ии = НомерПоля Тогда
           Возврат НашеПоле;
       ИначеЕсли ии = ЧислоРазд Тогда
           НашеПоле = Сред(Строка1, Позиция1 + ДлинаРазд);
           Возврат НашеПоле;
       Иначе
           Строка1 = Сред(Строка1, Позиция1 + ДлинаРазд);
       КонецЕсли;
   КонецЦикла;
КонецФункции


Процедура КнопкаВыполнитьНажатие(Кнопка)
       

   Док = ПолучитьCOMОбъект(Путь);
   счСтроки = 1;
Пока Док.Sheets(1).Cells(счСтроки,1).Value <>Неопределено Цикл
   Стр=Док.Sheets(1).Cells(счСтроки,1).Value;    
   //////////////Формирование массива услуги    
   Массив = Новый Массив(2);
          Для Сч=1 По 2 Цикл
           Позиция = Найти(Стр, "|");
           Массив.Вставить(сч,Сред(Стр, 1, Позиция-1));
           стр = Сред(Стр, Позиция + 1);
          КонецЦикла;
       
   НовыйДокумент= Документы.ОперацияБух.СоздатьДокумент();
       //НовыйДокумент.Организация = Организация ;
 СчКт      = ПланыСчетов.Хозрасчетный.АрендованныеОсновныеСредства.Код;
           СубконтоКт1= Справочники.Контрагенты.НайтиПоКоду("000003173");
           СубконтоКт2= Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрЗаменить(Массив[1],Символ(34),""));
Сумма     = Массив[2];      
КонецЦикла;
НовыйДокумент.Записать();
счСтроки = счСтроки + 1;
Док.Application.Quit();

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


Процедура ВыбФайлНачалоВыбора(Элемент, СтандартнаяОбработка)
   // Вставить содержимое обработчика.
   ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   ДиалогВыбораФайла.Фильтр                  = "Текстовые файлы (*.csv)|*.csv";
   ДиалогВыбораФайла.Заголовок               = "Выберите файл для загрузки данных";
   ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
   ДиалогВыбораФайла.Расширение              ="csv";
   ДиалогВыбораФайла.ИндексФильтра           = 0;
   ДиалогВыбораФайла.ПолноеИмяФайла          = Путь;
   Если ДиалогВыбораФайла.Выбрать() Тогда
       Путь = ДиалогВыбораФайла.ПолноеИмяФайла;
   КонецЕсли;

КонецПроцедуры
1 anisa8310
 
04.12.12
09:15
не работает в чем дело..не понятно
2 IamAlexy
 
04.12.12
09:16
а счего оно должно работать?
движения ты где пишешь?
3 IamAlexy
 
04.12.12
09:17
внтури цикла делаешь

     
   НовыйДокумент= Документы.ОперацияБух.СоздатьДокумент();
 

затем снаружи цикла записываешь его :)

то есть в цикле 10 000 строк, сделалось 10 000 новых документов а записался 1  последний :) :)
4 IamAlexy
 
04.12.12
09:17
далее
сделав документ внутре цикла ты создаешь пару переменных в памяти и никуда их не записывешь.. и при новом витке ты эти перменные перезаписыаешь новыми значениями..
5 IamAlexy
 
04.12.12
09:18
ясен пень нихера работать не будет
6 IamAlexy
 
04.12.12
09:18
отвечаю только из за уважения к фотке в купальнике...
7 Галахад
 
гуру
04.12.12
09:23
Красотка!
8 боксер
 
04.12.12
09:29
хорошая фотка, я помню тоже в трудные времена под такими фотками релизы просил :-)
9 anisa8310
 
04.12.12
09:31
??? хм..спасибо
10 Sedoy
 
04.12.12
09:31
(8) Брился хоть...?
11 anisa8310
 
04.12.12
09:32
если цикл значит
12 anisa8310
 
04.12.12
09:35
Процедура КнопкаВыполнитьНажатие(Кнопка)
НовыйДокумент= Документы.ОперацияБух.СоздатьДокумент();        

   Док = ПолучитьCOMОбъект(Путь);
   счСтроки = 1;
Пока Док.Sheets(1).Cells(счСтроки,1).Value <>Неопределено Цикл
   Стр=Док.Sheets(1).Cells(счСтроки,1).Value;    
   //////////////Формирование массива услуги    
   Массив = Новый Массив(2);
          Для Сч=1 По 2 Цикл
           Позиция = Найти(Стр, "|");
           Массив.Вставить(сч,Сред(Стр, 1, Позиция-1));
           стр = Сред(Стр, Позиция + 1);
          КонецЦикла;
       
   
       
                                               СчКт      = ПланыСчетов.Хозрасчетный.АрендованныеОсновныеСредства.Код;
           СубконтоКт1= Справочники.Контрагенты.НайтиПоКоду("000003173");
           СубконтоКт2= Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрЗаменить(Массив[1],Символ(34),""));
Сумма     = Массив[2];      
КонецЦикла;
НовыйДокумент.Записать();
счСтроки = счСтроки + 1;
Док.Application.Quit();

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



Венесла из цикла НовыйДокумент= Документы.ОперацияБух.СоздатьДокумент();
 -все?
фото мое это я
13 hhhh
 
04.12.12
09:36
(12) ну тогда еще момент: Массив[2] - это не второй, а третий элемент массива.
14 Stim
 
04.12.12
09:39
..какая прекрасная женственная фигура..
15 cw014
 
04.12.12
09:46
Наверное так??? :

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();        
       Док = ПолучитьCOMОбъект(Путь);
   Для счСтроки = 1 По Док.Sheets(1).UsedRange.Rows.Count Цикл
       Стр=Док.Sheets(1).Cells(счСтроки,1).Value;    
       //////////////Формирование массива услуги    

       Массив = Новый Массив(2);
       Для Сч = 1 По 2 Цикл
           Позиция = Найти(Стр, "|");
           Массив.Вставить(сч,Сред(Стр, 1, Позиция-1));
           стр = Сред(Стр, Позиция + 1);
       КонецЦикла;
       
       Проводка = НовыйДокумент.Движения.Хозрасчетный.Добавить();
       Проводка.СчетКт = ПланыСчетов.Хозрасчетный.АрендованныеОсновныеСредства;
       Проводка.СубконтоКт.Контрагенты = Справочники.Контрагенты.НайтиПоКоду("000003173");
       Проводка.СубконтоКт.ОсновныеСредства = Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрЗаменить(Массив[0],Символ(34),""));
       Проводка.Сумма = Массив[1];
   КонецЦикла;
   
   НовыйДокумент.Записать();
   Док.Application.Quit();

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


P.S. (С) Bash.im
Элька: Олегин спасибо тебе огромное выручил
Элька: че с меня?
Oleg: Ты же знаешь - я с красивых девушек только натурой беру
Элька: ;)
Oleg: C тебя 500р
16 Lama12
 
04.12.12
09:46
(15) На месте девушки я б оскордился после такого :)
17 cw014
 
04.12.12
09:47
(16) Это не мое - это Баш
18 anisa8310
 
04.12.12
09:53
(10) точно...все все равно получиться..вот увидите) Спасибо)
19 anisa8310
 
04.12.12
17:03
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();
НовыйДокумент.Дата=ТекущаяДата();
       Док = ПолучитьCOMОбъект(Путь);
   Для счСтроки = 1 По Док.Sheets(1).UsedRange.Rows.Count Цикл
       Стр=Док.Sheets(1).Cells(счСтроки,1).Value;    
       //////////////Формирование массива услуги    


       Массив = Новый Массив(2);
       Для Сч = 1 По 2 Цикл
           Позиция = Найти(Стр, "|");
           Массив.Вставить(сч,Сред(Стр, 1, Позиция-1));
           стр = Сред(Стр, Позиция + 1);
       КонецЦикла;
       
       Проводка = НовыйДокумент.Движения.Хозрасчетный.Добавить();
       Проводка.СчетКт = ПланыСчетов.Хозрасчетный.АрендованныеОсновныеСредства;
       Проводка.СубконтоКт.Контрагенты = Справочники.Контрагенты.НайтиПоКоду("000003173");
       Проводка.СубконтоКт.ОсновныеСредства = Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрЗаменить(Массив[0],Символ(34),""));
       Проводка.Сумма = Массив[1];
   КонецЦикла;
   
   НовыйДокумент.Записать();
   Док.Application.Quit();
    Сообщить("Загрузка документов завершена !!!");
       СД=Документы.ОперацияБух.ПолучитьФормуСписка();

   
КонецПроцедуры
20 anisa8310
 
04.12.12
17:04
но вот ошибка новая теперь
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();
НовыйДокумент.Дата=ТекущаяДата();
       Док = ПолучитьCOMОбъект(Путь);
   Для счСтроки = 1 По Док.Sheets(1).UsedRange.Rows.Count Цикл
       Стр=Док.Sheets(1).Cells(счСтроки,1).Value;    
       //////////////Формирование массива услуги    


       Массив = Новый Массив(2);
       Для Сч = 1 По 2 Цикл
           Позиция = Найти(Стр, "|");
           Массив.Вставить(сч,Сред(Стр, 1, Позиция-1));
           стр = Сред(Стр, Позиция + 1);
       КонецЦикла;
       
       Проводка = НовыйДокумент.Движения.Хозрасчетный.Добавить();
       Проводка.СчетКт = ПланыСчетов.Хозрасчетный.АрендованныеОсновныеСредства;
       Проводка.СубконтоКт.Контрагенты = Справочники.Контрагенты.НайтиПоКоду("000003173");
       Проводка.СубконтоКт.ОсновныеСредства = Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрЗаменить(Массив[0],Символ(34),""));
       Проводка.Сумма = Массив[1];
   КонецЦикла;
   
   НовыйДокумент.Записать();
   Док.Application.Quit();
    Сообщить("Загрузка документов завершена !!!");
       СД=Документы.ОперацияБух.ПолучитьФормуСписка();

   
КонецПроцедуры
21 anisa8310
 
04.12.12
17:05
{Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (Записать)
   НовыйДокумент.Записать();
по причине:
Запись не верна! Период не может быть пустым! (Регистр бухгалтерии: Журнал проводок (бухгалтерский и налоговый учет); Номер строки: 1)
22 mikecool
 
04.12.12
17:06
(21) так заполни период!
23 anisa8310
 
04.12.12
17:07
Как? я ищу но пока не нашла-что это вообще такое
24 anisa8310
 
04.12.12
17:08
Процедура ПередЗаписью(Отказ, РежимЗаписи)
   Для Каждого МЗ Из ЭтотОбъект Цикл
       Если НачалоДня(МЗ.Период)='00010101' Тогда
           Сообщить("В проводке номер "+ЭтотОбъект.Индекс(МЗ)+1+" не указан период ", СтатусСообщения.Важное);
           ТЗ=ЭтотОбъект.Выгрузить();
           Стр=ТЗ[ЭтотОбъект.Индекс(МЗ)];
           Для Каждого Колонка Из ТЗ.Колонки Цикл
               Сообщить(Символы.Таб+Колонка.Имя+Символы.Таб+"="+Символы.Таб+Стр[Колонка.Имя]);
           КонецЦикла;
           ТЗ=0;
           Отказ=Истина;
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры
25 anisa8310
 
04.12.12
17:08
Все равно ругается
26 mikecool
 
04.12.12
17:08
(23)
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();
НовыйДокумент.Дата=ТекущаяДата();
       Док = ПолучитьCOMОбъект(Путь);
   Для счСтроки = 1 По Док.Sheets(1).UsedRange.Rows.Count Цикл
       Стр=Док.Sheets(1).Cells(счСтроки,1).Value;    
       //////////////Формирование массива услуги    



       Массив = Новый Массив(2);
       Для Сч = 1 По 2 Цикл
           Позиция = Найти(Стр, "|");
           Массив.Вставить(сч,Сред(Стр, 1, Позиция-1));
           стр = Сред(Стр, Позиция + 1);
       КонецЦикла;
       
       Проводка = НовыйДокумент.Движения.Хозрасчетный.Добавить();
       ПРОВОДКА.ПЕРИОД = ТЕКУЩАЯДАТА(); // ТИПА ТАК
       Проводка.СчетКт = ПланыСчетов.Хозрасчетный.АрендованныеОсновныеСредства;
       Проводка.СубконтоКт.Контрагенты = Справочники.Контрагенты.НайтиПоКоду("000003173");
       Проводка.СубконтоКт.ОсновныеСредства = Справочники.ОсновныеСредства.НайтиПоНаименованию(СтрЗаменить(Массив[0],Символ(34),""));
       Проводка.Сумма = Массив[1];
   КонецЦикла;
   
   НовыйДокумент.Записать();
   Док.Application.Quit();
    Сообщить("Загрузка документов завершена !!!");
       СД=Документы.ОперацияБух.ПолучитьФормуСписка();

   
КонецПроцедуры
27 anisa8310
 
04.12.12
17:09
так по строке надо-я не знала -сейчас попробую спасибо. я думала отдельну процу надо и под свои потребы как"Процедура ПередЗаписью(Отказ, РежимЗаписи)"
28 SeregaMW
 
04.12.12
17:11
(0) Я бы вдул!
29 mikecool
 
04.12.12
17:11
(27) обычно в модуле записей перед записью проверяется - если период не заполнен, то лепится текущая дата
30 anisa8310
 
04.12.12
17:13
(29) Теперь не ругается,  Сообщить("Загрузка документов завершена !!!");-сообщает))))но ничего нет с массивом буду разбираться теперь
31 ПиН
 
04.12.12
17:15
фотка супер, код ацтой! )))

(30) так выложи, что сейчас получилось...
32 anisa8310
 
04.12.12
17:15
вот это загрузить пытаюсь: TOYOTA CAMRY №12648|588673,8
33 anisa8310
 
04.12.12
17:16
наименование и сумма в док ОперацияБух
34 anisa8310
 
04.12.12
17:17
(31)так учимся загрузку писать
35 anisa8310
 
04.12.12
17:17
(30) нечего выкладывать документа даже в списке нет)))
36 mikecool
 
04.12.12
17:20
(35) дуй в отладчик и смотри что получается
37 anisa8310
 
04.12.12
17:24
(37)Хорошо... эх время то...позже за ребенком погнала в школу..результат выложу позже! Спасибо!
38 mikecool
 
04.12.12
17:24
(37) ранняя ты мамочка )))
39 anisa8310
 
04.12.12
17:25
ай нет даже не создал документ((((
40 anisa8310
 
04.12.12
17:25
так  точка останова стоит на месте(((
41 mikecool
 
04.12.12
17:25
я таки не понял - ребенок в школе ночует? )
42 anisa8310
 
04.12.12
17:25
на строке НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент(); F9нажимаю и ни с места
43 anisa8310
 
04.12.12
17:26
Ребенок-нет дома ночует))) сейчас в школе ещё -на танцах, после уроков основных
44 mikecool
 
04.12.12
17:27
(42) отладчик поломала оО
рестартани отладку
45 anisa8310
 
04.12.12
17:27
Байк мне подарила на днях! ))) http://vk.com/anisalatypova?z=photo19433951_292570115%2Fwall19433951_394
46 mikecool
 
04.12.12
17:28
(45) кто?
47 Stim
 
04.12.12
17:29
(45) там не фиксин на фотках? оО
48 anisa8310
 
04.12.12
17:29
Дочка моя
49 anisa8310
 
04.12.12
17:30
Короче не отлаживается( так и стоит на месте точка-останова рестартанула, не создает док. вот реализацию делала ранее-все отлично получилось а бух справка-никак не получается
50 anisa8310
 
04.12.12
17:31
(47) для меня это сузуки имазума 400)))
51 mikecool
 
04.12.12
17:31
(48) тебе дочка подарила байк?
зы: фото не смотрел, недоступно
52 anisa8310
 
04.12.12
17:31
игрушечный)))))
53 anisa8310
 
04.12.12
17:32
Я просто оч люблю мото
54 anisa8310
 
04.12.12
17:32
а 1с не очень..не отлаживается,  зараза, скоро продолжу. спасибо!
55 anisa8310
 
05.12.12
16:33
Процедура КнопкаВыполнитьНажатие(Кнопка)
//Создаю регистратор    
НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();
НовыйДокумент.Дата=ТекущаяДата();
НовыйДокумент.Организация=Справочники.Организации.НайтиПоКоду("000000001");
НовыйДокумент.Содержание="Загрузка";
НовыйДокумент.Записать();
НовыйДокументСсылка = НовыйДокумент.Ссылка;

//Получаю файл для загрузки

Док = ПолучитьCOMОбъект(Путь);
   Для счСтроки = 1 По Док.Sheets(1).UsedRange.Rows.Count Цикл
       Стр=Док.Sheets(1).Cells(счСтроки,1).Value;    
       //////////////Формирование массива услуги    




       Массив = Новый Массив(2);
       Для Сч = 1 По 2 Цикл
           Позиция = Найти(Стр, "|");
           Массив.Вставить(сч,Сред(Стр, 1, Позиция-1));
           стр = Сред(Стр, Позиция + 1);
       КонецЦикла;
       
       Проводка = НовыйДокумент.Движения.Хозрасчетный.Добавить();
       ПРОВОДКА.ПЕРИОД = ТЕКУЩАЯДАТА(); // ТИПА ТАК

       Проводка.СчетКт = ПланыСчетов.Хозрасчетный.АрендованныеОсновныеСредства;
       Проводка.СубконтоКт.Контрагенты = Справочники.Контрагенты.НайтиПоКоду("000003173");
       Проводка.СубконтоКт.ОсновныеСредства = Справочники.ОсновныеСредства.НайтиПоКоду(СтрЗаменить(Массив[1],Символ(34),""));
       Проводка.Сумма = Массив[2];
   КонецЦикла;
   
   НовыйДокумент.Записать();
   Док.Application.Quit();
    Сообщить("Загрузка документов завершена !!!");
       СД=Документы.ОперацияБух.ПолучитьФормуСписка();

 
   КонецПроцедуры
56 anisa8310
 
05.12.12
16:34
Как и обещала) говорила же все получиться) потом отрываю док ставлю опер в ручную, проверяю и провожу) в регистрах движение происходит) Спасибо мои дорогие Мистеры!
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший