Здрасте! 1с v7.7 Торговля и склад, есть обработка-ценообразования, выбираю любой товар из номенклатуры, задаю дату и он должен показать какая была цена (розничная, закупочная) на ту дату которую указал, проблема в том что показывает цену на данный момент, т.е. последнюю((
вот код
вот код
Перем СписокПодбора,СправочникПодбора;
// СписокПодбора - список, в который отбираются элементы
// (используется для множественных фильтров)
// СправочникПодбора - строка - идентификатор справочника, из которого осуществляется отбор
Перем ВидСправочника; // Вид печатаемого справочника (Номенклатура или прайс-лист)
// Определяется параметром. По умолчанию - прайс
Перем ЗаголовокТаблицы; // Заголовок печатной формы
Перем СписокТоваров; // список товаров для фильтрации
Перем Конт;
Перем СписокИзмененных;
Перем СписокПозиций;
Перем ПечатьВФиксВалюте;
Перем НомерСписка;
//*******************************************
Функция глФРМ2(ЧислЗнач,Вал,Реж)
// Это процедура нашего стандартного форматирования цен и сумм:
// Для рублей не печатаем дроби, для других валют 3 знака после запятой
// Триады отделяем символом (')
Стр=?(Вал=Константа.БазоваяВалюта,СокрЛ(Формат(ЧислЗнач,"Ч015.2.'")),СокрЛ(Формат(ЧислЗнач,"Ч015.3.'")));
Если (Реж=0) ИЛИ (ПустаяСтрока(Стр)=1) Тогда
Возврат Стр;
Иначе
Возврат Стр+" "+СокрП(Вал.Наименование);
КонецЕсли;
КонецФункции
//*******************************************
Процедура РаботаСоСписком(Режим,Список,ТипСправочника)
Перем ТекПоз;
Перем ТекЭлемент;
Перем Фрм;
ТекПоз = Список.ТекущаяСтрока();
Если ТекПоз>0 Тогда
ТекЭлемент=Список.ПолучитьЗначение(ТекПоз);
КонецЕсли;
Если Режим="Добавить" Тогда // добавляем в список один элемент
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,0,ТекЭлемент);
Фрм.ВыборГруппы(1);
ИначеЕсли Режим="ДобавитьНесколько" Тогда // добавляем в список несколько элементов
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,1,ТекЭлемент);
Фрм.ВыборГруппы(1);
ИначеЕсли Режим="УдалитьВсе" Тогда // удаляем все элементы из списка
Список.УдалитьВсе();
ИначеЕсли Режим="Удалить" Тогда // удаляем из списка один элемент
Если ТекПоз>0 Тогда
Список.УдалитьЗначение(ТекПоз);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//*******************************************
Процедура ОбработкаПодбора(Значение) // Предопределенная процедура
Перем ПредставлениеЗначения;
Если (ВРег(Значение.Вид())=СправочникПодбора)И(СписокПодбора.НайтиЗначение(Значение)=0) Тогда
ПредставлениеЗначения = Строка(Значение);
Если СправочникПодбора="ПРАЙС_ЛИСТ" Тогда
Если (Значение.ЭтоГруппа()=0)И(Значение.Товар.Выбран()>0) Тогда
ПредставлениеЗначения = Строка(Значение.Товар);
КонецЕсли;
КонецЕсли;
СписокПодбора.ДобавитьЗначение(Значение,ПредставлениеЗначения);
СписокПодбора.ТекущаяСтрока(СписокПодбора.РазмерСписка());
КонецЕсли;
КонецПроцедуры
//*******************************************
Процедура ПриОткрытии()
СписокИзмененных=СоздатьОбъект("ТаблицаЗначений");
СписокИзмененных.НоваяКолонка("Товар");
СписокИзмененных.НоваяКолонка("ТипЦены");
СписокИзмененных.НоваяКолонка("СтараяЦена");
СписокИзмененных.НоваяКолонка("НоваяЦена");
СписокИзмененных.НоваяКолонка("Единица");
НаложенФильтрПоТоварам=0;
Конт=Форма.Параметр;
Если ПустоеЗначение(Форма.Параметр) = 1 Тогда
ВидСправочника = "Прайс_лист";
ПростоВид="Прайс_лист";
Иначе
ВидСправочника = СокрЛП(Форма.Параметр);
ПростоВид=СокрЛП(Форма.Параметр);
КонецЕсли;
Если Нрег(ВидСправочника) = "прайс_лист" Тогда
Форма.ПозицииТекст.Заголовок("Позиции и группы прайс-листа:");
ЗаголовокТаблицы = "Прайс-лист";
Форма.Заголовок("Печать прайс-листа");
ИначеЕсли Нрег(ВидСправочника) = "номенклатура" Тогда
Форма.ПозицииТекст.Заголовок("Позиции и группы номенклатуры:");
ЗаголовокТаблицы = "Каталог товаров";
Форма.Заголовок("Печать каталога товаров");
Иначе
Предупреждение("Обработка вызвана с неверным параметром.");
СтатусВозврата(0);
Возврат;
КонецЕсли;
НомерСписка=1;
ДатаЗаписи= ТекущаяДата();
Если ВалютаЗаписи.Выбран()=0 Тогда
ПечатьВФиксВалюте = 1;
ВалютаЗаписи=Константа.БазоваяВалюта;
Валюта = ВалютаЗаписи;
Иначе
ПечатьВФиксВалюте = 1;
Валюта = ВалютаЗаписи;
КонецЕсли;
КонецПроцедуры
Процедура Сформировать()
СписокТоваров = СоздатьОбъект("СписокЗначений");
СписокПозиций = СоздатьОбъект("СписокЗначений");
// накладываем множественный фильтр по товарам
Если МФНоменклатура.РазмерСписка()<>0 Тогда
Для Индекс=1 По МФНоменклатура.РазмерСписка() Цикл
Позиция = МФНоменклатура.ПолучитьЗначение(Индекс);
НоменкВложенаВДругую=0;
Для Индекс2=1 По МФНоменклатура.РазмерСписка() Цикл
Если Индекс2<>Индекс Тогда
Позиция2 = МФНоменклатура.ПолучитьЗначение(Индекс2);
Если Позиция2.ЭтоГруппа()>0 Тогда
Если Позиция.ПринадлежитГруппе(Позиция2)>0 Тогда
НоменкВложенаВДругую=1;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НоменкВложенаВДругую=1 Тогда
Продолжить;
КонецЕсли;
Если Позиция.ЭтоГруппа()>0 Тогда
СпрПозиций = СоздатьОбъект("Справочник."+ВидСправочника);
СпрПозиций.ИспользоватьРодителя(Позиция.ТекущийЭлемент());
СпрПозиций.ВыбратьЭлементы(1);
Пока СпрПозиций.ПолучитьЭлемент()>0 Цикл
Если СпрПозиций.ЭтоГруппа()=0 Тогда
СписокПозиций.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент());
Если Нрег(ВидСправочника) = "прайс_лист" Тогда
СписокТоваров.ДобавитьЗначение(СпрПозиций.Товар.ТекущийЭлемент());
Иначе
СписокТоваров.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент());
КонецЕсли;
КонецЕсли;
КонецЦикла;
Иначе
СписокПозиций.ДобавитьЗначение(Позиция.ТекущийЭлемент());
Если Нрег(ВидСправочника) = "прайс_лист" Тогда
СписокТоваров.ДобавитьЗначение(Позиция.Товар.ТекущийЭлемент());
Иначе
СписокТоваров.ДобавитьЗначение(Позиция.ТекущийЭлемент());
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если СписокПозиций.РазмерСписка()=0 Тогда
Предупреждение("Список позиций пуст");
Возврат;
КонецЕсли;
НаложенФильтрПоТоварам=1;
КонецЕсли;
// не включать отсутствующие
Если ТолькоПрисутствующие<>0 Тогда
ВремРегистры=СоздатьОбъект("Регистры");
Рег=ВремРегистры.ОстаткиТоваров;
Если РабочаяДата()<ПолучитьДатуТА() Тогда
Рег.ВременныйРасчет();
Если НаложенФильтрПоТоварам=1 Тогда
Рег.УстановитьЗначениеФильтра("Товар",СписокТоваров,2);
КонецЕсли;
Рег.УстановитьЗначениеФильтра("Фирма",глПустаяФирма);
ВремРегистры.РассчитатьРегистрыПО(РабочаяДата());
КонецЕсли;
Если НаложенФильтрПоТоварам=1 Тогда
ЧислоТов = СписокПозиций.РазмерСписка();
Для Индекс = 1 По ЧислоТов Цикл
НеУдовлетвФильтру=0;
Номенк = СписокТоваров.ПолучитьЗначение(ЧислоТов+1-Индекс);
// накладываем фильтр по присутствию/отсутствию
Если Номенк.ВидТовара<>Перечисление.ВидыТоваров.Товар Тогда
НеУдовлетвФильтру=1;
Иначе
Кол = ВремРегистры.ОстаткиТоваров.СводныйОстаток(глПустаяФирма,Номенк,,"ОстатокТовара");
Если Кол<=0 Тогда
НеУдовлетвФильтру=1;
КонецЕсли;
КонецЕсли;
Если НеУдовлетвФильтру=1 Тогда
СписокПозиций.УдалитьЗначение(ЧислоТов+1-Индекс);
КонецЕсли;
КонецЦикла;
Иначе
СпрПозиций = СоздатьОбъект("Справочник."+ВидСправочника);
СпрПозиций.ВыбратьЭлементы();
Пока СпрПозиций.ПолучитьЭлемент()>0 Цикл
Если СпрПозиций.ЭтоГруппа()=0 Тогда
Если Нрег(ВидСправочника) = "прайс_лист" Тогда
Номенк = СпрПозиций.Товар.ТекущийЭлемент();
Иначе
Номенк = СпрПозиций.ТекущийЭлемент();
КонецЕсли;
Если Номенк.ВидТовара=Перечисление.ВидыТоваров.Товар Тогда
Кол = ВремРегистры.ОстаткиТоваров.СводныйОстаток(глПустаяФирма,Номенк.ТекущийЭлемент(),,"ОстатокТовара");
Если Кол>0 Тогда
СписокПозиций.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент());
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если СписокПозиций.РазмерСписка()=0 Тогда
Предупреждение("Список позиций пуст");
Возврат;
КонецЕсли;
НаложенФильтрПоТоварам=1;
КонецЕсли;
// теперь отбираем позиции справочника
Если Нрег(ВидСправочника) = "прайс_лист" Тогда
ТекстЗапроса = "
|Период С '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"' По '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"';
|Позиция = Справочник.Прайс_лист.ТекущийЭлемент;
|Товар = Справочник.Прайс_лист.Товар;
|Группировка Позиция Упорядочить По Позиция.Товар.Наименование;
|Условие (Позиция В СписокПозиций);
|";
ИначеЕсли Нрег(ВидСправочника) = "номенклатура" Тогда
ТекстЗапроса = "
|Период С '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"' По '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"';
|Позиция = Справочник.Номенклатура.ТекущийЭлемент;
|Товар = Справочник.Номенклатура.ТекущийЭлемент;
|Группировка Позиция Упорядочить По Позиция.Наименование;
|Условие (Позиция В СписокПозиций);
|";
КонецЕсли;
// выполняем запрос
Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
Возврат;
КонецЕсли;
Ном=0;
Если (ЕдиницаПечати.ТекущаяСтрока()<>1)И(ЕдиницаПечати.ТекущаяСтрока()<>2) Тогда
ПечатьВФиксЕдиницах = 0;
Иначе
ПечатьВФиксЕдиницах = 1;
КонецЕсли;
ВыбОбласть=Таблица.Область("R2C2");
ВыбОбласть.Формат("С50");
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(12);
ВыбОбласть.ЦветТекста(128,0,0);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Курсив(0) ;
Выбобласть.ВертикальноеПоложение(2);
ВыбОбласть.Значение="дата изменения: "+ДатаЗаписи;
//Выводим заголовок таблицы: код, наименование, единицы и цены
ВыбОбласть=Таблица.Область("R3C1");
ВыбОбласть.Формат("С50");
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(8);
ВыбОбласть.ВысотаСтроки(20);
ВыбОбласть.Полужирный(1);
ВыбОбласть.ЦветФона(170,255,220);
ВыбОбласть.Значение="Код";
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть.ГоризонтальноеПоложение(3);
Выбобласть.ВертикальноеПоложение(3);
ВыбОбласть=Таблица.Область("R3C2");
ВыбОбласть.Формат("С50");
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(8);
ВыбОбласть.ВысотаСтроки(20);
ВыбОбласть.Полужирный(1);
ВыбОбласть.ЦветФона(170,255,220);
ВыбОбласть.Значение="Наименование товаров";
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть.ГоризонтальноеПоложение(3);
Выбобласть.ВертикальноеПоложение(3);
ВыбОбласть=Таблица.Область("R3C3");
ВыбОбласть.Формат("С50");
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(8);
ВыбОбласть.ВысотаСтроки(20);
ВыбОбласть.Полужирный(1);
ВыбОбласть.ЦветФона(170,255,220);
ВыбОбласть.Значение="Единица";
Выбобласть.ВертикальноеПоложение(3);
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть.ГоризонтальноеПоложение(3);
Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл
ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс);
Номер=Индекс+3;
ВыбОбласть=Таблица.Область("R3C"+Номер);
ВыбОбласть.Формат("С50");
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(8);
ВыбОбласть.Полужирный(1);
ВыбОбласть.Контроль(4);
ВыбОбласть.ЦветФона(170,255,220);
ВыбОбласть.Значение=ТипЦены.Наименование;
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть.ГоризонтальноеПоложение(3);
Выбобласть.ВертикальноеПоложение(3);
КонецЦикла;
СписокГрупп = СоздатьОбъект("СписокЗначений");
Цена = СоздатьОбъект("Справочник.Цены");
Цена.ИспользоватьДату(РабочаяДата());
НомерПозиции=3;
Пока Запрос.Группировка("Позиция")>0 Цикл
Если Запрос.Позиция.Выбран()=0 Тогда
Продолжить;
КонецЕсли;
глОживить(1);
Если Запрос.Позиция.ЭтоГруппа()=1 тогда
СписокГрупп.ДобавитьЗначение(Запрос.Позиция.ТекущийЭлемент());
Продолжить;
КонецЕсли;
Цена.ИспользоватьВладельца(Запрос.Товар.ТекущийЭлемент());
Если Нрег(ВидСправочника) = "прайс_лист" Тогда
НашлиНенулевуюЦену=0;
Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл
ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс).ТекущийЭлемент();
Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)<=0 Тогда
Продолжить;
КонецЕсли;
Если Цена.Цена=0 Тогда
Продолжить;
КонецЕсли;
НашлиНенулевуюЦену=1;
Прервать;
КонецЦикла;
Если НашлиНенулевуюЦену=0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Пока СписокГрупп.РазмерСписка()>0 Цикл
Гр = СписокГрупп.ПолучитьЗначение(1);
Если Запрос.Позиция.ПринадлежитГруппе(Гр)>0 Тогда
Если Гр.Уровень()=1 Тогда
//Таб.ВывестиСекцию("Группа1|НазваниеПозиции");
НомерПозиции=НомерПозиции+1;
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C1:R"+НомерПозиции+"C"+(МФКатЦены.РазмерСписка()+3));
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C2");
ВыбОбласть.Формат("С50");
ВыбОбласть.ЦветТекста(128,0,0);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.Шрифт("Tahoma,204"); ВыбОбласть.Курсив(1) ;
ВыбОбласть.РазмерШрифта(13);
ВыбОбласть.Полужирный(1);
ВыбОбласть.Значение=Гр.Наименование;
ВыбОбласть.ГоризонтальноеПоложение(3);
ИначеЕсли Гр.Уровень()=2 Тогда
НомерПозиции=НомерПозиции+1;
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C1:R"+НомерПозиции+"C"+(МФКатЦены.РазмерСписка()+3));
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C2");
ВыбОбласть.Формат("С50");
ВыбОбласть.ЦветТекста(128,0,0);
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(11); ВыбОбласть.Курсив(1) ;
ВыбОбласть.Значение=Гр.Наименование;
ВыбОбласть.Полужирный(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
//Таб.ВывестиСекцию("Группа2|НазваниеПозиции");
Иначе
НомерПозиции=НомерПозиции+1;
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C1:R"+НомерПозиции+"C"+(МФКатЦены.РазмерСписка()+3));
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C2");
ВыбОбласть.Формат("С50");
ВыбОбласть.ЦветТекста(128,0,0); ВыбОбласть.Курсив(1) ;
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(11);
ВыбОбласть.Полужирный(1);
ВыбОбласть.Значение=Гр.Наименование;
ВыбОбласть.ГоризонтальноеПоложение(3);
//Таб.ВывестиСекцию("Группа3|НазваниеПозиции");
КонецЕсли;
КонецЕсли;
СписокГрупп.УдалитьЗначение(1);
КонецЦикла;
Если ПечатьВФиксЕдиницах=1 Тогда
Если ЕдиницаПечати.ТекущаяСтрока()=1 Тогда
Единица = Запрос.Товар.ЕдиницаПоУмолчанию;
ИначеЕсли ЕдиницаПечати.ТекущаяСтрока()=2 Тогда
Единица = глВернутьБазовуюЕдиницуТовара(Запрос.Товар.ТекущийЭлемент());
КонецЕсли;
КонецЕсли;
НомерПозиции=НомерПозиции+1;
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C1");
ВыбОбласть.Формат("С50");
ВыбОбласть.ШиринаСтолбца(10);
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(9);
ВыбОбласть.Значение=СокрЛП(Запрос.Товар.Код);
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.ЦветФона(170,255,220);
//Выводим товар
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C2");
ВыбОбласть.Формат("С50");
ВыбОбласть.Подчеркнутый(0);
ВыбОбласть.Шрифт("Tahoma,204"); ВыбОбласть.Курсив(0) ;
ВыбОбласть.ШиринаСтолбца(30);
ВыбОбласть.РазмерШрифта(9);
ВыбОбласть.Значение=СокрЛП(Запрос.Товар.Наименование);
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть.Полужирный(0);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.ЦветФона(170,255,220);
//Выводим единицу
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C3");
ВыбОбласть.Формат("С50");
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.ШиринаСтолбца(10);
ВыбОбласть.РазмерШрифта(9);
ВыбОбласть.Значение=Единица.ТипЕдиницы.Наименование;
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.ЦветФона(170,255,220);
Ном=Ном+1;
Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл
ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс).ТекущийЭлемент();
Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)<=0 Тогда
ПечЦена = "";
Иначе
Если ПечатьВФиксВалюте=0 Тогда
Валюта = Цена.Валюта;
КонецЕсли;
Если ПечатьВФиксЕдиницах=0 Тогда
Единица = Цена.Единица;
КонецЕсли;
ЧЦена = Цена.Цена;
Если Единица<>Цена.Единица Тогда
ЧЦена = ЧЦена * Единица.Коэффициент / Цена.Единица.Коэффициент;
КонецЕсли;
ЧЦена = глПересчет(ЧЦена,Цена.Валюта,РабочаяДата(),ВалютаЗаписи,РабочаяДата());
ПечЦена = СокрЛП(глФРМ2(ЧЦена,ВалютаЗаписи,1))+?(ПечатьВФиксЕдиницах=0," / "+СокрЛП(Строка(Единица)),"");
КонецЕсли;
ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C"+(Индекс+3));
ВыбОбласть.Формат("Ч010.2");
ВыбОбласть.ШиринаСтолбца(14);
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(9);
ВыбОбласть.Значение=ПечЦена;
ВыбОбласть.РамкаОбвести(4,4,4,4);
ВыбОбласть.Редактирование(1);
ВыбОбласть.Доступность(1);
ВыбОбласть.ГоризонтальноеПоложение(2);
ВыбОбласть.ЦветФона(250,250,125);
//Таб.ПрисоединитьСекцию("Товар|Цена");
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ПриВыбореЯчейкиТаблицы(Адрес,Стоимость)
Перем НоваяЦена;
Спр=СоздатьОбъект("Справочник.Номенклатура");
ЕдТовара=СоздатьОбъект("Справочник.Единицы");
СтараяЦена=Таблица.Область(Адрес).Текст;
Номер=Найти(Адрес,"C")-1;
НомерЦены=Найти(Адрес,"C")+1;
АдресТовара=Сред(Адрес,1,Номер)+"C1";
АдресЕдиницы= Сред(Адрес,1,Номер)+"C3";
ОбластьТовара=Таблица.Область(АдресТовара);
ИндексЦены=Число(Сред(Адрес,НомерЦены))-3;
НомерТовара=Число(Сред(Адрес,2,Номер));
Если (ИндексЦены=-1) Тогда
Спр.НайтиПоНаименованию(Таблица.Область(Адрес).Значение,0,0);
ОткрытьФорму(Спр.ТекущийЭлемент(),,0);
Возврат;
КонецЕсли;
Если (ИндексЦены<1) или (НомерТовара<4) или (ИндексЦены>МФКатЦены.РазмерСписка()) Тогда
Возврат;
КонецЕсли;
Если Спр.НайтиПоКоду(ОбластьТовара.Значение)=0 Тогда
Возврат;
КонецЕсли;
Если ВвестиЧисло(НоваяЦена,"Ввод новой цены",10,3,)=0 Тогда
Возврат;
КонецЕсли;
Цены=СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьВладельца(Спр) ;
//Определяем единицу товара
ЕдТовара.ИспользоватьВладельца(Спр) ;
ЕдТовара.ВЫбратьЭлементы();
ОбластьЕдиницы=Таблица.Область(АдресЕдиницы);
Пока ЕдТовара.ПолучитьЭлемент()=1 Цикл
Если ЕдТовара.ТипЕдиницы.Наименование=ОбластьЕдиницы.Значение Тогда
Прервать;
КонецЕсли;
КонецЦикла;
// //Конец
Цены.ВыбратьЭлементы();
ВыбОбласть=Таблица.Область(Адрес);
ВыбОбласть.Значение= глФРМ2(НоваяЦена,ВалютаЗаписи,1);
Цена=СоздатьОбъект("Периодический");
Валюта=СоздатьОбъект("Периодический");
Единица=СоздатьОбъект("Периодический");
Для Индекс = 1 По ИндексЦены Цикл
ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс);
//ЕслиИндексЦены=ИндексПредупреждение(ИндексЦены,3);
КонецЦикла;
ПроверкаЦен=0;
// Проверяем колво одинаковых цен должно быть <2
Пока цены.ПолучитьЭлемент()=1 Цикл
Если Цены.КатегорияЦены=ТипЦены Тогда
ПроверкаЦен=ПроверкаЦен+1;
Если ПроверкаЦен=2 Тогда
Сообщить("У товара существуют две цены! Запись невозможна!","!!");
Возврат;
КонецЕсли;
КонецЕсли;
КонецЦикла;
НайденаЦена=0;
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент()) ;
Если Цены.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)=1 Тогда
Цена.ИспользоватьОбъект("Цена",Цены.ТекущийЭлемент());
Цены.Наценка=0;
Цена.Значение=НоваяЦена;
Цена.ДатаЗнач=ДатаЗаписи;
Цена.Записать();
СтараяВалюта=Цены.Валюта.Получить(ДатаЗаписи);
Валюта.ИспользоватьОбъект("Валюта",Цены.ТекущийЭлемент());
Валюта.Значение=ВалютаЗаписи;
Валюта.ДатаЗнач=ДатаЗаписи;
Валюта.Записать();
Единица.ИспользоватьОбъект("Единица",Цены.ТекущийЭлемент());
Единица.Значение=ЕдТовара.ТекущийЭлемент();
Единица.ДатаЗнач=ДатаЗаписи;
Единица.Записать();
Цены.Записать();
СписокИзмененных.НоваяСтрока(НомерСписка);
СписокИзмененных.УстановитьЗначение(НомерСписка,"Товар",Спр);
СписокИзмененных.УстановитьЗначение(НомерСписка,"ТипЦены",ТипЦены.Наименование);
СписокИзмененных.УстановитьЗначение(НомерСписка,"СтараяЦена",СтараяЦена);
СписокИзмененных.УстановитьЗначение(НомерСписка,"НоваяЦена",глФРМ2(НоваяЦена,Валютазаписи,1));
СписокИзмененных.УстановитьЗначение(НомерСписка,"Единица",Строка(ЕдТовара.ТекущийЭлемент()));
НайденаЦена=1;
КонецЕсли;
Если НайденаЦена=0 Тогда
Цены.Новый();
Цены.КатегорияЦены=ТипЦены;
Цены.Записать();
Цена.ИспользоватьОбъект("Цена",Цены.ТекущийЭлемент());
Цены.Наценка=0;
Цена.Значение=НоваяЦена;
Цена.ДатаЗнач=ДатаЗаписи;
Цена.Записать();
СтараяВалюта=Цены.Валюта.Получить(ДатаЗаписи);
Валюта.ИспользоватьОбъект("Валюта",Цены.ТекущийЭлемент());
Валюта.Значение=ВалютаЗаписи;
Валюта.ДатаЗнач=ДатаЗаписи;
Валюта.Записать();
Единица.ИспользоватьОбъект("Единица",Цены.ТекущийЭлемент());
Единица.Значение=ЕдТовара.ТекущийЭлемент();
Единица.ДатаЗнач=ДатаЗаписи;
Единица.Записать();
Цены.Записать();
СписокИзмененных.НоваяСтрока(НомерСписка);
СписокИзмененных.УстановитьЗначение(НомерСписка,"Товар",Спр);
СписокИзмененных.УстановитьЗначение(НомерСписка,"ТипЦены",ТипЦены.Наименование);
СписокИзмененных.УстановитьЗначение(НомерСписка,"СтараяЦена",СтараяЦена);
СписокИзмененных.УстановитьЗначение(НомерСписка,"НоваяЦена",глФРМ2(НоваяЦена,Валютазаписи,1));
СписокИзмененных.УстановитьЗначение(НомерСписка,"Единица",Строка(ЕдТовара.ТекущийЭлемент()));
КонецЕсли;
КонецПроцедуры
Процедура ВЫПОЛНИТЬ()
СписокИзмененных.ВЫбратьСтроки();
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица1");
Таб.ВывестиСекцию("Шапка");
Если СписокИзмененных.КоличествоСтрок()=0 Тогда
Возврат;
КонецЕсли;
Пока СписокИзмененных.ПолучитьСтроку()=1 Цикл
Товар=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"Товар");
ТипЦены=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"ТипЦены");
СтЦена=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"СтараяЦена");
НвЦена=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"НоваяЦена");
Единица=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"Единица");
Таб.ВывестиСекцию("Цена");
КонецЦикла;
Таб.Опции(0,0,5,0,ПарСтрСпр);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("Список измененных цен","");
КонецПроцедуры
Процедура ИзменитьДату()
ВыбОбласть=Таблица.Область("R2C1:R2C2");
ВыбОбласть.Формат("С50");
ВыбОбласть.Шрифт("Tahoma,204");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.ЦветТекста(128,0,0);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Курсив(0) ;
Выбобласть.ВертикальноеПоложение(2);
ВыбОбласть.Значение="дата изменения: "+ДатаЗаписи;
КонецПроцедуры
Процедура ПриЗакрытии()
Выполнить()
КонецПроцедуры
Процедура ПечатьЦенников()
Перем ПечЕдиница, ПечНаименование,ПечРозн;
Перем ЦенаТовара;
Перем Таб;
Перем ЧислоСтрок;
Перем Столбик;
Перем Ряд;
// Создание Таблицы для выходного отчета
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
ЧислоСтрок=0;
Столбик=1;
Ряд=0;
СписокИзмененных.ВЫбратьСтроки();
Если СписокИзмененных.КоличествоСтрок()=0 Тогда
Возврат;
КонецЕсли;
Пока СписокИзмененных.ПолучитьСтроку()=1 Цикл
ВыбТовар=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"Товар");
ВремЦена=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"НоваяЦена");
СтавкаНПпроц=глПолучитьСтавкуНП(ВыбТовар,РабочаяДата());
ПечНаименование=ВыбТовар.ПолнНаименование;
Страна=ВыбТовар.СтранаПроисхождения;
ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2-"));
Столбик=?(Столбик=0,1,0);
Ряд=?(Столбик=0,Ряд+1,Ряд);
Если Ряд>10 Тогда
Таб.НоваяСтраница();
Ряд=1;
КонецЕсли;
Если Столбик=0 Тогда
Таб.ВывестиСекцию("Товар|Ценник");
Иначе
Таб.ПрисоединитьСекцию("Товар|Ценник");
КонецЕсли;
КонецЦикла;
//Вызов выходного отчета в окно просмотра и редактирования.
Таб.Опции(0,0,0,0,ПарСтрСпр);
Таб.Защита(Константа.ФлагЗащитыТаблиц);
Таб.ТолькоПросмотр(1);
Таб.Показать("Ценник товаров","");
ВыбТовар=0;
КонецПроцедуры
Процедура Сдвиг(Режим,Список)
Перем ТекущПредставление;
Перем СледующПредставление;
ТекущаяСтрока=Список.ТекущаяСтрока();
Если Режим="Вверх" Тогда
Если ТекущаяСтрока=1 Тогда
СледующСтрока=Список.РазмерСписка();
Иначе
СледующСтрока=ТекущаяСтрока-1;
КонецЕсли;
ИначеЕсли Режим="Вниз" Тогда
Если ТекущаяСтрока=Список.РазмерСписка() Тогда
СледующСтрока=1;
Иначе
СледующСтрока=ТекущаяСтрока+1;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
ТекущЗначение=Список.ПолучитьЗначение(ТекущаяСтрока,ТекущПредставление);
ТекущМетка=Список.Пометка(ТекущаяСтрока,);
СледующЗначение=Список.ПолучитьЗначение(СледующСтрока,СледующПредставление);
СледующМетка=Список.Пометка(СледующСтрока,);
Список.УстановитьЗначение(СледующСтрока,ТекущЗначение,ТекущПредставление,1);
Список.Пометка(СледующСтрока,ТекущМетка);
Список.УстановитьЗначение(ТекущаяСтрока,СледующЗначение,СледующПредставление,1);
Список.Пометка(ТекущаяСтрока,СледующМетка);
Список.ТекущаяСтрока(СледующСтрока);
КонецПроцедуры
ЕдиницаПечати.УдалитьВсе();
ЕдиницаПечати.ДобавитьЗначение("по умолчанию"); // 1
ЕдиницаПечати.ДобавитьЗначение("базовая"); // 2
ЕдиницаПечати.ДобавитьЗначение("задания цен"); // 3
ЕдиницаПечати.ТекущаяСтрока(1);
МФКатЦены.УдалитьВсе();
ВсеЦены = СоздатьОбъект("Справочник.КатегорииЦен");
ВсеЦены.ВыбратьЭлементы();
Пока ВсеЦены.ПолучитьЭлемент()>0 Цикл
МФКатЦены.ДобавитьЗначение(ВсеЦены.ТекущийЭлемент());
КонецЦикла;
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Цена это периодический реквизит. Его получают на дату. Если ты пропишешь получение для разных дать, то пожалуста.
Тогда тебе надо убрать ИспользоватьДату() и вместо этого при получении цены прописать вот так
ЧЦена = Цена.Цена.Получить(<НужнаяДата>);
Тогда тебе надо убрать ИспользоватьДату() и вместо этого при получении цены прописать вот так
ЧЦена = Цена.Цена.Получить(<НужнаяДата>);
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот