Пользователи работавшие с конфигурацией "Торговля и Склад" редакции 9 на платформе 1С Предприятие 7.7 наверное помнят, что в добавок к методам партионного учета себестоимости товаров: "FIFO","LIFO", в документах "Расходная накладная", "Перемещение ТМЦ", "Списание ТМЦ" существовала возможность выбора для списания конкретной партии товара, независимо от настроек учета. В конфигурации "Управление торговлей" редакции 10 разработчики такую возможность явно не реализовали. Иногда все же бывают ситуации, когда нужно списать товар из более поздней или ранней партии, конечно можно использовать серии или характеристики номенклатуры , но это не всегда удобно. Не берусь судить о методологии учета реализованной в "Управление торговлей", но хочу поделиться с сообществом идеей реализации возможности выборочного списания партий товаров.
В конфигурации имеет регистр сведений "Списанные товары". Из комментария к регистру, мы узнаем следующее: "Содержит данные документов, необходимые для выполнения движений, связанных со списанием партий товаров". Это служебный регистр сведений, документ списания формирует записи по данному регистру, которые в дальнейшем используются процедурами из модуля "Управление запасами партионный учет" для непосредственно списания партий товаров и формирования движений по регистру накопления "Партии товаров на складах (управленческий учет)".
Один из реквизитов регистра сведений "Списанные товары" называется "Документ Партии", из комментария следует : "Документ партии (документ поставки, документ реализации)". Указав при проведении значение данного реквизита, мы тем самым явно задаем "приоритетный" документ партии.
Реализовать в данный реквизит запись ссылки на документ партии достаточно просто.
Разберем на примере документа "Реализация товаров и услуг":
В табличную часть "Товары" необходимо добавить реквизит "ДокументПартии". Проще всего скопировать его из регистра сведений "Списанные товары" и вставить в табличную часть "Товары".
Далее необходимо в форме документа реализовать выбор конкретной партии товара. Один из простейших вариантов обработчика выбора:
Процедура ТоварыДокументПартииНачалоВыбора(Элемент, СтандартнаяОбработка)
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
Если НЕ ЭтоНовый() Тогда
ТекстЗапроса = "
|ВЫБРАТЬ
|ПартииТоваровНаСкладахОстатки.Номенклатура,
|ПартииТоваровНаСкладахОстатки.ДокументОприходования,
|ПартииТоваровНаСкладахОстатки.ДокументОприходования.Контрагент КАК Поставщик,
|ПартииТоваровНаСкладахОстатки.ДокументОприходования.Организация КАК Организация,
|СУММА(ПартииТоваровНаСкладахОстатки.КоличествоОстаток) КАК Количество,
|СУММА(ВЫБОР КОГДА ПартииТоваровНаСкладахОстатки.КоличествоОстаток > 0 ТОГДА
|ВЫРАЗИТЬ(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток/ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК ЧИСЛО(15,2))
|ИНАЧЕ ПартииТоваровНаСкладахОстатки.СтоимостьОстаток КОНЕЦ) КАК СтоимостьЕдиницы,
|СУММА(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток) КАК Стоимость
|ИЗ
|РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Период,Номенклатура=&Номенклатура и Склад=&Склад и СтатусПартии=&СтатусПартии) КАК ПартииТоваровНаСкладахОстатки
|ГДЕ (ПартииТоваровНаСкладахОстатки.ДокументОприходования.Организация.Ссылка = &Организация)
|СГРУППИРОВАТЬ ПО
|ПартииТоваровНаСкладахОстатки.Номенклатура,ПартииТоваровНаСкладахОстатки.ДокументОприходования
|УПОРЯДОЧИТЬ ПО ПартииТоваровНаСкладахОстатки.Номенклатура.Наименование,ДокументОприходования.Дата";
Запрос = Новый Запрос();
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Период" ,ЭтотОбъект.МоментВремени());
Запрос.УстановитьПараметр("Номенклатура" ,СтрокаТабличнойЧасти.Номенклатура);
Запрос.УстановитьПараметр("Склад" ,?(ЗначениеЗаполнено(СтрокаТабличнойЧасти.Склад),СтрокаТабличнойЧасти.Склад,ЭтотОбъект.Склад));
Запрос.УстановитьПараметр("СтатусПартии" ,Перечисления.СтатусыПартийТоваров.Купленный);
Запрос.УстановитьПараметр("Организация" ,ЭтотОбъект.Организация);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
ВыбраннаяСтрока = РезультатЗапроса.ВыбратьСтроку("Выберите документ оприходования");
Если ВыбраннаяСтрока <> Неопределено Тогда
СтрокаТабличнойЧасти.ДокументПартии = ВыбраннаяСтрока.ДокументОприходования;
КонецЕсли;
Иначе
ОбщегоНазначения.СообщитьОбОшибке("Действие недоступно для незаписанного документа");
КонецЕсли;
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Теперь необходимо модифицировать процедуру подготовки таблицы товаров "ПодготовитьТаблицыДокумента", для проведения про регистрам . Необходимо в структуру полей добавить реквизит "ДокументПартии".
Процедура ПодготовитьТаблицыДокумента(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоУслугам, ТаблицаПоТаре) Экспорт
.......
СтруктураПолей.Вставить("КоличествоВЕдиницахДокумента" , "Количество");
СтруктураПолей.Вставить("ДокументПартии" , "ДокументПартии"); //Добавляем в структуру полей "ДокументПартии"
.......
Данный метод имеет некоторые ограничения в применении. Здесь не учитывается случай с комиссионной торговлей, нет проверки серий и характеристик номенклатуры, оставляю это все на совести разработчика.
Этим методом стоит пользоваться только при условии соблюдения "порядка" в учете. В случае частого проведения "задним числом" или наличии расхождений между складским и партионным учетом вы рискуете лишь добавить себе проблем.