А чего в ПВХ ВидыСубконто Субконто "Партии" Называется "срок годности"?
Добавлено (18.07.2011, 12:01)
---------------------------------------------
проверку приходной не реализовала
Рад буду критике!
Мое решение
но в одном документе не может быть одинаковых товаров с
различным сроком годности (и разной ценой)
спасибо!Мое решение
Проверка заполнения приходной накладной проверяет, есть ли одинаковые сочетания Номенклатура - СрокГодности - Цена. Но можно ввести две одинаковых номенклатуры с разными сроками годности и разной ценой. Цитата из условия:Цитироватьно в одном документе не может быть одинаковых товаров с
различным сроком годности (и разной ценой)
При проведении расходной накладной та же ситуация, см. коммент выше. Мы уже понимаем, что документ не будет проведен, но продолжаем вычисления движений списания партий по остальным позициям документа.
День добрый, коллеги! посмотрите мое решение, буду рад критике!Добрый день! В документе Расходная накладная присутствует "проблема копеек", а также в цикле нет проверки на количество распределяемого товара, т.е. в цикле отсутствует следующие условие:
Пока Выборка.Следующий() И ОсталосьРаспределить>0 Цикл
Также считаю в качестве оптимизации не нужно делать 2 цикла по ВыборкаНоменклатура, лучше сделать проверку и списание в одном цикле. Пока ВыборкаНоменклатура.Следующий() Цикл
Если ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток>0 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно товара <"+ ВыборкаНоменклатура.номенклатура+"> в количестве <"+(ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток)+"> шт";
Сообщение.Сообщить();
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли;
Выборка = ВыборкаНоменклатура.Выбрать();
ОсталосьРаспределить = ВыборкаНоменклатура.Количество;
Пока Выборка.Следующий() И ОсталосьРаспределить > 0 Цикл
Распределить =МИН(ОсталосьРаспределить,выборка.КоличествоОстаток);
ОсталосьРаспределить = ОсталосьРаспределить-Распределить;
Движение = Движения.Управленческий.Добавить();
Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.КоличествоКт = Распределить;
// обход проблемы копеек
Движение.Сумма = ?(ОсталосьРаспределить=выборка.КоличествоОстаток,Выборка.СуммаОстаток,Распределить/Выборка.КоличествоОстаток*Выборка.СуммаОстаток);
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = Выборка.Субконто2;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Партия] = Выборка.Субконто3;
КонецЦикла;
КонецЦикла;
Если НЕ Отказ Тогда
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.Сумма = СуммаПоДокументу;
КонецЕсли;
День добрый, коллеги! посмотрите мое решение, буду рад критике!Добрый день! В документе Расходная накладная присутствует "проблема копеек", а также в цикле нет проверки на количество распределяемого товара, т.е. в цикле отсутствует следующие условие:Код: [Выделить]Пока Выборка.Следующий() И ОсталосьРаспределить>0 Цикл
Также считаю в качестве оптимизации не нужно делать 2 цикла по ВыборкаНоменклатура, лучше сделать проверку и списание в одном цикле.
Примерно все будет выглядеть вот так:Код: [Выделить]Пока ВыборкаНоменклатура.Следующий() Цикл
Если ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток>0 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Недостаточно товара <"+ ВыборкаНоменклатура.номенклатура+"> в количестве <"+(ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток)+"> шт";
Сообщение.Сообщить();
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли;
Выборка = ВыборкаНоменклатура.Выбрать();
ОсталосьРаспределить = ВыборкаНоменклатура.Количество;
Пока Выборка.Следующий() И ОсталосьРаспределить > 0 Цикл
Распределить =МИН(ОсталосьРаспределить,выборка.КоличествоОстаток);
ОсталосьРаспределить = ОсталосьРаспределить-Распределить;
Движение = Движения.Управленческий.Добавить();
Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.КоличествоКт = Распределить;
// обход проблемы копеек
Движение.Сумма = ?(ОсталосьРаспределить=выборка.КоличествоОстаток,Выборка.СуммаОстаток,Распределить/Выборка.КоличествоОстаток*Выборка.СуммаОстаток);
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СрокГодности] = Выборка.Субконто2;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Партия] = Выборка.Субконто3;
КонецЦикла;
КонецЦикла;
Если НЕ Отказ Тогда
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.Сумма = СуммаПоДокументу;
КонецЕсли;
Также есть небольшое замечание по запросу, раз Вы решили сделать отдельную виртуальную таблицу ВТ_Остатки, то не забывайте и по ней сделать Индексирование по полю Номенклатура, т.к. чуть ниже в запросе по этому полю идет соединение м/у двумя таблицами ДокТЧ и ВТ_Остатки. Вообще можно было бы обойтись без создания ВТ_Остатки.
Прощу оценить.