Наше предприятие дилер. Реализует некоторую торговую марку (или несколько ТМ) в одну или несколько торговых сетей, иными словами сетевых клиентов. Нам необходимо выполнять план обеспечения всех торговых точек нашего партнера - сетевика. Принимать заявки покупателей и делать отгрузки по расписанию, своевременно обновлять товар на прилавках нашего сетевика. За недовозы договор с контрагентом предусматривает серьезные неустойки - штрафные санкции (если товар не привезли, привезли не все или не во время). Дистрибьютор отвечает за правильность обеспечения товаром каждой торговой точки сетевика, сорвав план обеспечения сетевика в свою очередь может понести серьезные убытки по договору. Дистрибьютор преследует цель создать бесперебойный мост между своим поставщиком (как правило производителем) и покупателем, от бесперебойности этого моста зависит качество работы и доход дистрибьютора. Наша учетная система должна решить задачу ввода плана бесперебойного обеспечения всех торговых точек основных покупателей и неукоснительного выполнения этого плана. Руководствуясь принципом "Покупатель всегда прав", превратим учетную систему дистрибьютора в продолжение учетной системы покупателя.
1. Реализуем единую заявку на несколько торговых точек.
Допустим пока у нас не много сразу основных покупателей и мы обслуживаем не очень много торговых точек, чтобы зашиваться. В определенный день недели мы получаем заказ от каждого основного покупателя в формате Эксель и за определенный небольшой срок должны его выполнить. В этом случае будет удобно загрузить все данные на множество торговых точек в одну заявку, а на складе поставить каждый ящик для данной заявки на одну рохлю и набрать сходный товар совместно. Для реализации этого процесса добавим в заявку дополнительные колонки количества - на каждую точку основного покупателя одну колонку, всего до 40 дополнительных колонок количества. Таким образом у нас получится множественная заявка покупателя.
В модуле документа или формы эти колонки можно обработать например так (на примере округления до упаковок):
Для Сч = 1 По 40 Цикл
ТекКоличество = ПолучитьАтрибут("Склад" + Сч);
Если ТекКоличество % КоэффициентУпаковки <> 0 Тогда
УстановитьАтрибут("Склад" + Сч, (Цел(ТекКоличество / КоэффициентУпаковки) + 1) * КоэффициентУпаковки);
КонецЕсли;
КонецЦикла;
Таким образом мы можем выполнять заявку клиента единовременно по нескольким адресам торговых точек не опасаясь "забыть" какую-то часть на складе.
При работе с торговыми сетями особое значение имеет в составе конфигурации справочник торговых точек - физических адресов прилавков (мест ведения торговли) нашего драгоценного основного покупателя. Один сетевой клиент имеет более одной торговой точки. Справочник торговых точек подчинен справочнику контрагентов.
Для хранения заголовка колонок добавим строковой реквизит "СтрокаСкладов", в котором будем хранить коды подчиненного контрагентам справочника торговых точек (то есть адресов доставки) в виде текста с разделителями (точка запятая). В этом справочнике будем хранить коды (номера магазинов) основного покупателя, адреса доставки, район, сложность доставки, сложность разгрузки, время и дни доставки (то есть расписание доставки), контакты, служебную информацию о торговых точках основного покупателя для обмена с TMS системой. Из него же будем подбирать соответствие номеров и свойств магазинов во множественные заявки покупателя.
Шапка табличной части заполняется следующим образом:
Фрагмент модуля формы документа ЗаявкаПокупателя
//******************************************************************************
// Прорисовка складов
Процедура ПрорисовкаСкладов()
Если СтрДлина(СокрЛП(СтрокаСкладов))>1 Тогда
Форма.Количество.Доступность(0);
Форма.Количество.Редактирование(0);
КонецЕсли;
СписокСкладов = СокрЛП(СтрокаСкладов);
Ном = 0;
Пока СтрДлина(СписокСкладов)>0 Цикл
НазваниеЗаголовка = Лев(СписокСкладов,Найти(СписокСкладов,";")-1);
Ном = Ном+1;
Если Ном = 1 Тогда
Форма.Склад1.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 2 Тогда
Форма.Склад2.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 3 Тогда
Форма.Склад3.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 4 Тогда
Форма.Склад4.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 5 Тогда
Форма.Склад5.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 6 Тогда
Форма.Склад6.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 7 Тогда
Форма.Склад7.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 8 Тогда
Форма.Склад8.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 9 Тогда
Форма.Склад9.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 10 Тогда
Форма.Склад10.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 11 Тогда
Форма.Склад11.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 12 Тогда
Форма.Склад12.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 13 Тогда
Форма.Склад13.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 14 Тогда
Форма.Склад14.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 15 Тогда
Форма.Склад15.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 16 Тогда
Форма.Склад16.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 17 Тогда
Форма.Склад17.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 18 Тогда
Форма.Склад18.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 19 Тогда
Форма.Склад19.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 20 Тогда
Форма.Склад20.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 21 Тогда
Форма.Склад21.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 22 Тогда
Форма.Склад22.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 23 Тогда
Форма.Склад23.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 24 Тогда
Форма.Склад24.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 25 Тогда
Форма.Склад25.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 26 Тогда
Форма.Склад26.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 27 Тогда
Форма.Склад27.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 28 Тогда
Форма.Склад28.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 29 Тогда
Форма.Склад29.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 30 Тогда
Форма.Склад30.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 31 Тогда
Форма.Склад31.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 32 Тогда
Форма.Склад32.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 33 Тогда
Форма.Склад33.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 34 Тогда
Форма.Склад34.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 35 Тогда
Форма.Склад35.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 36 Тогда
Форма.Склад36.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 37 Тогда
Форма.Склад37.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 38 Тогда
Форма.Склад38.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 39 Тогда
Форма.Склад39.Заголовок(НазваниеЗаголовка);
ИначеЕсли Ном = 40 Тогда
Форма.Склад40.Заголовок(НазваниеЗаголовка);
КонецЕсли;
СписокСкладов = Прав(СписокСкладов,СтрДлина(СписокСкладов)-Найти(СписокСкладов,";"));
КонецЦикла;
Форма.Склад1. Видимость(1);Форма.Склад2. Видимость(1);Форма.Склад3. Видимость(1);
Форма.Склад4. Видимость(1);Форма.Склад5. Видимость(1);Форма.Склад6. Видимость(1);
Форма.Склад7. Видимость(1);Форма.Склад8. Видимость(1);Форма.Склад9. Видимость(1);
Форма.Склад10.Видимость(1);Форма.Склад11.Видимость(1);Форма.Склад12.Видимость(1);
Форма.Склад13.Видимость(1);Форма.Склад14.Видимость(1);Форма.Склад15.Видимость(1);
Форма.Склад16.Видимость(1);Форма.Склад17.Видимость(1);Форма.Склад18.Видимость(1);
Форма.Склад19.Видимость(1);Форма.Склад20.Видимость(1);Форма.Склад21.Видимость(1);
Форма.Склад22.Видимость(1);Форма.Склад23.Видимость(1);Форма.Склад24.Видимость(1);
Форма.Склад25.Видимость(1);Форма.Склад26.Видимость(1);Форма.Склад27.Видимость(1);
Форма.Склад28.Видимость(1);Форма.Склад29.Видимость(1);Форма.Склад30.Видимость(1);
Форма.Склад31.Видимость(1);Форма.Склад32.Видимость(1);Форма.Склад33.Видимость(1);
Форма.Склад34.Видимость(1);Форма.Склад35.Видимость(1);Форма.Склад36.Видимость(1);
Форма.Склад37.Видимость(1);Форма.Склад38.Видимость(1);Форма.Склад39.Видимость(1);
Форма.Склад40.Видимость(1);
СчЦикла = 0;
Для СчЦикла = 1 По 40 - Ном Цикл
Если СчЦикла = 1 Тогда
Форма.Склад40.Видимость(0);
ИначеЕсли СчЦикла = 2 Тогда
Форма.Склад39.Видимость(0);
ИначеЕсли СчЦикла = 3 Тогда
Форма.Склад38.Видимость(0);
ИначеЕсли СчЦикла = 4 Тогда
Форма.Склад37.Видимость(0);
ИначеЕсли СчЦикла = 5 Тогда
Форма.Склад36.Видимость(0);
ИначеЕсли СчЦикла = 6 Тогда
Форма.Склад35.Видимость(0);
ИначеЕсли СчЦикла = 7 Тогда
Форма.Склад34.Видимость(0);
ИначеЕсли СчЦикла = 8 Тогда
Форма.Склад33.Видимость(0);
ИначеЕсли СчЦикла = 9 Тогда
Форма.Склад32.Видимость(0);
ИначеЕсли СчЦикла = 10 Тогда
Форма.Склад31.Видимость(0);
ИначеЕсли СчЦикла = 11 Тогда
Форма.Склад30.Видимость(0);
ИначеЕсли СчЦикла = 12 Тогда
Форма.Склад29.Видимость(0);
ИначеЕсли СчЦикла = 13 Тогда
Форма.Склад28.Видимость(0);
ИначеЕсли СчЦикла = 14 Тогда
Форма.Склад27.Видимость(0);
ИначеЕсли СчЦикла = 15 Тогда
Форма.Склад26.Видимость(0);
ИначеЕсли СчЦикла = 16 Тогда
Форма.Склад25.Видимость(0);
ИначеЕсли СчЦикла = 17 Тогда
Форма.Склад24.Видимость(0);
ИначеЕсли СчЦикла = 18 Тогда
Форма.Склад23.Видимость(0);
ИначеЕсли СчЦикла = 19 Тогда
Форма.Склад22.Видимость(0);
ИначеЕсли СчЦикла = 20 Тогда
Форма.Склад21.Видимость(0);
ИначеЕсли СчЦикла = 21 Тогда
Форма.Склад20.Видимость(0);
ИначеЕсли СчЦикла = 22 Тогда
Форма.Склад19.Видимость(0);
ИначеЕсли СчЦикла = 23 Тогда
Форма.Склад18.Видимость(0);
ИначеЕсли СчЦикла = 24 Тогда
Форма.Склад17.Видимость(0);
ИначеЕсли СчЦикла = 25 Тогда
Форма.Склад16.Видимость(0);
ИначеЕсли СчЦикла = 26 Тогда
Форма.Склад15.Видимость(0);
ИначеЕсли СчЦикла = 27 Тогда
Форма.Склад14.Видимость(0);
ИначеЕсли СчЦикла = 28 Тогда
Форма.Склад13.Видимость(0);
ИначеЕсли СчЦикла = 29 Тогда
Форма.Склад12.Видимость(0);
ИначеЕсли СчЦикла = 30 Тогда
Форма.Склад11.Видимость(0);
ИначеЕсли СчЦикла = 31 Тогда
Форма.Склад10.Видимость(0);
ИначеЕсли СчЦикла = 32 Тогда
Форма.Склад9.Видимость(0);
ИначеЕсли СчЦикла = 33 Тогда
Форма.Склад8.Видимость(0);
ИначеЕсли СчЦикла = 34 Тогда
Форма.Склад7.Видимость(0);
ИначеЕсли СчЦикла = 35 Тогда
Форма.Склад6.Видимость(0);
ИначеЕсли СчЦикла = 36 Тогда
Форма.Склад5.Видимость(0);
ИначеЕсли СчЦикла = 37 Тогда
Форма.Склад4.Видимость(0);
ИначеЕсли СчЦикла = 38 Тогда
Форма.Склад3.Видимость(0);
ИначеЕсли СчЦикла = 39 Тогда
Форма.Склад2.Видимость(0);
ИначеЕсли СчЦикла = 40 Тогда
Форма.Склад1.Видимость(0);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Разобрав таким образом строку складов можно для каждого склада получить фактический адрес доставки.
Фрагмент модуля обработки
СтрокаСкладов = СтрокаСкладовЗаявки;
// Выгружаем склады заявки
РезультатПоиска=Найти(СтрокаСкладов,";");
Если РезультатПоиска>0 Тогда
сч=0;
Пока РезультатПоиска>0 Цикл
сч=сч+1;
КодТочки77=Лев(СтрокаСкладов,РезультатПоиска-1);
СтрокаСкладов=Прав(СтрокаСкладов,СтрДлина(СтрокаСкладов)-РезультатПоиска);
РезультатПоиска=Найти(СтрокаСкладов,";");
Если спрТоргТочки.НайтиПоКоду(КодТочки77)=1 Тогда
Точка77=спрТоргТочки.ТекущийЭлемент();
Адрес = Точка77.Адрес;
Сообщить("У точки "+КодТочки77+" адрес "+Адрес);
Иначе
Сообщить("не найдена точка с кодом "+КодТочки77);
Адрес = "";
Продолжить;
КонецЕсли;
КонецЦикла;
Продолжить;
КонецЕсли;
Заявки покупателя не обязательно должны быть множественными (на несколько точек сразу). Чтобы предусмотреть возможность закрепления единственного фактического адреса доставки в одну заявку, добавим в шапку заявки реквизит "ТорговаяТочка" связанный со справочником фактических адресов доставки, подчиненных контрагентам.
2. Реализуем выполнение заявки по точкам и контроль выполнения заявки.
Чтобы стать продолжением нашего покупателя (который всегда прав) и четко выполнять его заявки, доработаем нащу учетную систему механизмом контроля выполнения заявки по точкам. Скопируем заявку покупателя, получится документ ЗаявкаПокупателяКопия. Назовем её в синониме объекта метаданных как "Заявка (остатки)".
В этой особой копии заявки "Заявке (остатки)" будем хранить первичную потребность покупателя в неизменном виде. Еще одна копия нам нужна для второго этапа сравнения - плановых учетных остатков с фактически набранным товаром.
Фрагмент модуля формы документа Заявка покупателя
НачатьТранзакцию();
ДокКопЗаявка = СоздатьОбъект("Документ.ЗаявкаПокупателяКопия");
ДокКопЗаявка.АвтоВремяОтключить();
ДокКопЗаявка1 = СоздатьОбъект("Документ.ЗаявкаПокупателяКопия1");
ДокКопЗаявка1.АвтоВремяОтключить();
ТаблКопии = СоздатьОбъект("ТаблицаЗначений");
Если ЗаявкаПокупателяКопия.Выбран()= 0 Тогда
ДокКопЗаявка.Новый();
ДокКопЗаявка.УстановитьНовыйНомер("Зк"+ СокрЛП(Константа.ПрефиксИБ) + СокрЛП(ЮрЛицо.ПрефиксНомеровДокументов));
ДокКопЗаявка.ДатаДок = ДатаДок;
ДокКопЗаявка.УстановитьВремя(00,00,01);
ДокКопЗаявка.Склад = Склад;
ДокКопЗаявка.Контрагент = Контрагент;
ДокКопЗаявка.Договор = Договор;
ДокКопЗаявка.Валюта = Валюта;
ДокКопЗаявка.Курс = Курс;
ДокКопЗаявка.УчитыватьНДС = УчитыватьНДС;
ДокКопЗаявка.СуммаВклНДС = СуммаВклНДС;
ДокКопЗаявка.УчитыватьНП = УчитыватьНП;
ДокКопЗаявка.СуммаВклНП = СуммаВклНП;
ДокКопЗаявка.ТипЦен = ТипЦен;
ДокКопЗаявка.Скидка = Скидка;
ДокКопЗаявка.ДатаОплаты = ДатаОплаты;
ДокКопЗаявка.Точка = Точка;
ДокКопЗаявка.Нал = Нал;
ДокКопЗаявка.ТекстСкидок = ТекстСкидок;
ДокКопЗаявка.Фирма = Фирма;
ДокКопЗаявка.ЮрЛицо = ЮрЛицо;
ДокКопЗаявка.Проект = Проект;
ДокКопЗаявка.СтрокаСкладов = СтрокаСкладов;
ДокКопЗаявка.КодЗаявки7дней = КодЗаявки7дней;
ДокКопЗаявка.Комментарий = "Создана автоматически "+ТекущаяДата()+"."+СокрЛП(Комментарий);
ВыгрузитьТабличнуюЧасть(ТаблКопии);
ДокКопЗаявка.ЗагрузитьТабличнуюЧасть(ТаблКопии);
ДокКопЗаявка.Записать();
//ДокКопЗаявка.Провести();
ЗаявкаПокупателяКопия = ДокКопЗаявка.ТекущийДокумент();
ИначеЕсли ЗаявкаПокупателяКопия.КоличествоСтрок()<КоличествоСтрок() Тогда
//ДокКопЗаявка.Комментарий = "Отредактировано после обрезки по остаткам."+СокрЛП(Комментарий);
//ДокКопЗаявка.Записать();
ДокКопЗаявка.Новый();
ДокКопЗаявка.УстановитьНовыйНомер("Зк"+ СокрЛП(Константа.ПрефиксИБ) + СокрЛП(ЮрЛицо.ПрефиксНомеровДокументов));
ДокКопЗаявка.ДатаДок = ДатаДок;
ДокКопЗаявка.УстановитьВремя(00,00,01);
ДокКопЗаявка.Склад = Склад;
ДокКопЗаявка.Контрагент = Контрагент;
ДокКопЗаявка.Договор = Договор;
ДокКопЗаявка.Валюта = Валюта;
ДокКопЗаявка.Курс = Курс;
ДокКопЗаявка.УчитыватьНДС = УчитыватьНДС;
ДокКопЗаявка.СуммаВклНДС = СуммаВклНДС;
ДокКопЗаявка.УчитыватьНП = УчитыватьНП;
ДокКопЗаявка.СуммаВклНП = СуммаВклНП;
ДокКопЗаявка.ТипЦен = ТипЦен;
ДокКопЗаявка.Скидка = Скидка;
ДокКопЗаявка.ДатаОплаты = ДатаОплаты;
ДокКопЗаявка.Точка = Точка;
ДокКопЗаявка.Нал = Нал;
ДокКопЗаявка.ТекстСкидок = ТекстСкидок;
ДокКопЗаявка.Фирма = Фирма;
ДокКопЗаявка.ЮрЛицо = ЮрЛицо;
ДокКопЗаявка.Проект = Проект;
ДокКопЗаявка.СтрокаСкладов = СтрокаСкладов;
ДокКопЗаявка.КодЗаявки7дней = КодЗаявки7дней;
ДокКопЗаявка.Комментарий = "Создана автоматически "+ТекущаяДата()+"."+СокрЛП(Комментарий);
ВыгрузитьТабличнуюЧасть(ТаблКопии);
ДокКопЗаявка.ЗагрузитьТабличнуюЧасть(ТаблКопии);
ДокКопЗаявка.Записать();
//ДокКопЗаявка.Провести();
ЗаявкаПокупателяКопия = ДокКопЗаявка.ТекущийДокумент();
Иначе
текЗпЧасы = 0;
текЗпМинуты = 0;
текЗпСекунды = 0;
ЗаявкаПокупателяКопия.ПолучитьВремя(текЗпЧасы,текЗпМинуты,текЗпСекунды);
Если (текЗпЧасы = 0) И (текЗпМинуты = 0) И (текЗпСекунды = 1) Тогда
Иначе
ДокКопЗаявка.НайтиДокумент(ЗаявкаПокупателяКопия);
ДокКопЗаявка.УстановитьВремя(00,00,01);
ДокКопЗаявка.Записать();
КонецЕсли;
Если ЗаявкаПокупателяКопия.Итог("Количество")=0 Тогда
ДокКопЗаявка.НайтиДокумент(ЗаявкаПокупателяКопия);
ДокКопЗаявка.Склад = Склад;
ДокКопЗаявка.Контрагент = Контрагент;
ДокКопЗаявка.Договор = Договор;
ДокКопЗаявка.Валюта = Валюта;
ДокКопЗаявка.Курс = Курс;
ДокКопЗаявка.УчитыватьНДС = УчитыватьНДС;
ДокКопЗаявка.СуммаВклНДС = СуммаВклНДС;
ДокКопЗаявка.УчитыватьНП = УчитыватьНП;
ДокКопЗаявка.СуммаВклНП = СуммаВклНП;
ДокКопЗаявка.ТипЦен = ТипЦен;
ДокКопЗаявка.Скидка = Скидка;
ДокКопЗаявка.ДатаОплаты = ДатаОплаты;
ДокКопЗаявка.Точка = Точка;
ДокКопЗаявка.Нал = Нал;
ДокКопЗаявка.ТекстСкидок = ТекстСкидок;
ДокКопЗаявка.Фирма = Фирма;
ДокКопЗаявка.ЮрЛицо = ЮрЛицо;
ДокКопЗаявка.Проект = Проект;
ДокКопЗаявка.СтрокаСкладов = СтрокаСкладов;
ДокКопЗаявка.КодЗаявки7дней = КодЗаявки7дней;
ДокКопЗаявка.Комментарий = "Создана автоматически "+ТекущаяДата()+"."+СокрЛП(Комментарий);
ВыгрузитьТабличнуюЧасть(ТаблКопии);
ДокКопЗаявка.ЗагрузитьТабличнуюЧасть(ТаблКопии);
ДокКопЗаявка.Записать();
КонецЕсли;
КонецЕсли;
ДокКопЗаявка1Записан = 0;
Если ЗаявкаПокупателяКопия1.Выбран()= 0 Тогда
ДокКопЗаявка1.Новый();
ДокКопЗаявка1.УстановитьНовыйНомер("Зк"+ СокрЛП(Константа.ПрефиксИБ) + СокрЛП(ЮрЛицо.ПрефиксНомеровДокументов));
ДокКопЗаявка1.ДатаДок = ДатаДок;
ДокКопЗаявка1.УстановитьВремя(01,00,01);
ДокКопЗаявка1.Склад = Склад;
ДокКопЗаявка1.Контрагент = Контрагент;
ДокКопЗаявка1.Договор = Договор;
ДокКопЗаявка1.Валюта = Валюта;
ДокКопЗаявка1.Курс = Курс;
ДокКопЗаявка1.УчитыватьНДС = УчитыватьНДС;
ДокКопЗаявка1.СуммаВклНДС = СуммаВклНДС;
ДокКопЗаявка1.УчитыватьНП = УчитыватьНП;
ДокКопЗаявка1.СуммаВклНП = СуммаВклНП;
ДокКопЗаявка1.ТипЦен = ТипЦен;
ДокКопЗаявка1.Скидка = Скидка;
ДокКопЗаявка1.ДатаОплаты = ДатаОплаты;
ДокКопЗаявка1.Точка = Точка;
ДокКопЗаявка1.Нал = Нал;
ДокКопЗаявка1.ТекстСкидок = ТекстСкидок;
ДокКопЗаявка1.Фирма = Фирма;
ДокКопЗаявка1.ЮрЛицо = ЮрЛицо;
ДокКопЗаявка1.Проект = Проект;
//ДокКопЗаявка.СтрокаСкладов = СтрокаСкладов;
//ДокКопЗаявка.КодЗаявки7дней = КодЗаявки7дней;
ДокКопЗаявка1.Комментарий = "Создана автоматически "+ТекущаяДата()+"."+СокрЛП(Комментарий);
ДокКопЗаявка1.ЗаявкаПокупателяКопия = ЗаявкаПокупателяКопия;
ДокКопЗаявка1.Записать();
ЗаявкаПокупателяКопия1 = ДокКопЗаявка1.ТекущийДокумент();
Иначе
текЗпЧасы = 0;
текЗпМинуты = 0;
текЗпСекунды = 0;
ЗаявкаПокупателяКопия1.ПолучитьВремя(текЗпЧасы,текЗпМинуты,текЗпСекунды);
Если (текЗпЧасы = 0) И (текЗпМинуты = 0) И (текЗпСекунды = 1) Тогда
Иначе
ДокКопЗаявка1.НайтиДокумент(ЗаявкаПокупателяКопия1);
ДокКопЗаявка1.УстановитьВремя(00,00,01);
ДокКопЗаявка1.Записать();
КонецЕсли;
КонецЕсли;
Записать();
ЗафиксироватьТранзакцию();
Тогда после сохранения первичной потребности, текущую заявку покупателя нужно подготовить к набору - трансформировать, привести в соответствие с учетными остатками нашего собственного склада, то есть обрезать по остаткам.
Фрагмент модуля формы документа "ЗаявкаПокупателя"
Процедура ПоОстаткам()
Если Проведен()=0 Тогда
Если (Склад.Выбран()=0) или (Фирма.Выбран()=0) Тогда
Предупреждение ("Не выбран склад!");
СтатусВозврата(0);
возврат;
КонецЕсли;
Если СтрДлина(СокрЛП(СтрокаСкладов))>1 Тогда
ВсегоСтрок = КоличествоСтрок();
пНом = 0;
ВыбратьСтроки();
Пока ПолучитьСтроку()= 1 Цикл
~бб:
пНом = пНом+1;
ТабЗапретТоваровКл.ВыбратьСтроки();
Пока ТабЗапретТоваровКл.ПолучитьСтроку()=1 Цикл
Если ТабЗапретТоваровКл.Группа.ЭтоГруппа()=1 Тогда
Если Номенклатура.ПринадлежитГруппе(ТабЗапретТоваровКл.Группа)=1 Тогда
УдалитьСтроку();
Если не(ВсегоСтрок = пНом) Тогда
Перейти ~бб;
КонецЕсли;
КонецЕсли;
ИначеЕсли Номенклатура= ТабЗапретТоваровКл.Группа Тогда
УдалитьСтроку();
Если не(ВсегоСтрок = пНом) Тогда
Перейти ~бб;
КонецЕсли;
КонецЕсли;
КонецЦикла;
РезервДляТорговыхСетей = 0;
Если Контрагент.Приоритет = 0 Тогда
Если Номенклатура.ПринадлежитГруппе(НоменклатураКолгейтДляРезерваТорговымСетям) = 1 Тогда
РезервДляТорговыхСетей = Число(глПолучитьСвойство(Номенклатура,"РезервДляТорговыхСетей"));
КонецЕсли;
КонецЕсли;
ОстТовара = Регистр.ОстаткиТМЦ.СводныйОстаток(Фирма,Номенклатура,Склад,,"Количество")-
Регистр.РезервыТМЦ.СводныйОстаток(Фирма,Номенклатура,Склад,,,"Количество")-
РезервДляТорговыхСетей;
Если ОстТовара<=0 Тогда
УдалитьСтроку();
Если не(ВсегоСтрок = пНом) Тогда
Перейти ~бб;
КонецЕсли;
ИначеЕсли (Номенклатура.Категория.Код = "Цб000014")
И (ОстТовара<48) Тогда
// чтобы Цб000014 удалялось по остаткам, так как не может быть списано меньше упаковки
УдалитьСтроку();
Если не(ВсегоСтрок = пНом) Тогда
Перейти ~бб;
КонецЕсли;
ИначеЕсли Количество>ОстТовара Тогда
//КолУпак = 0;
//Если ПоКоробкам=1 Тогда
// КолУпак = ВУпаковке(Номенклатура);
//КонецЕсли;
ПослСкладСОстаткам = "";
ПослСклад = "";
Если Не(Склад1=0) Тогда ПослСкладСОстаткам = "Склад1" КонецЕсли;
Если Не(Склад2=0) Тогда ПослСкладСОстаткам = "Склад2" КонецЕсли;
Если Не(Склад3=0) Тогда ПослСкладСОстаткам = "Склад3" КонецЕсли;
Если Не(Склад4=0) Тогда ПослСкладСОстаткам = "Склад4" КонецЕсли;
Если Не(Склад5=0) Тогда ПослСкладСОстаткам = "Склад5" КонецЕсли;
Если Не(Склад6=0) Тогда ПослСкладСОстаткам = "Склад6" КонецЕсли;
Если Не(Склад7=0) Тогда ПослСкладСОстаткам = "Склад7" КонецЕсли;
Если Не(Склад8=0) Тогда ПослСкладСОстаткам = "Склад8" КонецЕсли;
Если Не(Склад9=0) Тогда ПослСкладСОстаткам = "Склад9" КонецЕсли;
Если Не(Склад10=0) Тогда ПослСкладСОстаткам = "Склад10" КонецЕсли;
Если Не(Склад11=0) Тогда ПослСкладСОстаткам = "Склад11" КонецЕсли;
Если Не(Склад12=0) Тогда ПослСкладСОстаткам = "Склад12" КонецЕсли;
Если Не(Склад13=0) Тогда ПослСкладСОстаткам = "Склад13" КонецЕсли;
Если Не(Склад14=0) Тогда ПослСкладСОстаткам = "Склад14" КонецЕсли;
Если Не(Склад15=0) Тогда ПослСкладСОстаткам = "Склад15" КонецЕсли;
Если Не(Склад16=0) Тогда ПослСкладСОстаткам = "Склад16" КонецЕсли;
Если Не(Склад17=0) Тогда ПослСкладСОстаткам = "Склад17" КонецЕсли;
Если Не(Склад18=0) Тогда ПослСкладСОстаткам = "Склад18" КонецЕсли;
Если Не(Склад19=0) Тогда ПослСкладСОстаткам = "Склад19" КонецЕсли;
Если Не(Склад20=0) Тогда ПослСкладСОстаткам = "Склад20" КонецЕсли;
Если Не(Склад21=0) Тогда ПослСкладСОстаткам = "Склад21" КонецЕсли;
Если Не(Склад22=0) Тогда ПослСкладСОстаткам = "Склад22" КонецЕсли;
Если Не(Склад23=0) Тогда ПослСкладСОстаткам = "Склад23" КонецЕсли;
Если Не(Склад24=0) Тогда ПослСкладСОстаткам = "Склад24" КонецЕсли;
Если Не(Склад25=0) Тогда ПослСкладСОстаткам = "Склад25" КонецЕсли;
Если Не(Склад26=0) Тогда ПослСкладСОстаткам = "Склад26" КонецЕсли;
Если Не(Склад27=0) Тогда ПослСкладСОстаткам = "Склад27" КонецЕсли;
Если Не(Склад28=0) Тогда ПослСкладСОстаткам = "Склад28" КонецЕсли;
Если Не(Склад29=0) Тогда ПослСкладСОстаткам = "Склад29" КонецЕсли;
Если Не(Склад30=0) Тогда ПослСкладСОстаткам = "Склад30" КонецЕсли;
Если Не(Склад31=0) Тогда ПослСкладСОстаткам = "Склад31" КонецЕсли;
Если Не(Склад32=0) Тогда ПослСкладСОстаткам = "Склад32" КонецЕсли;
Если Не(Склад33=0) Тогда ПослСкладСОстаткам = "Склад33" КонецЕсли;
Если Не(Склад34=0) Тогда ПослСкладСОстаткам = "Склад34" КонецЕсли;
Если Не(Склад35=0) Тогда ПослСкладСОстаткам = "Склад35" КонецЕсли;
Если Не(Склад36=0) Тогда ПослСкладСОстаткам = "Склад36" КонецЕсли;
Если Не(Склад37=0) Тогда ПослСкладСОстаткам = "Склад37" КонецЕсли;
Если Не(Склад38=0) Тогда ПослСкладСОстаткам = "Склад38" КонецЕсли;
Если Не(Склад39=0) Тогда ПослСкладСОстаткам = "Склад39" КонецЕсли;
Если Не(Склад40=0) Тогда ПослСкладСОстаткам = "Склад40" КонецЕсли;
ОбщийОбъемПоТовару = Количество;
Количество = ОстТовара;
ВсегоОтдали = 0;
Закончили = 0;
Если Не(Склад1=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад1 = Окр(Количество*Склад1/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад1; Если ВсегоОтдали = Количество Тогда Закончили = 1;ИначеЕсли ВсегоОтдали > Количество Тогда Склад1 = Склад1 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад1" Тогда Если ВсегоОтдали < Количество Тогда Склад1 = Склад1 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад1 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад2=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад2 = Окр(Количество*Склад2/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад2; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад2 = Склад2 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад2" Тогда Если ВсегоОтдали < Количество Тогда Склад2 = Склад2 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад2 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад3=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад3 = Окр(Количество*Склад3/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад3; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад3 = Склад3 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад3" Тогда Если ВсегоОтдали < Количество Тогда Склад3 = Склад3 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад3 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад4=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад4 = Окр(Количество*Склад4/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад4; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад4 = Склад4 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад4" Тогда Если ВсегоОтдали < Количество Тогда Склад4 = Склад4 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад4 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад5=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад5 = Окр(Количество*Склад5/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад5; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад5 = Склад5 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад5" Тогда Если ВсегоОтдали < Количество Тогда Склад5 = Склад5 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад5 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад6=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад6 = Окр(Количество*Склад6/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад6; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад6 = Склад6 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад6" Тогда Если ВсегоОтдали < Количество Тогда Склад6 = Склад6 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад6 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад7=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад7 = Окр(Количество*Склад7/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад7; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад7 = Склад7 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад7" Тогда Если ВсегоОтдали < Количество Тогда Склад7 = Склад7 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад7 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад8=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад8 = Окр(Количество*Склад8/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад8; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад8 = Склад8 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад8" Тогда Если ВсегоОтдали < Количество Тогда Склад8 = Склад8 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад8 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад9=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад9 = Окр(Количество*Склад9/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад9; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад9 = Склад9 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад9" Тогда Если ВсегоОтдали < Количество Тогда Склад9 = Склад9 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад9 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад10=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад10 = Окр(Количество*Склад10/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад10; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад10 = Склад10 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад10" Тогда Если ВсегоОтдали < Количество Тогда Склад10 = Склад10 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад10 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад11=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад11 = Окр(Количество*Склад11/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад11; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад11 = Склад11 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад11" Тогда Если ВсегоОтдали < Количество Тогда Склад11 = Склад11 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад11 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад12=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад12 = Окр(Количество*Склад12/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад12; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад12 = Склад12 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад12" Тогда Если ВсегоОтдали < Количество Тогда Склад12 = Склад12 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад12 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад13=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад13 = Окр(Количество*Склад13/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад13; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад13 = Склад13 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад13" Тогда Если ВсегоОтдали < Количество Тогда Склад13 = Склад13 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад13 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад14=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад14 = Окр(Количество*Склад14/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад14; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад14 = Склад14 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад14" Тогда Если ВсегоОтдали < Количество Тогда Склад14 = Склад14 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад14 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад15=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад15 = Окр(Количество*Склад15/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад15; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад15 = Склад15 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад15" Тогда Если ВсегоОтдали < Количество Тогда Склад15 = Склад15 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад15 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад16=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад16 = Окр(Количество*Склад16/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад16; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад16 = Склад16 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад16" Тогда Если ВсегоОтдали < Количество Тогда Склад16 = Склад16 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад16 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад17=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад17 = Окр(Количество*Склад17/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад17; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад17 = Склад17 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад17" Тогда Если ВсегоОтдали < Количество Тогда Склад17 = Склад17 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад17 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад18=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад18 = Окр(Количество*Склад18/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад18; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад18 = Склад18 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад18" Тогда Если ВсегоОтдали < Количество Тогда Склад18 = Склад18 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад18 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад19=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад19 = Окр(Количество*Склад19/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад19; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад19 = Склад19 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад19" Тогда Если ВсегоОтдали < Количество Тогда Склад19 = Склад19 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад19 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад20=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад20 = Окр(Количество*Склад20/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад20; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад20 = Склад20 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад20" Тогда Если ВсегоОтдали < Количество Тогда Склад20 = Склад20 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад20 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад21=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад21 = Окр(Количество*Склад21/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад21; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад21 = Склад21 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад21" Тогда Если ВсегоОтдали < Количество Тогда Склад21 = Склад21 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад21 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад22=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад22 = Окр(Количество*Склад22/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад22; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад22 = Склад22 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад22" Тогда Если ВсегоОтдали < Количество Тогда Склад22 = Склад22 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад22 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад23=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад23 = Окр(Количество*Склад23/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад23; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад23 = Склад23 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад23" Тогда Если ВсегоОтдали < Количество Тогда Склад23 = Склад23 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад23 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад24=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад24 = Окр(Количество*Склад24/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад24; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад24 = Склад24 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад24" Тогда Если ВсегоОтдали < Количество Тогда Склад24 = Склад24 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад24 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад25=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад25 = Окр(Количество*Склад25/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад25; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад25 = Склад25 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад25" Тогда Если ВсегоОтдали < Количество Тогда Склад25 = Склад25 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад25 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад26=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад26 = Окр(Количество*Склад26/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад26; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад26 = Склад26 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад26" Тогда Если ВсегоОтдали < Количество Тогда Склад26 = Склад26 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад26 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад27=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад27 = Окр(Количество*Склад27/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад27; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад27 = Склад27 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад27" Тогда Если ВсегоОтдали < Количество Тогда Склад27 = Склад27 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад27 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад28=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад28 = Окр(Количество*Склад28/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад28; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад28 = Склад28 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад28" Тогда Если ВсегоОтдали < Количество Тогда Склад28 = Склад28 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад28 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад29=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад29 = Окр(Количество*Склад29/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад29; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад29 = Склад29 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад29" Тогда Если ВсегоОтдали < Количество Тогда Склад29 = Склад29 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад29 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад30=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад30 = Окр(Количество*Склад30/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад30; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад30 = Склад30 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад30" Тогда Если ВсегоОтдали < Количество Тогда Склад30 = Склад30 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад30 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад31=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад31 = Окр(Количество*Склад31/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад31; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад31 = Склад31 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад31" Тогда Если ВсегоОтдали < Количество Тогда Склад31 = Склад31 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад31 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад32=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад32 = Окр(Количество*Склад32/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад32; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад32 = Склад32 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад32" Тогда Если ВсегоОтдали < Количество Тогда Склад32 = Склад32 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад32 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад33=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад33 = Окр(Количество*Склад33/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад33; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад33 = Склад33 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад33" Тогда Если ВсегоОтдали < Количество Тогда Склад33 = Склад33 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад33 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад34=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад34 = Окр(Количество*Склад34/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад34; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад34 = Склад34 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад34" Тогда Если ВсегоОтдали < Количество Тогда Склад34 = Склад34 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад34 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад35=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад35 = Окр(Количество*Склад35/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад35; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад35 = Склад35 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад35" Тогда Если ВсегоОтдали < Количество Тогда Склад35 = Склад35 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад35 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад36=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад36 = Окр(Количество*Склад36/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад36; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад36 = Склад36 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад36" Тогда Если ВсегоОтдали < Количество Тогда Склад36 = Склад36 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад36 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад37=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад37 = Окр(Количество*Склад37/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад37; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад37 = Склад37 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад37" Тогда Если ВсегоОтдали < Количество Тогда Склад37 = Склад37 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад37 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад38=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад38 = Окр(Количество*Склад38/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад38; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад38 = Склад38 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад38" Тогда Если ВсегоОтдали < Количество Тогда Склад38 = Склад38 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад38 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад39=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад39 = Окр(Количество*Склад39/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад39; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад39 = Склад39 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад39" Тогда Если ВсегоОтдали < Количество Тогда Склад39 = Склад39 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад39 = 0;
КонецЕсли;
КонецЕсли;
Если Не(Склад40=0) Тогда
Если Закончили = 0 Тогда
Если НеОкр7 = 0 Тогда
Склад40 = Окр(Количество*Склад40/ОбщийОбъемПоТовару,2); КонецЕсли; ВсегоОтдали = ВсегоОтдали + Склад40; Если ВсегоОтдали = Количество Тогда Закончили = 1; ИначеЕсли ВсегоОтдали > Количество Тогда Склад40 = Склад40 - (ВсегоОтдали - Количество); Закончили = 1; КонецЕсли;
Если Закончили = 0 Тогда Если ПослСкладСОстаткам = "Склад40" Тогда Если ВсегоОтдали < Количество Тогда Склад40 = Склад40 + (Количество - ВсегоОтдали); КонецЕсли; КонецЕсли; КонецЕсли;
Иначе Склад40 = 0;
КонецЕсли;
КонецЕсли;
Количество = Склад1 +Склад2 +Склад3 +Склад4 +Склад5 +Склад6 +Склад7 +Склад8 +Склад9 +Склад10+
Склад11+Склад12+Склад13+Склад14+Склад15+Склад16+Склад17+Склад18+Склад19+Склад20+
Склад21+Склад22+Склад23+Склад24+Склад25+Склад26+Склад27+Склад28+Склад29+Склад30+
Склад31+Склад32+Склад33+Склад34+Склад35+Склад36+Склад37+Склад38+Склад39+Склад40;
глПересчетТаблЧасти(Контекст,"Количество");
КонецЕсли;
КонецЦикла;
Иначе
ВсегоСтрок = КоличествоСтрок();
пНом = 0;
ВыбратьСтроки();
Пока ПолучитьСтроку()= 1 Цикл
~аа:
пНом = пНом+1;
ОстТовара = Регистр.ОстаткиТМЦ.СводныйОстаток(Фирма,Номенклатура,Склад,,"Количество")-
Регистр.РезервыТМЦ.СводныйОстаток(Фирма,Номенклатура,Склад,,,"Количество");
Если ОстТовара<=0 Тогда
УдалитьСтроку();
Если не(ВсегоСтрок = пНом) Тогда
Перейти ~аа;
КонецЕсли;
ИначеЕсли Количество>ОстТовара Тогда
Количество = ОстТовара;
глПересчетТаблЧасти(Контекст,"Количество");
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ПоОстаткам()
Перед отправкой заявки покупателя в набор мы сделаем еще одну копию заявки покупателя уже обрезанной по остаткам, в которую сохраним состояние остатков на момент передачи в набор, чтобы иметь возможность позже сверить заявку на набор (переданную на склад) с фактом (набранным товаром в контейнерах и коробках) и назовем её "Заявка (склад)".
Таким образом мы имеем первичную потребность покупателя в документе "ЗаявкаПокупателяКопия" или Заявка (Остатки) и можем сравнить первичную заявку - то, что просил основной покупатель с тем, что было у нас в учете, сохраненным в документе "ЗаявкаПокупателяКопия1" или Заявка (Склад). Так же мы можем сравнить фактически набранную заявку покупателя, это основной документ "ЗаявкаПокупателя" с заданием на набор, то есть с документом "ЗаявкаПокупателяКопия1" или Заявка (Склад).
Структура данных показана на примере комплексной конфигурации 4.2 (7.70.424). Версия платформы 7.70.027.
Теперь для "Дистрибьюции 7.7" можно описать кодом на встроенном языке специфические отчеты и обработки - передачу заявок покупателя в набор, в отгрузку, а так же сквозной контроль выполнения заявки и отчетность перед поставщиками и покупателями. О том как это сделать - далее (ссылки откроются после опубликования следующих частей):
Часть 2. Контроль выполнения заявки покупателя по номенклатуре
Часть 3. Контроль своевременности передачи заявки в набор и контроль даты отгрузки заявки покупателя