helpf.pro
Регистрация

v8: Цикл разнесения таблиц значении поступлений и реализация методом фифо

dmrd
04.10.2011 07:20Прочитано: 2882
Здравствуйте

В таблице значений (Упорядоченной по складу, номенклатуре, дате документа поступления) состоящей из строк

ДокументПоступления
Склад
Номенклатура
Количество (из документа поступления)

Нужно методом фифо вычесть значения количество из таблицы значений (Упорядоченной по складу, номенклатура, датаДокументаПостуления) все документы реализации, и таким образом чтобы соответствовали измерения (склад и номенклатура)

Так получим таблицу:

ДокументПоступления
Склад
Номенклатура
Количество (остаток не израсходованы по документу)


Если имеется таблица из одного вида номенклатур и одного склада то цикл расписан ниже

Для Каждого СтрокаПрихода из ТаблицаПриход цикл

Если СтрокаПрихода.Количество = 0 тогда
Продолжить;
КонецЕсли;

Для Каждого СтрокаРасхода из ТаблицаРасход цикл
Пока СтрокаРасхода.Количество > 0 и (СтрокаПрихода.Количество) цикл
УменьшаемНаЗначение=Мин(СтрокаПрихода.Количество,СтрокаРасхода.Количество);
СтрокаПрихода.Количество=СтрокаПрихода.Количество-УменьшаемНаЗначение;
СтрокаРасхода.Количество=СтрокаРасхода.Количество-УменьшаемНаЗначение;
КонецЦикла;
КонецЦикла;
КонецЦикла;


Прошу подсказать что следует дописать что бы цикл работал со множеством складов и номенклатур?



Спасибо за внимание
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
04.10.2011 11:03Ответ № 1
самое простое - дописать циклы перебора складов и номенклатур, а в них уже предыдущий код
typeharley
04.10.2011 11:06Ответ № 2
Как-то вы все сложно решаете....
Если я правильно понял, то есть таблица остатков номенклатуры (ТаблицаПриход) и есть таблица расхода (ТаблицаРасход) и Вам нужно распределить (списать) таблицу товары из таблицы расхода по остаткам из таблицы прихода.
Приведу один из примеров, который как для меня самый простой и понятный:

Код 1C v 8.2 УП
    ТаблПриход = Новый ТаблицаЗначений;
ТаблПриход.Колонки.Добавить("Склад");
ТаблПриход.Колонки.Добавить("Номенклатура");
ТаблПриход.Колонки.Добавить("ДокументПоступления");
ТаблПриход.Колонки.Добавить("ДатаПоступления");
ТаблПриход.Колонки.Добавить("Количество");
//операции заполнения таблицы прихода
//................................
ТаблПриход.Сортировать("Номенклатура,ДатаПоступления"); //Вот и весь FIFO

ТаблРасход = Новый ТаблицаЗначений;
ТаблРасход.Колонки.Добавить("Номенклатура");
ТаблРасход.Колонки.Добавить("КоличествоДляСписания");
//операции заполнения таблицы расхода
//................................
//Таблица списания (распределения)
ТаблСпис = Новый ТаблицаЗначений;
ТаблСпис.Колонки.Добавить("Номенклатура");
ТаблСпис.Колонки.Добавить("Склад");
ТаблСпис.Колонки.Добавить("ДокументПоступления");
ТаблСпис.Колонки.Добавить("Количество");
//
Отбор = Новый Структура;
КолОшибок = 0;
Для Каждого Стр Из ТаблРасход Цикл
Отбор.Вставить("Номенклатура",Стр.Номенклатура);
НайдСтр = ТаблПриход.НайтиСтроки(Отбор);
КолСписано = 0;
КолДляСписания = Стр.КоличествоДляСписания;
Для i = 0 По НайдСтр.Количество()-1 Цикл
Если КолСписано + НайдСтр[i].Количество <= КолДляСписания Тогда
ТекКол = НайдСтр[i].Количество;
Иначе
ТекКол = КолДляСписания - КолСписано;
КонецЕсли;
НовСтр = ТаблСпис.Добавить();
НовСтр.Номенклатура = Стр.Номенклатура;
НовСтр.Склад = НайдСтр[i].Склад;
НовСтр.ДокументПоступления = НайдСтр[i].ДокументПоступления;
НовСтр.Количество = ТекКол;
Если КолСписано = КолДляСписания Тогда Прервать; КонецЕсли;
КонецЦикла;
Если КолДляСписания > КолСписано Тогда
КолОшибок = КолОшибок + 1;
Сообщить("Недостаточно остатка для спиания товара: "+СокрЛП(Стр.Номенклатура));
КонецЕсли;
КонецЦикла;
Если КолОшибок > 0 Тогда
Сообщить("Все плохо ))))");
КонецЕсли;


По идее таблица ТаблСпис должна быть отсортирована по "Номенклатура,ДатаПоступления" (для FIFO), если я ошибаюсь, то добавить таблице ТаблСпис колонку "ДатаПоступления", и в конце обработки отсортировать: ТаблСпис.Сортировать("Номенклатура,ДатаПоступления").
Изменено 04.10.11 12:25:06
dmrd
04.10.2011 14:19Ответ № 3
Круто спасибо!!!! Очень помог!!!!!!
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.