1С Торговля и склад - просто и доступно. Добавить колонку в табличную часть в 1с


1С Торговля и склад - просто и доступно: Добавляем колонку в табличную часть документа "Заявка от Покупателя"

Сегодня мы будем добавлять колонку в табличную часть документа.

Поступил такой вопрос: В документ "Заявка от Покупателя" в табличную часть нужно добавить дополнительную колонку, в которой можно было бы выбирать статус товара: "В наличии" или "Под заказ". Больше эта колонка нигде не нужна и нигде не участвует (т.е. в печатных формах не отражается и доп.отчеты не нужны)

Исходя из этого, идем самым простым, на мой взгляд, путем :)

ВАЖНО!!!  Обязательно сохраняем базу!!! Смотрим тут:  Как сохранить базу Открываем нашу программу в режиме "Конфигуратор"

Если конфигурация не открылась - открываем ее через "Конфигурация" - "Открыть конфигурацию"

1. Добавляем новое Перечисление. Перечисления - это, практически, те же самые справочники, но которые нельзя изменить в программе. Например, для пола человека есть только два варианта для выбора - Мужчина и Женщина. В этом случае нет смысла заводить справочник - лучше завести перечисление, где и будут указаны эти два варианта. В программе же, при заполнении каких-то данных о сотрудниках, будут предложены только два варианта для выбора (Мужчина, Женщина) - нет третьего и нельзя добавить свой... Удобно тем, что пользователи не добавят свои какие-то значения, и в то же время не напишут как папало (М,Ж; Му,Же; Муж,Жен и т.п.), что удобно для фильтрацииЧитать дальше --->

Находим слово "Перечисления" (можем через "+" раскрыть) и на самом слове "Перечисления" правой кнопкой мыши выбираем "Новое Перечисление"

В открывшемся окне в поле "Идентификатор" напишем название "СтатусТовара" (или "СтатусТовараДляЗаказа" что бы совсем понятно было) - пишем без пробелов.

По кнопке "Новый" добавим значения, которые и будем выбирать потом в документе в отдельной колонке

В окне нового значения в поле "Идентификатор" пишем "ВНаличии" (без пробелов), а в полях "Комментарий" и "Представление" пишем "В наличии" (Представление - то, что нам будет показываться для выбора в программе)

По кнопке "ОК" сохраняем. Добавляем еще одно значение - "ПодЗаказ"

Закрываем окно и переходим к документам. Раскрываем "Документы" (нажимаем на +) и находим документ "ЗаявкаПокупателя"

Щелкаем мышкой два раза - открывается окно документа

Добавляем новый реквизит (колонку) в табличную часть документа - нажимаем кнопку "Новый" под окном "Реквизиты табличной части" .

Реквизит добавлен - задаем его свойства. На вкладке "Общие" в поле "Идентификатор" пишем "СтатусТовара"

А в поле "Тип значения" по стрелочке выбираем наше добавленное перечисление - Перечисление.СтатусТовара

Вот что получилось

Теперь осталось добавить колонку в таблицу и разместить ее там на нужном месте.

Нажимаем кнопку  "Форма" - открывается форма документа "Заявка от Покупателя"

В верхнем меню нажимаем "Вставить" и выбираем "Реквизиты.." - таким образом вставляются все заданные реквизиты документа.

В окне "Реквизиты табличной части" рядом со "СтатусТовара" ставим галочку и нажимаем "Вставить"

Идем в конец таблицы (нажимаем на прокрутку в низу таблицы") и видим нашу добавленную колонку - дважды щелкаем мышкой на ее названии и в поле "Заголовок" пишем "Статус товара"  - этот заголовок колонки, который мы будем видеть в программе.

Нажимаем "ОК"

Теперь нам нужно перенести колонку в удобное для нам место - перенесем поближе к колонке "Номенклатура". Для этого просто щелкнем на заголовок нашей новой колонке и не отпуская кнопку мыши перетаскиваем колонку. 

Вот что должно получиться

Теперь нам нужно сохранить наши изменения. Можем сохранить по значку дискеты" на панели инструментов, закрыть конфигуратор и открыть программу в режиме "Предприятия". Можно нажать F11 - конфигуратор остается открытым, конфигурация сохраняется и при этом программа открывается в режиме "Предприятие"

При сохранении появляются такие предупреждения

Нажимаем "Да", "Принять" и "ОК" соответственно.

Посмотрим, что у нас изменилось в программе? :)

Открываем программу в режиме "Предприятие", открываем документ "Заявка от покупателя" - можно открыть уже сохраненный или создать новый...

Видим в таблице новую колонку "Статус товара". Если щелкнуть мышкой на ней дважды - появляется кнопочка - нажимаем и выпадает список для выбора

Колонка добавлена, значения выбираются :)

1ctisprosto.blogspot.com

Дополнительная вычисляемая колонка в табличной части

Иногда возникает необходимость вывода в табличное поле документа (или любого другого объекта, имеющего табличную часть) дополнительных колонок с данными, которые не содержатся непосредственно в табличной части. Реализовать это на платформе 1С: Предприятие 8.1 или 8.2 в режиме обычного приложения (без использования управляемых форм) было достаточно просто, чего не скажешь об управляемых формах в 1С 8.2.

Реализация на платформе 1С: Предприятие 8.1 (или в обычном приложении)

В начале коротко о том, как добавить дополнительную колонку в табличное поле на платформе 1С 8.1.

Предположим, что у нас есть некий документ с табличной частью “Товары” (с колонками “Номенклатура” и “Количество”) и нам нужно вывести дополнительную колонку “Цена”, которая бы содержала данные реквизита “Цена” элементов справочника “Номенклатура”, выбранных в строках табличной части.

Для этого нам достаточно добавить в форме документа новую колонку “Цена” в табличное поле, содержащее данные табличной части документа и написать следующий код в обработчике события “ПриПолученииДанных” этого табличного поля:// обработчик события «ПриПолученииДанных» табличного поля «Товары»

Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок) Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл Номенклатура = ОформлениеСтроки.ДанныеСтроки.Номенклатура; Если ЗначениеЗаполнено(Номенклатура) Тогда ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина; ОформлениеСтроки.Ячейки.Цена.Текст = Формат(Номенклатура.Цена,«ЧЦ=15; ЧДЦ=2»); КонецЕсли; КонецЦикла; КонецПроцедуры

Хочу обратить внимание на то, что строки табличного поля обрабатываются порциями, по мере прокрутки списка.

Реализация на платформе 1С: Предприятие 8.2 (8.3 управляемое приложение)

На платформе 8.2 с использованием управляемых форм решение данной задачи потребует бóльших усилий. Это связано с тем, что за счет своей клиент-серверной ориентированности в платформе 8.2 в управляемом режиме отсутствуют некоторые привычные возможности – например, у табличного поля отсутствуют обработчики событий “ПриПолученииДанных” и “ПриВыводеСтроки”, которые мы могли бы использовать для этих целей в 1С 8.1 или 8.2 в обычных формах.

Пусть в нашей конфигурации есть документ “ВводОстатковДолга” с табличной частью “Контрагенты” (с колонками “Контрагент” и “Сумма”). В свою очередь у справочника “Контрагенты” есть реквизит “ИНН”, значение которого необходимо выводить в строках табличного поля.

Примечание:в статье взят неудачный пример т.к. реквизиты вынести можно получить гораздо проще, но тем не менее статья полезна для рассмотрения в учебных целях

Откроем управляемую форму документа, добавим новую колонку “ИНН” реквизита “Контрагенты” и перенесём её на закладку “Элементы” (для отображения в форме).

dopkol1_KontargentINN-dobalvenie-v-polya-tablitsy.jpg

Откроем палитру свойств поля “КонтрагентыКонтрагент” и добавим обработчик события “ПриИзменении”

// служебная функция получения значения реквизита объекта (выполняется на сервере) &НаСервере Функция ЗначениеРеквизита(Объект,ИмяРеквизита); Возврат Объект[ИмяРеквизита]; КонецФункции // обработчик события «ПриИзменении» поля «Контрагент» в табличном поле «Контрагенты» &НаКлиенте Процедура КонтрагентыКонтрагентПриИзменении(Элемент) ТекДанные = Элементы.Контрагенты.ТекущиеДанные; ТекДанные.ИНН = ЗначениеРеквизита(ТекДанные.Контрагент,«ИНН»); КонецПроцедуры

Это обеспечит нам изменение значения поля “ИНН” при выборе контрагента в строке табличного поля.Теперь необходимо предусмотреть заполнение колонки “ИНН” при открытии формы документа, а так же после записи и при чтении на сервере.

Обновление данных после записи и при чтении на сервере необходимо в связи с тем, что иначе значения колонки “ИНН” будут очищаться каждый раз при возникновении этих событий. Для заполнения колонки “ИНН” опишем в модуле формы служебную серверную процедуру:

// служебная процедура для заполнения колонки «ИНН» табличного поля «Контрагенты» &НаСервере Процедура ОбновитьДанныеКолонкиИНН() Запрос = Новый Запрос( «ВЫБРАТЬ РАЗРЕШЕННЫЕ | Контрагенты.Ссылка КАК Контрагент, | Контрагенты.ИНН |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Ссылка В(&СписокКонтрагентов)» ); Запрос.УстановитьПараметр(«СписокКонтрагентов»,Объект.Контрагенты.Выгрузить().ВыгрузитьКолонку(«Контрагент»)); Выборка = Запрос.Выполнить().Выбрать(); Для Каждого Стр Из Объект.Контрагенты Цикл Если Выборка.НайтиСледующий(Стр.Контрагент,«Контрагент») Тогда Стр.ИНН = Выборка.ИНН; Иначе Стр.ИНН = «»; КонецЕсли; КонецЦикла; КонецПроцедуры

Затем добавим в модуль формы документа обработчики событий “ПриОткрытии”, “ПриЧтенииНаСервере” и “ПослеЗаписиНаСервере”, в каждой из которых будем вызвать описанную ранее служебную процедуру “ОбновитьДанныеКолонкиИНН”

&НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ОбновитьДанныеКолонкиИНН(); КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) ОбновитьДанныеКолонкиИНН(); КонецПроцедуры   &НаКлиенте Процедура ПриОткрытии(Отказ) ОбновитьДанныеКолонкиИНН(); КонецПроцедуры

Всё готово. Можно посмотреть на результат.

dopkol2_Primer-dopolnitelnoj-kolonki-v-spiske.jpg

e-1c.ru

YarSort – блог программиста 1С в Виннице » Добавление колонок остатков товаров в табличную часть документа

Если СписокСкладовДляРаботыССделками.Количество() <> 0 Тогда

    СписокСкладов = Новый СписокЗначений;

    СписокСкладов.ЗагрузитьЗначения(СписокСкладовДляРаботыССделками.ВыгрузитьКолонку("Склад"));

 

    //***************************************

    //Выберем остатки номенклатуры

    //***************************************

 

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

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

        "ВЫБРАТЬ

        |    ВложенныйЗапрос.Склад,

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

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

        |    СУММА(ВложенныйЗапрос.Резерв) КАК Резерв

        |ИЗ

        |    (ВЫБРАТЬ

        |        ТоварыНаСкладахОстатки.Склад КАК Склад,

        |        ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

        |        ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток,

        |        0 КАК Резерв

        |    ИЗ

        |        РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки

        |    

        |    ОБЪЕДИНИТЬ ВСЕ

        |    

        |    ВЫБРАТЬ

        |        ВРезерве.Склад,

        |        ВРезерве.Номенклатура,

        |        0,

        |        ВРезерве.КоличествоОстаток

        |    ИЗ

        |        РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ВРезерве) КАК ВложенныйЗапрос

        |ГДЕ

        |    ВложенныйЗапрос.Номенклатура В(&СписокНоменклатуры)

        |    И ВложенныйЗапрос.Склад В(&СписокСкладов)

        |

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

        |    ВложенныйЗапрос.Склад,

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

 

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

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

 

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

 

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

 

КонецЕсли;

yarsort.com.ua