Остатки подарочных сертификатов в РМК. УНФ 3.0
Клиент столкнулся с тем, что при продаже подарочного сертификата показываются вообще все номера (серии) выбранного подарочного сертификата. Учитывая, что в базе ведутся несколько организаций, показывается очень большой список номеров. Кассиры могут допустить ошибку.
Это происходит потому, что остатки по сериям не учитываются для подарочных сертификатов. Это видно в процедуре ЗаполнитьСписокСерий модуля СерверЛояльностиПоставщикДанныхУНФ:
// Заполняет список серий // // Параметры: // Результат - Неопределено, ТаблицаЗначений - возвращаемое значение // ПараметрыРасчета - - Структура - см. ДесериализоватьПараметрыРасчета(). // Процедура ЗаполнитьСписокСерий(Результат, ПараметрыРасчета) Экспорт УстановитьПривилегированныйРежим(Истина); СтруктураСерий = Новый Структура("Номенклатура, Характеристика, Магазин, ЭтоПродажа"); ЗаполнитьСтруктуруПараметровСерий(ПараметрыРасчета,СтруктураСерий); СтатусСерииПродан = Ложь; Если НЕ СтруктураСерий.ЭтоПродажа Тогда СтатусСерииПродан = Истина; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СерииНоменклатурыОстатки.Серия КАК Серия |ПОМЕСТИТЬ втОстаткиСерий |ИЗ | РегистрНакопления.СерииНоменклатуры.Остатки( | &ТекущаяДата, | Номенклатура = &Номенклатура | И СтруктурнаяЕдиница = &ТорговыйОбъект | И Характеристика = &Характеристика) КАК СерииНоменклатурыОстатки |ГДЕ | СерииНоменклатурыОстатки.КоличествоОстаток > 0 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СерииНоменклатуры.Ссылка КАК Серия, | СерииНоменклатуры.Наименование КАК Наименование |ИЗ | Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПолитикаУчетаСерий КАК втПолитикаУчетаСерий | ПО Номенклатура.ПолитикаУчетаСерий = втПолитикаУчетаСерий.Ссылка | ПО СерииНоменклатуры.Владелец = Номенклатура.Ссылка |ГДЕ | НЕ СерииНоменклатуры.ПометкаУдаления | И ВЫБОР | КОГДА СерииНоменклатуры.ГоденДо = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) | ТОГДА ИСТИНА | ИНАЧЕ СерииНоменклатуры.ГоденДо > &ТекущаяДата | КОНЕЦ | И ВЫБОР | КОГДА Номенклатура.ИспользоватьУникальныеСерии | ТОГДА СерииНоменклатуры.Продан = &СтатусСерииПродан | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА Номенклатура.ТипНоменклатуры = &Запас | И НЕ СерииНоменклатуры.Продан | И НЕ втПолитикаУчетаСерий.ТипПолитики = &ПолитикаУчетаСерий | ТОГДА СерииНоменклатуры.Ссылка В | (ВЫБРАТЬ | втОстаткиСерий.Серия | ИЗ | втОстаткиСерий КАК втОстаткиСерий) | ИНАЧЕ Номенклатура.Ссылка = &Номенклатура | КОНЕЦ"; Запрос.УстановитьПараметр("Номенклатура", СтруктураСерий.Номенклатура); Запрос.УстановитьПараметр("Характеристика", СтруктураСерий.Характеристика); Запрос.УстановитьПараметр("ТорговыйОбъект", СтруктураСерий.Магазин); Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); Запрос.УстановитьПараметр("Запас", Перечисления.ТипыНоменклатуры.Запас); Запрос.УстановитьПараметр("СтатусСерииПродан", СтатусСерииПродан); Запрос.УстановитьПараметр("ПолитикаУчетаСерий", Перечисления.ТипыПолитикУказанияСерий.СправочноеУказаниеСерий); РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл НоваяСтрока = Результат.Добавить(); НоваяСтрока.СерияПредставление = Выборка.Наименование; НоваяСтрока.ИдентификаторСерий = Строка(Выборка.Серия.УникальныйИдентификатор()); КонецЦикла; КонецЕсли; КонецПроцедуры
Остатки используются только для ТипаНоменклатуры Запас.
Более того, серии по подарочным сертификатам не проходят по регистру СерииНоменклатуры, они делают движения только по оборотному регистру накопления ДвиженияСерииНоменклатуры, в котором не учитываются остатки.
Пришлось написать собственный запрос по регистру ДвиженияСерииНоменклатуры, чтобы определять серии на остатке:
&После("ЗаполнитьСписокСерий") Процедура дор_ЗаполнитьСписокСерий(Результат, ПараметрыРасчета) УстановитьПривилегированныйРежим(Истина); СтруктураСерий = Новый Структура("Номенклатура, Характеристика, Магазин, ЭтоПродажа"); ЗаполнитьСтруктуруПараметровСерий(ПараметрыРасчета,СтруктураСерий); //По подарочным сертификатам только с остатками Если СтруктураСерий.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.ПодарочныйСертификат Тогда Запрос = Новый Запрос; //По регистру движения серий приходится считать остаток Запрос.Текст = "ВЫБРАТЬ | Т.Серия КАК Серия, | Т.Серия.Наименование КАК Наименование, | СУММА(ВЫБОР | КОГДА Т.Операция = ЗНАЧЕНИЕ(Перечисление.ОперацииСерийНоменклатуры.Приход) | ТОГДА 1 | КОГДА Т.Операция = ЗНАЧЕНИЕ(Перечисление.ОперацииСерийНоменклатуры.Возврат) | ТОГДА 1 | КОГДА Т.Операция = ЗНАЧЕНИЕ(Перечисление.ОперацииСерийНоменклатуры.Расход) | ТОГДА -1 | ИНАЧЕ 0 | КОНЕЦ) КАК Остаток |ИЗ | РегистрНакопления.ДвиженияСерииНоменклатуры КАК Т |ГДЕ | Т.Период <= &ТекущаяДата | И Т.Номенклатура = &Номенклатура | И Т.СтруктурнаяЕдиница = &ТорговыйОбъект | И Т.Характеристика = &Характеристика | |СГРУППИРОВАТЬ ПО | Т.Серия, | Т.Серия.Наименование | |ИМЕЮЩИЕ | СУММА(ВЫБОР | КОГДА Т.Операция = ЗНАЧЕНИЕ(Перечисление.ОперацииСерийНоменклатуры.Приход) | ТОГДА 1 | КОГДА Т.Операция = ЗНАЧЕНИЕ(Перечисление.ОперацииСерийНоменклатуры.Возврат) | ТОГДА 1 | КОГДА Т.Операция = ЗНАЧЕНИЕ(Перечисление.ОперацииСерийНоменклатуры.Расход) | ТОГДА -1 | ИНАЧЕ 0 | КОНЕЦ) > 0"; Запрос.УстановитьПараметр("Номенклатура", СтруктураСерий.Номенклатура); Запрос.УстановитьПараметр("Характеристика", СтруктураСерий.Характеристика); Запрос.УстановитьПараметр("ТорговыйОбъект", СтруктураСерий.Магазин); Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); Результат.Очистить(); //Корректируем для подарочных сертификатов, оставляем только с остатками РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл НоваяСтрока = Результат.Добавить(); //Представление все равно игнорируется... НоваяСтрока.СерияПредставление = Выборка.Наименование + " (" + Выборка.Остаток + ")"; НоваяСтрока.ИдентификаторСерий = Строка(Выборка.Серия.УникальныйИдентификатор()); КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры
Но 1С «порадовала» еще раз. Представление серии игнорируется, поэтому вывести остаток в скобочках после названия серии не получилось, как хотелось. Но зато выводятся только те сертификаты, которые есть на остатки. Правда, можно попробовать еще исключить и те, которые проданы, но переделывать не стал.
Еще раз убеждаюсь, что УНФ писали инопланетяне. В УТ 11, например, выводятся остатки подарочных сертификатов.
Среда: УНФ 3.0.7.122 Объем: 1.5 час.
Свежие комментарии