Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Выбор срока годности по номенклатуре в расходной накладной

Выбор срока годности по номенклатуре в расходной накладной
Я
   ivangrant
 
20.03.19 - 08:14
Решаю задачку по БУ.
В ТЗ написано, что в ТЧ Документа надо проставлять срок годности товара. Для Приходной и Расходной накладной.
Для ДокументаПриходнаяНакладная всё понятно. Но как сделать так, чтобы при создании Документа РасходнаяНакладная и добавлении номенклатуры можно было выбирать срок годности?
 
 
   СтарПом
 
1 - 20.03.19 - 08:33
Добро пожаловать в партионный учет
   ivangrant
 
2 - 20.03.19 - 13:27
Да, если допускается такой вариант. Но эксперт по экзамену на 1С: СПЕЦ утверждает, что можно обойтись и без партионного учета.
   Kigo_Kigo
 
3 - 20.03.19 - 13:34
(2) Характеристики?
   Garykom
 
4 - 20.03.19 - 13:37
По серийный учет или учет по характеристиками это виды партионного учета.

Просто более упрощенные как и разные прочие реализации партия = документ поступления (хотя часто партия = строка документа поступления).
   Garykom
 
5 - 20.03.19 - 13:41
(4)+ А бывает что даже в одной строке документа несколько партий, например с разной серий/сроком годности и надо дробить на разные строки или еще каким то образом указывать.

Простейший вариант это Доп. реквизиты и сведения для Номенклатуры и партия = новая номенклатура.
Если дубли номенклатуры не сильно смущают, где разница только в наименовании и доп.реквизитах.
   Kigo_Kigo
 
6 - 20.03.19 - 13:46
(4) (5) Ну не кого не смущает вводить одну и ту же номенклатуру с разным набором характеристик, к примеру одежду, с цветом и размером, другое дело это оборотные характеристики, которые могут использовать много раз, а срок хранения - конечная характеристика,список которых будет только увеличиваться
   Garykom
 
7 - 20.03.19 - 13:55
Ну "В ТЗ написано, что в ТЧ Документа надо проставлять срок годности товара"

В учебной задачке простейший (и тупейший) вариант где данные хранятся сразу в ТЧ документов.

И как понял у ТС загвоздка только в том как при выборе номенклатуры в РасходнойНакладной, получить запросом допустимые СрокГодности из всех ПриходныхНакладных, показать список и по выбору пользователя подставить в поле.
Т.е. не вручную срок годности указывается а выбором с учетом номенклатуры.
   Kigo_Kigo
 
8 - 20.03.19 - 14:01
(7) Ну тогда все проще, если это не типовое решение, то регистр накопления с измерениями "Номенклатура, "СрокГодности" с ресурсом количество, при проведении прихода - пишем туда, в расходную накладную запросом выводим остатки по номенклатуре, сроке годности и количестве, при проведении расхнакл - списываем
   Dmitry1c
 
9 - 20.03.19 - 14:01
(0) справочник "Сроки годности" в качестве второго субконто
   Garykom
 
10 - 20.03.19 - 14:15
(8) И получаем возможный дурдом с рассинхронизацией регистра основного остатков (по складам допустим) и нашего по срокам годности, где и там и там есть Номенклатура и Количество.
 
 Рекламное место пустует
   Kigo_Kigo
 
11 - 20.03.19 - 14:28
(10) Если не типовое, а тестовое решение? То вполне пойдет, никто не говорит - что это что то типовое, возможно имеет смысли работать с остатками товаров,но это ТС пусть сам кумекает
   zelyak
 
12 - 20.03.19 - 14:52
(2) есть такое понятие серия - он же срок годности
   zelyak
 
13 - 20.03.19 - 14:52
В серии даже поле такое есть. )))
   zelyak
 
14 - 20.03.19 - 14:53
Судя по беседе типовой функционал мало кто знает.
   AlvlSpb
 
15 - 20.03.19 - 14:54
типичный учет с включенными сериями. Читай как устроено в типовых и делай
   Масянька
 
16 - 20.03.19 - 14:57
(0) Примитивно: партии (РН) + срок годности.
   zelyak
 
17 - 20.03.19 - 15:06
(16) в одной партии может быть разный срок годности.
   Garykom
 
18 - 20.03.19 - 15:11
(17) Это разные партии так то, просто приехали вместе и по документам как одна.
   Garykom
 
19 - 20.03.19 - 15:13
Самый прикол когда две партии отличаются только ценой закупки и ценой продажи ))
Все остальное полностью идентично вплоть до серий и сроков годности.
   Garykom
 
20 - 20.03.19 - 15:13
(19)+ Они даже одним документом от поставщика прийти могут, разными строками.
   Масянька
 
21 - 20.03.19 - 15:20
(17) Не может.
И этот человек рассказывает про типовой функционал.
   ivangrant
 
22 - 20.03.19 - 16:37
Через РН или партионный учет решаемо.
Но правильно считать и получать данные без РН и справочников (комментарий от разработчкиа экзамена 1С:СПЕЦ). Вот тут загвоздка.
Думаю проще написать всё ТЗ по БУ.

_____
Необходимо создать документ «Операция», с помощью которого пользователь должен иметь возможность ввести проводки с произвольной корреспонденцией счетов. При решении задачи следует учитывать возможность наличия проводок, сформированных с помощью данного документа.
Компания занимается торговлей продуктами питания. Учет товаров ведется в разрезе сроков годности. Под сроком годности понимается календарная дата, до которой товар годен к употреблению. На один и тот же товар с разными сроками годности при его поступлении может указываться разная цена. Например, на товар со сроком годности 10 января 2010 цена может быть ниже, чем на товар со сроком годности 30 января 2010. Товар с одинаковым сроком годности может поступать разными документами и по разной цене. Возможна ситуация когда в одном документе один и тот же товар поступает с разными сроками годности (и по разной цене). Учет товаров в разрезе складов не ведется.
Документ «Приходная накладная» реализует следующую проводку:
Дт «Товары» - Кт «Поставщики» на количество и сумму закупаемого товара.
Продажа товара регистрируется документом «Расходная накладная». Срок годности указывается в табличной части документа. Себестоимость рассчитывается как средняя по номенклатурной позиции в разрезе срока годности.
Документ «Расходная накладная» реализует следующие проводки:
Дт «Прибыли и убытки» - Кт «Товары» на количество и сумму себестоимости;
Дт «Покупатели» - Кт «Прибыли и убытки» на сумму в продажных ценах.
При первоначальном проведении документа «Расходная накладная» себестоимость не формируется. Фиксируется только количество продаваемого товара.
Для формирования себестоимости списываемых товаров необходимо запустить специальную обработку «Формирование себестоимости», которая для всех расходных накладных, введенных в заданном в обработке периоде, переформирует необходимые проводки с учетом рассчитанной на момент проведения документа себестоимости.
_________
   ivangrant
 
23 - 21.03.19 - 09:12
Пообщавшись со Спецом решено проверять срок годности по Документу ПриходнаяНакладная. Проверка работает. Теперь остатки не проверяются (во второй цикл не заходит обработчик :( ).
_____

Процедура ОбработкаПроведения(Отказ, Режим) 

Движения.БухУчет.Записывать = Истина; 
Движения.БухУчет.Записать(); 

Блокировка = Новый БлокировкаДанных; 
ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.БухУчет"); 
ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Товары); 
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; 
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; 
ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура, "Номенклатура"); 
ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.СрокГодности, "СрокГодности"); 
Блокировка.Заблокировать();    

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА 

// Данный фрагмент построен конструктором. 
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! 


Запрос = Новый Запрос; 
Запрос.Текст = 
"ВЫБРАТЬ 
|    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура, 
|    РасходнаяНакладнаяСписокНоменклатуры.СрокГодности, 
|    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоДок, 
|    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаДок 
|ПОМЕСТИТЬ ВТ_ТЧ 
|ИЗ 
|    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры 
|ГДЕ 
|    РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка 
| 
|СГРУППИРОВАТЬ ПО 
|    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, 
|    РасходнаяНакладнаяСписокНоменклатуры.СрокГодности 
| 
|ИНДЕКСИРОВАТЬ ПО 
|    Номенклатура 
|; 
| 
////////////////////////////////////////////////////////////­//////////////////// 

|ВЫБРАТЬ 
|    ВТ_ТЧ.Номенклатура КАК Номенклатура, 
|    ВТ_ТЧ.СрокГодности КАК СрокГодности, 
|    ВТ_ТЧ.КоличествоДок КАК КоличествоДок, 
|    ВТ_ТЧ.СуммаДок, 
|    ЕСТЬNULL(БухУчетОстатки.СуммаОстаток, 0) КАК СуммаОстатокСклад, 
|    ЕСТЬNULL(БухУчетОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокСклад, 
|    ВТ_ТЧ.Номенклатура.Представление КАК НоменклатураПред 
|ИЗ 
|    ВТ_ТЧ КАК ВТ_ТЧ 
|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.БухУчет.Остатки( 
|    &МоментВремени, 
|    Счет = &Товары, 
|    &Субконто, 
|    (Субконто1, Субконто2) В 
|    (ВЫБРАТЬ 
|    ВТ_ТЧ.Номенклатура, 
|    ВТ_ТЧ.СрокГодности 
|    ИЗ 
|    ВТ_ТЧ КАК ВТ_ТЧ)) КАК БухУчетОстатки 
|    ПО ВТ_ТЧ.Номенклатура = БухУчетОстатки.Субконто1 
|    И ВТ_ТЧ.СрокГодности = БухУчетОстатки.Субконто2 
| 
|УПОРЯДОЧИТЬ ПО 
|    СрокГодности"; 

Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); 
Запрос.УстановитьПараметр("Ссылка", Ссылка); 
Запрос.УстановитьПараметр("Товары", ПланыСчетов.Управленческий.Товары); 

Субконто = Новый Массив; 
Субконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура); 
Субконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.СрокГодности); 
Запрос.УстановитьПараметр("Субконто", Субконто); 

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

ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); 
Пока ВыборкаНоменклатура.Следующий() Цикл 
Если ВыборкаНоменклатура.КоличествоОстатокСклад <= 0 Тогда 
Сообщение = Новый СообщениеПользователю; 
Сообщение.Текст = "Отсутствует товар "+ВыборкаНоменклатура.НоменклатураПред+" со сроком годности "+ВыборкаНоменклатура.СрокГодности+"..."; 
Сообщение.Сообщить(); 
Отказ = Истина; 
КонецЕсли; 
Если Отказ Тогда 
Продолжить; 
КонецЕсли; 

ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать(); 

Пока ВыборкаДетальныеЗаписи.Следующий() И ВыборкаДетальныеЗаписи.КоличествоДок > 0 Цикл 
Если ВыборкаДетальныеЗаписи.КоличествоДок > ВыборкаДетальныеЗаписи.КоличествоОстатокСклад Тогда 
Сообщение = Новый СообщениеПользователю; 
Сообщение.Текст = "Не хватает остатка по номенклатуре "+ВыборкаДетальныеЗаписи.НоменклатураПред+" со сроком годности "+ВыборкаДетальныеЗаписи.СрокГодности+". В наличии: "+ВыборкаДетальныеЗаписи.КоличествоОстатокСклад+" шт."; 
Сообщение.Сообщить(); 
Отказ = Истина; 
Иначе 

// регистр БухУчет    

Движение = Движения.БухУчет.Добавить(); 
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки; 
Движение.СчетКт = ПланыСчетов.Управленческий.Товары; 
Движение.Период = Дата; 
Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаДок; 
Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоДок; 
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.Номенклатура; 
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.Номенклатура; 
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = ВыборкаДетальныеЗаписи.СрокГодности; 

// регистр БухУчет 

Движение = Движения.БухУчет.Добавить(); 
Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели; 
Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки; 
Движение.Период = Дата; 
Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаДок; 
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ВыборкаДетальныеЗаписи.Номенклатура;    
КонецЕсли; 

КонецЦикла; 
КонецЦикла; 


//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА 


//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ 

// Данный фрагмент построен конструктором. 
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! 


//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ 

КонецПроцедуры 
________
Чего я пропустил?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует