Автор Тема: Задача 2.09  (Прочитано 13350 раз)

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

Шахназар

  • Пользователь
  • **
  • Сообщений: 27
Re: Задача 2.09
« Ответ #30 : Май 30, 2015, 07:25:13 pm »
А как убрать заголовки в группах полей?

Шахназар

  • Пользователь
  • **
  • Сообщений: 27
Re: Задача 2.09
« Ответ #31 : Май 31, 2015, 10:39:04 am »
Рад буду критике!


Odines

  • Проверенный
  • ***
  • Сообщений: 112
  • ФИО: Odines
Re: Задача 2.09
« Ответ #32 : Сентябрь 12, 2015, 02:48:40 pm »
Мое решение

Zeskord

  • Пользователь
  • **
  • Сообщений: 77
  • ФИО: Андрей Назаров
Re: Задача 2.09
« Ответ #33 : Сентябрь 13, 2015, 03:30:56 pm »
Рад буду критике!

Проведение расходной накладной по старой методике. В цикле проверяешь, есть ли нехватка номенклатуры и, если не хватает, выполняется "Продолжить" и продолжаем вычислять движения для списания по партиям. Но ведь уже понятно, что документ не будет проведен, а на регистр поставлена блокировка, продажи этих позиций ожидают освобождения.
Короче, надо было в одном цикле проверить, хватает ли товара, и, если не хватает какой-то позиции, выходить. А лучше проверять остатки по новой методике.

Справочник "СрокиГодности" - не надо было, надо использовать поле с типом "Дата".

Вид учета субконто Суммовой тоже не надо было создавать.

Задача усложнена. Появились какие-то проекты, счет Дебиторка.

« Последнее редактирование: Сентябрь 13, 2015, 03:34:26 pm от Zeskord »

Zeskord

  • Пользователь
  • **
  • Сообщений: 77
  • ФИО: Андрей Назаров
Re: Задача 2.09
« Ответ #34 : Сентябрь 13, 2015, 03:44:10 pm »
Мое решение

Проверка заполнения приходной накладной проверяет, есть ли одинаковые сочетания Номенклатура - СрокГодности - Цена. Но можно ввести две одинаковых номенклатуры с разными сроками годности и разной ценой. Цитата из условия:
Цитировать
но в одном документе не может быть одинаковых товаров с
различным сроком годности (и разной ценой)

При проведении расходной накладной та же ситуация, см. коммент выше. Мы уже понимаем, что документ не будет проведен, но продолжаем вычисления движений списания партий по остальным позициям документа.

Odines

  • Проверенный
  • ***
  • Сообщений: 112
  • ФИО: Odines
Re: Задача 2.09
« Ответ #35 : Сентябрь 13, 2015, 04:14:57 pm »
Мое решение

Проверка заполнения приходной накладной проверяет, есть ли одинаковые сочетания Номенклатура - СрокГодности - Цена. Но можно ввести две одинаковых номенклатуры с разными сроками годности и разной ценой. Цитата из условия:
Цитировать
но в одном документе не может быть одинаковых товаров с
различным сроком годности (и разной ценой)

При проведении расходной накладной та же ситуация, см. коммент выше. Мы уже понимаем, что документ не будет проведен, но продолжаем вычисления движений списания партий по остальным позициям документа.
спасибо!

rusmosav

  • Проверенный
  • ***
  • Сообщений: 137
Re: Задача 2.09
« Ответ #36 : Октябрь 05, 2015, 07:02:43 am »
Прощу оценить.

lyulko

  • Пользователь
  • **
  • Сообщений: 24
  • ФИО: Александр
Re: Задача 2.09
« Ответ #37 : Октябрь 21, 2016, 07:54:40 am »
День добрый, коллеги! посмотрите мое решение, буду рад критике!

ahang

  • Пользователь
  • **
  • Сообщений: 31
  • ФИО: Антон
Re: Задача 2.09
« Ответ #38 : Октябрь 21, 2016, 09:16:35 am »
День добрый, коллеги! посмотрите мое решение, буду рад критике!
Добрый день! В документе Расходная накладная присутствует "проблема копеек", а также в цикле нет проверки на количество распределяемого товара, т.е. в цикле отсутствует следующие условие:
Пока Выборка.Следующий() И ОсталосьРаспределить>0 ЦиклТакже считаю в качестве оптимизации не нужно делать 2 цикла по ВыборкаНоменклатура, лучше сделать проверку и списание в одном цикле.

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

Если Отказ Тогда
Продолжить;
КонецЕсли;

Выборка = ВыборкаНоменклатура.Выбрать();
ОсталосьРаспределить = ВыборкаНоменклатура.Количество;
Пока Выборка.Следующий() И ОсталосьРаспределить > 0 Цикл
Распределить =МИН(ОсталосьРаспределить,выборка.КоличествоОстаток);
ОсталосьРаспределить = ОсталосьРаспределить-Распределить;
Движение = Движения.Управленческий.Добавить();
Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.КоличествоКт = Распределить;
// обход проблемы копеек
Движение.Сумма = ?(ОсталосьРаспределить=выборка.КоличествоОстаток,Выборка.СуммаОстаток,Распределить/Выборка.КоличествоОстаток*Выборка.СуммаОстаток);
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = Выборка.Субконто2;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Партия] = Выборка.Субконто3;
КонецЦикла;
КонецЦикла;

Если НЕ Отказ Тогда
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.Сумма = СуммаПоДокументу;
КонецЕсли;

Также есть небольшое замечание по запросу, раз Вы решили сделать отдельную виртуальную таблицу ВТ_Остатки, то не забывайте и по ней сделать Индексирование по полю Номенклатура, т.к. чуть ниже в запросе по этому полю идет соединение м/у двумя таблицами ДокТЧ и ВТ_Остатки. Вообще можно было бы обойтись без создания ВТ_Остатки.
« Последнее редактирование: Октябрь 21, 2016, 09:24:45 am от ahang »

lyulko

  • Пользователь
  • **
  • Сообщений: 24
  • ФИО: Александр
Re: Задача 2.09
« Ответ #39 : Октябрь 21, 2016, 11:51:08 am »
День добрый, коллеги! посмотрите мое решение, буду рад критике!
Добрый день! В документе Расходная накладная присутствует "проблема копеек", а также в цикле нет проверки на количество распределяемого товара, т.е. в цикле отсутствует следующие условие:
Пока Выборка.Следующий() И ОсталосьРаспределить>0 ЦиклТакже считаю в качестве оптимизации не нужно делать 2 цикла по ВыборкаНоменклатура, лучше сделать проверку и списание в одном цикле.

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

Если Отказ Тогда
Продолжить;
КонецЕсли;

Выборка = ВыборкаНоменклатура.Выбрать();
ОсталосьРаспределить = ВыборкаНоменклатура.Количество;
Пока Выборка.Следующий() И ОсталосьРаспределить > 0 Цикл
Распределить =МИН(ОсталосьРаспределить,выборка.КоличествоОстаток);
ОсталосьРаспределить = ОсталосьРаспределить-Распределить;
Движение = Движения.Управленческий.Добавить();
Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.КоличествоКт = Распределить;
// обход проблемы копеек
Движение.Сумма = ?(ОсталосьРаспределить=выборка.КоличествоОстаток,Выборка.СуммаОстаток,Распределить/Выборка.КоличествоОстаток*Выборка.СуммаОстаток);
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = Выборка.Субконто2;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Партия] = Выборка.Субконто3;
КонецЦикла;
КонецЦикла;

Если НЕ Отказ Тогда
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.Сумма = СуммаПоДокументу;
КонецЕсли;

Также есть небольшое замечание по запросу, раз Вы решили сделать отдельную виртуальную таблицу ВТ_Остатки, то не забывайте и по ней сделать Индексирование по полю Номенклатура, т.к. чуть ниже в запросе по этому полю идет соединение м/у двумя таблицами ДокТЧ и ВТ_Остатки. Вообще можно было бы обойтись без создания ВТ_Остатки.

Спасибо, да действительно упустил проверку на "осталосьСписать>0" в спешке таймера отсчета времени. все остальные замечания тоже исправил

ahang

  • Пользователь
  • **
  • Сообщений: 31
  • ФИО: Антон
Re: Задача 2.09
« Ответ #40 : Октябрь 21, 2016, 01:05:22 pm »
Прощу оценить.

В модуле проведения документа Расходная накладная, когда получаете виртуальную таблицу "Список", забыли указать условие отбора по текущему документу.

Также считаю создавать справочник "Сроки" излишним. Для счета "Товары" по аналитике "Срок годности" нужно было использовать "Дату", а не справочник. В связи с тем, что в запросе Вы упорядочивание делаете по наименованию поля "Срок годности", то не выполняется условие задачи "В первую очередь списывается товар с наименьшим сроком годности...". Т.е. если в Вашей базе поставить на приход один и тот же товар, но с разными сроками годности, например "01/02/2018" и "30.06.2017", то у Вас списывается первым товар со сроком "01/02/2018".

majestic

  • Новичок
  • *
  • Сообщений: 9
  • ФИО: Александр
Re: Задача 2.09
« Ответ #41 : Март 04, 2017, 03:08:14 pm »
Решил, используя 3 субконто у счета "Товары" - Номенклатура, Партия, Срок годности. В случае, если в документе поступления товаров добавляется строчка номенклатуры со сроком годности, отличающимся от срока годности уже введенной аналогичной номенклатуры, то строчки схлопываются по количеству, цена берется из уже введенной строки.

veiuper

  • Новичок
  • *
  • Сообщений: 9
  • ФИО: Осипов Валерий Вячеславович
Re: Задача 2.09
« Ответ #42 : Июнь 27, 2018, 06:23:50 pm »
Буду рад критике.

С учетом ответа Павла Белоусова на http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=547538&print=1.