Как сделать колонку в документе Заказ поставщику с остатками товаров на текущем складе
По теме из базы знаний
- Перенос данных из УПП 1.3 / КА 1.1 в БП 3. Переносятся документы, справочники и начальные остатки
- Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки
- Платформа для дропшиппинга. Рабочее место закупки: модуль автоматизации снабжения. Создание заказов поставщикам в 1С
- Анализ продаж компании и автоматическое оформление заказа поставщику на основе статистики в конфигурации 1C:Розница
- Внедрение крупного проекта на ERP 2.5 с применением методических решений из УПП 1.3 и обеспечением товаров с разных складов с учетом серий
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Добавляешь в табличную часть Товары новую колонку.
Там же создаешь подписку на событие при получении данных (если нет)
Вот текст процедуры (сделано для Реализации товаров УТП Украины, так что тебе придется переделывать):
Там же создаешь подписку на событие при получении данных (если нет)
Вот текст процедуры (сделано для Реализации товаров УТП Украины, так что тебе придется переделывать):
// Процедура - обработчик события "ПриПолученииДанных" табличной части
// "Товары".
Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ТекСтрока из ОформленияСтрок Цикл
Запрос = Новый Запрос;
Запрос.Параметры.Вставить("ДатаДокумента",Дата);
Запрос.Параметры.Вставить("Организация",Организация);
Запрос.Параметры.Вставить("Номенклатура",ТекСтрока.ДанныеСтроки.Номенклатура);
Запрос.Текст = "ВЫБРАТЬ
| СУММА(ПартииТоваровНаСкладахНалоговыйУчетОстатки.КоличествоОстаток) КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ПартииТоваровНаСкладахНалоговыйУчет.Остатки(&ДатаДокумента, ) КАК ПартииТоваровНаСкладахНалоговыйУчетОстатки
|ГДЕ
| ПартииТоваровНаСкладахНалоговыйУчетОстатки.Номенклатура = &Номенклатура
| И ПартииТоваровНаСкладахНалоговыйУчетОстатки.Организация = &Организация";
Выборка = Запрос.Выполнить().Выбрать();
ТекСтрока.Ячейки.ОстакиНаСкладе.ОтображатьТекст = Истина;
ТекСтрока.Ячейки.ОстакиНаСкладе.Выравнивание = ГоризонтальноеПоложение.Право;
Если Выборка.Следующий() Тогда
ОстатокКоличество = ?(Выборка.КоличествоОстаток = Null,0,Выборка.КоличествоОстаток);
Если ОстатокКоличество < 0 ТОгда
ТекСтрока.Ячейки.ОстакиНаСкладе.ЦветТекста = Новый Цвет(255,102,0);
КонецЕсли;
Иначе
ОстатокКоличество = 0;
ТекСтрока.Ячейки.ОстакиНаСкладе.ЦветТекста = Новый Цвет(-1,-1,-1);
КонецЕсли;
Если ОстатокКоличество - ТекСтрока.ДанныеСтроки.Количество < 0 Тогда
ТекСтрока.ЦветФона = Новый Цвет(255,185,234);
Иначе
ТекСтрока.ЦветФона = Новый Цвет(-1,-1,-1);
КонецЕсли;
ТекСтрока.Ячейки.ОстакиНаСкладе.Текст = "" + ОстатокКоличество;
КонецЦикла;
КонецПроцедуры
ПоказатьJimbo пишет:
зачем колонка ? и чем не устраивает типовой подбор - там и колонка остатки есть, и режимы по справочнику или по остаткам, и даже с ценами
зачем колонка ? и чем не устраивает типовой подбор - там и колонка остатки есть, и режимы по справочнику или по остаткам, и даже с ценами
Дело в том, что нужна видимость остатков в документе. Заявку делают менеджеры, а начальство проверяет, что они там назаказывали! Приходится каждый раз в каталог переходить....
просто добавить кнопку, и при ее нажатии считывать остатки и заполнять колонку в табличной части, например так:
запр=новый запрос("ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| &дата,
| Номенклатура В (&ном)
| И Склад = &Склад) КАК ТоварыНаСкладахОстатки") ;
запр.УстановитьПараметр("дата",ТекущаяДата());
запр.УстановитьПараметр("ном",товары.ВыгрузитьКолонку("Номенклатура"));
запр.УстановитьПараметр("Склад",Склад);
выб=запр.Выполнить().Выбрать();
пока выб.Следующий() цикл
нс=товары.Найти(выб.Номенклатура,"номенклатура");
если нс<> Неопределено тогда
нс.остаток=выб.КоличествоОстаток;
КонецЕсли;
КонецЦикла;
запр=новый запрос("ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| &дата,
| Номенклатура В (&ном)
| И Склад = &Склад) КАК ТоварыНаСкладахОстатки") ;
запр.УстановитьПараметр("дата",ТекущаяДата());
запр.УстановитьПараметр("ном",товары.ВыгрузитьКолонку("Номенклатура"));
запр.УстановитьПараметр("Склад",Склад);
выб=запр.Выполнить().Выбрать();
пока выб.Следующий() цикл
нс=товары.Найти(выб.Номенклатура,"номенклатура");
если нс<> Неопределено тогда
нс.остаток=выб.КоличествоОстаток;
КонецЕсли;
КонецЦикла;
Не знаю, а какая разница что он "жмакнет" кнопку на форме, и добавится в таблицу колонка, что обновит всю табличную часть или он кликнет "Печать" и выберит форму. + форму можно к нескольким документам привязать и конфу при этом не менять...
Вот еще вариант:
Добавляешь колонку "ОстатокНаСкладах"
В переменные формы добавляешь:
Перем мОстаткиТоваровНаСкладах;
Добавляешь в модуль формы процедуру
Процедура ЗаполнитьОстаткиНаСкладах()
ЗапросПоОстаткам = Новый Запрос();
Если ЭтоНовый() Тогда
ТекстЗапросаПоОстаткам = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.КоличествоОстаток > 0
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| ТоварыВРозницеОстатки.Номенклатура КАК Номенклатура,
| ТоварыВРозницеОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыВРозницеОстатки.Склад КАК Склад,
| ТоварыВРозницеОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыВРознице.Остатки КАК ТоварыВРозницеОстатки
|ГДЕ
| ТоварыВРозницеОстатки.КоличествоОстаток > 0";
Иначе
ТекстЗапросаПоОстаткам = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.КоличествоОстаток > 0
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| ТоварыВРозницеОстатки.Номенклатура КАК Номенклатура,
| ТоварыВРозницеОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыВРозницеОстатки.Склад КАК Склад,
| ТоварыВРозницеОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыВРознице.Остатки(&ДатаОстатков) КАК ТоварыВРозницеОстатки
|ГДЕ
| ТоварыВРозницеОстатки.КоличествоОстаток > 0";
ЗапросПоОстаткам.УстановитьПараметр("ДатаОстатков",ЭтотОбъект.МоментВремени());
КонецЕсли;
ЗапросПоОстаткам.Текст = ТекстЗапросаПоОстаткам;
мОстаткиТоваровНаСкладах = ЗапросПоОстаткам.Выполнить().Выгрузить();
мОстаткиТоваровНаСкладах.Свернуть("Номенклатура,СерияНоменклатуры,Склад","КоличествоОстаток");
КонецПроцедуры
Вызываешь ее при открытии формы.
При выводе строки (можно и при получении данных с небольшими изменениями)
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
......
ОформлениеСтроки.Ячейки.ОстатокНаСкладах.ОтображатьТекст = Истина;
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Номенклатура",ДанныеСтроки.Номенклатура);
СтруктураОтбора.Вставить("СерияНоменклатуры",ДанныеСтроки.СерияНоменклатуры);
СтруктураОтбора.Вставить("Склад",?(ЗначениеЗаполнено(ДанныеСтроки.Склад),ДанныеСтроки.Склад,ЭтотОбъект.Склад));
Остаток = мОстаткиТоваровНаСкладах.НайтиСтроки(СтруктураОтбора);
Если Остаток.Количество()<>0 Тогда
ОформлениеСтроки.Ячейки.ОстатокНаСкладах.Текст = Формат(Остаток[0].КоличествоОстаток,"ЧЦ=10; ЧДЦ=3");
Иначе
ОформлениеСтроки.Ячейки.ОстатокНаСкладах.Текст = ""
КонецЕсли;
Добавляешь колонку "ОстатокНаСкладах"
В переменные формы добавляешь:
Перем мОстаткиТоваровНаСкладах;
Добавляешь в модуль формы процедуру
Процедура ЗаполнитьОстаткиНаСкладах()
ЗапросПоОстаткам = Новый Запрос();
Если ЭтоНовый() Тогда
ТекстЗапросаПоОстаткам = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.КоличествоОстаток > 0
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| ТоварыВРозницеОстатки.Номенклатура КАК Номенклатура,
| ТоварыВРозницеОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыВРозницеОстатки.Склад КАК Склад,
| ТоварыВРозницеОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыВРознице.Остатки КАК ТоварыВРозницеОстатки
|ГДЕ
| ТоварыВРозницеОстатки.КоличествоОстаток > 0";
Иначе
ТекстЗапросаПоОстаткам = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.КоличествоОстаток > 0
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| ТоварыВРозницеОстатки.Номенклатура КАК Номенклатура,
| ТоварыВРозницеОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
| ТоварыВРозницеОстатки.Склад КАК Склад,
| ТоварыВРозницеОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыВРознице.Остатки(&ДатаОстатков) КАК ТоварыВРозницеОстатки
|ГДЕ
| ТоварыВРозницеОстатки.КоличествоОстаток > 0";
ЗапросПоОстаткам.УстановитьПараметр("ДатаОстатков",ЭтотОбъект.МоментВремени());
КонецЕсли;
ЗапросПоОстаткам.Текст = ТекстЗапросаПоОстаткам;
мОстаткиТоваровНаСкладах = ЗапросПоОстаткам.Выполнить().Выгрузить();
мОстаткиТоваровНаСкладах.Свернуть("Номенклатура,СерияНоменклатуры,Склад","КоличествоОстаток");
КонецПроцедуры
Вызываешь ее при открытии формы.
При выводе строки (можно и при получении данных с небольшими изменениями)
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
......
ОформлениеСтроки.Ячейки.ОстатокНаСкладах.ОтображатьТекст = Истина;
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Номенклатура",ДанныеСтроки.Номенклатура);
СтруктураОтбора.Вставить("СерияНоменклатуры",ДанныеСтроки.СерияНоменклатуры);
СтруктураОтбора.Вставить("Склад",?(ЗначениеЗаполнено(ДанныеСтроки.Склад),ДанныеСтроки.Склад,ЭтотОбъект.Склад));
Остаток = мОстаткиТоваровНаСкладах.НайтиСтроки(СтруктураОтбора);
Если Остаток.Количество()<>0 Тогда
ОформлениеСтроки.Ячейки.ОстатокНаСкладах.Текст = Формат(Остаток[0].КоличествоОстаток,"ЧЦ=10; ЧДЦ=3");
Иначе
ОформлениеСтроки.Ячейки.ОстатокНаСкладах.Текст = ""
КонецЕсли;
(16)
Что -то пошло не так! :-(
{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(1928)}: Поле объекта не обнаружено (Склад)
СтруктураОтбора.Вставить("Склад",?(ЗначениеЗаполнено(ДанныеСтроки.Склад),ДанныеСтроки.Склад,ЭтотОбъект.Склад));
ЗаполнитьОстаткиНаСкладах()
Что -то пошло не так! :-(
{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(1928)}: Поле объекта не обнаружено (Склад)
СтруктураОтбора.Вставить("Склад",?(ЗначениеЗаполнено(ДанныеСтроки.Склад),ДанныеСтроки.Склад,ЭтотОбъект.Склад));
Господа! А еще большему новичку подскажите (или ткните носом куда идти), как добавляют кнопки описанные Andydi, или как реализуют вариант GreenLab, прям поэтапно если возможно? Тоже захотел добавить колонку, или не получилось :-(
(19) Eugeneer,
Спасибо за предложение, пока бюджет на "модернизацию" 1С в фирме не предусмотрен, по-этому пока планируется выкручиваться собственными силами. И всё же хотелось бы повторить свою просьбу, где можно прочитать развернутую (лучше если поэтапную) статью как добавляют кнопки в 1С.
Спасибо за предложение, пока бюджет на "модернизацию" 1С в фирме не предусмотрен, по-этому пока планируется выкручиваться собственными силами. И всё же хотелось бы повторить свою просьбу, где можно прочитать развернутую (лучше если поэтапную) статью как добавляют кнопки в 1С.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот