Имя: Пароль:
1C
1С v8
Запись в файл DBF
0 доброф
 
20.11.12
09:34
Делаю выгрузку в файл DBF, изначально делал все под толстым клиентом и все работало на клиенте, теперь сказали переделать под тонкий клиент, перенес процедуру на сервер теперь вылетают ошибки. Сначала была ошибка при вызове метода  ФайлНоменклатура.Добавить();
После изучения ошибки и некоторых преобразований, эта ошибка ушла но появилась другая: {Форма.Форма.Форма(105)}: Ошибка при вызове метода контекста (СоздатьФайл)
          ФайлНоменклатура.СоздатьФайл(ФайлДляВыгрузки);
по причине:
Не определена структура базы


1С 8.2, конфигурация самописная.

&НаСервере
Процедура    Выгрузить2();
   ИмяФайлаДляВыгрузки = "Adonent"+ТекущаяДата();
   ФайлНоменклатура = Новый XBase;
   ФайлНоменклатура.Кодировка = КодировкаXBase.OEM;
   ФайлНоменклатура.поля.Добавить("Code", "S", 20);
   ФайлНоменклатура.поля.Добавить("AcnVDGO","S",20);
   ФайлНоменклатура.поля.Добавить("Name","S",60);
   ФайлНоменклатура.поля.Добавить("Subject","S",100);
   ФайлНоменклатура.поля.Добавить("CtyCode","S",20);
   ФайлНоменклатура.поля.Добавить("CtyType","S",20);
   ФайлНоменклатура.поля.Добавить("CtyName","S",60);
   ФайлНоменклатура.поля.Добавить("SrtCode","S",20);
   ФайлНоменклатура.поля.Добавить("SrtType","S",20);
   ФайлНоменклатура.поля.Добавить("SrtName","S",60);
   ФайлНоменклатура.поля.Добавить("House","S",20);
   ФайлНоменклатура.поля.Добавить("Corpus","S",20);
   ФайлНоменклатура.поля.Добавить("Hlat","S",20);
   ФайлНоменклатура.поля.Добавить("CutStart","D");
   ФайлНоменклатура.поля.Добавить("CutReason","S",40);
   ФайлНоменклатура.поля.Добавить("CutMode","S",40);
   ФайлНоменклатура.поля.Добавить("CutFinish","D");

         
   КороткоеИмяФайлаДляВыгрузки = Лев(ИмяФайлаДляВыгрузки,8) + ".dbf";
   ФайлДляВыгрузки = "D:" + "\" + КороткоеИмяФайлаДляВыгрузки;
       
   ФайлНоменклатура.СоздатьФайл(ФайлДляВыгрузки);

   ФайлНоменклатура.Записать();
  ФайлНоменклатура.ОткрытьФайл(ФайлДляВыгрузки);
       Если Не ФайлНоменклатура.Открыта() Тогда
          ФайлНоменклатура.СоздатьФайл(ФайлДляВыгрузки);
       КонецЕсли;

   ФайлНоменклатура.АвтоСохранение = Истина;

   
   Запрос = Новый Запрос;
 
   Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |КонтактнаяИнформация.Объект.Код КАК КодАбонента,
   |""   "" КАК ЛицевойСчетВДГО,
   |КонтактнаяИнформация.Объект.Наименование КАК ФИОАбонента,
   |КонтактнаяИнформация.Объект.Подразделения.Наименование КАК АбонентскийПункт,
   |ВЫРАЗИТЬ(КонтактнаяИнформация.КодПоКЛАДР / 10000000000000 КАК ЧИСЛО(12, 0)) КАК КодНаселенногоПункта,
   |ВЫБОР
   |КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%г.%""
   |    ТОГДА КонтактнаяИнформация.Город.Сокращение
   |КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%п.%""
   |    ТОГДА КонтактнаяИнформация.НаселенныйПункт.Сокращение
   |КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%с.%""
   |    ТОГДА КонтактнаяИнформация.НаселенныйПункт.Сокращение
   |КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%х.%""
   |    ТОГДА КонтактнаяИнформация.НаселенныйПункт.Сокращение
   |КОНЕЦ КАК ТипНасенногоПункта,
   |ВЫБОР
   |    КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%г.%""
   |        ТОГДА КонтактнаяИнформация.Город.Наименование
   |    ИНАЧЕ КонтактнаяИнформация.НаселенныйПункт.Наименование
   |КОНЕЦ КАК НаименованиеНаселенногоПункта,
   |КонтактнаяИнформация.КодПоКЛАДР / 100000000 КАК КодУлицыПоКладр,
   |КонтактнаяИнформация.Улица.Сокращение КАК ТипУлицы,
   |КонтактнаяИнформация.Улица.Наименование КАК НаименованиеУлицы,
   |КонтактнаяИнформация.Дом КАК Дом,
   |КонтактнаяИнформация.Корпус КАК Корпус,
   |КонтактнаяИнформация.Квартира КАК Квартира,
   |ДатаОтключения.Период КАК ДатаОтключения,
   |СпособОтключения.ПричинаОтключенияНаименование КАК ПричинаОтключения,
   |СпособОтключения.Поле1 КАК СпособОтключения,
   |ДатаПодключения.Период КАК ДатаПодключения
|ИЗ
   |РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
   |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |        СостояниеПодключениеАбонентаСрезПоследних.СостояниеПодключения КАК СостояниеПодключения,
   |        СостояниеПодключениеАбонентаСрезПоследних.Период КАК Период,
   |        СостояниеПодключениеАбонентаСрезПоследних.Абонент.Ссылка КАК АбонентСсылка
   |    ИЗ
   |        РегистрСведений.СостояниеПодключениеАбонента.СрезПоследних КАК СостояниеПодключениеАбонентаСрезПоследних
   |    ГДЕ
   |        СостояниеПодключениеАбонентаСрезПоследних.СостояниеПодключения = ЗНАЧЕНИЕ(Перечисление.СостоянияПодключенияАбонента.Отключен)) КАК ДатаОтключения
   |    ПО КонтактнаяИнформация.Объект.Ссылка = ДатаОтключения.АбонентСсылка.Ссылка
   |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |        СостояниеПодключениеАбонента.Период КАК Период,
   |        СостояниеПодключениеАбонента.Абонент.Ссылка КАК АбонентСсылка,
   |        СостояниеПодключениеАбонента.СостояниеПодключения КАК СостояниеПодключения
   |    ИЗ
   |        РегистрСведений.СостояниеПодключениеАбонента КАК СостояниеПодключениеАбонента
   |    ГДЕ
   |        СостояниеПодключениеАбонента.СостояниеПодключения = ЗНАЧЕНИЕ(Перечисление.СостоянияПодключенияАбонента.Подключен)) КАК ДатаПодключения
   |    ПО КонтактнаяИнформация.Объект.Ссылка = ДатаПодключения.АбонентСсылка.Ссылка
   |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
   |        ВЫБОР
   |            КОГДА ВзаиморасчетыВДГО.УслугаНаселению.Наименование ПОДОБНО ""%сварка%""
   |                ТОГДА ""Сварка""
   |            КОГДА ВзаиморасчетыВДГО.УслугаНаселению.Наименование ПОДОБНО ""%Заглушка%""
   |                ТОГДА ""Загулшка""
   |            КОГДА ВзаиморасчетыВДГО.УслугаНаселению.Наименование ПОДОБНО ""%УЗУ%""
   |                ТОГДА ""Установка УЗУ/УБК""
   |            ИНАЧЕ ""Прочее""
   |        КОНЕЦ КАК Поле1,
   |        ВзаиморасчетыВДГО.Абонент.Ссылка КАК АбонентСсылка,
   |        ВложенныйЗапрос.ПричинаОтключенияНаименование КАК ПричинаОтключенияНаименование
   |    ИЗ
   |        РегистрНакопления.ВзаиморасчетыВДГО КАК ВзаиморасчетыВДГО
   |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеПодключениеАбонента.СрезПоследних КАК СостояниеПодключениеАбонентаСрезПоследних
   |                ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |                    ИзменениеСостоянияПодключенияАбонента.Абонент.Ссылка КАК АбонентСсылка,
   |                    ИзменениеСостоянияПодключенияАбонента.ПричинаОтключения.Наименование КАК ПричинаОтключенияНаименование
   |                ИЗ
   |                    Документ.ИзменениеСостоянияПодключенияАбонента КАК ИзменениеСостоянияПодключенияАбонента
   |                ГДЕ
   |                    ИзменениеСостоянияПодключенияАбонента.ПричинаОтключения.Наименование ЕСТЬ НЕ NULL ) КАК ВложенныйЗапрос
   |                ПО СостояниеПодключениеАбонентаСрезПоследних.Абонент.Ссылка = ВложенныйЗапрос.АбонентСсылка.Ссылка
   |            ПО ВзаиморасчетыВДГО.Абонент.Ссылка = СостояниеПодключениеАбонентаСрезПоследних.Абонент.Ссылка) КАК СпособОтключения
   |    ПО КонтактнаяИнформация.Объект.Ссылка = СпособОтключения.АбонентСсылка.Ссылка
|ГДЕ
   |КонтактнаяИнформация.ТипКонтактнойИнформации = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
   | и КонтактнаяИнформация.Объект.ДатаЗакрытия ЕСТЬ НЕ NULL";        
             
       
           Выборка = Запрос.Выполнить().Выбрать();
                                 
           Пока Выборка.Следующий()Цикл
             
              ФайлНоменклатура.Code = Выборка.КодАбонента;
              ФайлНоменклатура.AcnVDGO = Выборка.ЛицевойСчетВДГО;
               ФайлНоменклатура.Name = Выборка.ФИОАбонента;
               ФайлНоменклатура.Subject = Выборка.АбонентскийПункт;
               ФайлНоменклатура.CtyCode = СТРОКА(Выборка.КодНаселенногоПункта);
                ФайлНоменклатура.CtyType = Выборка.ТипНасенногоПункта;
                 ФайлНоменклатура.CtyName = Выборка.НаименованиеНаселенногоПункта;
                  ФайлНоменклатура.SrtType = СТРОКА(Выборка.КодУлицыПоКладр);
                   ФайлНоменклатура.SrtCode = Выборка.ТипУлицы;
                    ФайлНоменклатура.SrtName = Выборка.НаименованиеУлицы;
                     ФайлНоменклатура.House = Выборка.Дом;
                      ФайлНоменклатура.Corpus = Выборка.Корпус;
                       ФайлНоменклатура.Hlat = Выборка.Квартира;
                        ФайлНоменклатура.CutStart = Выборка.ДатаОтключения;
                         ФайлНоменклатура.CutReason = Выборка.ПричинаОтключения;
                          ФайлНоменклатура.CutMode = Выборка.СпособОтключения;
                           ФайлНоменклатура.CutFinish = Выборка.ДатаПодключения;
                      ФайлНоменклатура.Добавить();

               ФайлНоменклатура.Записать();
           КонецЦикла;
       
      ФайлНоменклатура.ЗакрытьФайл();

КонецПроцедуры
1 Ёпрст
 
гуру
20.11.12
09:36
ФайлНоменклатура.Добавить();
надо раньше
2 zulu_mix
 
20.11.12
09:36
зачем такой изврат? компонуй на сервере ТЗ с полями примитивного типа, после пиши эту ТЗ в ДБФ
3 Волесвет
 
20.11.12
09:37
под тонким на диск д посылать? а он точно знает где этот д??
4 vmv
 
20.11.12
09:37
ну что тебе сказать?

изучай контекст исполнения кажого метода дроби аглогитм на клинет и сервер - все

а копаться в тонкостях твоих идей зачем?
5 vmv
 
20.11.12
09:38
ФайлДляВыгрузки = "D:" + "\" + КороткоеИмяФайлаДляВыгрузки;

это будет путь на сервере, учти
6 zulu_mix
 
20.11.12
09:41
+(2) передавай ТЗ с сервера на клиент и пиши дбф на клиенте
7 доброф
 
20.11.12
14:18
Сообщить выбока?
8 доброф
 
20.11.12
14:18
Ой выборка)
9 доброф
 
20.11.12
14:20
Возврат все же наверно
10 доброф
 
20.11.12
14:29
&НаКлиенте
Процедура    Выгрузить1(Команда)
   Выгрузить2();
   
    ИмяФайлаДляВыгрузки = "Adonent"+ТекущаяДата();
   ФайлНоменклатура = Новый XBase;
   ФайлНоменклатура.Кодировка = КодировкаXBase.OEM;
   ФайлНоменклатура.поля.Добавить("Code", "S", 20);
   ФайлНоменклатура.поля.Добавить("AcnVDGO","S",20);
   ФайлНоменклатура.поля.Добавить("Name","S",60);
   ФайлНоменклатура.поля.Добавить("Subject","S",100);
   ФайлНоменклатура.поля.Добавить("CtyCode","S",20);
   ФайлНоменклатура.поля.Добавить("CtyType","S",20);
   ФайлНоменклатура.поля.Добавить("CtyName","S",60);
   ФайлНоменклатура.поля.Добавить("SrtCode","S",20);
   ФайлНоменклатура.поля.Добавить("SrtType","S",20);
   ФайлНоменклатура.поля.Добавить("SrtName","S",60);
   ФайлНоменклатура.поля.Добавить("House","S",20);
   ФайлНоменклатура.поля.Добавить("Corpus","S",20);
   ФайлНоменклатура.поля.Добавить("Hlat","S",20);
   ФайлНоменклатура.поля.Добавить("CutStart","D");
   ФайлНоменклатура.поля.Добавить("CutReason","S",40);
   ФайлНоменклатура.поля.Добавить("CutMode","S",40);
   ФайлНоменклатура.поля.Добавить("CutFinish","D");

         
   КороткоеИмяФайлаДляВыгрузки = Лев(ИмяФайлаДляВыгрузки,8) + ".dbf";
   ФайлДляВыгрузки = "D:" + "\" + КороткоеИмяФайлаДляВыгрузки;
       
   ФайлНоменклатура.СоздатьФайл(ФайлДляВыгрузки);

   ФайлНоменклатура.АвтоСохранение = Истина;

    Выборка =  Выгрузить2();
                         
           Пока Выборка.Следующий()Цикл
              ФайлНоменклатура.Добавить();
              ФайлНоменклатура.Code = Выборка.КодАбонента;
              ФайлНоменклатура.AcnVDGO = Выборка.ЛицевойСчетВДГО;
               ФайлНоменклатура.Name = Выборка.ФИОАбонента;
               ФайлНоменклатура.Subject = Выборка.АбонентскийПункт;
               ФайлНоменклатура.CtyCode = СТРОКА(Выборка.КодНаселенногоПункта);
                ФайлНоменклатура.CtyType = Выборка.ТипНасенногоПункта;
                 ФайлНоменклатура.CtyName = Выборка.НаименованиеНаселенногоПункта;
                  ФайлНоменклатура.SrtType = СТРОКА(Выборка.КодУлицыПоКладр);
                   ФайлНоменклатура.SrtCode = Выборка.ТипУлицы;
                    ФайлНоменклатура.SrtName = Выборка.НаименованиеУлицы;
                     ФайлНоменклатура.House = Выборка.Дом;
                      ФайлНоменклатура.Corpus = Выборка.Корпус;
                       ФайлНоменклатура.Hlat = Выборка.Квартира;
                        ФайлНоменклатура.CutStart = Выборка.ДатаОтключения;
                         ФайлНоменклатура.CutReason = Выборка.ПричинаОтключения;
                          ФайлНоменклатура.CutMode = Выборка.СпособОтключения;
                           ФайлНоменклатура.CutFinish = Выборка.ДатаПодключения;
                     

               ФайлНоменклатура.Записать();
           КонецЦикла;
       
      ФайлНоменклатура.ЗакрытьФайл();

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

&НаСервере
функция Выгрузить2();
   
   
   Запрос = Новый Запрос;
 
   Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
   |КонтактнаяИнформация.Объект.Код КАК КодАбонента,
   |""   "" КАК ЛицевойСчетВДГО,
   |КонтактнаяИнформация.Объект.Наименование КАК ФИОАбонента,
   |КонтактнаяИнформация.Объект.Подразделения.Наименование КАК АбонентскийПункт,
   |ВЫРАЗИТЬ(КонтактнаяИнформация.КодПоКЛАДР / 10000000000000 КАК ЧИСЛО(12, 0)) КАК КодНаселенногоПункта,
   |ВЫБОР
   |КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%г.%""
   |    ТОГДА КонтактнаяИнформация.Город.Сокращение
   |КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%п.%""
   |    ТОГДА КонтактнаяИнформация.НаселенныйПункт.Сокращение
   |КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%с.%""
   |    ТОГДА КонтактнаяИнформация.НаселенныйПункт.Сокращение
   |КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%х.%""
   |    ТОГДА КонтактнаяИнформация.НаселенныйПункт.Сокращение
   |КОНЕЦ КАК ТипНасенногоПункта,
   |ВЫБОР
   |    КОГДА КонтактнаяИнформация.Представление ПОДОБНО ""%г.%""
   |        ТОГДА КонтактнаяИнформация.Город.Наименование
   |    ИНАЧЕ КонтактнаяИнформация.НаселенныйПункт.Наименование
   |КОНЕЦ КАК НаименованиеНаселенногоПункта,
   |КонтактнаяИнформация.КодПоКЛАДР / 100000000 КАК КодУлицыПоКладр,
   |КонтактнаяИнформация.Улица.Сокращение КАК ТипУлицы,
   |КонтактнаяИнформация.Улица.Наименование КАК НаименованиеУлицы,
   |КонтактнаяИнформация.Дом КАК Дом,
   |КонтактнаяИнформация.Корпус КАК Корпус,
   |КонтактнаяИнформация.Квартира КАК Квартира,
   |ДатаОтключения.Период КАК ДатаОтключения,
   |СпособОтключения.ПричинаОтключенияНаименование КАК ПричинаОтключения,
   |СпособОтключения.Поле1 КАК СпособОтключения,
   |ДатаПодключения.Период КАК ДатаПодключения
|ИЗ
   |РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
   |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |        СостояниеПодключениеАбонентаСрезПоследних.СостояниеПодключения КАК СостояниеПодключения,
   |        СостояниеПодключениеАбонентаСрезПоследних.Период КАК Период,
   |        СостояниеПодключениеАбонентаСрезПоследних.Абонент.Ссылка КАК АбонентСсылка
   |    ИЗ
   |        РегистрСведений.СостояниеПодключениеАбонента.СрезПоследних КАК СостояниеПодключениеАбонентаСрезПоследних
   |    ГДЕ
   |        СостояниеПодключениеАбонентаСрезПоследних.СостояниеПодключения = ЗНАЧЕНИЕ(Перечисление.СостоянияПодключенияАбонента.Отключен)) КАК ДатаОтключения
   |    ПО КонтактнаяИнформация.Объект.Ссылка = ДатаОтключения.АбонентСсылка.Ссылка
   |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |        СостояниеПодключениеАбонента.Период КАК Период,
   |        СостояниеПодключениеАбонента.Абонент.Ссылка КАК АбонентСсылка,
   |        СостояниеПодключениеАбонента.СостояниеПодключения КАК СостояниеПодключения
   |    ИЗ
   |        РегистрСведений.СостояниеПодключениеАбонента КАК СостояниеПодключениеАбонента
   |    ГДЕ
   |        СостояниеПодключениеАбонента.СостояниеПодключения = ЗНАЧЕНИЕ(Перечисление.СостоянияПодключенияАбонента.Подключен)) КАК ДатаПодключения
   |    ПО КонтактнаяИнформация.Объект.Ссылка = ДатаПодключения.АбонентСсылка.Ссылка
   |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
   |        ВЫБОР
   |            КОГДА ВзаиморасчетыВДГО.УслугаНаселению.Наименование ПОДОБНО ""%сварка%""
   |                ТОГДА ""Сварка""
   |            КОГДА ВзаиморасчетыВДГО.УслугаНаселению.Наименование ПОДОБНО ""%Заглушка%""
   |                ТОГДА ""Загулшка""
   |            КОГДА ВзаиморасчетыВДГО.УслугаНаселению.Наименование ПОДОБНО ""%УЗУ%""
   |                ТОГДА ""Установка УЗУ/УБК""
   |            ИНАЧЕ ""Прочее""
   |        КОНЕЦ КАК Поле1,
   |        ВзаиморасчетыВДГО.Абонент.Ссылка КАК АбонентСсылка,
   |        ВложенныйЗапрос.ПричинаОтключенияНаименование КАК ПричинаОтключенияНаименование
   |    ИЗ
   |        РегистрНакопления.ВзаиморасчетыВДГО КАК ВзаиморасчетыВДГО
   |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеПодключениеАбонента.СрезПоследних КАК СостояниеПодключениеАбонентаСрезПоследних
   |                ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |                    ИзменениеСостоянияПодключенияАбонента.Абонент.Ссылка КАК АбонентСсылка,
   |                    ИзменениеСостоянияПодключенияАбонента.ПричинаОтключения.Наименование КАК ПричинаОтключенияНаименование
   |                ИЗ
   |                    Документ.ИзменениеСостоянияПодключенияАбонента КАК ИзменениеСостоянияПодключенияАбонента
   |                ГДЕ
   |                    ИзменениеСостоянияПодключенияАбонента.ПричинаОтключения.Наименование ЕСТЬ НЕ NULL ) КАК ВложенныйЗапрос
   |                ПО СостояниеПодключениеАбонентаСрезПоследних.Абонент.Ссылка = ВложенныйЗапрос.АбонентСсылка.Ссылка
   |            ПО ВзаиморасчетыВДГО.Абонент.Ссылка = СостояниеПодключениеАбонентаСрезПоследних.Абонент.Ссылка) КАК СпособОтключения
   |    ПО КонтактнаяИнформация.Объект.Ссылка = СпособОтключения.АбонентСсылка.Ссылка
|ГДЕ
   |КонтактнаяИнформация.ТипКонтактнойИнформации = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
   | и КонтактнаяИнформация.Объект.ДатаЗакрытия ЕСТЬ НЕ NULL";        
             
       
           Выборка = Запрос.Выполнить().Выбрать();
           
Конецфункции
   
Сделал так, выдает ошибку:
Значение не является значением объектного типа (Следующий)
           Пока Выборка.Следующий()Цикл
11 доброф
 
20.11.12
14:31
К сожалению не знаю что такое "передать ТЗ с сервера на клиент" если можно обьясните