7.7 Нужна помощь

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Kushavin, 10 фев 2010.

  1. TopicStarter Overlay
    Kushavin
    Offline

    Kushavin

    Регистрация:
    10 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток. Есть 1С ТиС с партионным учётом. Нужно написать обработку, которая на выходе даст текстовый файл с разделителями, где будет код, наименование товара, количество на складе и цена. Нужно это, чтобы скормить интернет магазину, для простой синхронизации (количество/цена). Я написал следующее:

    Код:
    //*******************************************
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб, РезЗапроса, Номенклатура, Цена, Количество, НеВключатьВпрайс;
    //Открываем файл для записи результата
    ФайлЭкс = СоздатьОбъект("Текст");
    //Запрашиваем данные
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "
    |Код = Регистр.ОстаткиТМЦ.Номенклатура.Код;
    |Наименование = Регистр.ОстаткиТМЦ.Номенклатура.Наименование;
    |Количество = Регистр.ОстаткиТМЦ.Количество;
    |НеВключатьВпрайс = Регистр.ОстаткиТМЦ.Номенклатура.НеВключатьВпрайс;
    |Цена = Регистр.ОстаткиТМЦ.ЦенаПрод;
    |Функция КоличествоКонОст = КонОст(Количество);
    |Группировка Код;
    |Группировка Наименование;
    |Группировка Количество;
    |Условие(НеВключатьВпрайс = 1);"
    ;
    Запрос.Выполнить(ТекстЗапроса);
    
    Пока Запрос.Группировка(1) = 1 Цикл
    РезЗапроса = Запрос.Код + ";" + ВРЕГ(Запрос.Наименование) + ";" + Запрос.КоличествоКонОст + ";" + Запрос.Цена;
    ФайлЭкс.ДобавитьСтроку(РезЗапроса);
    КонецЦикла;
    ФайлЭкс.ДобавитьСтроку("ОК");
    ФайлЭкс.записать("c:\export.txt");
    ФайлЭкс.показать();
    КонецПроцедуры
    
    По идее всё должно работать, но второй столбик не заполняется (наименование) и цена указывается не та, по которой юр.лицо продаёт этот товар.

    Вот, что я имею на выходе:
    Подскажите, почему не записывается в файл наименование? Так же был бы очень признателен, если вы подскажите как вытащить цену товара для конкретного магазина (их несколько, разбиты юр.лицами и складами).

    Заранее благодарю.
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вы не указали период. 1с не знает на какую дату показывать вам конечный остаток
  3. TopicStarter Overlay
    Kushavin
    Offline

    Kushavin

    Регистрация:
    10 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Спасибо.
    Задал период, но моих проблем это не решило :(
    Не могу понять почему в файл не попадает "Наименование"
    Вопрос о том, откуда брать цену тоже открыт
  4. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    может Наименование как-нибудь по-другому обозвать? мало-ли... Свиду все правильно
    По поводу цен - может это цены без ндс? или средневзвешенные
  5. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Измерение регистра ЦенаПрод заполняется только для розничных продаж. Цену из запроса вы не вытяните (в регистрах остатков ее просто нет, а в регистрах партиях - себестоимость).

    Используте глВернутьЦену (только тогда в запросе получайте не наименование а саму номенклатуру)
  6. TopicStarter Overlay
    Kushavin
    Offline

    Kushavin

    Регистрация:
    10 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Спасибо, функция выдернула адекватную цену, а название вытащил из номенклатуры.
    Итого код превратился в это:
    Код:
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб, РезЗапроса, Номенклатура, Цена, Количество, НеВключатьВпрайс, ДатаОтчёта;
    ДатаОтчёта = РабочаяДата();
    //Открываем файл для записи результата
    ФайлЭкс = СоздатьОбъект("Текст");
    //Запрашиваем данные
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "
    |Период с ДатаОтчёта по ДатаОтчёта;
    |Номенклатура 	= Справочник.Цены.Владелец;
    |ТипКод			= Справочник.Цены.ТипЦен.Код;
    |Тип			= Справочник.Цены.ТипЦен;
    |Цен			= Справочник.Цены.ТекущийЭлемент;
    |ВПрайсе		= Справочник.Цены.Владелец.НеВключатьВпрайс;
    |Группировка Цен;
    |Условие (ВПрайсе = 1);
    |//Условие (Тип = ""Глв магазин"");
    |";
    Запрос.Выполнить(ТекстЗапроса);
    
    Пока Запрос.Группировка(1) = 1 Цикл
    глВернутьЦену(Запрос.Номенклатура, Запрос.Тип,ДатаОтчёта,Цена,,,,);
    РезЗапроса = Запрос.Номенклатура.Код + ";" + Запрос.Номенклатура + ";" + Цена + ";" + Запрос.Количество;
    ФайлЭкс.ДобавитьСтроку(РезЗапроса);
    КонецЦикла;
    ФайлЭкс.ДобавитьСтроку("ОК");
    ФайлЭкс.записать("c:\export.txt");
    ФайлЭкс.показать();
    КонецПроцедуры
    
    
    Теперь вопрос, как изящно вытащить остатки, не обращаться же в запросе к регистру ОстаткиТМЦ... А если и обращаться, как это сделать более элегантно?
    И последняя проблема, условие по типу цены отсекает всё, скорее всего из-за пробела в названии. Нигде не нашёл решения, как это исправить?
  7. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Тип цен это не строка, а справочник...
    Как раз к остаткам и надо обращаться, а для цен использовать функцию, Вы все неправильно поняли.
  8. TopicStarter Overlay
    Kushavin
    Offline

    Kushavin

    Регистрация:
    10 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Вот сижу и голову ломаю как обратиться к остаткам? Если в запрос тупо вставить Регистр.ОстаткиТМЦ.Количество, то они всё по нулям выведут(нужна функция), если добавить функцию в запрос - пропадает всё остальное.

    На данный момент работает всё, только количество я не выдернул...
  9. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Используте функцияю НачОст или КонОст в запросе к регистру остатков в зависимости от того какой остаток (начальный или конечный) на ДатаОтчёта вы хотите получить из запроса.

    З/Ы через запрос - самое правильное и ЭЛЕГАНТНОЕ решение
  10. TopicStarter Overlay
    Kushavin
    Offline

    Kushavin

    Регистрация:
    10 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Делаю КонОст, но как только добавляю функцию в запрос, сразу же перестаёт выдавать результат. Я так понимаю я неправильно группировки пишу.
  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Выкладывайте текст
  12. TopicStarter Overlay
    Kushavin
    Offline

    Kushavin

    Регистрация:
    10 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Вот мой запрос, как только я добавил туда "Функция КонОстТМЦ" - Результат пошёл нуливой (вообще ничего не выводит). Пробовал группировать по КонОстТМЦ и Количеству, никакого толка...
    Код:
    ТекстЗапроса = 
    "
    |Период с ДатаОтчёта по ДатаОтчёта;
    |Номенклатура 	= Справочник.Цены.Владелец;
    |ТипКод			= Справочник.Цены.ТипЦен.Код;
    |Тип			= Справочник.Цены.ТипЦен;
    |Цен			= Справочник.Цены.ТекущийЭлемент;
    |ВПрайсе		= Справочник.Цены.Владелец.НеВключатьВпрайс;
    |Количество   = Регист.ОстаткиТМЦ.Количество;
    |Функция КонОстТМЦ = КонОст(Количество);
    |Группировка Цен;
    |Условие (ВПрайсе = 1);
    |//Условие (Тип = ""Глв магазин"");
    |";
    
    
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    ТекстЗапроса = 
    "
    |Период с ДатаОтчёта по ДатаОтчёта;
    |Номенклатура     = Регист.ОстаткиТМЦ.Номенклатура;
    |ВПрайсе        = Регист.ОстаткиТМЦ.Номенклатура.НеВключатьВпрайс;
    |Количество   = Регист.ОстаткиТМЦ.Количество;
    |Функция КонОстТМЦ = КонОст(Количество);
    |Группировка Номенклатура;
    |Условие (ВПрайсе = 1);
    |//Условие (Тип = ""Глв магазин"");
    |";
    
    
    
    На выходе получиль все ненулевые позиции товара которы нужно включать в прайс.
    Если нужны еще и нулевые - нужно отдельно писать запрос (лил выборку по справочнику)
  14. TopicStarter Overlay
    Kushavin
    Offline

    Kushavin

    Регистрация:
    10 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Двумя разными запросами делать? Одним цену, другим остатки?
    Если так, то как результаты вместе вывести в файл?
  15. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) если вам нулевые остатки не гужны - цену можно получать при выводе результата запроса по остаткам
    2) если нужны - Результат запроса выгружать в ТаблицуЗначений. Затем по желанию
    а) формировать второй запрос по номенклатру (вклоючить фильтр по уже отобранным в первом)
    б) пройтись циклом выборки по справочнику
    Цена опять же получается при выводе в файл
  16. TopicStarter Overlay
    Kushavin
    Offline

    Kushavin

    Регистрация:
    10 фев 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Спасибо, буду пробовать
Похожие темы
  1. MuHyC
    Ответов:
    9
    Просмотров:
    435
Загрузка...

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