Отбор по местам хранения в документе инвентаризация
По теме из базы знаний
- Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники
- Адресная система хранения на складе
- Вариант реализации адресного хранения в УПП 1.3
- Модуль "Ответственное хранение" или фулфилмент (FBS / FBO) для 1С:УТ 11.5, КА 2.5, ERP 2.5
- AS WMS: автоматизация склада с адресным хранением с помощью ТСД
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В УТ 10.3 места хранения являются лишь информационными. то есть если ву вас в карточке номенклатуры указано место. это не показатель, что там товар действительно лежит. Возможно у вас доработана конфигурация, но тогда необходимо смотреть именно ваши доработки.
(10)
пример подзапроса по местам хранения:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад,
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.Качество,
ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
ТоварыНаСкладахОстатки.СерияНоменклатуры,
ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
{ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
СУММА(1) КАК ЧислоЯчеек
ИЗ
РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
ГДЕ
МестаХраненияНоменклатуры.Склад = &Склад
{ГДЕ
МестаХраненияНоменклатуры.МестоХранения.*}
СГРУППИРОВАТЬ ПО
МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
ПО ТоварыНаСкладахОстатки.Номенклатура = ЯчейкиНоменклатуры.Номенклатура}ГДЕ
ТоварыНаСкладахОстатки.Склад = &Склад
Показать
пример подзапроса по местам хранения:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад,
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.Качество,
ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
ТоварыНаСкладахОстатки.СерияНоменклатуры,
ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
{ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
СУММА(1) КАК ЧислоЯчеек
ИЗ
РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
ГДЕ
МестаХраненияНоменклатуры.Склад = &Склад
{ГДЕ
МестаХраненияНоменклатуры.МестоХранения.*}
СГРУППИРОВАТЬ ПО
МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
ПО ТоварыНаСкладахОстатки.Номенклатура = ЯчейкиНоменклатуры.Номенклатура}ГДЕ
ТоварыНаСкладахОстатки.Склад = &Склад
(11)
подчеркнутый фрагмент текста (расширение для построителя отчета)
должно обязательно присутствовать, чтобы построитель отчета
мог фильтровать по полю "МестоХранения"
PS
Само соединение - тоже в угловых скобках -
- чтобы добавлялось в запрос только при фильтрации по ячейкам склада
подчеркнутый фрагмент текста (расширение для построителя отчета)
должно обязательно присутствовать, чтобы построитель отчета
мог фильтровать по полю "МестоХранения"
PS
Само соединение - тоже в угловых скобках -
- чтобы добавлялось в запрос только при фильтрации по ячейкам склада
(12) Rothschild, Извините пожалуйста я в программировании не понимаю . я пользователь . Из конструктора я заходил в документ , в подсистемах Управление запасами отмечено . В Данных реквизиты : Организация , Комментарий , Склад , Ответственный ,Учитывать серии , Условия проведения инвентаризации .
Все вкладки наверное не буду описывать )) .
Вкладка Формы : Форма документа , Форма списка , Форма выбора .
Те (лекарства) которые вы выписали куда вписать ))?
И еще поле выбора куда добавить , как назвать и какой функционал выбрать "при изменении"?
Все вкладки наверное не буду описывать )) .
Вкладка Формы : Форма документа , Форма списка , Форма выбора .
Те (лекарства) которые вы выписали куда вписать ))?
И еще поле выбора куда добавить , как назвать и какой функционал выбрать "при изменении"?
(12) Rothschild, "ЯчейкиНоменклатуры.Номенклатура" - не знаю имеет ли это значение ,но у меня в справочниках имеется справочник "МестаХранения" в которую я добавил реквизиты (15-1-1,15-1-2,...) и в номенклатуре во вкладке Места Хранения добавил эти реквизиты .
Я к тому что я в системе не замечал фразу "Ячейка" которая присутствует в прошлом вашем сообщении .
Спасибо за оперативность !!
Я к тому что я в системе не замечал фразу "Ячейка" которая присутствует в прошлом вашем сообщении .
Спасибо за оперативность !!
(14) dag_ssa,
термин "Ячейка" - это у меня своего рода сленг,
доставшийся мне по практическому опыту.
Я учавствовал во внедрении и сопровождении
системы адресного хранения на складах еще в ТиС-7.7.
В том варианте "места хранения" на складе обзывались складскими "ячейками".
термин "Ячейка" - это у меня своего рода сленг,
доставшийся мне по практическому опыту.
Я учавствовал во внедрении и сопровождении
системы адресного хранения на складах еще в ТиС-7.7.
В том варианте "места хранения" на складе обзывались складскими "ячейками".
(15)
пример запроса в (11) написан мной в демо базе УПП-1.3.
для УТ-10.3 тоже должен подойти - проверь в консоли запросов,
если что не так по структуре таблиц - подправь (хотя это мало вероятно).
имя подзапроса "ЯчейкиНоменклатуры", используемого для фильтрации номенклатуры
по ее "местам хранения" можешь заменить на более удобное.
пример запроса в (11) написан мной в демо базе УПП-1.3.
для УТ-10.3 тоже должен подойти - проверь в консоли запросов,
если что не так по структуре таблиц - подправь (хотя это мало вероятно).
имя подзапроса "ЯчейкиНоменклатуры", используемого для фильтрации номенклатуры
по ее "местам хранения" можешь заменить на более удобное.
(16) Rothschild, Куда именно надо вписать эту формулу ?
Как я понял вот это примерно то место в модуле документа ?
Процедура ЗаполнитьНачальныеНастройки(ПостроительОтчета) Экспорт
ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,","") + "
| ОстаткиТоваров.Качество,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
| ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
| 0
| ИНАЧЕ
| СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
| / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ КАК Сумма
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад)
|КАК ОстаткиТоваров
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(,
| Склад = &ПартионныйСклад) КАК ОстаткиПартий
|ПО
| ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры
| И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
|
|{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
| МестаХраненияНоменклатуры.МестоХранения КАК МестоХранения}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Качество";
МассивОтбора = Новый Массив;
МассивОтбора.Добавить("Номенклатура");
МассивОтбора.Добавить("НоменклатурнаяГруппа");
УправлениеОтчетами.ЗаполнитьОтбор(МассивОтбора, ПостроительОтчета);
КонецПроцедуры
Я создал "ПолеВидаСравненияМесоХранения" и "ПолеНастройкиМестоХранения" в форме отбора .(17) Rothschild,
Как я понял вот это примерно то место в модуле документа ?
Процедура ЗаполнитьНачальныеНастройки(ПостроительОтчета) Экспорт
ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,","") + "
| ОстаткиТоваров.Качество,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
| ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
| 0
| ИНАЧЕ
| СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
| / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ КАК Сумма
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад)
|КАК ОстаткиТоваров
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(,
| Склад = &ПартионныйСклад) КАК ОстаткиПартий
|ПО
| ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры
| И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
|
|{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
| МестаХраненияНоменклатуры.МестоХранения КАК МестоХранения}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Качество";
МассивОтбора = Новый Массив;
МассивОтбора.Добавить("Номенклатура");
МассивОтбора.Добавить("НоменклатурнаяГруппа");
УправлениеОтчетами.ЗаполнитьОтбор(МассивОтбора, ПостроительОтчета);
КонецПроцедуры
Я создал "ПолеВидаСравненияМесоХранения" и "ПолеНастройкиМестоХранения" в форме отбора .(17) Rothschild,
(18) dag_ssa, думаю надо так вставить.
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад)
|КАК ОстаткиТоваров
{ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
СУММА(1) КАК ЧислоЯчеек
ИЗ
РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
ГДЕ
МестаХраненияНоменклатуры.Склад = &Склад
{ГДЕ
МестаХраненияНоменклатуры.МестоХранения.*}
СГРУППИРОВАТЬ ПО
МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
ПО ОстаткиТоваров .Номенклатура = ЯчейкиНоменклатуры.Номенклатура}
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(,
| Склад = &ПартионныйСклад) КАК ОстаткиПартий
Показать| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад)
|КАК ОстаткиТоваров
{ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
СУММА(1) КАК ЧислоЯчеек
ИЗ
РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
ГДЕ
МестаХраненияНоменклатуры.Склад = &Склад
{ГДЕ
МестаХраненияНоменклатуры.МестоХранения.*}
СГРУППИРОВАТЬ ПО
МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
ПО ОстаткиТоваров .Номенклатура = ЯчейкиНоменклатуры.Номенклатура}
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(,
| Склад = &ПартионныйСклад) КАК ОстаткиПартий
(18) dag_ssa,
еще надо добавить флаг использования отбора.
***
можешь просто выделить соответствующие элементы другого отбора (три штуки), например для номенклатуры.
и скопировать их перетаскиванием мышью (с зажатой клавишей CTRL)
Я создал "ПолеВидаСравненияМесоХранения" и "ПолеНастройкиМестоХранения" в форме отбора .
еще надо добавить флаг использования отбора.
***
можешь просто выделить соответствующие элементы другого отбора (три штуки), например для номенклатуры.
и скопировать их перетаскиванием мышью (с зажатой клавишей CTRL)
(21)
***
кроме этого эти поля надо привязать к "ПостроителюОтчета" (или убедиться что они привязываются).
привязка осуществляеится вызовом процедур стандартных общих модулей.
надо поглядеть, что творится при открытии формы и где при этом используются имена
элементов управления отборов и имя реквизита ajhvs "ПостроительОтчета".
***
кроме этого эти поля надо привязать к "ПостроителюОтчета" (или убедиться что они привязываются).
привязка осуществляеится вызовом процедур стандартных общих модулей.
надо поглядеть, что творится при открытии формы и где при этом используются имена
элементов управления отборов и имя реквизита ajhvs "ПостроительОтчета".
(14) dag_ssa,
Те (лекарства) которые вы выписали куда вписать ))?
потребуются изменения в форме документа и модуле объекта документа.
при заполнении документа используется объект "ПостроительОтчета" и
основанный на нем функционал "Универсального отчета".
Если у вас совсем нет опыта программирования - это конечно будет затруднительно сделать.
Задача не из сложных, но нужно иметь понимание с чем имеешь дело.
Лутше найти человека, который в этом более менее разбирается.
Те (лекарства) которые вы выписали куда вписать ))?
потребуются изменения в форме документа и модуле объекта документа.
при заполнении документа используется объект "ПостроительОтчета" и
основанный на нем функционал "Универсального отчета".
Если у вас совсем нет опыта программирования - это конечно будет затруднительно сделать.
Задача не из сложных, но нужно иметь понимание с чем имеешь дело.
Лутше найти человека, который в этом более менее разбирается.
(24) dag_ssa, вот тебе готовый текст запроса в качестве "гуманитарной" помощи:
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,","") + "
| ОстаткиТоваров.Качество,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА СУММА(ОстаткиПартий.КоличествоОстаток) = 0
| ИЛИ СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ КАК Сумма
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ОстаткиТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(, Склад = &ПартионныйСклад) КАК ОстаткиПартий
| ПО ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры
| И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
| {ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(1) КАК ЧислоЯчеек
| ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
| ГДЕ
| МестаХраненияНоменклатуры.Склад = &Склад
| {ГДЕ
| МестаХраненияНоменклатуры.МестоХранения.*}
|
| СГРУППИРОВАТЬ ПО
| МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
| ПО ОстаткиТоваров.Номенклатура = ЯчейкиНоменклатуры.Номенклатура}
|{ГДЕ
| ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Качество";
Показать
;)))))
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,","") + "
| ОстаткиТоваров.Качество,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА СУММА(ОстаткиПартий.КоличествоОстаток) = 0
| ИЛИ СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ КАК Сумма
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ОстаткиТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(, Склад = &ПартионныйСклад) КАК ОстаткиПартий
| ПО ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры
| И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
| {ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(1) КАК ЧислоЯчеек
| ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
| ГДЕ
| МестаХраненияНоменклатуры.Склад = &Склад
| {ГДЕ
| МестаХраненияНоменклатуры.МестоХранения.*}
|
| СГРУППИРОВАТЬ ПО
| МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
| ПО ОстаткиТоваров.Номенклатура = ЯчейкиНоменклатуры.Номенклатура}
|{ГДЕ
| ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Качество";
;)))))
(25)
запрос проверен в конструкторе запросов.
***
ЗЫ
я нашел еще две процедуры в модуле объекта,
где надо сделать аналогичные правки в запросах:
запрос проверен в конструкторе запросов.
***
ЗЫ
я нашел еще две процедуры в модуле объекта,
где надо сделать аналогичные правки в запросах:
Процедура ЗаполнитьПоОстаткамНаСкладе(ПостроительОтчета, ТолькоУчетные = Ложь, УпрУчет=Истина) Экспорт
Процедура ПерезаполнитьУчетныеКоличества(ПостроительОтчета,УпрУчет=Истина) Экспорт
(26)
В УПП-1.3 есть еще одна функция в модуле документа
(уж не знаю есть ли она в УТ-10.3):
используется при использовании какой-то расширенной аналитики учета.
В УПП-1.3 есть еще одна функция в модуле документа
(уж не знаю есть ли она в УТ-10.3):
Процедура ПерезаполнитьУчетныеКоличестваРасширеннаяАналитика(ДатаОстатков,ПостроительОтчета,УпрУчет) Экспорт
используется при использовании какой-то расширенной аналитики учета.
(27) Rothschild, Большое вам спасибо ! Но я еще не разобрался ))
Вот модуль с изменением , которые я внес по вашему совету:
Вот модуль с изменением , которые я внес по вашему совету:
Перем мВалютаРегламентированногоУчета Экспорт;
// Валюта курс и кратность для пересчета регламентированных сумм
Перем мВалютаУпрУчета Экспорт;
Перем мКурсУпрУчета Экспорт;
Перем мКратностьУпрУчета Экспорт;
Перем мРазрешитьНулевыеЦеныВРознице Экспорт;
X
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА
// Функция помещает в структуру все данные, отображаемые при печати документа.
// Вызывается из функции ПечатьДокумента и из веб-приложения
//
// Возвращаемое значение:
// Структура
//
Функция ПолучитьДанныеДляПечатиДокумента() Экспорт
ПараметрыПечати = Новый Структура;
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
ПараметрыПечати.Вставить("ВыводитьКоды", Истина);
ПараметрыПечати.Вставить("ИмяКолонкиКодов", "Артикул");
ТекстКодАртикул = "Артикул";
ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
ПараметрыПечати.Вставить("ВыводитьКоды", Истина);
ПараметрыПечати.Вставить("ИмяКолонкиКодов", "Код");
ТекстКодАртикул = "Код";
Иначе
ПараметрыПечати.Вставить("ВыводитьКоды", Ложь);
ПараметрыПечати.Вставить("ИмяКолонкиКодов", "");
ТекстКодАртикул = "Код";
КонецЕсли;
Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
ВалютаПечати = мВалютаРегламентированногоУчета;
Иначе
ВалютаПечати = мВалютаУпрУчета;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
Запрос.УстановитьПараметр("ВидСкладаНТТ", Перечисления.ВидыСкладов.НТТ);
Запрос.Текст =
"ВЫБРАТЬ
| Номер,
| Дата,
| Организация,
| Склад.Представление КАК ПредставлениеСклада,
| Организация,
| Склад,
| Товары.(
| НомерСтроки,
| Номенклатура,
| Номенклатура."+ ТекстКодАртикул + " КАК КодАртикул,
| Номенклатура.НаименованиеПолное КАК Товар,
| Количество КАК Количество,
| КоличествоУчет КАК КоличествоПоУчету,
| ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
| ВЫБОР
| КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице
| ИНАЧЕ Цена
| КОНЕЦ КАК Цена,
| ВЫБОР
| КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице
| ИНАЧЕ Сумма
| КОНЕЦ КАК Сумма,
| ВЫБОР
| КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице
| ИНАЧЕ СуммаУчет
| КОНЕЦ КАК СуммаПоУчету,
| ХарактеристикаНоменклатуры КАК Характеристика,
| СерияНоменклатуры КАК Серия
| )
|ИЗ
| Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
|
|ГДЕ
| ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент
|УПОРЯДОЧИТЬ ПО
| Товары.НомерСтроки";
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
// Выводим шапку накладной
ПараметрыПечати.Вставить("ТекстЗаголовка", ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Инвентаризация товаров на складе"));
// Выводим данные об организации и складе
ПараметрыПечати.Вставить("ПредставлениеОрганизации", ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), "ПолноеНаименование,"));
ПараметрыПечати.Вставить("ПредставлениеСклада", Шапка.ПредставлениеСклада);
ПараметрыПечати.Вставить("ВалютаНаименование", СокрЛП(ВалютаПечати));
ПараметрыПечати.Вставить("Валюта", ВалютаПечати);
Позиции = Новый Массив;
ИтогСуммы = 0;
ИтогСуммыПоУчету = 0;
Пока ВыборкаСтрокТовары.Следующий() Цикл
ПараметрыПозиции = Новый Структура;
ПараметрыПозиции.Вставить("Номенклатура", ВыборкаСтрокТовары.Номенклатура);
ПараметрыПозиции.Вставить("НомерСтроки", ВыборкаСтрокТовары.НомерСтроки);
ПараметрыПозиции.Вставить("Товар", ВыборкаСтрокТовары.Товар + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары));
ПараметрыПозиции.Вставить("Количество", ВыборкаСтрокТовары.Количество);
ПараметрыПозиции.Вставить("КоличествоПоУчету", ВыборкаСтрокТовары.КоличествоПоУчету);
ПараметрыПозиции.Вставить("ЕдиницаИзмерения", ВыборкаСтрокТовары.ЕдиницаИзмерения);
ПараметрыПозиции.Вставить("Цена", ВыборкаСтрокТовары.Цена);
ПараметрыПозиции.Вставить("Сумма", ВыборкаСтрокТовары.Сумма);
ПараметрыПозиции.Вставить("СуммаПоУчету", ВыборкаСтрокТовары.СуммаПоУчету);
Если ПараметрыПечати.ВыводитьКоды Тогда
ПараметрыПозиции.Вставить("КодАртикул", ВыборкаСтрокТовары.КодАртикул);
КонецЕсли;
ИтогСуммы = ИтогСуммы + ВыборкаСтрокТовары.Сумма;
ИтогСуммыПоУчету = ИтогСуммыПоУчету + ВыборкаСтрокТовары.СуммаПоУчету;
#Если ВнешнееСоединение Тогда
WEBПриложения.ПодготовитьСтруктуруДляВнешнегоСоединения(ПараметрыПозиции);
#КонецЕсли
Позиции.Добавить(ПараметрыПозиции);
КонецЦикла;
ПараметрыПечати.Вставить("Позиции", Позиции);
// Вывести Итого
ПараметрыПечати.Вставить("Всего", ОбщегоНазначения.ФорматСумм(ИтогСуммы));
ПараметрыПечати.Вставить("ВсегоПоУчету", ОбщегоНазначения.ФорматСумм(ИтогСуммыПоУчету));
#Если ВнешнееСоединение Тогда
WEBПриложения.ПодготовитьСтруктуруДляВнешнегоСоединения(ПараметрыПечати);
#КонецЕсли
Возврат ПараметрыПечати;
КонецФункции //ПолучитьДанныеДляПечатиДокумента()
#Если Клиент Тогда
// Функция осуществляет запуск обработки формирующей печатную форму "Бланк товарного наполнения".
//
// Параметры:
// НаПринтер - Булево. Если Истина, тогда печать выполняется непосредственно на принтер.
//
// Возвращаемое значение:
// Неопределено.
//
Функция ПечатьБланк(НаПринтер)
Обработки.ПечатьРаскладкиНоменклатурыПоМестамХранения.Создать().НапечататьИзДокумента(Ссылка, , , НаПринтер);
Возврат Неопределено;
КонецФункции // ПечатьБланк()
// Функция формирует табличный документ с печатной формой накладной,
// разработанной методистами
//
// Возвращаемое значение:
// Табличный документ - печатная форма накладной
//
Функция ПечатьДокумента()
ПараметрыПечати = ПолучитьДанныеДляПечатиДокумента();
Если ПараметрыПечати.ВыводитьКоды Тогда
ОбластьШапки = "ШапкаСКодом";
ОбластьСтроки = "СтрокаСКодом";
Иначе
ОбластьШапки = "ШапкаТаблицы";
ОбластьСтроки = "Строка";
Конецесли;
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_Инвентаризац ияТоваровНаСкладе";
Макет = ПолучитьМакет("ИнвентаризацияТоваровНаСкладе");
// Выводим шапку накладной
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Вывести(ОбластьМакета);
// Выводим данные об организации и складе
ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Вывести(ОбластьМакета);
// Выводим шапку таблицы
ОбластьМакета = Макет.ПолучитьОбласть(ОбластьШапки);
Если ПараметрыПечати.ВыводитьКоды Тогда
ОбластьМакета.Параметры.Колонка = ПараметрыПечати.ИмяКолонкиКодов;
КонецЕсли;
ТабДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть(ОбластьСтроки);
Для каждого ПараметрыПозиции Из ПараметрыПечати.Позиции Цикл
Если НЕ ЗначениеЗаполнено(ПараметрыПозиции.Номенклатура) Тогда
Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
Продолжить;
КонецЕсли;
ОбластьМакета.Параметры.Заполнить(ПараметрыПозиции);
ТабДокумент.Вывести(ОбластьМакета);
КонецЦикла;
// Вывести Итого
ОбластьМакета = Макет.ПолучитьОбласть("Итого");
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Вывести(ОбластьМакета);
// Выводим подписи к документу
ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
ТабДокумент.Вывести(ОбластьМакета);
Возврат ТабДокумент;
КонецФункции // ПечатьДокумента()
// ТекстОписания
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// Нет.
//
Функция ПечатьИНВ3(БезФактическихДанных = Ложь)
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
ТоварКод = "Артикул";
Иначе
ТоварКод = "Код";
КонецЕсли;
Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
ВалютаПересчета = мВалютаРегламентированногоУчета;
Иначе
ВалютаПересчета = мВалютаУпрУчета;
КонецЕсли;
ВалютаПечати = мВалютаРегламентированногоУчета;
Параметры = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, Дата);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
Запрос.УстановитьПараметр("Курс", Параметры.Курс);
Запрос.УстановитьПараметр("Кратность", Параметры.Кратность);
Запрос.УстановитьПараметр("ВидСкладаНТТ", Перечисления.ВидыСкладов.НТТ);
Запрос.УстановитьПараметр("БезФактическихДанных", БезФактическихДанных);
Запрос.Текст =
"ВЫБРАТЬ
| Номер КАК НомерДокумента,
| Дата КАК ДатаДокумента,
| Дата КАК ДатаСнятияОстатков,
| Организация,
| Склад.Представление КАК ПредставлениеСклада,
| Товары.(
| НомерСтроки КАК Номер,
| Номенклатура,
| Номенклатура.НаименованиеПолное КАК ТоварНаименование,
| Номенклатура." + ТоварКод + " КАК ТоварКод,
| ЕдиницаИзмерения.Представление КАК ЕдиницаИзмеренияНаименование,
| ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
| ВЫБОР
| КОГДА &БезФактическихДанных ТОГДА 0
| ИНАЧЕ Количество
| КОНЕЦ КАК ФактКоличество,
| КоличествоУчет КАК БухКоличество,
| ВЫБОР
| КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице
| ИНАЧЕ Цена * &Курс / &Кратность
| КОНЕЦ КАК Цена,
| ВЫБОР
| КОГДА &БезФактическихДанных ТОГДА 0
| ИНАЧЕ ВЫБОР КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице ИНАЧЕ Сумма * &Курс / &Кратность КОНЕЦ
| КОНЕЦ КАК ФактСумма,
| ВЫБОР
| КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице
| ИНАЧЕ СуммаУчет * &Курс / &Кратность
| КОНЕЦ КАК БухСумма,
| ХарактеристикаНоменклатуры КАК Характеристика,
| СерияНоменклатуры КАК Серия
| )
|ИЗ
| Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
|
|ГДЕ
| ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент";
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ3";
Макет = ПолучитьОбщийМакет("ИНВ3");
// Выводим шапку накладной
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заполнить(Шапка);
СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации);
ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО;
ОбластьМакета.Параметры.ДатаДокумента = Шапка.ДатаДокумента;
ОбластьМакета.Параметры.ДатаСнятияОстатков = Шапка.ДатаСнятияОстатков;
ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(ЭтотОбъект);
ТабДокумент.Вывести(ОбластьМакета);
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
СтрокНаСтранице = 19;
СтрокШапки = 5;
СтрокПодвала = 5;
НомерСтраницы = 2;
Ном = 0;
ИтогФактКоличество = 0;
ИтогФактСумма = 0;
ИтогБухКоличество = 0;
ИтогБухСумма = 0;
КолвоСтрокПоСтранице = 0;
КолвоПостранице = 0;
СуммаЛиста = 0;
ИтогоКолво = 0;
ИтогоСумма = 0;
// Выводим заголовок таблицы
ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабДокумент.Вывести(ЗаголовокТаблицы);
КоличествоСтрок = ВыборкаСтрокТовары.Количество();
Если КоличествоСтрок = 1 Тогда
ПереноситьПоследнююСтроку = 0;
Иначе
ЦелыхСтраницСПодвалом = Цел((СтрокШапки + КоличествоСтрок + СтрокПодвала) / СтрокНаСтранице);
ЦелыхСтраницБезПодвала = Цел((СтрокШапки + КоличествоСтрок - 1) / СтрокНаСтранице);
ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала;
КонецЕсли;
// Выводим многострочную часть докмента
ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
Пока ВыборкаСтрокТовары.Следующий() Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
Продолжить;
КонецЕсли;
Ном = Ном + 1;
//Начинаем новую страницу, если предыдущая строка была последней на странице
//или пора переносить последнюю строку на последнюю страницу с подвалом.
ЦелаяСтраница = (СтрокШапки + Ном - 1) / СтрокНаСтранице;
Если (ЦелаяСтраница = Цел(ЦелаяСтраница))
или ((ПереноситьПоследнююСтроку = 1) и (Ном = КоличествоСтрок)) Тогда
ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ПодвалСтраницы");
ОбластьИтоговПоСтранице.Параметры.ИтогоФактКоличество = ИтогФактКоличество;
ОбластьИтоговПоСтранице.Параметры.ИтогоФактСумма = ИтогФактСумма;
ОбластьИтоговПоСтранице.Параметры.ИтогоБухКоличество = ИтогБухКоличество;
ОбластьИтоговПоСтранице.Параметры.ИтогоБухСумма = ИтогБухСумма;
ОбластьИтоговПоСтранице.Параметры.КоличествоПорядковыхНомеровНаСтраницеПрописью = ЧислоПрописью(КолвоСтрокПоСтранице, ,",,,,,,,,0");
Если НЕ БезФактическихДанных Тогда
ОбластьИтоговПоСтранице.Параметры.ОбщееКоличествоЕдиницФактическиНаСтраницеПрописью = ФормированиеПечатныхФорм.КоличествоПрописью(КолвоПостранице);
ОбластьИтоговПоСтранице.Параметры.СуммаФактическиНаСтраницеПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаЛиста, ВалютаПечати);
КонецЕсли;
ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
НомерСтраницы = НомерСтраницы + 1;
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабДокумент.Вывести(ЗаголовокТаблицы);
ИтогФактКоличество = 0;
ИтогФактСумма = 0;
ИтогБухКоличество = 0;
ИтогБухСумма = 0;
КолвоСтрокПоСтранице = 0;
КолвоПостранице = 0;
СуммаЛиста = 0;
КонецЕсли;
ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
ОбластьМакета.Параметры.Номер = Ном;
ТабДокумент.Вывести(ОбластьМакета);
ИтогФактКоличество = ИтогФактКоличество + ВыборкаСтрокТовары.ФактКоличество;
ИтогФактСумма = ИтогФактСумма + ВыборкаСтрокТовары.ФактСумма;
ИтогБухКоличество = ИтогБухКоличество + ВыборкаСтрокТовары.БухКоличество;
ИтогБухСумма = ИтогБухСумма + ВыборкаСтрокТовары.БухСумма;
ИтогоКолво = ИтогоКолво + ВыборкаСтрокТовары.ФактКоличество;
ИтогоСумма = ИтогоСумма + ВыборкаСтрокТовары.ФактСумма;
КолвоСтрокПоСтранице = КолвоСтрокПоСтранице + 1;
КолвоПостранице = КолвоПостранице + ВыборкаСтрокТовары.ФактКоличество;
СуммаЛиста = СуммаЛиста + ВыборкаСтрокТовары.ФактСумма;
КонецЦикла;
// Выводим итоги по последней странице
ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ПодвалСтраницы");
ОбластьИтоговПоСтранице.Параметры.ИтогоФактКоличество = ИтогФактКоличество;
ОбластьИтоговПоСтранице.Параметры.ИтогоФактСумма = ИтогФактСумма;
ОбластьИтоговПоСтранице.Параметры.ИтогоБухКоличество = ИтогБухКоличество;
ОбластьИтоговПоСтранице.Параметры.ИтогоБухСумма = ИтогБухСумма;
ОбластьИтоговПоСтранице.Параметры.КоличествоПорядковыхНомеровНаСтраницеПрописью = ЧислоПрописью(КолвоСтрокПоСтранице, ,",,,,,,,,0");
Если НЕ БезФактическихДанных Тогда
ОбластьИтоговПоСтранице.Параметры.ОбщееКоличествоЕдиницФактическиНаСтраницеПрописью = ФормированиеПечатныхФорм.КоличествоПрописью(КолвоПостранице);
ОбластьИтоговПоСтранице.Параметры.СуммаФактическиНаСтраницеПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаЛиста, ВалютаПечати);
КонецЕсли;
ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
// Выводим подвал документа
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ОбластьМакета = Макет.ПолучитьОбласть("ПодвалОписи");
ОбластьМакета.Параметры.Заполнить(Шапка);
ОбластьМакета.Параметры.НачальныйНомерПоПорядку = 1;
ОбластьМакета.Параметры.НомерКонца = ВыборкаСтрокТовары.Количество();
ОбластьМакета.Параметры.КоличествоПорядковыхНомеровНаСтраницеПрописью = ЧислоПрописью(ВыборкаСтрокТовары.Количество(), ,",,,,,,,,0");
Если НЕ БезФактическихДанных Тогда
ОбластьМакета.Параметры.ОбщееКоличествоЕдиницФактическиНаСтраницеПрописью = ФормированиеПечатныхФорм.КоличествоПрописью(ИтогоКолво);
ОбластьМакета.Параметры.СуммаФактическиНаСтраницеПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(ИтогоСумма, ВалютаПечати);
КонецЕсли;
ТабДокумент.Вывести(ОбластьМакета);
// Зададим параметры макета
ТабДокумент.ПолеСверху = 0;
ТабДокумент.ПолеСлева = 0;
ТабДокумент.ПолеСнизу = 0;
ТабДокумент.ПолеСправа = 0;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Возврат ТабДокумент;
КонецФункции // ПечатьИНВ3()
// ТекстОписания
//
// Параметры:
// Нет.
//
// Возвращаемое значение:
// Нет.
//
Функция ПечатьИНВ19()
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
ТоварКод = "Артикул";
Иначе
ТоварКод = "Код";
КонецЕсли;
Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
ВалютаПересчета = мВалютаРегламентированногоУчета;
Иначе
ВалютаПересчета = мВалютаУпрУчета;
КонецЕсли;
ВалютаПечати = мВалютаРегламентированногоУчета;
Параметры = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, Дата);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
Запрос.УстановитьПараметр("Курс", Параметры.Курс);
Запрос.УстановитьПараметр("Кратность", Параметры.Кратность);
Запрос.УстановитьПараметр("ВидСкладаНТТ", Перечисления.ВидыСкладов.НТТ);
Запрос.Текст =
"ВЫБРАТЬ
| Номер КАК НомерДокумента,
| Дата КАК ДатаДокумента,
| Дата КАК ДатаНачалаИнвентаризации,
| Организация КАК Руководители,
| Организация,
| Склад.Представление КАК ПредставлениеСклада,
| Товары.(
| НомерСтроки КАК Номер,
| Номенклатура,
| Номенклатура.НаименованиеПолное КАК ТоварНаименование,
| Номенклатура." + ТоварКод + " КАК ТоварКод,
| ЕдиницаИзмерения.Представление КАК ЕдиницаИзмеренияНаименование,
| ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ,
| Количество КАК ФактКоличество,
| КоличествоУчет КАК БухКоличество,
| ВЫБОР
| КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице
| ИНАЧЕ Цена * &Курс / &Кратность
| КОНЕЦ КАК Цена,
| ВЫБОР
| КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице
| ИНАЧЕ Сумма * &Курс / &Кратность
| КОНЕЦ КАК ФактСумма,
| ВЫБОР
| КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице
| ИНАЧЕ СуммаУчет * &Курс / &Кратность
| КОНЕЦ КАК БухСумма,
| ХарактеристикаНоменклатуры КАК Характеристика,
| СерияНоменклатуры КАК Серия
| )
|ИЗ
| Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
|
|ГДЕ
| ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент
|УПОРЯДОЧИТЬ ПО
| Товары.НомерСтроки";
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ19";
Макет = ПолучитьОбщийМакет("ИНВ19");
// Выводим шапку накладной
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заполнить(Шапка);
СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);
ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации);
ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО;
ОбластьМакета.Параметры.ДатаДокумента = Шапка.ДатаДокумента;
ОбластьМакета.Параметры.ДатаНачалаИнвентаризации = Шапка.ДатаНачалаИнвентаризации;
ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(ЭтотОбъект);
Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизации(Шапка.Руководители, Шапка.ДатаДокумента,);
Руководитель = Руководители.Руководитель;
Бухгалтер = Руководители.ГлавныйБухгалтер;
ТабДокумент.Вывести(ОбластьМакета);
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
Ном = 0;
НомерСтраницы = 2;
ИтогоРезультатИзлишекКолво = 0;
ИтогоРезультатИзлишекСумма = 0;
ИтогоРезультатНедостачаКолво = 0;
ИтогоРезультатНедостачаСумма = 0;
// Выводим заголовок таблицы
ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы1");
ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабДокумент.Вывести(ЗаголовокТаблицы);
КоличествоСтрок = ВыборкаСтрокТовары.Количество();
// Выводим многострочную часть докмента
ВыборкаСтрокТовары = Шапка.Товары.Выбрать();
// Создаем массив для проверки вывода
МассивВыводимыхОбластей = Новый Массив;
// Выводим многострочную часть докмента
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицы1");
ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоТаблицы1");
ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");
Пока ВыборкаСтрокТовары.Следующий() Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
Продолжить;
КонецЕсли;
МассивВыводимыхОбластей.Очистить();
МассивВыводимыхОбластей.Добавить(ОбластьМакета);
МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице);
Если Ном = КоличествоСтрок Тогда
МассивВыводимыхОбластей.Добавить(ОбластьПодвала);
КонецЕсли;
Если НЕ ТабДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
НомерСтраницы = НомерСтраницы + 1;
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабДокумент.Вывести(ЗаголовокТаблицы);
КонецЕсли;
ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
Разница = 0;
РазницаСумм = 0;
Разница = ВыборкаСтрокТовары.ФактКоличество - ВыборкаСтрокТовары.БухКоличество;
РазницаСумм = ВыборкаСтрокТовары.ФактСумма - ВыборкаСтрокТовары.БухСумма;
Если Разница = 0 Тогда
Продолжить;
КонецЕсли;
Если Разница < 0 И РазницаСумм < 0 Тогда
ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
ОбластьМакета.Параметры.РезультатНедостачаСумма = - РазницаСумм;
ОбластьМакета.Параметры.РезультатИзлишекКолво = 0;
ОбластьМакета.Параметры.РезультатИзлишекСумма = 0;
ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + (- РазницаСумм);
ИтогоРезультатИзлишекКолво = ИтогоРезультатИзлишекКолво + 0;
ИтогоРезультатИзлишекСумма = ИтогоРезультатИзлишекСумма + 0;
ИначеЕсли Разница < 0 И РазницаСумм >= 0 Тогда
ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница;
ОбластьМакета.Параметры.РезультатНедостачаСумма = РазницаСумм;
ОбластьМакета.Параметры.РезультатИзлишекКолво = 0;
ОбластьМакета.Параметры.РезультатИзлишекСумма = 0;
ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница);
ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + РазницаСумм;
ИтогоРезультатИзлишекКолво = ИтогоРезультатИзлишекКолво + 0;
ИтогоРезультатИзлишекСумма = ИтогоРезультатИзлишекСумма + 0;
Иначе
ОбластьМакета.Параметры.РезультатНедостачаКолво = 0;
ОбластьМакета.Параметры.РезультатНедостачаСумма = 0;
ОбластьМакета.Параметры.РезультатИзлишекКолво = Разница;
ОбластьМакета.Параметры.РезультатИзлишекСумма = РазницаСумм;
ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + 0;
ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + 0;
ИтогоРезультатИзлишекКолво = ИтогоРезультатИзлишекКолво + Разница;
ИтогоРезультатИзлишекСумма = ИтогоРезультатИзлишекСумма + РазницаСумм;
КонецЕсли;
ТабДокумент.Вывести(ОбластьМакета);
Ном = Ном + 1;
КонецЦикла;
ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекКолво = ИтогоРезультатИзлишекКолво;
ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекСумма = ИтогоРезультатИзлишекСумма;
ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво;
ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма;
ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.ФИОБухгалтера = Бухгалтер;
ОбластьМакета.Параметры.Заполнить(Шапка);
ТабДокумент.Вывести(ОбластьМакета);
// Зададим параметры макета
ТабДокумент.ПолеСверху = 0;
ТабДокумент.ПолеСлева = 0;
ТабДокумент.ПолеСнизу = 0;
ТабДокумент.ПолеСправа = 0;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Возврат ТабДокумент;
КонецФункции // ПечатьИНВ19()
// Процедура осуществляет печать документа. Можно направить печать на
// экран или принтер, а также распечатать необходмое количество копий.
//
// Название макета печати передается в качестве параметра,
// по переданному названию находим имя макета в соответствии.
//
// Параметры:
// НазваниеМакета - строка, название макета.
//
Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
Если ЭтоНовый() Тогда
Предупреждение("Документ можно распечатать только после его записи");
Возврат;
КонецЕсли;
Если Не РаботаСДиалогами.ПроверитьМодифицированность(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
// Получить экземпляр документа на печать
Если ИмяМакета = "Ведомость" Тогда
// Печать упр. формы документа
ТабДокумент = ПечатьДокумента();
ИначеЕсли ИмяМакета = "ИНВ3" тогда
// Печать униф. формы ИНВ-3
ТабДокумент = ПечатьИНВ3();
ИначеЕсли ИмяМакета = "ИНВ3_БезФактДанных" тогда
// Печать униф. формы ИНВ-3
ТабДокумент = ПечатьИНВ3(Истина);
ИначеЕсли ИмяМакета = "ИНВ19" тогда
// Печать униф. формы ИНВ-19
ТабДокумент = ПечатьИНВ19();
ИначеЕсли ИмяМакета = "Бланк" Тогда
ТабДокумент = ПечатьБланк(НаПринтер);
ИначеЕсли ТипЗнч(ИмяМакета) = Тип("ДвоичныеДанные") Тогда
ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Ссылка, ИмяМакета);
Если ТабДокумент = Неопределено Тогда
Возврат
КонецЕсли;
КонецЕсли;
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, ЭтотОбъект.Метаданные().Представление()), Ссылка);
КонецПроцедуры // Печать
// Возвращает доступные варианты печати документа
//
// Вовращаемое значение:
// Струткура, каждая строка которой соответствует одному из вариантов печати
//
Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
СтруктураМакетов = Новый Структура;
СтруктураМакетов.Вставить("Ведомость" , "Инвентаризация товаров на складе");
СтруктураМакетов.Вставить("ИНВ3" , "ИНВ-3 (Инвентаризационная опись товаров)");
СтруктураМакетов.Вставить("ИНВ3_БезФактДанных", "ИНВ-3 (Инвентаризационная опись с пустыми фактическими данными)");
СтруктураМакетов.Вставить("ИНВ19" , "ИНВ-19 (Сличительная ведомость)");
СтруктураМакетов.Вставить("Бланк" , "Бланк товарного наполнения");
Возврат СтруктураМакетов;
КонецФункции // ПолучитьСтруктуруПечатныхФорм()
Процедура ЗаполнитьНачальныеНастройки(ПостроительОтчета) Экспорт
ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,","") + "
| ОстаткиТоваров.Качество,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА СУММА(ОстаткиПартий.КоличествоОстаток) = 0
| ИЛИ СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ КАК Сумма
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ОстаткиТоваров
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(, Склад = &ПартионныйСклад) КАК ОстаткиПартий
| ПО ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры
| И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
| {ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(1) КАК ЧислоЯчеек
| ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
| ГДЕ
| МестаХраненияНоменклатуры.Склад = &Склад
| {ГДЕ
| МестаХраненияНоменклатуры.МестоХранения.*}
|
|
| СГРУППИРОВАТЬ ПО
| МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
| ПО ОстаткиТоваров.Номенклатура = ЯчейкиНоменклатуры.Номенклатура}
|
|{ГДЕ
| ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Качество";
МассивОтбора = Новый Массив;
МассивОтбора.Добавить("Номенклатура");
МассивОтбора.Добавить("НоменклатурнаяГруппа");
УправлениеОтчетами.ЗаполнитьОтбор(МассивОтбора, ПостроительОтчета);
КонецПроцедуры
#КонецЕсли
// Выполняет необходимые действия при изменении реквизита Организация
//
Процедура ПриИзмененииОрганизации(ПодменюДействияФормы = Неопределено, ЭлементыФормыНомер = Неопределено) Экспорт
Если Не ПустаяСтрока(Номер) Тогда
МеханизмНумерацииОбъектов.СброситьУстановленныйКодНомерОбъекта(ЭтотОбъект, "Номер", ПодменюДействияФормы, ЭлементыФормыНомер);
КонецЕсли;
КонецПроцедуры // ПриИзмененииОрганизации()
// Заполняет реквизиты значениями по умолчанию
//
// Параметры:
// ПараметрОбъектКопирования - содержкит ссылку на документ копирования в случае,
// если новый документ создается копированием
// ПараметрОснование - содержкит ссылку на документ-основание в случае,
// если новый документ создается на основании другого
//
Процедура ИнициализироватьНовыйДокумент(ПараметрОбъектКопирования, ПараметрОснование) Экспорт
#Если Клиент Или ВнешнееСоединение Тогда
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект, глЗначениеПеременной("глТекущийПользователь"), , , ПараметрОбъектКопирования, ПараметрОснование);
#КонецЕсли
КонецПроцедуры // ИнициализироватьНовыйДокумент()
// Заполняет документ по остаткам на складе
//
Процедура ЗаполнитьПоОстаткамНаСкладе(ПостроительОтчета, ТолькоУчетные = Ложь) Экспорт
Если РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).ВестиПартионныйУчетПоСкладам Тогда
ВремСклад = Склад;
Иначе
ВремСклад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
ВалютаУпрУчета = глЗначениеПеременной("ВалютаУправленческогоУчета");
СтруктураКурса = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаУпрУчета, Дата);
КурсУпрУчета = СтруктураКурса.Курс;
КратностьУпрУчета = СтруктураКурса.Кратность;
Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения,
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
| ОстаткиТоваров.ЦенаВРознице,
| ВЫБОР
| КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
| ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
| 0
| ИНАЧЕ
| СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
| / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ КАК Сумма,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество
|ИЗ
| РегистрНакопления.ТоварыВНТТ.Остатки(&МоментДокумента,
| Склад = &Склад
|// И ЦенаВРознице > 0
|) КАК ОстаткиТоваров
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&МоментДокумента,
| Склад = &ПартионныйСклад) КАК ОстаткиПартий
|ПО
| ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры"
+?(УчитыватьСерии, "
| И (ОстаткиТоваров.СерияНоменклатуры = ОстаткиПартий.СерияНоменклатуры
| ИЛИ НЕ ОстаткиТоваров.Номенклатура.ВестиПартионныйУчетПоСериям)", "") + "
| {ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(1) КАК ЧислоЯчеек
| ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
| ГДЕ
| МестаХраненияНоменклатуры.Склад = &Склад
| {ГДЕ
| МестаХраненияНоменклатуры.МестоХранения.*}
|
| СГРУППИРОВАТЬ ПО
| МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
| ПО ОстаткиТоваров.Номенклатура = ЯчейкиНоменклатуры.Номенклатура}
|
|
|{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.ЦенаВРознице";
Иначе
Если Склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый Тогда
РегОстатки = "ТоварыНаСкладах";
Иначе
РегОстатки = "ТоварыВРознице";
КонецЕсли;
ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения,
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
| ОстаткиТоваров.Качество,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
| ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
| 0
| ИНАЧЕ
| СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
| / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ КАК Сумма
|ИЗ
| РегистрНакопления." + РегОстатки + ".Остатки(&МоментДокумента, Склад = &Склад)
|КАК ОстаткиТоваров
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&МоментДокумента,
| Склад = &ПартионныйСклад) КАК ОстаткиПартий
|ПО
| ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры"
+?(УчитыватьСерии, "
| И (ОстаткиТоваров.СерияНоменклатуры = ОстаткиПартий.СерияНоменклатуры
| ИЛИ НЕ ОстаткиТоваров.Номенклатура.ВестиПартионныйУчетПоСериям)", "") + "
| И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
|
| {ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(1) КАК ЧислоЯчеек
| ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
| ГДЕ
| МестаХраненияНоменклатуры.Склад = &Склад
| {ГДЕ
| МестаХраненияНоменклатуры.МестоХранения.*}
|
| СГРУППИРОВАТЬ ПО
| МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
| ПО ОстаткиТоваров.Номенклатура = ЯчейкиНоменклатуры.Номенклатура}
|
|{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Качество";
КонецЕсли;
Запрос = ПостроительОтчета.ПолучитьЗапрос();
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ПартионныйСклад", ВремСклад);
Если ЭтоНовый() Тогда
Запрос.УстановитьПараметр("МоментДокумента", КонецДня(Дата));
Иначе
Запрос.УстановитьПараметр("МоментДокумента", МоментВремени());
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Количество = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТабличнойЧасти = Товары.Добавить();
СтрокаТабличнойЧасти.Номенклатура = Выборка.Номенклатура;
СтрокаТабличнойЧасти.КоличествоУчет = Выборка.Количество;
СтрокаТабличнойЧасти.Количество = ?(ТолькоУчетные, 0, СтрокаТабличнойЧасти.КоличествоУчет);
СтрокаТабличнойЧасти.ЕдиницаИзмерения = Выборка.ЕдиницаХранения;
СтрокаТабличнойЧасти.Коэффициент = Выборка.КоэффициентЕдиницыХранения;
СтрокаТабличнойЧасти.СуммаУчет = Выборка.Сумма;
СтрокаТабличнойЧасти.Сумма = ?(ТолькоУчетные, 0, Выборка.Сумма);
СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Сумма / СтрокаТабличнойЧасти.КоличествоУчет;
Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
СтрокаТабличнойЧасти.ЦенаВРознице = Выборка.ЦенаВРознице;
Иначе
СтрокаТабличнойЧасти.Качество = Выборка.Качество;
КонецЕсли;
СтрокаТабличнойЧасти.СуммаРегл = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТабличнойЧасти.Сумма, ВалютаУпрУчета,
мВалютаРегламентированногоУчета, КурсУпрУчета, 1, КратностьУпрУчета, 1);
СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры;
Если УчитыватьСерии Тогда
СтрокаТабличнойЧасти.СерияНоменклатуры = Выборка.СерияНоменклатуры;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ЗаполнитьПоОстаткамНаСкладе()
// Процедура перезаполняет учетные количества в документе
//
// Возвращаемое значение:
// Табличный документ - печатная форма накладной
//
Процедура ПерезаполнитьУчетныеКоличества(ПостроительОтчета) Экспорт
#Если Клиент Тогда
Если Товары.Количество() > 0 Тогда
ТекстВопроса = "Перезаполнить учетные количества и суммы?";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, Метаданные().Синоним);
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
// Документ должен быть записан, чтобы этот запрос сработал.
Если Модифицированность() Тогда
ТекстВопроса = "Перед заполнением следует записать документ.
|Продолжить?";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, Метаданные().Синоним);
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
#КонецЕсли
Если РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).ВестиПартионныйУчетПоСкладам Тогда
ВремСклад = Склад;
Иначе
ВремСклад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
Если Склад.ВидСклада <> Перечисления.ВидыСкладов.НТТ Тогда
Если Склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый Тогда
РегОстатки = "ТоварыНаСкладах";
Иначе
РегОстатки = "ТоварыВРознице";
КонецЕсли;
ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,","") + "
| ОстаткиТоваров.Качество,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
| ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
| 0
| ИНАЧЕ
| СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
| / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ КАК Сумма
|ИЗ
| РегистрНакопления." + РегОстатки + ".Остатки(&МоментДокумента,
| Номенклатура в (ВЫБРАТЬ Номенклатура ИЗ Документ.ИнвентаризацияТоваровНаСкладе.Товары
| ГДЕ Документ.ИнвентаризацияТоваровНаСкладе.Товары.Ссылка = &ДокументСсылка)
| И Склад = &Склад)
|КАК ОстаткиТоваров
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&МоментДокумента,
| Номенклатура в (Выбрать Номенклатура ИЗ Документ.ИнвентаризацияТоваровНаСкладе.Товары
| ГДЕ Документ.ИнвентаризацияТоваровНаСкладе.Товары.Ссылка = &ДокументСсылка)
| И Склад = &ПартионныйСклад) КАК ОстаткиПартий
|ПО
| ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры"
+?(УчитыватьСерии, "
| И ОстаткиТоваров.СерияНоменклатуры = ОстаткиПартий.СерияНоменклатуры", "") + "
| И ОстаткиТоваров.Качество = ОстаткиПартий.Качество
|
| {ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(1) КАК ЧислоЯчеек
| ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
| ГДЕ
| МестаХраненияНоменклатуры.Склад = &Склад
| {ГДЕ
| МестаХраненияНоменклатуры.МестоХранения.*}
|
| СГРУППИРОВАТЬ ПО
| МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
| ПО ОстаткиТоваров.Номенклатура = ЯчейкиНоменклатуры.Номенклатура}
|
|{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.Качество";
Иначе
ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.ЦенаВРознице,
| СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество,
| ВЫБОР
| КОГДА (СУММА(ОстаткиПартий.КоличествоОстаток) = 0)
| ИЛИ (СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL) ТОГДА
| 0
| ИНАЧЕ
| СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток)
| / СУММА(ОстаткиПартий.КоличествоОстаток)
| КОНЕЦ КАК Сумма
|ИЗ
| РегистрНакопления.ТоварыВНТТ.Остатки(&МоментДокумента,
| Номенклатура в (Выбрать Номенклатура ИЗ Документ.ИнвентаризацияТоваровНаСкладе.Товары
| ГДЕ Документ.ИнвентаризацияТоваровНаСкладе.Товары.Ссылка = &ДокументСсылка)
| И Склад = &Склад) КАК ОстаткиТоваров
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&МоментДокумента,
| Номенклатура в (Выбрать Номенклатура ИЗ Документ.ИнвентаризацияТоваровНаСкладе.Товары
| ГДЕ Документ.ИнвентаризацияТоваровНаСкладе.Товары.Ссылка = &ДокументСсылка)
| И Склад = &ПартионныйСклад) КАК ОстаткиПартий
|ПО
| ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура
| И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры"
+?(УчитыватьСерии, "
| И ОстаткиТоваров.СерияНоменклатуры = ОстаткиПартий.СерияНоменклатуры", "") + "
|
| {ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура КАК Номенклатура,
| СУММА(1) КАК ЧислоЯчеек
| ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
| ГДЕ
| МестаХраненияНоменклатуры.Склад = &Склад
| {ГДЕ
| МестаХраненияНоменклатуры.МестоХранения.*}
|
| СГРУППИРОВАТЬ ПО
| МестаХраненияНоменклатуры.Номенклатура) КАК ЯчейкиНоменклатуры
| ПО ОстаткиТоваров.Номенклатура = ЯчейкиНоменклатуры.Номенклатура}
|
|{ГДЕ ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа}
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.ХарактеристикаНоменклатуры,"
+?(УчитыватьСерии, "
| ОстаткиТоваров.СерияНоменклатуры,", "") + "
| ОстаткиТоваров.ЦенаВРознице";
КонецЕсли;
Запрос = ПостроительОтчета.ПолучитьЗапрос();
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("ПартионныйСклад", ВремСклад);
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Если ЭтоНовый() Тогда
Запрос.УстановитьПараметр("МоментДокумента", КонецДня(Дата));
Иначе
Запрос.УстановитьПараметр("МоментДокумента", МоментВремени());
КонецЕсли;
ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
СтрокаИндекса = "Номенклатура,ХарактеристикаНоменклатуры";
Если УчитыватьСерии Тогда
СтрокаИндекса = СтрокаИндекса + ",СерияНоменклатуры";
КонецЕсли;
Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
СтрокаИндекса = СтрокаИндекса + ",ЦенаВРознице";
Иначе
СтрокаИндекса = СтрокаИндекса + ",Качество";
КонецЕсли;
ТаблицаОстатков.Индексы.Добавить(СтрокаИндекса);
Для каждого СтрокаТабличнойЧасти ИЗ Товары Цикл
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Номенклатура", СтрокаТабличнойЧасти.Номенклатура);
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры);
Если УчитыватьСерии Тогда
СтруктураПоиска.Вставить("СерияНоменклатуры", СтрокаТабличнойЧасти.СерияНоменклатуры);
КонецЕсли;
Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда
СтруктураПоиска.Вставить("ЦенаВРознице", СтрокаТабличнойЧасти.ЦенаВРознице);
Иначе
СтруктураПоиска.Вставить("Качество", СтрокаТабличнойЧасти.Качество);
КонецЕсли;
МассивСтрок = ТаблицаОстатков.НайтиСтроки(СтруктураПоиска);
Если МассивСтрок.Количество() = 0 Тогда
СтрокаТабличнойЧасти.КоличествоУчет = 0;
СтрокаТабличнойЧасти.СуммаУчет = 0;
Продолжить;
КонецЕсли;
СтрокаТабличнойЧасти.КоличествоУчет = ?(СтрокаТабличнойЧасти.Коэффициент = 0, 0,
МассивСтрок[0].Количество * МассивСтрок[0].КоэффициентЕдиницыХранения
/ СтрокаТабличнойЧасти.Коэффициент);
СтрокаТабличнойЧасти.СуммаУчет = МассивСтрок[0].Сумма;
СтрокаТабличнойЧасти.Цена = ?(СтрокаТабличнойЧасти.КоличествоУчет = 0, 0,
СтрокаТабличнойЧасти.СуммаУчет / СтрокаТабличнойЧасти.КоличествоУчет);
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
СтрокаТабличнойЧасти.СуммаРегл = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СтрокаТабличнойЧасти.Сумма, мВалютаУпрУчета,
мВалютаРегламентированногоУчета, мКурсУпрУчета, 1, мКратностьУпрУчета, 1);
КонецЦикла;
КонецПроцедуры // ПерезаполнитьУчетныеКоличества()
// Процедура вызывается перед записью документа
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Проверка заполнения единицы измерения мест и количества мест
ОбработкаТабличныхЧастей.ПриЗаписиПроверитьЕдиницуИзмеренияМест(Товары);
ОбработкаТабличныхЧастей.ЗаполнитьКачествоПоУмолчанию(Товары, Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ);
КонецПроцедуры // ПередЗаписью()
мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
мВалютаУпрУчета = глЗначениеПеременной("ВалютаУправленческогоУчета");
мРазрешитьНулевыеЦеныВРознице = УправлениеДопПравамиПользователей.РазрешитьНулевыеЦеныВРознице();
Показать
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот