Автоматическое заполнение реквизита табличной части 1с

Автоматическое заполнение табличной части документа

Автор Gregory78, 14 авг 2014, 19:34

0 Пользователей и 1 гость просматривают эту тему.

Всем привет! Подскажите: как программным способом заполнить табличную часть документа данными из справочника «Сотрудники»?

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

Затем повесил на форму событие «При открытии». Перебираю массив циклом, и… дальше не хватает знаний.
Каким образом мне обратиться к ТЧ «СписокСотрудников»? Как к «Элементы.СписокСотрудников» или как «Объект.СписокСотрудников» (в последнем случае процедуру заменить на серверную)? Пытался через синтакс-помощник найти подходящие методы, но пока безрезультатно.

Была еще идея вставить вместо ТЧ динамический список — это получается легко… но мне нужны рядом с фамилией каждого сотрудника еще и реквизит типа «булево», редактируемый пользователем. Вот с этим тоже все сложно. (

В общем, цель такая: при открытии формы документа табличная часть должна автоматически заполниться списком сотрудников (циклом — создается строка, в реквизит «ФИО» вставляются данные из массива, данные записываются), чтобы пользователю осталось только выставить галочки на булевых реквизитах.
Работаю в 1С 8.2.


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


&НаКлиенте
Процедура ПриОткрытии(Отказ)

ЗаполнитьТабличнуюЧасть();

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

&НаСервере
Процедура ЗаполнитьТабличнуюЧасть()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Наименование
|ИЗ
| Справочник.Сотрудники КАК Сотрудники";

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

Для каждого Стр из РезультатЗапроса Цикл
НоваяСтрока = Объект.ТабличнаячЧасть.Добавить();
НоваяСтрока.ФИО = Стр.Наименование;
КонецЦикла
КонецПроцедуры

Cегодня не все могут провести завтрашним числом. Вернее, не только лишь все — мало кто может это сделать.


Спасибо за подробный ответ! Но почему-то не все тут срабатывает. Создаются строки (их количество соответствует числу сотрудников), но поля остаются пустыми. Проверил с точкой останова, вроде все должно быть правильно. Жму Shift+F9 (вычислить выражение), получаю:
Стр.Наименование — видна фамилия сотрудника, тип — строка;
НоваяСтрока — ДанныеФормыЭлементКоллекции;
НоваяСтрока.Сотрудник — СправочникСсылка.Сотрудники

Но хоть убей, не видны эти сотрудники в форме!
Ковырялся еще сам, поместил весь код в одну процедуру «При создании на сервере». Попробовал использовать метод «Выбрать» вместо «Выгрузить», изменил обход результата запроса:

        Результат =  Запрос.Выполнить().Выбрать();
   Пока Результат.Следующий() Цикл
   НоваяСтрока = Объект.СписокСотрудников.Добавить();
   НоваяСтрока.Сотрудник = Результат.Наименование;

Но в итоге суть та же, все это как мертвому припарка. Последняя строка «НоваяСтрока.Сотрудник = Результат.Наименование;» не срабатывает. У кого-нибудь есть еще соображения?


Цитата: Gregory78 от 18 авг 2014, 21:55
Спасибо за подробный ответ! Но почему-то не все тут срабатывает. Создаются строки (их количество соответствует числу сотрудников), но поля остаются пустыми. Проверил с точкой останова, вроде все должно быть правильно. Жму Shift+F9 (вычислить выражение), получаю:
Стр.Наименование — видна фамилия сотрудника, тип — строка;
НоваяСтрока — ДанныеФормыЭлементКоллекции;
НоваяСтрока.Сотрудник — СправочникСсылка.Сотрудники

Но хоть убей, не видны эти сотрудники в форме!
Ковырялся еще сам, поместил весь код в одну процедуру «При создании на сервере». Попробовал использовать метод «Выбрать» вместо «Выгрузить», изменил обход результата запроса:

        Результат =  Запрос.Выполнить().Выбрать();
   Пока Результат.Следующий() Цикл
   НоваяСтрока = Объект.СписокСотрудников.Добавить();
   НоваяСтрока.Сотрудник = Результат.Наименование;

Но в итоге суть та же, все это как мертвому припарка. Последняя строка «НоваяСтрока.Сотрудник = Результат.Наименование;» не срабатывает. У кого-нибудь есть еще соображения?

Что будет, если ты попытаешься записать строку «абв» в переменную числового типа?
Вот и подумай, почему у тебя строка не записывается в переменную ссылочного типа.


Каким образом тогда получить ссылочные значения? Получить строку и каким-то образом выполнить поиск по справочнику, а полученный результат поместить в переменную?


А в Табличной Части это поле, куда вы записываете это ссылка на справочник Сотрудники? Или строковое?


Цитата: Gregory78 от 19 авг 2014, 16:10
Каким образом тогда получить ссылочные значения? Получить строку и каким-то образом выполнить поиск по справочнику, а полученный результат поместить в переменную?

Текст запроса то какой? Поди в запросе вместо ссылки наименование получаете


НоваяСтрока.Сотрудник —
СправочникСсылка.Сотрудники
Стало быть, не строка, а ссылка.

Добавлено: 20 авг 2014, 07:47


[/quote]
Текст запроса то какой? Поди в запросе вместо ссылки наименование получаете
[/quote]

Да, запросом получаю наименование . Так! Может быть, вместо наименования выбрать ссылку?

ВЫБРАТЬ
Сотрудники.Ссылка
ИЗ
Справочник.Сотрудники КАК Сотрудники
???
Надо будет попробовать.



Автоматическое заполнение табличной части документа при изменении

Я
   oqjawa

15.05.17 — 09:24

есть документ «Выхода_на_практику» с табличной частью Студенты

реквизиты табличной части «Студенты»:

ФИО_студенты

Договор

Место_прохождения_практики

База_классов

Основа_обучения

ФИО_студента ссылается на справочник «Студенты»

в справочники «Студенты» указаны реквизиты:

Наименование — в котором пишется ФИО студента

База

Форма_обучения

база и форма_обучения ссылаются на объект перечисления

ПеречислениеСсылка.База_классов

ПеречислениеСсылка.Основа_обучения

  

Партнерская программа EFSOL Oblako

   oqjawa

1 — 15.05.17 — 09:25

правильно ли у меня построена структура? где я должен писать процедуру и функциию? в модуле объекта??

   oqjawa

2 — 15.05.17 — 11:15

наведите на мысль

   catena

3 — 15.05.17 — 11:16

(2)На какую мысль? Ни одной мысли тут не вижу. Заполнение чем? При изменении чего?

   oqjawa

4 — 15.05.17 — 11:19

в документе в табличной части «Студенты»

при изменении ФИО_студента

чтобы автоматически подставлялись База и основа_обучения

   oqjawa

5 — 15.05.17 — 11:21

например Петров — 9 классов — бюджетник

меняю фамилию  на Иванов —           подставляются значения из справоника студенты 11 классов — платник

   Numerus Mikhail

6 — 15.05.17 — 11:24

(2) Обработчик «При изменении» колонки ФИО_Студенты табличной части

   catena

7 — 15.05.17 — 11:25

(4)Встаньте на ячейку «ФИО_студента» и найдите в событиях «При изменении». Оно само направит, куда нужно.

   FIXXXL

8 — 15.05.17 — 11:25

УпрФормы? получай НаСервереБезКонтекста нужные реквизиты от студента и заполняй на форме

   oqjawa

9 — 15.05.17 — 11:26

как на неё встать? в форме документа?? или при создании документа на вкладке данные?

где писать обработчик в модуле документа?

   catena

10 — 15.05.17 — 11:27

(8)Он пока еще не определился процедура это или функция. Там до получения данных еще копать и копать))

   Numerus Mikhail

11 — 15.05.17 — 11:28

(9) в смысле как

в конфигураторе открываешь форму

тыкаешь на нужную колонку

и там в свойствах выбираешь «При имзенении»

   oqjawa

12 — 15.05.17 — 11:28

а как определится?

   oqjawa

13 — 15.05.17 — 11:30

ладно, наверное я вас замучал.. просто никогда с этим не сталкивался.. если есть что почитать по этому вопросу.. скиньте ссылки, буду благодарен вам)

   Dmitrii

14 — 15.05.17 — 11:32

(0) Какая-то явная кривизна в структуре построения данных. Плюс избыточность. Если избыточность в некоторых случаях допустима, то вот кривизна…

Если «База» и «Форма» — это реквизиты справочника «Студенты», то нафига они нужны в табличной части «Студенты» твоего документа? Это явная избыточность.

А какова логика, если в справочнике у студента Пупкина указана база «9 классов», а в документе вручную в строке со студентом Пупкиным поставят в поле База — «11 классов»?

   lodger

15 — 15.05.17 — 11:33

(13) ваши посты звучат так, будто школьник полистал учебник для ВТУЗов и просто подряд говорит термины.

может стоит заняться изучением с систематическим подходом?

загуглить курсы, например «Курс начинающего программиста»?

   lodger

16 — 15.05.17 — 11:34

(14) эти избыточные поля могут быть реквизитами ТЧ на форме и заполнятьсяизменяться по открытии формыизменении строки тч, будучи недоступными для редактирования, а потом забываться как страшный сон.

   oqjawa

17 — 15.05.17 — 11:38

Справочник «Студенты» предназначен для хранения данных о Пупкине о его базе классов и формы обучения

   oqjawa

18 — 15.05.17 — 11:39

В документе «ВЫхода на практику» идёт перечисление Пупкиных и их бзы классов и форме обучения и ещё множество реквизитов

данный документ формирует приказ ( печатную форму) выхода на практику студентов

   dezss

19 — 15.05.17 — 11:40

Если УФ, то просто создай элемент таблицы формы и сделай ссылку на эти реквизиты студента (если че, это ПутьКДанным).

   oqjawa

20 — 15.05.17 — 11:40

мне нужно что бы при указании Пупкина в табличную часть попали его реквизиты из справочника в котором они уже указаны

как это сделать, можно по подробней если не трудно

   dezss

21 — 15.05.17 — 11:40

(19) Но тогда эти данные не будут сохраняться, будет сохраняться только сам студент.

   oqjawa

22 — 15.05.17 — 11:41

и они автоматически подставятся или придётся их вручную выбирать из выплавающего списка??

   dezss

23 — 15.05.17 — 11:42

автоматически. они вообще будут физически связаны, но если открыть этот документ когда эти данные в справочнике студенты поменяются, то они поменяются и в этом документе.

   oqjawa

24 — 15.05.17 — 11:43

ладно они не будут сохранятся но при написании запроса на вывод информации в печатную форму я могу их учитывать?

   catena

25 — 15.05.17 — 11:44

(21)Будет грустно, если выхода на практику оформят в мае, в июне переведут студентов на следующий курс и в сентябре будут задним числом перепечатывать приказы…

   dezss

26 — 15.05.17 — 11:44

(24) при написании запроса они и так у тебя всегда под рукой, так хранятся в справочнике студенты.

   dezss

27 — 15.05.17 — 11:45

(25) ну так я про этот момент написал.

   oqjawa

28 — 15.05.17 — 11:45

да очень грустно.. значит не то

   dezss

29 — 15.05.17 — 11:46

(25) да и вообще такую инфу хранить в справочнике — ахинея…так что бреда больше не станет, но он будет более систематизирован))))

   oqjawa

30 — 15.05.17 — 11:46

инфу о студентах хранить в справочнике ахинея?

   dezss

31 — 15.05.17 — 11:46

(28) тогда обрабатывать событие приизменении.

   oqjawa

32 — 15.05.17 — 11:46

а в чём её хранить

   dezss

33 — 15.05.17 — 11:47

(30) периодически изменяющуюся — да.

   dezss

34 — 15.05.17 — 11:47

(32) очевидно в периодическом регистре сведений.

   oqjawa

35 — 15.05.17 — 11:48

с какой переодичность создать этот регистр? каждый день может уйти в академ студент и выйти с него

   catena

36 — 15.05.17 — 11:49

(30)А как вы из справочника узнаете, что Петров два раза оставался на второй год, а на Иванова отсутствует выхода на практику именно на 3 курсе два года назад? Учитывая, что он экстерном сдавал второй и четвертый?

   Dmitrii

37 — 15.05.17 — 11:49

(16) >> избыточные поля могут быть реквизитами ТЧ на форме

В (0) нам представлена иная концепция.

   dezss

38 — 15.05.17 — 11:50

(35) если в один день и уйти и выйти — то секунды, если нет, то день….все зависит от возможной частоты такого события от одного студента.

   h-sp

39 — 15.05.17 — 11:52

(35) тогда с периодичностью день

   oqjawa

40 — 15.05.17 — 11:54

что такое избыточные поля Дмитрий?

   oqjawa

41 — 15.05.17 — 12:01

Для чего нужен документ? в документе заполняются реквизиты со всех объектов конфигурации если сказать грубо.. на все реквизиты документа указанны ссылки на Объект.Реквизит где уже имеются данные…

что вы называете избыточными полями??? документ форсирует записи в регистр сведений на основе которых создаются отчёты.. на основе документа формируется печатная форма приказа о выходе студентов на практику.. какие избыточные поля?

не понимаю вас..

я просто хочу поинтересоваться у вас и других профессионалов и мастеров, и просто талантливых людей как создать Автоматическое заполнение табличной части документа При Изменении Реквизита функцией или процедурой

   h-sp

42 — 15.05.17 — 12:03

(40) ну если например есть в табличной части поле Студент, То мы элементарно имеем у него реквизит база, просто пишем Студент.База.

а ты завел в табличной части отдельно Студент и отдельно База.

Теперь прикинь, вы создали 100 документов Выход_на_практику, и там записано это поло Форма.

И тут вы в справочнике Студенты меняенте поле Форма у каких-то студентов.

Тогда получается, что в документах Выход_на_практику у вас полная белиберда, где правильно форма стоит, где неправильно. А всему виной идиотская программа, которую написал некий Окиява.

   oqjawa

43 — 15.05.17 — 12:03

ПриИзмененииФИО_студента(Элемент).. как то так вроде..

   h-sp

44 — 15.05.17 — 12:04

(43) почему ФИО? У вас разе не справочник студенты?

   oqjawa

45 — 15.05.17 — 12:06

справочник студенты:

Наименование;

БазаКлассов

ФормаОбучение

   oqjawa

46 — 15.05.17 — 12:08

Документ выхода на практику:

НомерПриказа

ДатаИзданияПриказа

Группа

Курс

Дата_начала_практики

Дата_конца_практики

Вид_практики

Спекиальность

Форма_обучения

ТАБЛИЧНЫЕ ЧАСТИ

«Студенты»

ФИО_студента

Место_прохождения_практики

Договор

БазаКлассов

ОсноваОбучения

   oqjawa

47 — 15.05.17 — 12:09

из справочника студенты при выборе в табличной части документа Реквизит ФИО_студента хочу подставить автоматически его базу классов и его форму обучения

и занести эти данные в регистр сведений

   oqjawa

48 — 15.05.17 — 12:10

справочник студенты:

Наименование;

БазаКлассов

ОсноваОбучения ******

   dezss

49 — 15.05.17 — 12:11

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

(41) избыточность — это когда одни и те же данные есть в разных местах. В общем случае, этого желательно избегать.

(47) не так и делай это при изменении. Единственное, что тебе нужно будет побороть — это найти нужную строку по элементу.

   dezss

50 — 15.05.17 — 12:11

(49) не так -> ну так

   h-sp

51 — 15.05.17 — 12:17

(47) слева у тебя элементы формы, находишь ФИО_студента щелкаешь, справа возникает колонка свойства. Там находишь ПриИзменении, щелкаешь по нему, оно тебя выкидывает в процедуру. В этой процедуре пишешь текст программы.

   oqjawa

52 — 15.05.17 — 12:22

избыточности данных у меня нет.. единственное где повторяются данные это в документе что вполне логично тип данных тч объекта указан в виде ссылок на реквизиты где хранятся эти данные.. э

например в тч. Место_прохождения_практики тип данных СправочникСсылка.Место_прохождения_практики

h-sp.. сейчас попробую

   h-sp

53 — 15.05.17 — 12:29

(52) но ведь просто можно везде в запросах написать ФИО_студента.Место_прохождения_практики

а колонку в ТЧ Место_прохождения_практики выкинуть. Она не нужна. Зачем она, если эта инормация уже есть.

   dezss

54 — 15.05.17 — 12:31

(52) в тч.место_прохождения_практики будет ссылка на справочник, которую другим способом получить нельзя и избыточность обоснована. А вот в случае с База_классов и Основа_обучения избыточность не обоснована, так как эти данные и так хранятся в студенте, ссылка на которого УЖЕ есть в этом документе, но это лирика и связано с тем, что изначально было не до конца продумана схема хранения изменяемых данных в конфигурации.

   oqjawa

55 — 15.05.17 — 12:32

эм.. где она уже есть??

есть отдельный справочник МестаПрохожденияПрактики

там хранится условно наименование, адрес, контактное лицо, инн и тд…

Пользователь должен присвоить в документе Студенту его место прозождения практики

   oqjawa

56 — 15.05.17 — 12:33

я хочу компенсировать избыточность База_классов и Основа_обучения автоподстановкой данных приИзменении

так можно сделать?

   h-sp

57 — 15.05.17 — 12:34

(55) оно есть в справочнике Студенты

   oqjawa

58 — 15.05.17 — 12:36

из этого справочника как подставить в тч документа автоматически

   oqjawa

59 — 15.05.17 — 12:36

обработчик события на чём делать?

   oqjawa

60 — 15.05.17 — 12:37

&НаКлиенте

Процедура ФИО_студентаПриИзменении(Элемент)

    ФИО_студентаПриИзмененииНаСервере();

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

&НаСервереБезКонтекста

Процедура ФИО_студентаПриИзмененииНаСервере()

    // Вставить содержимое обработчика.

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

   h-sp

61 — 15.05.17 — 12:37

то есть в запросе если нужно пишете

ФИО_студента.Место_прохождения_практики.Контактное лицо

   h-sp

62 — 15.05.17 — 12:38

(60) пишете на языке 1с. где написано // Вставить содержимое обработчика

   oqjawa

63 — 15.05.17 — 12:42

infostar.ru/public/103398/

   oqjawa

64 — 15.05.17 — 12:44

   dezss

65 — 15.05.17 — 12:47

(61) прочитай еще раз (0) Место_прохождения_практики — это реквизит документа, а не справочника студенты.

   dezss

66 — 15.05.17 — 12:48

(64) да-да, что-то вроде этого.

   oqjawa

67 — 15.05.17 — 12:50

Всёверно это реквизит документа

   oqjawa

68 — 15.05.17 — 12:51

и тип этого реквизита в виде ссылки на отдельный справочник «Места_прохождения_практики»

   oqjawa

69 — 27.05.17 — 17:44

Есть документ             Выхода_на_практику

в нём есть                      ТЧ Студенты

в ней есть реквизиты       ФИО_студента, База, Основа_обучения                        реквизиты указаны в виде ссылок на справочник «Студенты»

                                                                                                                                                             в нём есть реквизиты «Наименование» в котором хранится ФИО студента

                                                                                                                                                                                             «База»

                                                                                                                                                                                              «Основа_обучения»

как реализовать автоматическое заполнения тч документа при изменении реквизита документа «ФИО_студента»

&НаКлиенте

Процедура ФИО_студентаПриИзменении(Элемент)

ФИО_студентаПриИзмененииНаСервере();

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

&НаСервереБезКонтекста

Процедура ФИО_студентаПриИзмененииНаСервере()

// Вставить содержимое обработчика.КонецПроцедуры

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

   oqjawa

70 — 29.05.17 — 12:45

я разместил в Модуле следующий код:

Функция ПолучитьПараметрыСтудента(Студент) Экспорт

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

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

    «ВЫБРАТЬ

    |    Студенты.Наименование,

    |    Студенты.База,

    |    Студенты.Основа_обучения

    |ИЗ

    |    Справочник.Студенты КАК Студенты»;

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

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

    
    СписокПараметров = Новый Структура;

    СписокПараметров.Вставить(«База»);

    СписокПараметров.Вставить(«Основа_обучения»);

              
    
    Если ВыборкаДетальныеЗаписи.Следующий() Тогда        

        СписокПараметров.База = ВыборкаДетальныеЗаписи.База;

        СписокПараметров.Основа_обучения = ВыборкаДетальныеЗаписи.Основа_обучения;

    
    КонецЕсли;

    Возврат СписокПараметров;    

КонецФункции

и в обработчике события При изменении создал процедуру:

&НаКлиенте

Процедура ФИО_студентаПриИзменении(Элемент)

    Парам = ПолучитьПараметрыСтудента(Объект.Студенты);

    Объект.База = Парам.База;

    Объект.Основа_обучения = Парам.Основа_обучения;

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

    
возникает ошибка:

{Документ.Выхода_на_практику.Форма.ФормаДокумента.Форма(46)}: Ошибка при установке значения атрибута контекста (Студенты)

    Парам = ПолучитьПараметрыСтудента(Объект.Студенты);

по причине:

Нельзя изменять поле, содержащее объект данных формы

Что сделал не правильно и как это исправить не понимаю

   h-sp

71 — 29.05.17 — 16:15

как-то был один студент

Функция ПолучитьПараметрыСтудента(Студент) Экспорт

и вдруг стало много.

Парам = ПолучитьПараметрыСтудента(Объект.Студенты);

они размножаются похоже в процессе написания запроса.

   oqjawa

72 — 29.05.17 — 17:16

{Документ.Выхода_на_практику.Форма.ФормаДокумента.Форма(38)}: Поле объекта не обнаружено (Студент)

    Парам = ПолучитьПараметрыСтудента(Объект.Студент);

   oqjawa

73 — 29.05.17 — 17:25

я уже не один день сижу пытаюсь организовать автозаполнение документа, смотрю тысячи сложных примеров, пытаюсь реализовать точ в точ уже готовые решения в ранее созданных темах, но что-то всё не выходит и не выходит, я уже незнаю что делать.. кокие документы я сегодня не создавал.. про водителей и автотранспорт, про контрагентов и их контакты, про товары и их спецификации.. хоть бы один заполнился… какой момент я упускаю где у меня косяки..

   oqjawa

74 — 29.05.17 — 17:26

Ребят умоляю, приведите мне элементарный пример с очень коротким автозаполнением одного реквизита, что бы я просто понял как это работает

   h-sp

75 — 29.05.17 — 17:26

(72)

Функция ПолучитьПараметрыСтудента(Студент) Экспорт

    
    
    СписокПараметров = Новый Структура;

    СписокПараметров.Вставить(«База», Студент.База);

    СписокПараметров.Вставить(«Основа_обучения», Студент.ОсноваОбучения);

              
     Возврат СписокПараметров;    

КонецФункции

&НаКлиенте

Процедура ФИО_студентаПриИзменении(Элемент)

    Парам = ПолучитьПараметрыСтудента(Элементы.Студенты.ТекущиеДанные.Объект.ФИО_студенты);

    Элементы.Студенты.ТекущиеДанные.База = Парам.База;

    Элементы.Студенты.ТекущиеДанные.Основа_обучения = Парам.Основа_обучения;

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

   h-sp

76 — 29.05.17 — 17:27

Парам = ПолучитьПараметрыСтудента(Элементы.Студенты.ТекущиеДанные.ФИО_студенты);

   h-sp

77 — 29.05.17 — 17:27

Парам = ПолучитьПараметрыСтудента(Элементы.Студенты.ТекущиеДанные.ФИО_студента);

видимо

   oqjawa

78 — 29.05.17 — 17:39

Функция ПолучитьПараметрыСтудента(Студент) Экспорт

    
    
    СписокПараметров = Новый Структура;

    СписокПараметров.Вставить(«База», Студент.База);

    СписокПараметров.Вставить(«Основа_обучения», Студент.Основа_обучения);

              
     Возврат СписокПараметров;    

КонецФункции

&НаКлиенте

Процедура ФИО_студентаПриИзменении(Элемент)

   Парам = ПолучитьПараметрыСтудента(Элементы.Студенты.ТекущиеДанные.ФИО_студента);

    Элементы.Студенты.ТекущиеДанные.База = Парам.База;

    Элементы.Студенты.ТекущиеДанные.Основа_обучения = Парам.Основа_обучения;

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

   oqjawa

79 — 29.05.17 — 17:39

Вот так всё хорошо)) только не подставляет База

   oqjawa

80 — 29.05.17 — 17:40

но подставляет основу обучения)) это офигеть!)

  

oqjawa

81 — 29.05.17 — 17:40

спасибо вам большое)

0 / 0 / 0

Регистрация: 09.01.2017

Сообщений: 30

1

Автоматическое заполнение табличной части документа

29.04.2017, 15:00. Показов 11372. Ответов 7


В документе при выборе реквизита Услуга, должна автоматически заполняться ТЧ — поле Оборудование. Перечень составляющих находится в справочнике Оборудование, у справочника Оборудование владелец справочник Услуга.
Т.е. при выборе Услуги должно в табличной части заполнятся необходимое Оборудование для данной Услуги. Надеюсь, что понятно объяснила.
Помогите, пожалуйста, я новичок в этом. Знаю что делается это через запрос, но что я пишу ничего не работает(((((((((
Спасибо всем кто откликнется)



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,394

29.04.2017, 22:59

2

sokol566535, Запрос свой опубликуйте.



0



Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

30.04.2017, 00:59

3

sokol566535, а лучше выложите конфигурацию, чтобы не гадать



0



856 / 655 / 111

Регистрация: 01.11.2012

Сообщений: 2,410

30.04.2017, 08:08

4

Если ТЧ в справочнике и документе с одинаковыми реквизитами, то проще через загрузить-выгрузить или ЗаполнитьЗначенияСвойств(), а не запросом



0



0 / 0 / 0

Регистрация: 09.01.2017

Сообщений: 30

30.04.2017, 11:29

 [ТС]

5

Буду благодарна)



0



0 / 0 / 0

Регистрация: 09.01.2017

Сообщений: 30

30.04.2017, 11:42

 [ТС]

6

Буду благодарна)



0



polax

1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,394

01.05.2017, 13:29

7

Лучший ответ Сообщение было отмечено sokol566535 как решение

Решение

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
&НаКлиенте
 Процедура УслугаПриИзменении(Элемент)
      
      УслугиПриИзмененииСервер();
      
      Объект.ОбщаяСтоимость=Объект.РасходныеМатериалы.Итог("СтоимостьОборудования") + Объект.РасходныеМатериалы.Итог("СтоимостьМонтажа");
      
 КонецПроцедуры
  
&НаСервере
 Процедура УслугиПриИзмененииСервер()
   
  Запрос = Новый Запрос;
   Запрос.Текст = 
      
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Оборудование.Ссылка 
        |ИЗ
        |   Справочник.Оборудование КАК Оборудование
        |ГДЕ
        |   Оборудование.Владелец = &Владелец";
    
    Запрос.УстановитьПараметр("Владелец", Объект.Услуга);
    
    РезультатЗапроса = Запрос.Выполнить();
        
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        Стр =  Объект.РасходныеМатериалы.Добавить();
        Стр.Оборудование = Выборка.Ссылка;
    КонецЦикла;
    
 
 КонецПроцедуры;

Добавлено через 2 часа 40 минут
Или текст процедуры УслугиПриИзмененииСервер()

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Запрос = Новый Запрос;
   Запрос.Текст = 
      
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   СправочникОборудование.Ссылка,
        |   ЦеныНаРасходныеМатериалыСрезПоследних.Цена КАК ЦенаОборудования,
        |   ЦенаЗаПозициюСрезПоследних.Цена КАК ЦенаЗаМонтаж
        |ИЗ
        |   Справочник.Оборудование КАК СправочникОборудование
        |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНаРасходныеМатериалы.СрезПоследних КАК ЦеныНаРасходныеМатериалыСрезПоследних
        |       ПО СправочникОборудование.Ссылка = ЦеныНаРасходныеМатериалыСрезПоследних.Оборудование.Ссылка
        |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦенаЗаПозицию.СрезПоследних КАК ЦенаЗаПозициюСрезПоследних
        |       ПО СправочникОборудование.Ссылка = ЦенаЗаПозициюСрезПоследних.Оборудование.Ссылка
        |ГДЕ
        |   СправочникОборудование.Владелец = &Владелец";
    
    Запрос.УстановитьПараметр("Владелец", Объект.Услуга);
    
    РезультатЗапроса = Запрос.Выполнить();
        
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        Стр =  Объект.РасходныеМатериалы.Добавить();
        Стр.Оборудование = Выборка.Ссылка;
        Стр.ЦенаОборудования = Выборка.ЦенаОборудования;
        Если НЕ ЗначениеЗаполнено(Стр.Количество)  Тогда
        Стр.Количество = 1;    
        КонецЕсли; 
        Стр.СтоимостьОборудования = Стр.ЦенаОборудования*Стр.Количество;
        Стр.ЦенаЗаМонтаж = Выборка.ЦенаЗаМонтаж;
        Стр.СтоимостьМонтажа = Стр.ЦенаЗаМонтаж * Стр.Количество;
    КонецЦикла;



1



0 / 0 / 0

Регистрация: 09.01.2017

Сообщений: 30

01.05.2017, 17:07

 [ТС]

8

Спасибо большое!!! Все работает))))))



0



Доброго времени суток товарищи!
Прошу оказать помощь в решении прикладной задачи учёта материалов и рассчета их стоимости. Первым постом, я объясню поставленную перед собой задачу и то, чего я смог добиться своими силами. Прошу не троллить мои методы достижения желаемой цели, а конструктивно предложить свои. Вообще, я не программист, а так скажем администратор, поэтому не судите строго элементарные глупые решения, учитывая отсутствие знаний языка…
Задача достаточно простая на мой взгляд, с минимумом элементарных вычислений.
Организовать рассчет необходимых материалов на выполнение ремонтных в одном помещении с отдельными комнатами, а следовательно отдельным набором значений для расчёта, но в рамках одного документа. На примере 2х видов работ штукатурки и покраски.

Реквизиты булевского значения Штукатурка и Краска по умолчанию в значении «Истина» к ним я добавил событие «При изменении» привязав к их значению видимость групп с расчётом площади работ и выбором материала из справочника материалов, можно конечно было сделать отдельные справочники для каждого вида работ, однако сам понимаю, что это неправильно и не практично. С настройками параметров выбора, я думаю разберусь сам.

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

В самой группе расчёта я сделал поля для рассчета площади, со значением по умолчанию 1 и процедурами рассчета площади из см сторон в кв.м, при изменении любого из параметров.

Так же в каждую группу добавил реквизит типа ссылка на справочник материалов, из которого теперь я хочу выбрать материал, желательно с выборкой по родителю. После чего имея уже готовую площадь в кв.м рассчитать количество необходимого материала используя реквизит элемента справочника материалов «Расход», и тут возникает вопрос….

Как мне сделать, что бы после выбора материала он добавился в табличную часть этого же документа, где были бы указаны такие реквизиты как » Вес» то есть фасовка материала, «Расход» на кв.м. и «Цена», для рассчета количества упаковок и их стоимости.

То есть результатом моих действий должен стать список материалов, помимо прочего, округленный в большую сторону количества и рассчитаной стоимостью. Все данные о материале, содержатся в реквизитах элемента справочника.

А теперь порадую опытных программеров своим ламерским подходом в фотоотчете…)

ЗЫ Извиняюсь, если выгляжу совсем глупо и очень надеюсь на вашу помощь товарищи! Моя разработка носит не коммерческий характер и нужна для личного использования в целях оптимизации рабочего времени, планируется использование только на учебной версии 1с.

В предыдущей статье мы узнали, как настраивать и конфигурировать табличные части объектов 1С 8.3. В этой статье мы изучим некоторые вопросы программной работы с табличными частями 1С.

Заполнение табличной части 1С 8.3

Очень часто встречается задача заполнить табличную часть какими-нибудь  значениями, например результатом выполнения запроса.  Для демонстрации реализуем пример, в котором выполняется заполнение табличной части. Сделаем небольшую учебную задачу: будем заполнять табличную часть документа всей номенклатурой, которая не помечена на удаление. Количество при этом будет равно 1. Для заполнения табличной части документа нам необходимо работать с  одноименной таблицей реквизита Объект, который является основным реквизитом управляемой формы.

Табличная часть реквизита Объект

Поскольку по условиям задачи, необходимо отобрать всю не помеченную на удаление номенклатуру, то оптимально это сделать при помощи запроса, в котором я буду получать все не помеченные элементы справочника номенклатура. Я создал команду, при выполнении которой будет заполняться табличная часть, и разместил её на форме.

Команда 1С и размещение её на форме

Исполнение команды будет выполняться в серверном контексте, поскольку объект Запрос не работает в клиентском контексте на тонком клиенте.

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

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

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

&НаКлиенте
Процедура ЗаполнитьТоварами(Команда)
    ЗаполнитьТоварамиНаСервере();
КонецПроцедуры

При обходе запроса, я использую метод Добавить табличной части объекта (вообще это метод объекта, который имеет тип ДанныйФормыКоллекция, именно в этот тип преобразуется табличная часть документа-объекта, при создании на сервере). Данный метод является функцией, которая создаёт и возвращает новую строку.

Обратите внимание, поскольку при обходе запроса и заполнения новой строки, я использую метод ЗаполнитьЗначенияСвойств, то поля в запросе должны называться так же, как и поля табличной части.

Очистка табличной части документа 1С 8.3

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

Объект.СписокТоваров.Очистить();

После выполнения этого метода вся табличная часть будет очищена.

Текущая строка табличной части 1С 8.3

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

Текущая строка табличной части 1С 8.3

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

Для решения данной задачи нужно воспользоваться свойством ТекущиеДанные элемента с типом ТаблицаФормы, который соответствует нужной табличной части. Свойство ТекущиеДанные возвращает значение полей текущей строки.

Возврат полей свойством ТекущиеДанные

Для того, чтобы отработать изменение текущего поля цены, создадим обработчик события ПриИзменении этого поля.

Обработчик ПриИзменении поля таблицы формы

В этом обработчике напишем код, который будет пересчитывать значения полей текущей строки табличной части.

&НаКлиенте
Процедура СписокТоваровЦенаПриИзменении(Элемент)
	ТекДанные = Элементы.СписокТоваров.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат; //если пустая таблица
	КонецЕсли;
	ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
КонецПроцедуры

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

&НаКлиенте
Процедура УмножитьНа2(Команда)
    ТекДанные = Элементы.СписокТоваров.ТекущиеДанные;
    Если ТекДанные = Неопределено Тогда
        Возврат; //если пустая таблица
    КонецЕсли;
    ТекДанные.Количество = ТекДанные.Количество * 2;
    ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
КонецПроцедуры

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

Идентификтор = Элементы.СписокТоваров.ТекущаяСтрока;
ИдентификторСлед = Идентификтор + 1;

Если ИдентификторСлед < Объект.СписокТоваров.Количество() Тогда
    Элементы.СписокТоваров.ТекущаяСтрока = ИдентификторСлед;
КонецЕсли;

В этом коде мы получаем идентификатор текущий строки при помощи свойства таблицы управляемой формы ТекущаяСтрока, и если мы не выходим за приделы таблицы, то сдвигаем нашу текущую строку на один шаг вниз.

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

&НаКлиенте
Процедура СписокТоваровКоличествоПриИзменении(Элемент)
    Идентификтор = Элементы.СписокТоваров.ТекущаяСтрока;
    Если Идентификтор = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ТекСтрока = Объект.СписокТоваров.НайтиПоИдентификатору(Идентификтор);
    Если ТекСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ТекСтрока.Сумма = ТекСтрока.Цена * ТекСтрока.Количество;
КонецПроцедуры

В этом коде мы используем метод НайтиПоИдентификатору переменной Объект.СписокТоваров, которая имеет типа ДанныйФормыКоллекция, этот метод получает элемент коллекции по указанному идентификатору. Если этот элемент найден, то мы можем с ними работать, причем данные на форме изменяться автоматически.

Обход табличной части 1С

Часто возникают задачи обойти табличную часть и изменить какие-либо значения в столбцах. В предыдущих примерах мы изменяли текущую стоку таблицы, теперь реализуем пример, когда нужно изменить все строки. В этом случае нет необходимости обращаться к элементам формы, можно работать напрямую с основным реквизитом Объект.

&НаКлиенте
Процедура УмножитьВсеНа2(Команда)

    ТабОбх = Объект.СписокТоваров;
    Для Каждого стрТабл из ТабОбх Цикл
        стрТабл.Количество = стрТабл.Количество * 2;
        стрТабл.Сумма = стрТабл.Цена * стрТабл.Количество;
    КонецЦикла;

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

Остальные статьи по теме конфигурирования в 1С:

Конфигурирование табличный частей объектов 1С

Справочники в 1С 8.3

Документы в 1С 8.3

Предопределенные элементы справочников 1С

Формы справочников в 1С 8.3

Более подробно и основательно конфигурирование в 1С дается в моей книге:

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

При работе с системами 1С на различных предприятиях может возникнуть ситуация, когда потребуется изменить определенные данные в табличных частях документов. Естественно, если система уже находится в эксплуатации, количество документов слишком велико, чтобы даже задуматься о ручном изменении. Это и не нужно, так как программист 1С может сделать обработку, которая будет автономно делать нужные исправления в документах. Это отличное решение, которое не перегружает интерфейс пользователя и позволяет прописать нужную нам логику для всех объектов системы.

Создание простой обработки в 1С 8.3

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

Допустим, что в табличную часть «Товары» документа «ПоступлениеТоваровУслуг» добавили реквизит «Назначение», которое должно проставляться при выборе склада. Естественно, перевыбирать склад во всех существующих документах никто не собирается, и принимается решение, что нужна внешняя обработка заполнения табличной части документа. Алгоритм наших действий следующий:

  1. Открываем ИБ в режиме конфигуратора и с помощью меню «Файл»-«Новый» создаем внешнюю обработку;
    Рис.1 Выбор вида документа
    Рис.1 Выбор вида документа
  2. Добавляем форму обработки, нажимая на кнопку в виде лупы у одноименного поля, подтверждаем предлагаемые настройки кнопкой «Готово»;
    Рис.2 Конструктор формы обработки
    Рис.2 Конструктор формы обработки
  3. В разделе «Команды» добавляем новый объект, изменяем наименование и перетаскиваем его влево, в элементы формы. Видим, что появилась кнопка с нужным нам именем;
    Рис.3 Внешняя обработка Форма
    Рис.3 Внешняя обработка Форма
  4. Чтобы добавить алгоритм заполнения нового реквизита, нам нужно создать процедуру на клиенте, вызывающую выполнение кода на сервере. Для этого вызываем контекстное меню на созданной нами кнопке и выбираем пункт «Действие команды». Выбираем «Создать на клиенте и процедуру на сервере без контекста»;
    Рис.4 Создание процедуры на клиенте
    Рис.4 Создание процедуры на клиенте
  5. Перед нашими глазами откроется текст модуля формы с 2 процедурами. Алгоритм работы с документами реализовываем в той, которая исполняется на серверной стороне. Сам текст кода состоит из следующих частей:
    • С помощью запроса определяем, в строках ТЧ каких документов новый реквизит «Назначение» не заполнен;
    • В цикле получаем объект каждого документа, заполняем реквизит строк табличной части и записываем документ для сохранения изменений.
                 
&НаКлиенте
Процедура ЗаполнитьТЧ(Команда)
        	ЗаполнитьТЧНаСервере();
КонецПроцедуры
 
&НаСервереБезКонтекста
Процедура ЗаполнитьТЧНаСервере()
        	Запрос = Новый Запрос;
        	Запрос.Текст =
                   	"ВЫБРАТЬ РАЗЛИЧНЫЕ
                   	|       	ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
                   	|       	ПоступлениеТоваровУслугТовары.Ссылка.Склад.Наименование КАК Назначение
                   	|ИЗ
                   	|       	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                   	|ГДЕ
                   	|       	ПоступлениеТоваровУслугТовары.Назначение = """"";        	
        	ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
        	Пока ВыборкаРезультатаЗапроса.Следующий() Цикл
                   	ДокументОбъектДляИзменения =  ВыборкаРезультатаЗапроса.Ссылка.ПолучитьОбъект();
                   	Для каждого строки из ДокументОбъектДляИзменения.Товары цикл
                               	строки.Назначение = ВыборкаРезультатаЗапроса.Назначение;       	
                   	КонецЦикла;
                   	ДокументОбъектДляИзменения.Записать(РежимЗаписиДокумента.Проведение);
                   	Сообщить("Документ "+ДокументОбъектДляИзменения.ссылка+" успешно исправлен.");        	
        	КонецЦикла;
КонецПроцедуры
  1. Сохраняем внешнюю обработку на компьютере;
  2. Запускаем информационную базу в режиме предприятия и через меню «Файл»-«Открыть…» находим нашу сохраненную обработку. Открывается форма с кнопкой, для которой мы реализовали код. Активируем исполнение описанного выше алгоритма нажатием на кнопку и получаем сообщения об успешном исправлении.
Рис.5 Внешняя обработка
Рис.5 Внешняя обработка

У этого способа есть недостаток – обработка не сохраняется в конфигурации. То есть, если через некоторое время добавят новый реквизит, то снова придется ее найти, адаптировать и открыть через основное меню. Но такие ситуации достаточно редки, так как перед вводом системы в эксплуатацию идет тщательный аудит с составлением списка нужных реквизитов. Гораздо более распространены ситуации, когда пользователям необходимо в процессе работы править данные в строках, например, изменять количество.

Добавление в ИБ дополнительной обработки

В конфигурациях, использующих библиотеку стандартных подсистем, существует возможность дополнять функциональность системы, не внося изменений в конфигурацию. Это очень удобный механизм и все компании, не снимающие типовые базы с поддержки, используют его. Реализуется это при помощи внешних обработок и отчетов одного из предусмотренных платформой видов:

  • ЗаполнениеОбъекта;
  • ДополнительнаяОбработка;
  • СозданиеСвязанныхОбъектов;
  • ПечатнаяФорма;
  • Отчет;
  • ДополнительныйОтчет.

Для пользователя управляемая обработка заполнения табличной части документов идеально подходит первого вида – «ЗаполнениеОбъекта». Для того чтобы воспользоваться этим механизмом, нам понадобится в режиме конфигуратор создать новую внешнюю обработку. Заполняем ее имя и сохраняем на компьютер, чтобы в дальнейшем после настройки, подключить ее в нашу информационную базу.

Рис.6 Заполнение данных обработки
Рис.6 Заполнение данных обработки

На следующем шаге создаем в модуле объекта внешней обработки процедуру для определения типа функционала. Она типичная для всех дополнительных обработок и отчетов, подключаемых к 1С 8.3, с небольшими отличиями в зависимости от вида. В качестве основных настроек используются следующие пункты:

  1. Вид – указывается 1 из вышеперечисленных вариантов;
  2. МасНазначений – массив, включающий в себя все объекты конфигурации, на которые предполагается добавить новый функционал;
  3. Наименование – как будет называться наша доработка в общем списке;
  4. БезопасныйРежим – ограничение определенных действий для обработки;
  5. Команды – список кнопок, которые появятся в объектах, перечисленных в МасНазначений.

 Функция СведенияОВнешнейОбработке() Экспорт
        	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.1.3.1");
        	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();  //ВидОбработкиПечатнаяФорма();
        	МасНазначений = Новый Массив;
        	МасНазначений.Добавить("Документ.ЗаказНаПеремещение");
        	МасНазначений.Добавить("Документ.ЗаказПоставщику");
        	
        	ПараметрыРегистрации.Назначение = МасНазначений;
        	ПараметрыРегистрации.Наименование = "ДобавитьКоличество";
        	ПараметрыРегистрации.БезопасныйРежим = Ложь;
        	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
        	НоваяКоманда.Представление = НСтр("ru = 'ДобавитьКоличество'");
        	НоваяКоманда.Идентификатор = "ДобавитьКоличество";
        	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
        	НоваяКоманда.ПоказыватьОповещение = Истина;
        	Возврат ПараметрыРегистрации;
КонецФункции

Далее мы добавим пустую форму обработки и переключимся на ее модуль. Переключаются между формой и ее модулем с помощью закладок в нижней части окна. Следом добавляем процедуру «ВыполнитьКоманду» на клиентской стороне с нужным нам алгоритмом. Чтобы завершить создание обработки заполнения табличных частей, осталось лишь сохранить результат работы.


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) экспорт
Для каждого стр из ВладелецФормы.Объект.Товары цикл
        	стр.Количество = стр.Количество + 10;	
        	стр.КоличествоУпаковок = стр.КоличествоУпаковок + 10; 	
КонецЦикла;
КонецПроцедуры

После сохранения внешней обработки нам остается только подключить ее в базу 1С в режиме предприятия. Запускаем 1С, заходим в раздел «НСИ и администрирование», «Печатные формы, отчеты и обработки». Открываем форму «Дополнительные отчеты и обработки» и перед нами открывается список всех подключенных объектов.

Рис.7 НСИ и администрирование
Рис.7 НСИ и администрирование

Нажав «Добавить из файла…», выбираем сохраненный файл, и 1С при помощи процедуры «СведенияОВнешнейОбработке» подгружает всю информацию. Нам лишь остается сохранить данные и зайти в документы, чтобы проверить результат работы. Так как в коде описаны действия на стороне клиента, чтобы данные попали в базу, необходимо провести документ после изменения количества.

Рис.8 Проведение документа
Рис.8 Проведение документа

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

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

Войти или зарегистрироваться

8.х автоматическое заполнение реквизита табличной части

Тема в разделе «Конфигурирование на платформе «1С:Предприятие 8″», создана пользователем Virt, 29 апр 2008.




0/5,
Голосов: 0
  1. TopicStarter Overlay

    Virt

    Offline

    Virt

    Регистрация:
    29 апр 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    Заранее извиняюсь за несколько простой вопрос, но простите новичка:)

    Код:
    Процедура НомерПриИзменении(Элемент)
    Спр = Справочники.Маршрут;
    Если Изменение = Перечисления.Рейс.ПоУмолчанию тогда 		
    КолРейс = Спр.Рейс;
    КонецЕсли;	
    КонецПроцедуры
    

    Хотелось бы получить в итоге, что бы в реквизит табличной части КолРейс автоматически вставлялось значение реквизита справочника Рейс, соответствующее выбранному значению Номер. Номер — это код справочника Маршрут.


    Virt,
    29 апр 2008
    #1

  2. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Получи строку табличной части и присваивай нужное значение.


    BabySG,
    29 апр 2008
    #2
  3. TopicStarter Overlay

    Virt

    Offline

    Virt

    Регистрация:
    29 апр 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    спасибо за совет конечно, но можешь подсказать как присваивать?
    просто он ругается на строчку
    Поле объекта не обнаружено (Рейс)
    КолРейс = Спр.Рейс;


    Virt,
    29 апр 2008
    #3

  4. GRUV

    Offline

    GRUV
    Опытный в 1С

    Регистрация:
    7 ноя 2007
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26

    Код:
    СтрокаТабличнойЧасти.КолРейс = Спр.ПолучитьПоКоду(Номер).Рейс
    
    

    GRUV,
    30 апр 2008
    #4
  5. TopicStarter Overlay

    Virt

    Offline

    Virt

    Регистрация:
    29 апр 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    Номер в документе — это реквизит таьличной части, так что такой подход не будет работать.
    Мне бы очень помогло если бы кто нибудь подсказал как на прямую можно обрататиься реквизиту табличной части, точнее к самой ячейке.


    Virt,
    30 апр 2008
    #5

  6. GRUV

    Offline

    GRUV
    Опытный в 1С

    Регистрация:
    7 ноя 2007
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26

    Если номер тоже в табличной части то можно так написать:

    Код:
    Процедура НомерПриИзменении(Элемент)
    
    Спр = Справочники.Маршрут;
    Если Изменение = Перечисления.Рейс.ПоУмолчанию тогда 		
    ЭлементыФормы.ИмяТабличногоПоля.ТекущаяСтрока.КолРейс = Спр.ПолучитьПоКоду(ЭлементыФормы.ИмяТабличногоПоля.ТекущаяСтрока.Номер).Рейс
    КонецЕсли;
    
    КонецПроцедуры();
    

    или я чего то не понял … тогда сформулируйте вопрос конкретнее


    GRUV,
    30 апр 2008
    #6
  7. TopicStarter Overlay

    Virt

    Offline

    Virt

    Регистрация:
    29 апр 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    Спасибо, все сделал, работает.
    Буду дальше курсовую писать.


    Virt,
    30 апр 2008
    #7
(Вы должны войти или зарегистрироваться, чтобы ответить.)
Показать игнорируемое содержимое
Похожие темы

  1. Anton_Davids

    7.7
    Автоматическое заполнение табличной части документа

    Anton_Davids,
    5 дек 2010
    , в разделе: Конфигурирование на платформе «1С:Предприятие 7.7»
    Ответов:
    14
    Просмотров:
    5.680
    Anton_Davids
    6 дек 2010

  2. Tech

    8.х
    Автоматическое присваивание реквизита справочника табличной части документа

    Tech,
    14 май 2011
    , в разделе: Конфигурирование на платформе «1С:Предприятие 8»
    Ответов:
    3
    Просмотров:
    1.817
    1cUserAndrew
    15 май 2011

  3. John95103

    8.х
    Автоматическое заполнение реквизита табличной части из реквизита справочника

    John95103,
    29 апр 2013
    , в разделе: Общие вопросы «1С:Предприятие 8»
    Ответов:
    3
    Просмотров:
    2.886
    1cUserAndrew
    30 апр 2013

  4. sergqwert

    8.х
    Автоматическое заполнение табличной части документа

    sergqwert,
    7 май 2017
    , в разделе: Конфигурирование на платформе «1С:Предприятие 8»
    Ответов:
    1
    Просмотров:
    1.310
    Программмист
    18 май 2017

Загрузка…
Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Поиск

  • Искать только в заголовках
Сообщения пользователя:

Имена участников (разделяйте запятой).

Новее чем:
  • Искать только в этой теме
  • Искать только в этом разделе
    • Отображать результаты в виде тем

Быстрый поиск

  • Последние сообщения

Больше…

Понравилась статья? Поделить с друзьями:
  • Автомобиль выехал со стоянки проехал 20 минут на запад
  • Автомобиль класса премиум от компании тойота кроссворд
  • Автоперевозки по россии транспортные компании в москве
  • Авторизованный сервисный центр компании apple в москве
  • Агроресурсы фармацевтическая компания официальный сайт