Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 апр 2024, 09:21

Копирование с ценой

Автор Chuchi, 15 мая 2011, 10:14

0 Пользователей и 1 гость просматривают эту тему.

Chuchi

Как при копировании номенклатуры (из Формасписка в справочнике) в качестве даты установки цен в новой номенклатуре взять наиболее
позднюю дату установки цен из копируемой номенклатуры.
(пример: у той
номенклатуры, что копируется, есть две цены - продажи(установлена
15.01.2011) и закупки(установлена 24.02.2011), текущая дата
11.05.2011... цена которая будет предлагаться при сохранении цен на
скопированную(новую) номенклатуру 24.02.2011(!) 

Процедура ДействияФормыКопировать(Кнопка)
Номенклатура = ЭлементыФормы.Список.ТекущаяСтрока;
НоменклатураКопия = Справочники.Номенклатура.СоздатьЭлемент();
НоменклатураКопия.Родитель = Номенклатура.Родитель;
НоменклатураКопия.Наименование = Номенклатура.Наименование;
    НоменклатураКопия.НаименованиеПолное = Номенклатура.НаименованиеПолное;
НоменклатураКопия.Услуга = Номенклатура.Услуга;
НоменклатураКопия.БазоваяЕдиницаИзмерения = Номенклатура.БазоваяЕдиницаИзмерения;
    НоменклатураКопия.СтавкаНДС = Номенклатура.СтавкаНДС;
НоменклатураКопия.НоменклатурнаяГруппа = Номенклатура.НоменклатурнаяГруппа;
НоменклатураКопия.НомерГТД = Номенклатура.НомерГТД;
НоменклатураКопия.СтранаПроисхождения = Номенклатура.СтранаПроисхождения;
НоменклатураКопия.СтатьяЗатрат = Номенклатура.СтатьяЗатрат;
НоменклатураКопия.Комментарий = Номенклатура.Комментарий;
НоменклатураКопия.ОсновнаяСпецификацияНоменклатуры = Номенклатура.ОсновнаяСпецификацияНоменклатуры;
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Период", текущаядата());
Запрос.УстановитьПараметр("Ссылка", Номенклатура);
Запрос.Текст ="ВЫБРАТЬ
| ТипыЦенНоменклатуры.Ссылка КАК ТипЦен,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
| ЦеныНоменклатурыСрезПоследних.Валюта
|ИЗ
| Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, Номенклатура = &Ссылка) КАК ЦеныНоменклатурыСрезПоследних
| ПО (ЦеныНоменклатурыСрезПоследних.ТипЦен = ТипыЦенНоменклатуры.Ссылка)";
ЦеныНоменклатуры = Запрос.Выполнить().Выгрузить();
НоменклатураФорма = НоменклатураКопия.ПолучитьФорму();
НоменклатураФорма.ВладелецФормы = этаформа.ЭлементыФормы.Список;
НоменклатураФорма.Открыть();
НоменклатураКопия.БазоваяЕдиницаИзмерения = Номенклатура.БазоваяЕдиницаИзмерения;

has

Хм, а так не подойдет?

ВЫБРАТЬ ПЕРВЫЕ 1
ТипыЦенНоменклатуры.Ссылка КАК ТипЦен,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЦеныНоменклатурыСрезПоследних.Валюта,
ЦеныНоменклатурыСрезПоследних.Период КАК Период
ИЗ
Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, Номенклатура = &Ссылка) КАК ЦеныНоменклатурыСрезПоследних
ПО (ЦеныНоменклатурыСрезПоследних.ТипЦен = ТипыЦенНоменклатуры.Ссылка)

УПОРЯДОЧИТЬ ПО
Период УБЫВ

cska-fanat-kz

Просветите: зачем нужно соединение (да еще и ЛЕВОЕ!) со справочником ТипыЦенНоменклатуры?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Chuchi

Наверное чтобы по каждому типу цены выбралась цена..
А как мне вывести.. т.е. вот с такого кода данных на вкладке цен не появилось(
да и попутный вопрос как сразу после копирования открыть доступ к вкладке цен? еще до сохранения номенклатуры?

cska-fanat-kz

Вам ТИПЫ не важны!
Вам нужна ДАТА последней цены!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Chuchi

Запрос.Текст ="ВЫБРАТЬ
              | ЦеныНоменклатурыСрезПоследних.Регистратор.Дата Как Дата,
              | ЦеныНоменклатурыСрезПоследних.Регистратор.Номер,
              | ЦеныНоменклатурыСрезПоследних.Период,
              | ЦеныНоменклатурыСрезПоследних.Цена,
              | ЦеныНоменклатурыСрезПоследних.Валюта
              |ИЗ
              | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
              |ГДЕ
              | ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура";
ЦеныНоменклатуры = Запрос.Выполнить().Выгрузить();
датацены = ЦеныНоменклатуры.дата;

так не проходит(

cska-fanat-kz

Думайте, что Вы пишете!..

Зачем вам вот эти поля?

|    ЦеныНоменклатурыСрезПоследних.Регистратор.Дата Как Дата,
|    ЦеныНоменклатурыСрезПоследних.Регистратор.Номер,

Дата последней цены - поле "Период"!

Вместо ГДЕ используйте параметры виртуальной таблицы СрезПоследних.

И если уж используете в запросе параметр - будьте добры его заполнить (Запрос.УстановитьПараметр("Номенклатура",<<Что то там>>))

К ВЫБРАТЬ добавьте ПЕРВЫЕ 1 - вам все цены не нужны.

Цену получайте не из ТЗ (Запрос.Выполнить().Выгрузить()), а просто из выборки.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Chuchi

мне эти поля нужны будут чтобы заполнить строки цен
продажная
закупочная .. и ведь там должны быть указаны регистраторы

cska-fanat-kz

Ну создайте программно новый документ УстановкаЦенНоменклатуры.
Он и в регистр сам запишет...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Chuchi

Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Период", текущаядата());
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.Текст ="ВЫБРАТЬ ПЕРВЫЕ 1
              | ЦеныНоменклатурыСрезПоследних.Период КАК Период,
              | ЦеныНоменклатурыСрезПоследних.Цена,
              | ЦеныНоменклатурыСрезПоследних.Валюта
              |ИЗ
              | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
              |ГДЕ
              | ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура";

ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
датацены = ВыборкаРезультатаЗапроса.Период;

Пока    ВыборкаРезультатаЗапроса.Следующий()Цикл
      Сообщить (датацены);
    конецЦикла;

даже не выводит

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск