gifts2017

Продажа собственной фирме (интеркомпани) - заполнение отрицательными остатками

Опубликовал Владимир Щербаков (2sw) в раздел Программирование - Практика программирования

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


1. Открываем конфигуратор. Документы --> Быстрая продажа --> Форма --> Модуль
2. Идем в конец модуля, после последней строки вставляем код

	 // Предопределенная процедура
//sw
Процедура ОбработкаПодбора(ВыбЗнач, КонтФормыПодбора)
   //есть ставки налогов, есть скидка
   глОбработкаПодбора(Контекст, ВыбЗнач, 1, 1, 1);
КонецПроцедуры // ОбработкаПодбора()

	 Процедура ЗаполнитьПоОстаткам()
   //проверки
   Если Форма.Параметр <> "Перемещение" Тогда
      Предупреждение("Только для внутрифирменных продаж");
      Возврат;
   ИначеЕсли КоличествоСтрок() <> 0 Тогда
      Если Вопрос("Заполнить по отрицательным остаткам склада покупателя (перед заполнением табличная часть будет очищена)?", "Да+Нет", 60) <> "Да" Тогда
         Возврат;
      КонецЕсли;
      Сообщить("заполняю");
      УдалитьСтроки();
   КонецЕсли;
   //конец проверок

   ТекстЗапросаОстатков="
   |ФирмаПокупат = Регистр.ОстаткиТМЦ.Фирма;
   |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
   |СкладПокупат = Регистр.ОстаткиТМЦ.Склад;
   |Количество = Регистр.ОстаткиТМЦ.Количество;
   |Функция КоличествоКонОст = КонОст(Количество);
   |Группировка Номенклатура без групп;
   |Условие(ФирмаПокупат=ФирмаПокупателя);
   |Условие(СкладПокупат=СкладПокупателя);";

   ЗапросПоОстаткам = СоздатьОбъект("Запрос");
   Если ЗапросПоОстаткам.Выполнить(ТекстЗапросаОстатков) = 0 Тогда
      Возврат;
   КонецЕсли;
   флаг=0; // для отслеживания того что отбор был

   СписокНоменклатуры =СоздатьОбъект("СписокЗначений"); // думаю пригодится.

   Пока ЗапросПоОстаткам.Группировка(1) = 1 Цикл
      Если ЗапросПоОстаткам.КоличествоКонОст < 0 Тогда //нам нужны отрицательные остатки
         флаг=1;
         НоваяСтрока();
         Номенклатура=ЗапросПоОстаткам.Номенклатура;
         Количество=-ЗапросПоОстаткам.КоличествоКонОст;
         глПересчетТаблЧасти(Контекст,"Номенклатура");
         глПересчетТаблЧасти(Контекст,"Количество");
      КонецЕсли;
   КонецЦикла;

   Если флаг=0 Тогда
      Сообщить("У организации " + ФирмаПокупателя + " по складу " + СкладПокупателя + " не найдено отрицательных остатков");
      Возврат;
   КонецЕсли;
КонецПроцедуры

3. Переходим в диалог формы (слой табличная часть). Вставляем кнопку (Главное меню --> Вставка --> Кнопка).

4. Переходим на кнопке на вкладку "Дополнительно" и заполняем формулу вписанной в модуль процедурой: ЗаполнитьПоОстаткам()

 Заполнить по остаткам
5. Сохраняем изменения конфигурации. Запускаем 1С.

Кнопка заполнить работает и экономит время. 5 минут работы ))

 

зы. спасибо этим публикациям

http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=3432 

http://forum.infostart.ru/forum11/topic42164/

 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Федорович (Фред) 09.05.12 08:27
Эх! Опять куда-то в модуль послали...)) Я в модуль ходить давно боюсь....как за три месяца первичку ручками восстановил...((
2. Элеонора (eleonora) 02.12.14 23:54
Спасибо! А можно получить остатки на определенную дату?
3. Евгения Зимина (Vesna789) 07.12.15 22:47
Добрый вечер, не могли помочь? Сделала все как вы описали, работает но выдает ошибку:
ЗаполнитьПоОстаткам<<?>>()
Процедура вызывается как функция (ЗаполнитьПоОстаткам)
Что я не правильно сделала?