Имя: Пароль:
1C
1С v8
обработка Корректировка записей регистров
,
0 amadeus2010
 
24.04.12
17:00
Добрый вечер, помогите пожалуйста решить такой вопрос. Надо в табличную часть документа сбросить данные полученные из Акцес. для этого я создал обработку в которую загружаются данные из Акцесс. Далее создается документ, но строки документа не заполняются данными из табличной части обработки.Привожу код
Процедура ОсновныеДействияФормыЗагрузитьТаблицу(Кнопка)
   Файл = "D:\Продажи и возвраты за прошлый период.mdb" ;
   СтрокаПодключения = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" + Файл + ";""";
 

   Connection = Новый COMОбъект("ADODB.Connection");
   Попытка
      Connection.Open(СтрокаПодключения);
   Исключение
      Сообщить(ОписаниеОшибки());
      Возврат;
   КонецПопытки;
      Command = Новый COMОбъект("ADODB.Command");

   Command.ActiveConnection = Connection;
   Command.CommandText = "SELECT * FROM SALES_RETURNS";
   Command.CommandType = 1;
   RecordSet = Новый COMОбъект("ADODB.RecordSet");
   RecordSet = Command.Execute();
   стр ="";
     Пока НЕ RecordSet.EOF()  Цикл
         для н=0 по  Recordset.Fields.Count -1 цикл
             
          стр = стр + " " + Recordset.Fields(н).Value;
       КонецЦикла;
     Сообщить(стр);
           стр ="";
         ЗаполнитьДокумент(Recordset);
      RecordSet.MoveNext();
     КонецЦикла;
  RecordSet.Close();
   Connection.Close();

Процедура ЗаполнитьДокумент(СтрокаДанных)
   перем ПоследняяДата; // создание документов по последней дате из списка
   
   Док=Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
   Док.Дата=СтрокаДанных.Fields(0).Value;
   СтрокаПродажи =Док.Движения.Продажи.Добавить();
   СтрокаПродажи.Период = СтрокаДанных.Fields(0).Value;
   СтрокаПродажи.Контрагент=СтрокаДанных.Fields(1).Value;
   СтрокаПродажи.Номенклатура=СтрокаДанных.Fields(3).Value;
   СтрокаПродажи.Количество=СтрокаДанных.Fields(4).Value;
   СтрокаПродажи.Стоимость=СтрокаДанных.Fields(5).Value;
   Док.Записать();

В табличном поле обработке имеются следующие поля:
Период,контрагент,количество,сумма.
Пытаюсь создать автоматом документ Корректировка записей регистров
1 КМ155
 
24.04.12
17:03
(0) MyCon = Новый COMОбъект ("ADODB.Connection");
   MyCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\1.MDB");

дальше читать не стал
2 Ирис_яркая
 
24.04.12
17:08
(1) а что так?
3 amadeus2010
 
24.04.12
17:09
верхний код был взят с одного из форумов. Подключение к Акцесу происходит, данные выгружаются из таблицы. А какое отличие между
Файл = "D:\Продажи и возвраты за прошлый период.mdb" ;
   СтрокаПодключения = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" + Файл + ";""";
 

   Connection = Новый COMОбъект("ADODB.Connection");
и MyCon = Новый COMОбъект ("ADODB.Connection");
   MyCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\1.MDB");
4 amadeus2010
 
24.04.12
17:14
далее по коду я тоже ссылаюсь на строку подключения
Файл = "D:\Продажи и возвраты за прошлый период.mdb" ;
   СтрокаПодключения = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" + Файл + ";""";
 

   Connection = Новый COMОбъект("ADODB.Connection");
   Попытка
       Connection.Open(СтрокаПодключения);
5 Buster007
 
24.04.12
17:16
платформа какая?
6 Ахиллес
 
24.04.12
17:16
СтрокаДанных в отладчике проверял? Что там находится?
7 amadeus2010
 
24.04.12
17:17
8.1.15.14 конфигурация УПП 1.2
8 amadeus2010
 
24.04.12
17:19
Recordset.Fields(н).Value-одно из значений строк таблицы
9 Buster007
 
24.04.12
17:19
в ЗаполнитьДокумент заходит?
10 Ахиллес
 
24.04.12
17:25
(8) Тогда сделай проще. Если документов не много, то переделай на обработку по заполнению уже существующего документа. Юзер создаёт ручками пустой документ корректировки, а обработка его заполняет. По колхозному конечно, зато работает.
11 amadeus2010
 
24.04.12
17:25
да заходит, вопрос заключается в том как вывести строки таблицы из акцесс в строки табличной части обработки
12 amadeus2010
 
24.04.12
17:27
пустой документ создается и внизу через Сообщить() заполняет данными таблицы , а мне надо эти данные в готовые поля записать. Документов много весь 2011-апрель2012.
13 amadeus2010
 
25.04.12
07:56
ау есть кто-нибудь
14 John83
 
25.04.12
14:42
как бы пример

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    НДСРеализация0Остатки.Организация,
|    НДСРеализация0Остатки.Состояние,
|    НДСРеализация0Остатки.СчетФактура,
|    НДСРеализация0Остатки.ВидЦенности,
|    НДСРеализация0Остатки.СтавкаНДС,
|    НДСРеализация0Остатки.Покупатель,
|    -НДСРеализация0Остатки.СуммаБезНДСОстаток КАК СуммаБезНДС,
|    -НДСРеализация0Остатки.НДСОстаток КАК НДС,
|    -НДСРеализация0Остатки.КурсоваяРазницаОстаток КАК КурсоваяРазница
|ИЗ
|    РегистрНакопления.НДСРеализация0.Остатки(&ДатаНач, СчетФактура.Дата < &Дата) КАК НДСРеализация0Остатки
|
|УПОРЯДОЧИТЬ ПО
|    НДСРеализация0Остатки.СчетФактура.Дата
|АВТОУПОРЯДОЧИВАНИЕ";


Запрос.УстановитьПараметр("Дата", НачалоГода(Регистратор.Дата));
Запрос.УстановитьПараметр("ДатаНач", НачалоКвартала(Регистратор.Дата));
Выборка = Запрос.Выполнить().Выбрать();    
Док = Регистратор.ПолучитьОбъект();
ДвиженияДок = Док.Движения;
Регистры = Док.ТаблицаРегистровНакопления.Добавить();
Регистры.Имя = "НДСРеализация0";
Регистры.Представление = "НДСРеализация0";
НДСРеализация0 = ДвиженияДок.НДСРеализация0;

Пока Выборка.Следующий() Цикл
   СтрокиТаблицы = НДСРеализация0.Добавить();
   ЗаполнитьЗначенияСвойств(СтрокиТаблицы, Выборка);
   СтрокиТаблицы.ВидДвижения = ВидДвиженияНакопления.Приход;
   СтрокиТаблицы.Период = Регистратор.Дата;
КонецЦикла;    

Док.Записать();
15 amadeus2010
 
25.04.12
15:14
добрый день спасибо за пример,я пошел другим путем и сделал вот так

СледующаяДата=ТекущаяДата();
Если СледующаяДата>Док.Дата Тогда
Док = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
   ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(Док.ЭтотОбъект, ПараметрыСеанса.ТекущийПользователь);
   Док.Дата=СтрокаДанных.Fields(0).Value;
   Док.Ответственный=УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный");
   Док.Комментарий="Документ создан при помощи обработки Корректировка записей регистров";
   //Док.ИспользоватьЗаполнениеДвижений=Истина;
   
   //СтрокаПродажи =Док.Движения.Продажи.Добавить();
   СтрокаПродажи=Док.ТаблицаРегистровНакопления.Добавить();
   СтрокаПродажи.Имя="Продажи";
   СтрокаПродажи.Представление="Продажи";
   Док.Записать();
   
   ДокСсылка=Док.Ссылка;
   НЗПродажи=РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
   НЗПродажи.Отбор.Регистратор.Значение=ДокСсылка;
   ЗПродажи=НЗПродажи.Добавить();
   ЗПродажи.Период= СтрокаДанных.Fields(0).Value;
   ЗПродажи.Регистратор=ДокСсылка;
   ЗПродажи.Организация=Справочники.Организации.НайтиПоКоду("000000001");
   ЗПродажи.Контрагент=ОбщегоНазначения.ПолучитьКонтрагентаПоКодуОракл(Формат(СтрокаДанных.Fields(1).Value,"ЧГ=0"));
   ЗПродажи.Номенклатура=ОбщегоНазначения.ПолучитьНоменклатуруПоКодуОракл(Формат(СтрокаДанных.Fields(3).Value,"ЧГ=0"));
   ЗПродажи.Количество=СтрокаДанных.Fields(4).Value;
   ЗПродажи.Стоимость=СтрокаДанных.Fields(5).Value;
   ЗПродажи.СтоимостьБезСкидок=СтрокаДанных.Fields(5).Value;

   ЗПродажи.Активность=Истина;
   
   НЗПродажи.Записать();
КонецЕсли;
теперь хочу сделать так чтобы при смене даты создавался новый документ,т.е новый документ на каждый день.
16 amadeus2010
 
25.04.12
15:42
ау,ау?