8.х Не выводит штрихкод в dbf файл

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ezhik, 2 ноя 2010.

  1. TopicStarter Overlay
    ezhik
    Offline

    ezhik

    Регистрация:
    2 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Добрый день, подскажите, пожалуйста, в чем проблема при использовании выгрузки: не выводит штрихкод, хотя остальные поля выгружаются нормально.

    Спасибо.


    //создаем DBF и выгружаем инфу

    Б = Новый XBase;
    Б.Кодировка = КодировкаXBase.OEM; //DOS кодировка
    //добавление полей
    Б.Поля.Добавить("pnt","N",13,0); //штрихкод
    Б.Поля.Добавить("nt","S",30,0); //название
    Б.Поля.Добавить("a","S",30,0); //аритикул
    Б.Поля.Добавить("m","S",15,0); //модель
    Б.Поля.Добавить("rr","S",15,0); //размер
    Б.Поля.Добавить("Color","S",15,0); //цвет
    Б.Поля.Добавить("ris","S",15,0); //страна
    Б.Поля.Добавить("pk","S",3,0); //сорт
    Б.Поля.Добавить("ei","S",5,0); //ед. измерения
    Б.Поля.Добавить("q","N",9,2); //количество
    Б.Поля.Добавить("cot","N",11,3); //цена
    Б.Поля.Добавить("cot_1gr","N",11,3); //цена за 1 гр
    Б.Поля.Добавить("pce","N",7,3); //Процент оптовой надбавки
    Б.Поля.Добавить("skidka","S",7,3); //процент скидки
    Б.Поля.Добавить("pnds","S",7,3); //процент НДС
    Б.Поля.Добавить("vst","S",20,0); //информация о вставках
    //создание файла
    Б.СоздатьФайл(ПутьКФайлуВыгрузки);
    Б.ЗакрытьФайл();

    //открытие файла
    Б.ОткрытьФайл(ПутьКФайлуВыгрузки);
    Если Б.Открыта()=0 Тогда
    Предупреждение("Не удалось открыть файл DBF", 30);
    Возврат;
    КонецЕсли;
    //добавление записи
    Для каждого СтрДокРеал из ДокументРеализации.Товары Цикл //парсим весь список

    Номенклатура = СтрДокРеал.Номенклатура;
    ХарактеристикаНоменклатуры = СтрДокРеал.ХарактеристикаНоменклатуры;
    СтрТабРеал = ТабЗнФайлОбмена.Добавить();

    Запрос = Новый Запрос("ВЫБРАТЬ
    | Штрихкоды.Штрихкод КАК Штрихкод
    |ИЗ
    | РегистрСведений.Штрихкоды КАК Штрихкоды
    |ГДЕ
    | Штрихкоды.Владелец = &Влад

    | Штрихкоды.ХарактеристикаНоменклатуры = &Хар");

    Запрос.УстановитьПараметр("Влад", СтрДокРеал.Номенклатура);
    Запрос.УстановитьПараметр("Хар", СтрДокРеал.ХарактеристикаНоменклатуры);
    // Запрос = Запрос.Выполнить().Выбрать();
    Выборка = Запрос.Выполнить().Выбрать();

    Пока Запрос.Следующий() Цикл
    СтрТабРеал.ШтрихКод = Запрос.ШтрихКод;
    КонецЦикла;

    // Если Выборка.Следующий() Тогда
    // СтрТабРеал.ШтрихКод = Выборка.ШтрихКод;
    // КонецЕсли;

    Б.Добавить();
    // Б.pnt=СокрЛП(СтрТабРеал.ШтрихКод);
    Б.pnt=Запрос.ШтрихКод;
    Б.nt=СокрЛП(СтрДокРеал.Номенклатура.НаименованиеПолное);
    Б.a=СокрЛП(СтрДокРеал.Номенклатура.Артикул);
    // Б.m=
    Б.rr=СокрЛП(СтрДокРеал.ХарактеристикаНоменклатуры);
    // Б.Color=
    Б.ris=СокрЛП(Номенклатура.СтранаПроисхождения);
    // Б.pk=
    Б.ei=СокрЛП(Номенклатура.БазоваяЕдиницаИзмерения);
    Б.q=СокрЛП(СтрДокРеал.Количество);
    Б.cot=СокрЛП(СтрДокРеал.Цена);
    // Б.cot_1gr=
    // Б.pce=
    // =СокрЛП(СтрДокРеал.СуммаНДС); //Сумма НДС
    Б.skidka=СокрЛП(СтрДокРеал.ПроцентСкидкиНаценки);
    Б.pnds=СокрЛП(СтрДокРеал.СтавкаНДС);
    // Б.vst=
    Б.Записать();
    КонецЦикла;

    //закрытие файла
    Б.ЗакрытьФайл();
    Предупреждение("Файл сформирован.", 30);

    //конец DBF
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Строчка Б.pnt=Запрос.ШтрихКод; должно быть так:
    Б.pnt=Выборка.ШтрихКод;
    Вы же в цикле запрос перебираете.
    Пока Запрос.Следующий() Цикл
    СтрТабРеал.ШтрихКод = Запрос.ШтрихКод;
    КонецЦикла;
  3. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Ошибки в алгоритме. Выбирается для Выборка, а перебор для Запрос.
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Сделайте поле штрихкода в DBF текстовым и будет вам счастье
  5. TopicStarter Overlay
    ezhik
    Offline

    ezhik

    Регистрация:
    2 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Спасибо за совет, но все-равно не выводит
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    ШК - это текст. А поле числовое
  7. TopicStarter Overlay
    ezhik
    Offline

    ezhik

    Регистрация:
    2 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Не помогает(
    Если поле текстовое, ничего не выводит, если цифровое то нули
  8. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Значит СтрТабРеал.ШтрихКод не содержит штрихкод
  9. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Там походу выборки по штриху нет, нужно одну строчку разкомментировать:
    // Запрос = Запрос.Выполнить().Выбрать();
  10. TopicStarter Overlay
    ezhik
    Offline

    ezhik

    Регистрация:
    2 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Бухи утверждают, что есть. Будем смотреть
    Спасибо за помощь.

    alexburn, спасибо, но не помогло
    (вместо Б.pnt=Выборка.ШтрихКод; вернул Б.pnt=Запрос.ШтрихКод; иначе ошибку выдавало "{Форма.Форма(125,7)}: Переменная не определена (Выборка)")
  11. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Так и цикл организуйте по Запрос:
    Код:
    Запрос = Запрос.Выполнить().Выбрать();
    Пока Запрос.Следующий() Цикл
    ШтрихКод = Запрос.ШтрихКод;
    КонецЦикла;
    Б.pnt=.ШтрихКод;
    
    В этом коде понятно что происходит?
  12. TopicStarter Overlay
    ezhik
    Offline

    ezhik

    Регистрация:
    2 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Пробегает по файлу, запрашивает штрихкод и заносит в переменную ШтрихКод и выводим через Б.pnt.ШтрихКод ?
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    ezhik, у вас первый пост не оформлен тэгом code, мне трудно разобрать. Запостите еще раз ваш код на текущий момент (только пожалуйста с использованием оформления), и закоментированные строки (кода) тоже удалите.
  14. TopicStarter Overlay
    ezhik
    Offline

    ezhik

    Регистрация:
    2 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Код:
    //создаем DBF и выгружаем инфу
    
    Б = Новый XBase;
    Б.Кодировка = КодировкаXBase.OEM; //DOS кодировка
    //добавление полей
    Б.Поля.Добавить("pnt","N",13,0); //штрихкод
    Б.Поля.Добавить("nt","S",30,0); //название
    Б.Поля.Добавить("a","S",30,0); //аритикул
    Б.Поля.Добавить("m","S",15,0); //модель
    Б.Поля.Добавить("rr","S",15,0); //размер
    Б.Поля.Добавить("Color","S",15,0); //цвет
    Б.Поля.Добавить("ris","S",15,0); //страна
    Б.Поля.Добавить("pk","S",3,0); //сорт
    Б.Поля.Добавить("ei","S",5,0); //ед. измерения
    Б.Поля.Добавить("q","N",9,2); //количество
    Б.Поля.Добавить("cot","N",11,3); //цена
    Б.Поля.Добавить("cot_1gr","N",11,3); //цена за 1 гр
    Б.Поля.Добавить("pce","N",7,3); //Процент оптовой надбавки
    Б.Поля.Добавить("skidka","S",7,3); //процент скидки
    Б.Поля.Добавить("pnds","S",7,3); //процент НДС
    Б.Поля.Добавить("vst","S",20,0); //информация о вставках
    //создание файла
    Б.СоздатьФайл(ПутьКФайлуВыгрузки);
    Б.ЗакрытьФайл();
    
    //открытие файла
    Б.ОткрытьФайл(ПутьКФайлуВыгрузки);
    Если Б.Открыта()=0 Тогда 
    Предупреждение("Не удалось открыть файл DBF", 30);
    Возврат;
    КонецЕсли;
    //добавление записи
    Для каждого СтрДокРеал из ДокументРеализации.Товары Цикл //парсим весь список
    
    Номенклатура = СтрДокРеал.Номенклатура;
    ХарактеристикаНоменклатуры = СтрДокРеал.ХарактеристикаНоменклатуры;
    СтрТабРеал = ТабЗнФайлОбмена.Добавить();
    
    Запрос = Новый Запрос("ВЫБРАТЬ
    | Штрихкоды.Штрихкод КАК Штрихкод
    |ИЗ
    | РегистрСведений.Штрихкоды КАК Штрихкоды
    |ГДЕ
    | Штрихкоды.Владелец = &Влад
    |И
    | Штрихкоды.ХарактеристикаНоменклатуры = &Хар");
    
    Запрос.УстановитьПараметр("Влад", СтрДокРеал.Номенклатура);
    Запрос.УстановитьПараметр("Хар", СтрДокРеал.ХарактеристикаНоменклатуры);
    
    Запрос = Запрос.Выполнить().Выбрать();
    Пока Запрос.Следующий() Цикл
    ШтрихКод = Запрос.ШтрихКод;
    КонецЦикла;
    
    Б.Добавить();
    Б.pnt=Запрос.ШтрихКод;
    Б.nt=СокрЛП(СтрДокРеал.Номенклатура.НаименованиеПолное);
    Б.a=СокрЛП(СтрДокРеал.Номенклатура.Артикул);
    Б.rr=СокрЛП(СтрДокРеал.ХарактеристикаНоменклатуры);
    Б.ris=СокрЛП(Номенклатура.СтранаПроисхождения);
    Б.ei=СокрЛП(Номенклатура.БазоваяЕдиницаИзмерения);
    Б.q=СокрЛП(СтрДокРеал.Количество);
    Б.cot=СокрЛП(СтрДокРеал.Цена);
    Б.skidka=СокрЛП(СтрДокРеал.ПроцентСкидкиНаценки);
    Б.pnds=СокрЛП(СтрДокРеал.СтавкаНДС);
    Б.Записать();
    КонецЦикла;
    
    //закрытие файла
    Б.ЗакрытьФайл();
    Предупреждение("Файл сформирован.", 30);
    
    //конец DBF
    
  15. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Ну чисто теоретически должно работать, только кривовато.
    Перепишите участок кода, так попробуйте (не проверял):
    Код:
    //добавление записи
    Запрос = Новый Запрос;
    Запрос.ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	ЕСТЬNULL(Штрихкоды.Штрихкод, "") КАК Штрихкод,
    |	ВЫРАЗИТЬ(РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное КАК СТРОКА(200)) КАК ПолноеНаименование,
    |	РеализацияТоваровУслугТовары.Номенклатура.Артикул КАК Артикул,
    |	РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры,
    |	РеализацияТоваровУслугТовары.Номенклатура.СтранаПроисхождения КАК СтранаПроисхождения,
    |	РеализацияТоваровУслугТовары.Номенклатура.БазоваяЕдиницаИзмерения КАК БазоваяЕдиницаИзмерения,
    |	РеализацияТоваровУслугТовары.Количество,
    |	РеализацияТоваровУслугТовары.Цена,
    |	РеализацияТоваровУслугТовары.ПроцентСкидкиНаценки,
    |	РеализацияТоваровУслугТовары.СтавкаНДС
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
    |		ПО РеализацияТоваровУслугТовары.Номенклатура = Штрихкоды.Владелец
    |			И РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры = Штрихкоды.ХарактеристикаНоменклатуры
    |ГДЕ
    |	РеализацияТоваровУслугТовары.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", ДокументРеализации);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
    //Для отладки
    //Сообщить(СокрЛП(Выборка.ПолноеНаименование) + " - " + Строка(Выборка.ШтрихКод));
    Б.Добавить();
    
    Б.pnt	= Строка(Выборка.ШтрихКод);
    Б.nt	= СокрЛП(Выборка.ПолноеНаименование);
    Б.a	= СокрЛП(Выборка.Артикул);
    Б.rr	= Строка(Выборка.ХарактеристикаНоменклатуры);
    Б.ris	= Строка(Выборка.СтранаПроисхождения);
    Б.ei	= Строка(Выборка.БазоваяЕдиницаИзмерения);
    Б.q	= Выборка.Количество;
    Б.cot	= Выборка.Цена;
    Б.skidka	= Выборка.ПроцентСкидкиНаценки;
    Б.pnds	= Строка(Выборка.СтавкаНДС);
    
    Б.Записать();
    КонецЦикла;
    
    //закрытие файла
    



    И поле штрихкод в dbf на строковое переделайте.
  16. TopicStarter Overlay
    ezhik
    Offline

    ezhik

    Регистрация:
    2 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    поле строковое

    Ваш вариант выдает ошибку:
    {Форма.Форма(97)}: Поле объекта не обнаружено (ТекстЗапроса)
    Запрос.ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ
  17. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Описка.
    Код:
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    
    М? Точно?
    Код:
    Б.Поля.Добавить("pnt","N",13,0); //штрихкод
    
    "N"!
  18. TopicStarter Overlay
    ezhik
    Offline

    ezhik

    Регистрация:
    2 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Ошибка:
    {Форма.Форма(116)}: Ошибка при вызове метода контекста (Выполнить): {(2, 31)}: Строка, не закрывающаяся кавычкой
    ЕСТЬNULL(Штрихкоды.Штрихкод, <<?>>") КАК Штрихкод,
    Выборка = Запрос.Выполнить().Выбрать();

    я имел ввиду, что исправил на строковое
  19. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Ну я же в консоли писал не проверяя - исправьте на ЕСТЬNULL(Штрихкоды.Штрихкод, """")
  20. TopicStarter Overlay
    ezhik
    Offline

    ezhik

    Регистрация:
    2 ноя 2010
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Всем большое спасибо.

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