УНФ. Партионный учет для списания материалов в документе "Сборка заказов". Версия 0.01

24.12.09

Разработка - Механизмы типовых конфигураций

Документ заполняется материалами по спецификации, но графа партии не заполняется. Теперь под словом Партия 1с понимает чисто управленческий учет. Партия как качество или особенность номенклатуры. Поэтому даже не планируется списание этих управленческих партий каким либо автоматическим методом. Партию надо выбирать вручную ! Данная доработка заполняет табличную часть документа Сборка заказов по спецификации методом ФИФО.

Жду ваших комментариев и предложений по совершенствованию

Алгоритм пока не рабочий. Остатки по документу поступления (регистратору) не видны.

 

Документ заполняется материалами по спецификации, но графа партии не заполняется. Теперь под словом Партия 1с понимает чисто управленческий учет. Партия как качество или особенность номенклатуры. Поэтому даже не планируется списание этих управленческих партий каким либо автоматическим методом. Партию надо выбирать вручную ! Данная доработка заполняет табличную часть документа Сборка заказов по спецификации методом ФИФО.

 

Жду ваших комментариев и предложений по совершенствованию.

Алгоритм пока не рабочий. Остатки по документу поступления (регистратору) не видны.

 

  1. Изменил процедуру формы документа.

 

&НаСервере

// Процедура заполняет Запасы по спецификации.

//

Процедура ЗаполнитьПоСпецификацииНаСервере()

           

            Документ = РеквизитФормыВЗначение("Объект");

            Документ.ЗаполнитьТабличнуюЧастьПоСпецификации();

           

            //изменено нач

            ТЗМатериаловДляСписания = Документ.Запасы.Выгрузить(,"Номенклатура,Количество,ЕдиницаИзмерения");

           

            Запрос = Новый Запрос;

    МенеджерВТ = Новый МенеджерВременныхТаблиц;

    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

           

            Запрос.УстановитьПараметр("Организация", Документ.Организация);

            Запрос.УстановитьПараметр("СтруктурнаяЕдиница", Документ.СтруктурнаяЕдиница);

            Запрос.УстановитьПараметр("СчетУчета", ПланыСчетов.Управленческий.СырьеИМатериалы);

            Запрос.УстановитьПараметр("МоментВремени", Документ.МоментВремени());

            Запрос.УстановитьПараметр("ТЗМатериаловДляСписания", ТЗМатериаловДляСписания);

           

            Запрос.Текст =

                        "ВЫБРАТЬ

                        |           ТЗ.Номенклатура КАК Номенклатура,

                        |           ТЗ.Количество КАК Количество,

                        |           ТЗ.ЕдиницаИзмерения

                        |ПОМЕСТИТЬ Номенклатурка

                        |ИЗ

                        |           &ТЗМатериаловДляСписания КАК ТЗ

                        |

                        |ИНДЕКСИРОВАТЬ ПО

                        |           Номенклатура";

            Запрос.Выполнить();

                       

            Документ.ЗапасыОчистить();

                       

            Запрос.Текст =

                        "ВЫБРАТЬ

                        |           МАКСИМУМ(ВложенныйЗапрос.КолДляСписания) КАК КолДляСписания,

                        |           ВложенныйЗапрос.Регистратор КАК Регистратор,

                        |           ВложенныйЗапрос.Номенклатура КАК Номенклатура,

                        |           ВложенныйЗапрос.Партия КАК Партия,

                        |           МАКСИМУМ(ВложенныйЗапрос.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,

                        |           ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения

                        |ИЗ

                        |           (ВЫБРАТЬ

                        |                       МАКСИМУМ(ВложенныйЗапрос.Количество) КАК КолДляСписания,

                        |                       ЗапасыОстаткиИОбороты.Регистратор КАК Регистратор,

                        |                       ЗапасыОстаткиИОбороты.Номенклатура КАК Номенклатура,

                        |                       ЗапасыОстаткиИОбороты.Партия КАК Партия,

                        |                       МАКСИМУМ(ЗапасыОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,

                        |                       ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения

                        |           ИЗ

                        |                       (ВЫБРАТЬ

                        |                                   Номенклатурка.Номенклатура КАК Номенклатура,

                        |                                   Номенклатурка.Количество КАК Количество,

                        |                                   Номенклатурка.ЕдиницаИзмерения КАК ЕдиницаИзмерения

                        |                       ИЗ

                        |                                   Номенклатурка КАК Номенклатурка) КАК ВложенныйЗапрос

                        |                                   ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.ОстаткиИОбороты(, &МоментВремени, Регистратор, ДвиженияИГраницыПериода, Номенклатура В (&ТЗМатериаловДляСписания)) КАК ЗапасыОстаткиИОбороты

                        |                                   ПО ВложенныйЗапрос.Номенклатура = ЗапасыОстаткиИОбороты.Номенклатура

                        |          

                        |           СГРУППИРОВАТЬ ПО

                        |                       ЗапасыОстаткиИОбороты.Регистратор,

                        |                       ЗапасыОстаткиИОбороты.Номенклатура,

                        |                       ЗапасыОстаткиИОбороты.Партия,

                        |                       ВложенныйЗапрос.ЕдиницаИзмерения) КАК ВложенныйЗапрос

                        |

                        |СГРУППИРОВАТЬ ПО

                        |           ВложенныйЗапрос.Номенклатура,

                        |           ВложенныйЗапрос.Регистратор,

                        |           ВложенныйЗапрос.Партия,

                        |           ВложенныйЗапрос.ЕдиницаИзмерения

                        |ИТОГИ ПО

                        |           Номенклатура,

                        |           Регистратор,

                        |           Партия,

                        |           ЕдиницаИзмерения";

 

            //Запрос.УстановитьПараметр("Номенклатура", ТЗМатериаловДляСписания);

           

            Результат = Запрос.Выполнить();

 

           

            ВыбНом = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

            Пока ВыбНом.Следующий() Цикл

                       

                        Нужно = ВыбНом.КолДляСписания;

                       

                        ВыбРег = ВыбНом.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

                        Пока ВыбРег.Следующий() Цикл

                                  

                                   Если Нужно <=  0 Тогда

                                               Продолжить;   

                                   КонецЕсли;

                                  

                                   ВыбПартия = ВыбРег.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

                                   Пока ВыбПартия.Следующий() Цикл

 

                                               ВыбПартияЕдИзм = ВыбПартия.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

                                       ВыбПартияЕдИзм.Следующий();

                                              

                                               ДоступноДляСписания = ВыбПартияЕдИзм.КоличествоКонечныйОстаток;

                                               Если Нужно >  ДоступноДляСписания Тогда

                                                           Документ.ДобавляемСтрокуЗатратПартия(ВыбПартияЕдИзм,ДоступноДляСписания);

                                                           Нужно = Нужно - ДоступноДляСписания;        

                                               Иначе

                                                           //списываем остаток

                                                           ДоступноДляСписания = Нужно;

                                                           Документ.ДобавляемСтрокуЗатратПартия(ВыбПартияЕдИзм,ДоступноДляСписания);

                                                           Нужно = 0;

                                               КонецЕсли;

                                              

                                   КонецЦикла;

                                  

                        КонецЦикла;

                       

            КонецЦикла;

            //изменено Кон

           

            ЗначениеВРеквизитФормы(Документ, "Объект");

            Модифицированность = Истина;

           

 

КонецПроцедуры // ЗаполнитьМатериальныеЗатратыПоСпецификацииНаСервере()    

 

  1. Добавил свои процедуры в модуль документа

 

//изменено

Процедура ДобавляемСтрокуЗатратПартия(СтрокаВыборки, КолДляСписания) Экспорт

           

            НоваяСтрока = Запасы.Добавить();

                                  

            ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаВыборки);

            НоваяСтрока.Количество = КолДляСписания;

           

КонецПроцедуры

 

Процедура ЗапасыОчистить() Экспорт

            Запасы.Очистить();

КонецПроцедуры

 

 

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • Поиск от одного разработчика до ИТ-команд под проект.
  • Обмен любыми контактами разрешён.
  • 0% комиссии, допускаются расчёты напрямую.

См. также

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист 1С 8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данное расширение — это механизм, сделанный при помощи двух модулей из БСП (3.1.11.415), который позволяет динамически добавлять команды (кнопки и не только при желании) на формы управляемого приложения без изменения конфигурации. На примере данного механизма удобно рассмотреть некоторые возможности для расширения функционала объектов, которые подключены к механизму библиотеки стандартных подсистем.

1 стартмани

20.03.2026    849    InFlach    0    

7

Механизмы типовых конфигураций Программист Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Интервальные регистры в 1С:ЗУП 3.1 заменяют тяжелые срезы последних, ускоряя отчеты по кадровым данным через интервалы ДатаНачала–ДатаОкончания. Разбираем отличия, примеры кода, плюсы и способы синхронизации.

12.03.2026    2282    AlexeyPROSTO_1C    4    

20

Механизмы типовых конфигураций Программист Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Как в ЗУП работает механизм расстановки времени в регистрах сведений с помощью подписки на события?Рассматривается логика сдвигов для разных типов документов (прием, увольнение, отпуск) и дается инструкция по подключению нового регистра к этому механизму.

03.03.2026    1052    YA_1100893639    1    

7

Механизмы типовых конфигураций Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

В статье рассматривается подход к программной модификации параметров команды внешней обработки заполнения объекта так, чтобы в момент вызова из формы объекта (табличной части документа) она использовалась для открытия вспомогательной формы диалога, а после закрытия вспомогательной формы диалога она использовалась для заполнения объекта (табличной части документа) уже на сервере с контекстом формы документа с использованием введенных данных во вспомогательной форме диалога.

11.08.2025    7294    user1988284    0    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. scanner1980 267 12.10.22 13:47 Сейчас в теме
хороший пример, только привязки к продукции нет в итоговой таблице запасы
Для отправки сообщения требуется регистрация/авторизация