В прошлый раз мы рассмотрели, как отсортировать товары при заказе поставщику. Мы поставили некоторое условие, что бы при заполнении табличной части по минимальным остаткам в таблицу попадали только те товары, которые закупаются именно у выбранного контрагента. Смотрим тут: Как отсортировать товары при заказе поставщику.
Сегодня мы в этот же документ добавим колонку, в которой будут заполняться остатки по товару на момент заказа.
Первым делом добавим колонку в табличную часть документа.
ВАЖНО!! Обязательно сохраняем базу!! Смотрим тут - как сохранить базу
Открываем программу в режиме конфигуратор и находим документ "ЗаказПоставщику"
Открываем документ - дважды щелкаем на нем мышкой. В открывшемся окне по кнопке "Новый" в поле "Реквизиты табличной части" добавляем новый реквизит.
На вкладке "общие" в поле "Идентификатор" пишем "Остаток", а ниже в поле "Тип значения" выбираем "Число" и указываем "Длина" - 14, "Точность" - 3. По кнопке "ОК" записываем.
Теперь добавим в таблицу. Нажимаем кнопку "Форма" и переходим к форме документа.
В верхнем меню нажимаем "Вставить" и выбираем "Реквизиты.."
В окне добавления реквизитов в поле "Реквизиты табличной части" ставим галочку у реквизита "Остаток" и нажимаем кнопку "Вставить"
Колонка вставляется в конец таблицы. Мышкой перетаскиваем ее на нужное нам место. Я поставила эту колонку рядом с колонкой "Количество".
А вот теперь рассмотрим два метода заполнения этой колонки. Вы можете выбрать какой-то один, а можете воспользоваться сразу обоими. Прочитайте до конца и вы увидите чем они отличаются.
1. Остаток заполняется при заполнении табличной части .
Переходим на вкладку "Модуль". По кнопочке с биноклем внизу на панели кнопок в окне с функциями и процедурами выбираем "ЗаполнитьТаблЧастьПоТЗ" (дважды щелкаем на ней мышкой или нажимаем кнопку "Перейти")
А теперь внимательно смотрим что и куда нужно написать - нужное обведено красными прямоугольниками
Продублирую строки, которые нужно написать, на случай, если не очень четко можно рассмотреть на рисунке:
Первый прямоугольник:
РегОст=СоздатьОбъект("Регистр.ОстаткиТМЦ");
Если ДатаДок<ПолучитьДатуТА() Тогда
РегОст.ВременныйРасчет();
РассчитатьРегистрыНа(ДатаДок);
КонецЕсли;
и второй :
Остаток=РегОст.СводныйОстаток(Фирма,Номенклатура,,,"Количество");
Сохраняем и закрываем конфигуратор.
Напоминаю, что остатки заполняются на дату документа. Если документ оформляется задним числом, то и остатки будут заполняться на то самое "заднее число". Если вы хотите, что бы остатки всегда заполнялись на сегодняшний момент (даже если документ оформляется очень задним числом) - тогда из первого прямоугольника можно удалить все, кроме первой строчки, а точнее - строка:
РегОст=СоздатьОбъект("Регистр.ОстаткиТМЦ");
остается, а все остальное можно удалить.
Строка из второго прямоугольника заполняет колонку "Остаток" в таблице.
У этого способа есть недостаток - остаток заполняется не во всех случаях. Например, при заполнении по минимальному остатку, по заявке и т.п. остаток будет заполняться. Но если вы захотите добавить товар через "Подбор" - остаток заполняться не будет. Так же остаток не будет заполняться, если вы будете добавлять новую строчку в таблицу через "новую строку" или по кнопке "Ins".
Я не хочу путать вас и искать все места, куда нужно поставить условия для заполнения остатка в таблице - этих мест несколько, но если кому-то будет действительно очень нужно - можно будет потом и рассмотреть.
Посмотрим в программе. Создаем документ и заполняем по минимальному остатку:
А теперь в этот же документ добавим товар через "Подбор"
Остаток не заполнился.
2. Заполняем остаток по кнопочке.
Давайте добавим в документ кнопочку, по которой будет заполняться остаток. Да, это лишнее движение для работника - нажать кнопочку, но зато это просто и не нужно искать все места в коде программы, куда нужно поставить условия для заполнения остатка.
Нажимаем кнопку, на панели кнопок внизу (можно в верхнем меню нажать "Вставить" и выбрать "Кнопка")
и внизу слева над кнопками "Записать" "Провести" и т.п. рисуем кнопку. В окне свойств кнопки на вкладке "Общие" в поле "Заголовок" пишем "Остаток" - это название кнопки, можно написать, например, "Заполнить остатки"...
На вкладке "Дополнительно" в поле "Формула" пишем "ЗаполнитьОстаток()" - это процедура, которую мы ниже напишем в модуле документа и которая будет выполняться при нажатии этой кнопки.
По кнопке "ОК" записываем. Щелкаем на кнопке правой клавишей мыши и выбираем "Поместить" - " В слой ТабличнаяЧасть". Теперь на вкладке "Шапка" в документе мы эту кнопочку видеть не будем - она будет видна только на вкладке "Табличная часть".
Теперь запишем функцию в модуль документа
В самом верху модуля под словами //СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ вставим новую процедуру
Продублирую, на случай, если что-то плохо читается:
Процедура ЗаполнитьОстаток()
РегОст=СоздатьОбъект("Регистр.ОстаткиТМЦ");
Если ДатаДок<ПолучитьДатуТА() Тогда
РегОст.ВременныйРасчет();
РассчитатьРегистрыНа(ДатаДок);
КонецЕсли;
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл
Остаток=РегОст.СводныйОстаток(Фирма,Номенклатура,,,"Количество");
КонецЦикла;
КонецПроцедуры
Сохраняем, закрываем конфигуратор.
Смотрим в программе, что у нас получилось. Открываем программу. Создаем документ "Заказ поставщику" (или можно открыть уже существующий) и заполняем его по минимальному остатку
Теперь нажимаем нашу новую кнопку "Остаток"
Наши остатки заполнились.
Комментариев нет:
Отправить комментарий