7.7 выгрузка в дбф - помогите!

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Чемберлен, 16 фев 2011.

  1. TopicStarter Overlay
    Чемберлен
    Offline

    Чемберлен

    Регистрация:
    4 авг 2009
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    необходимо записать что ни будь в колонку с переменным именем:
    Код:
    дбф = создатьОбъект("XBASE"); 
    //создаем колонки для уровней цен, сколько уровней, столько колонок
    счетчик=0;
    ЦенаУровень = создатьОбъект("Справочник.ТипыЦен");
    ЦенаУровень.выбратьЭлементы();
    пока ЦенаУровень.получитьЭлемент()>0 цикл 
    счетчик=счетчик+1;
    уровень=Строка("PC_DCENA"+счетчик);
    уровень1=Строка("PC_CURR"+счетчик);
    
    дбф.ДобавитьПоле(уровень,"N",11,3);   // цена: уровень 1	
    дбф.ДобавитьПоле(уровень1,"N",1,0);     // цена: валюта уровня 1
    КонецЦикла;//все чудненько создается, как надо
    
    
    А как потом обратиться (записать что ни будь) в колонке с переменным именем - уровень1=Строка("PC_CURR"+счетчик)



    Код:
    
    дбф.Добавить();
    дбф.PC_IDF = Запрос.Номенклатура.код;
    дбф.PC_SKLAD = Запрос.Склад.наименование;
    дбф.PC_CURR+счетчик? а может уровень1? ни то ни другое не работает ?????????????????????????????? 
    
    дбф.ЗакрытьФайл();   
    
    
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    дбф.Добавить();
    дбф.PC_IDF = Запрос.Номенклатура.код;		
    дбф.PC_SKLAD = Запрос.Склад.наименование;     
    дбф.PC_CURR....  
    //Может имеет смысл использовать код спр. типцен?
    //ведь у какой-то цены может отсутствовать цена с каким-то типом..
    
    //забыли записать
    дбф.Записать(); 
    дбф.ЗакрытьФайл(); 
    
    
  3. TopicStarter Overlay
    Чемберлен
    Offline

    Чемберлен

    Регистрация:
    4 авг 2009
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    нет, вопрос в том как обратится к колонке создаваемой таблице DBF, если имя колонки - переменная, то есть сколько уровней цен - столько колонок для всех уровней. Колонки создаются замечательно, а вот как обатиться к такому набору колонок? (есть программка для обмена с сайтом, она работает через DBF-таблицы) Вроде как формат dbf-а (т.е. набор колонок) должен быть фиксированным. А количество колонок заранее не известно
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    //получаем
    дбф.ПолучитьЗначениеПоля(ИмяПоля);
    //устанавливаем
    дбф.УстановитьЗначениеПоля(ИмяПоля,МоеЗначение);
    
    
  5. TopicStarter Overlay
    Чемберлен
    Offline

    Чемберлен

    Регистрация:
    4 авг 2009
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1

    Спасибо большое! Невнимательно читал сравку, теперь вижу, действительно все можно!
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вопрос теперь в другом (я его уже озвучил выше) - как вы теперь собираетесь ассоциировать цены в файле с типами цен в 1с?
    Считаю что это не маловажно....
  7. TopicStarter Overlay
    Чемберлен
    Offline

    Чемберлен

    Регистрация:
    4 авг 2009
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1

    Думаю использовать и переделать готовый код из обработки "ПечатьПрайса", в общем мне нужно вырузить прайс в dbf с особыми параметрами, для самописной программы обмена с сайтом. Необходимо выгрузить код и наименование номенклатуры, наименование склада, цены по уровням, и конечный остаток. все кроме цен по уровням у меня получилось выгрузить. Сейчас думаю как прикрутить цены по уровням. каждый кровень в свою колонку, как в обработке "ПечатьПрайса". Обратно загружать типы цен мне не нужно. Обратно будут загружаться только данные для счета (ЗаявкаПокупателя). В 1с я новичок, сис.админ, но тут попросили сделать такую обработку. Вот и пробую.
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ну самое простое - на форме обработки создать таблицу соотвествия колонка-типцен
  9. TopicStarter Overlay
    Чемберлен
    Offline

    Чемберлен

    Регистрация:
    4 авг 2009
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    в общем придумал, вроде так:
    Код:
    //
  10. TopicStarter Overlay
    Чемберлен
    Offline

    Чемберлен

    Регистрация:
    4 авг 2009
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    придумал так:
    Код:
    
    // Процедура генерации запроса Сформировать.
    //
    Процедура Сформировать()
    
    Файл = создатьОбъект("XBASE"); //создаем ссылку на файл DBF
    
    Файл.ДобавитьПоле("PC_IDF","S",10,0);       // PK записи 
    
    //создаем колонки для уровней цен, сколько уровней, столько колонок
    счетчик=0;
    ЦенаУровень = создатьОбъект("Справочник.ТипыЦен");
    ЦенаУровень.выбратьЭлементы();
    пока ЦенаУровень.получитьЭлемент()>0 цикл 
    счетчик=счетчик+1;
    уровень=Строка("PC_DCENA"+счетчик);
    уровень1=Строка("PC_CURR"+счетчик);
    Файл.ДобавитьПоле(уровень,"N",11,3);   // цена: уровень 1	
    Файл.ДобавитьПоле(уровень1,"N",3,0);     // цена: валюта уровня 1
    КонецЦикла;
    Файл.ДобавитьПоле("PC_SKLAD","S",20,0);     // склад (в 1С - есть аналог этому понятию?),	
    Файл.ДобавитьПоле("PC_GROUP","N",5,0);     // товарная группа	
    //  Файл.ДобавитьПоле("PC_KODT","N",8,0);      // PK товара	
    //  Файл.ДобавитьПоле("PC_ART","N",8,0);       // артикул товара 	
    Файл.ДобавитьПоле("PC_KOL","N",8,0);       // кол-во товара	
    //  Файл.ДобавитьПоле("PC_KOLB","N",8,0);      // кол-во товара заблокированное	
    //  Файл.ДобавитьПоле("PC_KOLBR","N",8,0);     // не помню(А.Л)	(а я, тем боелее не помню(М.З))
    //  Файл.ДобавитьПоле("PC_XPRDLV","N",8,0);    // срок в днях при срочной доставке	
    //  Файл.ДобавитьПоле("PC_ORDDLV","N",8,0);    // срок в днях при обычной доставке,	
    //  Файл.ДобавитьПоле("PC_NXTDLV","N",8,0);    // список дат ближайших поставок в строчном формате 
    Файл.СоздатьФайл("c:\price.dbf"); //создаем файл физически
    Файл.ОчиститьФайл(); 
    
    //запрос к данным
    ТекстЗапроса = "//{{ЗАПРОС(ОтборЦен)
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура, Справочник.Цены.Владелец;
    |Тип = Справочник.Цены.ТипЦен;
    |Цена = Справочник.Цены.Цена;
    |Склад = Регистр.ОстаткиТМЦ.Склад;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    //	|Функция ЦенаСумма = Сумма(Цена);
    //	|Функция КоличествоКонОст = КонОст(Количество);
    |Группировка Номенклатура без упорядочивания;
    |"//}}ЗАПРОС
    ;
    Запрос = СоздатьОбъект("Запрос");
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    
    
    Пока Запрос.Группировка("Номенклатура") = 1 Цикл
    ТекЭлем = Запрос.Номенклатура;
    //сообщить(ТекЭлем);		
    Если ТекЭлем.ЭтоГруппа() = 1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда	</span>
    продолжить;
    
    конецЕсли;
    //	сообщить(Запрос.Номенклатура.код);
    Файл.Добавить();
    Файл.PC_IDF = Запрос.Номенклатура.код;
    Файл.PC_SKLAD = Запрос.Склад.наименование;
    Файл.PC_KOL = Запрос.количество;
    ур= число(запрос.тип.код);
    если ур = 0  тогда 
    продолжить;
    конецЕсли;
    
    
    Файл.УстановитьЗначениеПоля("PC_DCENA"+ строка(ур) ,запрос.цена);
    Файл.УстановитьЗначениеПоля("PC_CURR"+ строка(ур) ,Запрос.тип.валюта.код);
    Файл.Записать();				
    
    КонецЦикла;
    Файл.ЗакрытьФайл(); //не забывайте пожалуйста   
    
    Сообщить("прайс выгружен в c:\price.dbf ")			
    
    Файл.ЗакрытьФайл();	
    
    КонецПроцедуры
    
    
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Имеет место быть.. Для человека не программиующего на 1с - все верно.
    Хотелось бы заметить. Цена - реквизит периодический (меняемый на определенную дату) В запрос ВСЕГДА попадет последнее значение (текущее) Если встанет вопрос о получении цены на конкретную дату - запрос необходимо немного изменить (добавить период отбора). И еще - нет проверки при добавлении полей на помеченный на удаление удаление тип цен... Хотя вдруг он встретится в остатках....
  12. TopicStarter Overlay
    Чемберлен
    Offline

    Чемберлен

    Регистрация:
    4 авг 2009
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    к счастью выбор периода тут не нужен, так как на сайт будет выгружаться данные на текущий момент, к примеру раз в час, да еще это бета-версия, только концепция, далее буду придумывать по мере поступления вопросов и дополнений. Пока главное понять принцип как это все работает, потом, по мере разработки попробую добавить все что надо, например если уровень цен не заданый ручками, а рассчитываемый, и т.д... Только два дня 1с занимаюсь.

Поделиться этой страницей