8.х Розничные цены в УТ в торг-13

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

  1. TopicStarter Overlay
    kerb2008
    Offline

    kerb2008

    Регистрация:
    28 май 2009
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Всем привет. Очень нужна помощь. Требуется добавить доп.печатные формы ТОРГ-12, ТОРГ-13 и М-4 в документы "Приходный ордер на товары" и "Расходный ордер на товары" с именно розничными ценами для любых складов (оптовый/розничный). Причем цена должна подставляться в зависимости от характеристики номенклатуры (т.е. допустим белая стоит 5руб, а желтая 6руб ). Пытался сделать это вот так:

    Код:
    Цена = ПолучитьРозничнуюЦену(ВыборкаСтрокТовары.Номенклатура, ВыборкаСтрокТовары.Характеристика, Склад,
    мВалютаРегламентированногоУчета, Неопределено, Шапка.ДатаДокумента, Неопределено, мВалютаРегламентированногоУчета, 1, 1);
    Сумма = ВыборкаСтрокТовары.Количество * Цена;
    
    При такой формуле цены выводятся только для розничных складов, но без учета характеристик номенклатуры. Ковырялся в отчете "Стоимостная оценка склада в ценах номенклатуры), но не смог ничего оттуда выудить, так как не программист и рученки кривые. Помогите люди!
  2. x_under
    Offline

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

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    С таким подходом - обратитесь в франч и вам напишут.
    Вообще сделайте свой запрос к регистру сведений "Цены номенклатуры" и все.
  3. TopicStarter Overlay
    kerb2008
    Offline

    kerb2008

    Регистрация:
    28 май 2009
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Была бы возможность обратился. И знал бы как запрос сделать к регистру сведений - сделал бы. спасибо за ответ, конечно, но хотелось бы конкретных решений. заранее спасибо
  4. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    А у Вас цены в базе вообще заведены? С учетом характеристик? Каким образом? Какая вообще релиз конфигурации? Информации не хватает.
    Я правильно понял, что проблема только с ценами, а остальное все уже работает? Выложите тогда сюда ВПФ, которую написали.
    А если у Вас все нормально заполнено, тогда запрос несложно написать, используйте примерно такую функцию:
    Код:
    Функция ПолучитьЦену(НужнаяДата, НужнаяНоменклатура, НужнаяХарактеристика, НужныйТипЦен)
    НайденнаяЦена = 0;
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата", НужнаяДата);
    Запрос.УстановитьПараметр("Номенклатура", НужнаяНоменклатура);
    Запрос.УстановитьПараметр("Характеристика", НужнаяХарактеристика);
    Запрос.УстановитьПараметр("ТипЦен", НужныйТипЦен);
    
    ТекстЗапроса = "
    |ВЫБРАТЬ ПЕРВЫЕ 1
    |    ЦеныНоменклатуры.Цена КАК Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, 
    |    Номенклатура = &Номенклатура
    |    И ХарактеристикаНоменклатуры = &Характеристика
    |    И ТипЦен = &ТипЦен) КАК ЦеныНоменклатуры
    |";
    
    Запрос.Текст = ТекстЗапроса;
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    НайденнаяЦена = Выборка.Цена;
    КонецЕсли;
    Возврат НайденнаяЦена;
    КонецФункции
    
    
    Ну, это без учета разных валют и т.д.
  5. TopicStarter Overlay
    kerb2008
    Offline

    kerb2008

    Регистрация:
    28 май 2009
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Цены только в рублях, заводятся документами "Установка цен номенклатуры" конкретно с характеристикой и целой, т.е. тапок белый - 6 руб, тапок черный - 5р. Конфа переписаная франчазерами.
  6. TopicStarter Overlay
    kerb2008
    Offline

    kerb2008

    Регистрация:
    28 май 2009
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Вот код, эксперементировал на перемещении. Выдает цены ток для розничного склада без учета хар-к номенклатуры

    Код:
    Функция Печать() Экспорт
    мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
    ТоварКод = "Артикул";
    Иначе
    ТоварКод = "Код";
    КонецЕсли;
    
    ВалютаПечати = мВалютаРегламентированногоУчета;
    Запрос       = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |	ПеремещениеТоваров.Номер КАК НомерДокумента,
    |	ПеремещениеТоваров.Дата  КАК ДатаДокумента,
    |	ПеремещениеТоваров.Организация,
    |	ПеремещениеТоваров.СкладОтправитель КАК ОтправительПодразделение,
    |	ПеремещениеТоваров.СкладПолучатель  КАК ПолучательПодразделение,
    |	ПеремещениеТоваров.СкладОтправитель.ВидСклада КАК ОтправительВидСклада,
    |	ПеремещениеТоваров.СкладПолучатель.ВидСклада  КАК ПолучательВидСклада,
    |	ПеремещениеТоваров.Товары.(
    |		Номенклатура,
    |		Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    |		Номенклатура." + ТоварКод + " КАК ТоварКод,
    |		Цена,
    |		Количество,
    |		КоличествоМест,
    |		ЕдиницаИзмерения.Представление               КАК ЕдиницаИзмеренияНаименование,
    |		ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
    |		ЕдиницаИзмеренияМест.Представление           КАК ЕдиницаИзмеренияМестНаименование,
    |		ВЫБОР
    |			КОГДА КоличествоМест > 0 ТОГДА ЕдиницаИзмеренияМест.Коэффициент / Коэффициент
    |			ИНАЧЕ NULL
    |		КОНЕЦ                                        КАК КоличествоВОдномМесте,
    |		ХарактеристикаНоменклатуры                   КАК Характеристика,
    |		СерияНоменклатуры                            КАК Серия,
    |		Номенклатура.ВестиПартионныйУчетПоСериям     КАК ПартионныйУчетПоСериям
    |	),
    |	ПеремещениеТоваров.ВозвратнаяТара.(
    |		Номенклатура,
    |		Номенклатура.НаименованиеПолное КАК ТоварНаименование,
    |		Номенклатура." + ТоварКод + " КАК ТоварКод,
    |		0 КАК Цена,
    |		0 КАК Сумма,
    |		0 КАК КоличествоВОдномМесте,
    |		Количество,
    |		Номенклатура.ЕдиницаХраненияОстатков.Представление               КАК ЕдиницаИзмеренияНаименование,
    |		Номенклатура.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ
    |	)
    |ИЗ
    |	Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
    |
    |ГДЕ
    |	ПеремещениеТоваров.Ссылка = &ТекущийДокумент
    |
    |УПОРЯДОЧИТЬ ПО
    |	ПеремещениеТоваров.Товары.НомерСтроки,
    |	ПеремещениеТоваров.ВозвратнаяТара.НомерСтроки
    |";
    
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
    ВыборкаСтрокТара   = Шапка.ВозвратнаяТара.Выбрать();
    
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПеремещениеТоваров_ТОРГ13";
    Макет = ПолучитьМакет("ТОРГ13");
    
    // Выводим общие реквизиты шапки
    СведенияОбОрганизации = СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
    ОбластьМакета         = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    ОбластьМакета.Параметры.ПредставлениеОрганизации = ОписаниеОрганизации(СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента));
    ОбластьМакета.Параметры.НомерДокумента           = ПолучитьНомерНаПечать(СсылкаНаОбъект);
    ОбластьМакета.Параметры.ДатаДокумента            = Шапка.ДатаДокумента;
    ОбластьМакета.Параметры.ОрганизацияПоОКПО        = СведенияОбОрганизации.КодПоОКПО;
    ТабДокумент.Вывести(ОбластьМакета);
    
    СтрокНаСтранице = 23;
    СтрокШапки      = 10;
    СтрокПодвала    = 9;
    НомерСтраницы   = 1;
    
    // Выводим заголовок таблицы
    ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
    ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; 
    ТабДокумент.Вывести(ЗаголовокТаблицы);
    
    КоличествоСтрок = ВыборкаСтрокТовары.Количество();
    
    Если КоличествоСтрок = 1 Тогда
    ПереноситьПоследнююСтроку = 0;
    Иначе
    ЦелыхСтраницСПодвалом     = Цел((СтрокШапки + КоличествоСтрок + СтрокПодвала) / СтрокНаСтранице);
    ЦелыхСтраницБезПодвала    = Цел((СтрокШапки + КоличествоСтрок - 1) / СтрокНаСтранице);
    ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала;
    КонецЕсли;
    
    // инициализация итогов по странице
    ИтогКоличествоМестПоСтранице = 0;
    ИтогМассаБруттоПоСтранице    = 0;
    ИтогМассыНеттоПоСтранице     = 0;
    ИтогСуммыПоСтранице          = 0;
    
    // инициализация итогов по документу
    ИтогоКоличество  = 0;
    ИтогоМассаБрутто = 0;
    ИтогоМассаНетто  = 0;
    ИтогоСумма       = 0;
    
    Ном = 0;
    
    // Выводим многострочную часть докмента
    ВыборкаСтрокТовары      = Шапка.Товары.Выбрать();
    ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогиПоСтранице");
    ОбластьМакета           = Макет.ПолучитьОбласть("Строка");
    
    // Выборка товаров
    Пока ВыборкаСтрокТовары.Следующий() Цикл
    
    Если ЗначениеНеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
    Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
    Продолжить;
    КонецЕсли;
    
    Ном = Ном + 1;
    //Начинаем новую страницу, если предыдущая строка была последней на странице
    //или пора переносить последнюю строку на последнюю страницу с подвалом.
    ЦелаяСтраница = (СтрокШапки + Ном - 1) / СтрокНаСтранице;
    
    Если (ЦелаяСтраница = Цел(ЦелаяСтраница))
    или ((ПереноситьПоследнююСтроку = 1) и (Ном = КоличествоСтрок)) Тогда
    
    ОбластьИтоговПоСтранице.Параметры.ИтогКоличествоМестПоСтранице = ИтогКоличествоМестПоСтранице;
    ОбластьИтоговПоСтранице.Параметры.ИтогМассаБруттоПоСтранице    = ИтогМассаБруттоПоСтранице;
    ОбластьИтоговПоСтранице.Параметры.ИтогМассыНеттоПоСтранице     = ИтогМассыНеттоПоСтранице;
    ОбластьИтоговПоСтранице.Параметры.ИтогСуммыПоСтранице          = ИтогСуммыПоСтранице;
    
    ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
    
    // инициализация итогов по странице
    ИтогКоличествоМестПоСтранице = 0;
    ИтогМассаБруттоПоСтранице    = 0;
    ИтогМассаНеттоПоСтранице     = 0;
    ИтогСуммыПоСтранице          = 0;
    
    НомерСтраницы = НомерСтраницы + 1;
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
    ТабДокумент.Вывести(ЗаголовокТаблицы);
    КонецЕсли;
    
    ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
    
    КоличествоМест = Формат(ВыборкаСтрокТовары.Количество, "ЧЦ=15; ЧДЦ=3");
    
    Если ВыборкаСтрокТовары.КоличествоМест <> 0 И НЕ ЗначениеНеЗаполнено(ВыборкаСтрокТовары.ЕдиницаИзмеренияМестНаименование) Тогда
    КоличествоМест = КоличествоМест 
    + Символы.ПС
    + " (" + Формат(ВыборкаСтрокТовары.КоличествоМест,"ЧЦ=15; ЧДЦ=0")
    + " "
    + ВыборкаСтрокТовары.ЕдиницаИзмеренияМестНаименование
    + ")";
    КонецЕсли;
    
    ОбластьМакета.Параметры.КоличествоМест    = КоличествоМест;
    ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + ПредставлениеСерий(ВыборкаСтрокТовары);
    
    ПолученнаяЦена = 0;
    Если Шапка.ОтправительПодразделение<>Перечисления.ВидыСкладов.Розничный Тогда
    Склад=Шапка.ПолучательПодразделение;
    Иначе
    Склад=Шапка.Отправитель.Подразделение;
    КонецЕсли;
    
    Цена = ПолучитьРозничнуюЦену(ВыборкаСтрокТовары.Номенклатура, ВыборкаСтрокТовары.Характеристика, Склад,
    мВалютаРегламентированногоУчета, Неопределено, Шапка.ДатаДокумента, Неопределено, мВалютаРегламентированногоУчета, 1, 1);
    Сумма = ВыборкаСтрокТовары.Количество * Цена;
    ОбластьМакета.Параметры.Цена = Цена;
    
    
    ОбластьМакета.Параметры.Сумма = Сумма;
    
    ТабДокумент.Вывести(ОбластьМакета);
    
    // Обновим итоги по странице
    ИтогКоличествоМестПоСтранице = ИтогКоличествоМестПоСтранице + ВыборкаСтрокТовары.Количество;
    ИтогМассаБруттоПоСтранице    = ИтогМассаБруттоПоСтранице    + 0;
    ИтогМассыНеттоПоСтранице     = ИтогМассыНеттоПоСтранице     + 0;
    ИтогСуммыПоСтранице          = ИтогСуммыПоСтранице          + Сумма;
    
    // Обновим итогов по документу
    ИтогоКоличество  = ИтогоКоличество  + ВыборкаСтрокТовары.Количество;
    ИтогоМассаБрутто = ИтогоМассаБрутто + 0;
    ИтогоМассаНетто  = ИтогоМассаНетто  + 0;
    ИтогоСумма       = ИтогоСумма       + Сумма;
    
    КонецЦикла;
    
    // Выборка возвратная тара
    Пока ВыборкаСтрокТара.Следующий() Цикл
    
    Если ЗначениеНеЗаполнено(ВыборкаСтрокТара.Номенклатура) Тогда
    Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
    Продолжить;
    КонецЕсли;
    
    Ном = Ном + 1;
    //Начинаем новую страницу, если предыдущая строка была последней на странице
    //или пора переносить последнюю строку на последнюю страницу с подвалом.
    ЦелаяСтраница = (СтрокШапки + Ном - 1) / СтрокНаСтранице;
    
    Если (ЦелаяСтраница = Цел(ЦелаяСтраница))
    или ((ПереноситьПоследнююСтроку = 1) и (Ном = КоличествоСтрок)) Тогда
    
    ОбластьИтоговПоСтранице.Параметры.ИтогКоличествоМестПоСтранице = ИтогКоличествоМестПоСтранице;
    ОбластьИтоговПоСтранице.Параметры.ИтогМассаБруттоПоСтранице    = ИтогМассаБруттоПоСтранице;
    ОбластьИтоговПоСтранице.Параметры.ИтогМассыНеттоПоСтранице     = ИтогМассыНеттоПоСтранице;
    ОбластьИтоговПоСтранице.Параметры.ИтогСуммыПоСтранице          = ИтогСуммыПоСтранице;
    
    ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
    
    // инициализация итогов по странице
    ИтогКоличествоМестПоСтранице = 0;
    ИтогМассаБруттоПоСтранице    = 0;
    ИтогМассаНеттоПоСтранице     = 0;
    ИтогСуммыПоСтранице          = 0;
    
    НомерСтраницы = НомерСтраницы + 1;
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
    ТабДокумент.Вывести(ЗаголовокТаблицы);
    КонецЕсли;
    
    ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТара);
    
    ОбластьМакета.Параметры.КоличествоМест    = Формат(ВыборкаСтрокТара.Количество, "ЧЦ=15; ЧДЦ=3");
    ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТара.ТоварНаименование + " (возвратная тара)";
    
    ТабДокумент.Вывести(ОбластьМакета);
    
    // Обновим итоги по странице
    ИтогКоличествоМестПоСтранице = ИтогКоличествоМестПоСтранице + ВыборкаСтрокТара.Количество;
    ИтогМассаБруттоПоСтранице    = ИтогМассаБруттоПоСтранице    + 0;
    ИтогМассыНеттоПоСтранице     = ИтогМассыНеттоПоСтранице     + 0;
    ИтогСуммыПоСтранице          = ИтогСуммыПоСтранице          + 0;
    
    // Обновим итогов по документу
    ИтогоКоличество  = ИтогоКоличество  + ВыборкаСтрокТара.Количество;
    ИтогоМассаБрутто = ИтогоМассаБрутто + 0;
    ИтогоМассаНетто  = ИтогоМассаНетто  + 0;
    ИтогоСумма       = ИтогоСумма       + 0;
    
    КонецЦикла;
    
    ОбластьИтоговПоСтранице.Параметры.ИтогКоличествоМестПоСтранице = ИтогКоличествоМестПоСтранице;
    ОбластьИтоговПоСтранице.Параметры.ИтогМассаБруттоПоСтранице    = ИтогМассаБруттоПоСтранице;
    ОбластьИтоговПоСтранице.Параметры.ИтогМассыНеттоПоСтранице     = ИтогМассыНеттоПоСтранице;
    ОбластьИтоговПоСтранице.Параметры.ИтогСуммыПоСтранице          = ИтогСуммыПоСтранице;
    
    ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
    
    // Выводим итоги по документу в целом
    ОбластьМакета = Макет.ПолучитьОбласть("Всего");
    ОбластьМакета.Параметры.ИтогоКоличествоМест = ИтогоКоличество;
    ОбластьМакета.Параметры.ИтогоМассаБрутто    = ИтогоМассаБрутто;
    ОбластьМакета.Параметры.ИтогоМассаНетто     = ИтогоМассаНетто;
    ОбластьМакета.Параметры.ИтогоСумма          = ИтогоСумма;
    
    ТабДокумент.Вывести(ОбластьМакета);
    
    // Выводим подвал документа
    ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    ПараметрыПрописиНаРусском = ВалютаПечати.ПараметрыПрописиНаРусском;
    ПараметрыПрописиНаРусском = СтрЗаменить(ПараметрыПрописиНаРусском, "1", "0");
    ПараметрыПрописиНаРусском = СтрЗаменить(ПараметрыПрописиНаРусском, "2", "0");
    ПараметрыПрописиНаРусском = СтрЗаменить(ПараметрыПрописиНаРусском, "3", "0");
    ОбластьМакета.Параметры.ИтогоСуммаПрописью = ЧислоПрописью(Цел(ИтогоСумма), "L=ru_RU; НП=Ложь; НД=Ложь", ПараметрыПрописиНаРусском);
    ОбластьМакета.Параметры.ИтогоСуммаКоп      = Формат(Цел((ИтогоСумма-Цел(ИтогоСумма))*100), "ЧЦ=2; ЧН=00");
    ТабДокумент.Вывести(ОбластьМакета);
    
    // Зададим параметры макета
    ТабДокумент.ПолеСверху = 0;
    ТабДокумент.ПолеСлева  = 0;
    ТабДокумент.ПолеСнизу  = 0;
    ТабДокумент.ПолеСправа = 0;
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    
    Возврат ТабДокумент;
    
    КонецФункции
    
    
  7. x_under
    Offline

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

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Вот строка, получения цены конкретной номенклатуры
    Код:
    Цена = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(ТекущаяДата(),Новый Структура("ТипЦен,Номенклатура,ХарактеристикаНоменклатуры",ТипЦен,Номенклатура,Характеристика)).Цена
    
  8. TopicStarter Overlay
    kerb2008
    Offline

    kerb2008

    Регистрация:
    28 май 2009
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Всем спасибо за помощь!!! С помощью функции ASh теперьь цены выдает правильно. :unsure: Всё оттестировал для документа "Перемещение товара". Теперь сделал доп.печ.форму для дока РасходныйРодерНаТовары, тоже всё ок, но только в ТОРГ-13 не отображает склад получатель, как выудить этот склад с документа-основания (перемещения) этого расходника?
    ПолучательПодразделение = ????
  9. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Код:
    CсылкаНаОбъект.ДокументПередачи.СкладПолучатель
    
    Но это отработает, если документ-основание именно перемещение товаров
  10. TopicStarter Overlay
    kerb2008
    Offline

    kerb2008

    Регистрация:
    28 май 2009
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Все ок. Работает.

    [warn=Читайте правила!]
    Удалено

    Один вопрос - одна тема!

    BabySG
    [/warn]

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