Обращение к таблицам в конфигураторе 1С

1. Sasuke_Utiha 23.02.24 10:57 Сейчас в теме
Добрый день. Программирую базу данных в 1С для магазина дверей. Уже неделю ищу ответ на свой вопрос. Существует документ "Приход", в который подставляются наименования из разных справочников. Хочу в этом документе при изменении наименования сделать нечто вроде:
Если (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.ВхДверь.Наименование) ИЛИ (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.МкДверь.Наименование) ИЛИ (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.Погонаж.Наименование) Тогда Документы.Приход.ТабличнаяЧасть.ЕдИзм = "Шт";
ИначеЕсли (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.Ламинат.Наименование) ИЛИ (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.Линолеум.Наименование) Тогда Документы.Приход.ТабличнаяЧасть.ЕдИзм = "Метр квадратный";

Общий алгоритм понятен, а синтаксис языка наложить не могу. Т.е. если данные взяты из таблиц "ВхДверь", "МкДверь" или "Погонаж", то единицы измерения должны быть "Шт" (тоже есть справочник, из которого подставляются значения). Если же номенклатура взята из "Линолеума" или "Ламината", то значение единиц измерения по умолчанию должно стать "Метр квадратный". (Возможно, линолеум будет в дальнейшем в погонных метрах, пока прорабатываю эту систему).
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 23.02.24 11:22 Сейчас в теме
(1) А где обучают такому "программированию"?
user1931597; user1928795; user1863362; user1880116; +4 Ответить
3. Sasuke_Utiha 23.02.24 12:58 Сейчас в теме
(2)Если нечего умного сказать, лучше промолчать. Может, и выразилась не в той терминологии, какая разница? Кто-то же придумал термин "Программист 1С". Я вообще студентка, которая работает кладовщиком/менеджером
NicolasCage; starik-2005; +2 Ответить
5. Bukaska 147 23.02.24 13:17 Сейчас в теме
(1)А в справочниках разве своей единицы измерения нет?
Вы можете сделать документ 1 и на его основании делать документ 2, в котором все будет подхватываться из данных заполнения
6. Sashares 33 23.02.24 13:31 Сейчас в теме
(1)
Уже неделю ищу ответ на свой вопрос.

Чтобы неделю не искать ответ, почитайте книги.
Для начала - Радченко
1С:Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы.
1С:Программирование для начинающих
Детям и родителям, менеджерам и руководителям
Разработка в системе "1С:Предприятие 8.3"

https://its.1c.ru/db/pubdevguide83
https://its.1c.ru/db/pubprogforbeginners
nekiilik1c; user1931597; user1928795; user1863362; user1880116; +5 Ответить
8. Sasuke_Utiha 23.02.24 13:37 Сейчас в теме
(6)Очень продуктивно, конечно, как же я сама не додумалась. Мне уже накидывали литературы, в основном, по Метаданным. Вы всерьез полагаете, что люди пишут на форумы в надежде получить список литературы на лето?
9. Sashares 33 23.02.24 13:39 Сейчас в теме
(8)Вы собрались учить язык по ответам на форуме?
Если вы не можете написать условие сравнения, очевидно, что знаний вам не хватает. Я привел книги для начинающих.
Не хотите, не читайте, мне вообще без разницы.
nekiilik1c; user1931597; Fox-trot; user1928795; user1863362; user1880116; +6 Ответить
11. n_mezentsev 58 23.02.24 14:36 Сейчас в теме
(8) Вот вы ерничаете (или не знаю, что делаете) а вас между прочим, не зря туда посылают, особенно с учетом того, что Вы ответили мне: там есть очень отлично расписанная тема, План видов характеристик называется и там как раз рассматривается учет характеристик номенклатуры на примере кабелей (сечение, цвет обметки, производитель) и шлангов, кажется. Никаких пустых полей, ПОЛНЫЙ учет по ссылкам! Посмотрите, вам точно будет полезно - книга не кусается) Правда, я рассматривал версию для EDT, но подозреваю, что в классическом то же самое.
nekiilik1c; user1931597; user1928795; user1863362; user1880116; Xershi; +6 Ответить
13. Bukaska 147 23.02.24 19:47 Сейчас в теме
(8)Например вы пишите в модуле формы:
&НаСервере 
Функция ПолучимЦенуНоменклатурыНаСервере(Номенклатура)

	Возврат Номенклатура.Цена;

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

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


Вам все равно за Номенклатурой на Сервер надо бегать. Остальные реквизиты - привязываете процедуру ПриИзменении() и вуаля
15. пользователь 23.02.24 21:38
Сообщение было скрыто модератором.
...
17. пользователь 23.02.24 22:27
Сообщение было скрыто модератором.
...
21. пользователь 23.02.24 22:59
Сообщение было скрыто модератором.
...
4. n_mezentsev 58 23.02.24 13:00 Сейчас в теме
Если у вас на различные группы номенклатуры свои справочники (непривычно, но это ваше дело), то можно было бы сделать и реквизит табличной части Номенклатура Составным типом, тогда сравнивать нужно было бы так:
ТипЗнч(Документы.Приход.ТабличнаяЧасть.Номенклатура) = Тип("Справочники.МкДверь")
, а при вводе номенклатуры первым этапом шел бы выбор (чего это - Ламинат, Погонаж или Входная дверь), а вторым можно было бы и выбор самого элемента, то есть товарной позиции, из соответствующего списка.
И это не лирика, с опечатками замучаетесь бороться, чтобы хоть как-то остатки подбивать, цены подхватывать и прочее - в общем подставляйте ссылки, а не наименования, иначе без мороки с запросами в сочетании с учетом очепяток не обойтись
Sasuke_Utiha; +1 Ответить
7. Sasuke_Utiha 23.02.24 13:35 Сейчас в теме
(4)Дело в том, что у всех этих типов номенклатуры множество различных параметров, например, у погонажа достаточно указать размер и цвет, у входных дверей - цвет, ширину, высоту, открывание, а у межкомнатных и того больше параметров. Не хотелось, чтобы больше половины полей висели пустыми. Ссылки везде подставляю, все выбирается из списков, в "Приходе" на номенклатуру составной тип, а цены подставляются автоматически из регистра сведений.
Попробовала ввести предложенное Вами решение, как будто бы все звучит хорошо, но внезапно Тонкий клиент не знает, что такое "Документы". Перевела с него на Сервер, говорит "Текущие данные таблицы недоступны на сервере". Поискала, может, где какую галочку надо поставить, но увы. Со скорбью признаю, что в некоторых моментах в 1С я абсолютный пень
10. starik-2005 3167 23.02.24 14:07 Сейчас в теме
(7) Ну в 1С все - это коллекции отображения базы данных в ОРМ. А коллекция - это список разнообразных объектоы в какой-то структуре данных.

Таблица - это тоже колекция строк таблицы, в свою. очередь строка - это коллекция колонок.

Доступ к элементам коллекуции осуществляется или по индексу, или, если у элеиетка коллекции есть имя, то и по имени тоже (но никто не мешает обратиться и по индексу).

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

И есть два отображения справочников и документов (ни и еще всех тех объектов 1С, которые имеют ссылку) на язык:
1. Это простое отображение чтения. Это когда у нас есть ссылка на элемент справочника или документ, и мы можем обратиться через точку. Т.е. "МояСцылка.Номер".
2. Это экземпляр объекта, в который отображается запись в базе данных, при "МойОбъект = МояСсылка.ПолучитьОбъект()". Такой объект можно менять и записывать в базу данных.

Ну и если в объекте есть табличная часть, то она тоже является коллекцией, к которой можно обратиться оп индексу. Это коллекция строк объекта.

Поэтому "Документы.Приход.ТабличнаяЧасть.Номенклатура" нужно заменить на:
1. Получить ссылку на нужны документ. Как? "МояСсылка = Документы.НайтиПоНомеру(НомерДоумента)", например.
2. Дальше тут у нас табличная часть с именем "Номенклатура", т.е. это коллекция строк. "МояСтрока = МояСсылка.Номенклатура[Индекс]".
3. Ну и дальше "Если МояСтрока.Номенклатура = НужныйЭлементСправочникаНоменклатура Тогда".
4. Ну а как получить "НужныйЭлементСправочникаНоменклатура" - так это должно буть уже понятно. Т.е. "Справочники.Номенклатура.НайтиПоНаименованию("Нужное наименование")".

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

Т.е. весь код, который должен быть написан, сводится к следующему:
Процедура ПриИзмененииНоменклатура(Элемент)
  ТекущаяСтрока = Элементы.Номенклатцра.ТекущиеДанные;
  ТекущаяСтрока.ЕдИзм = ТекущаяСтрока.Номенклатура.ЕдИзм;
КонецПроцедуры

Но с этим кодом есть проблема! Она в том, что в управляемых формах есть клиентский контекст и серверный контекст. В клиентском контексте нельзя получить кдиницу из номенклатуры, поэтому придется сгонять за ней на сервер. В БСП есть модуль ОбщегоНазначения, в котором уже есть такая процедура, но можно ли его дернуть с клиента - не помню. Ну и никто не мешает написать свою функцию с серверным контекстом, которая вернет нужный реквидит. Например, так:
// дело было на сервере...
Функция РеквизитОбъекта(Ссылка, Реквизит)
  Возврат Ссылка[Реквизит] // обращаемся к коллекции по имени
КонецФункции

Ну и в итоге "ТекущаяСтрока.ЕдИзм = РеквизитОбъекта(Номенклатура, "ЕдИзм")"

Ура, мы победили! С 23-м всех.
Sasuke_Utiha; +1 Ответить
14. пользователь 23.02.24 21:31
Сообщение было скрыто модератором.
...
12. user856012 14 23.02.24 16:01 Сейчас в теме
(7)
у всех этих типов номенклатуры множество различных параметров
Кто запрещает ввести еще один параметр, одинаковый для всех типов - ЕдиницаИзмерения?

Это если решать поставленную вами задачу "в лоб", не оспаривая идею введения нескольких видов справочников.

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

А то завтра вам скажут, что в ассортимент магазина будет входить Фурнитура и надо завести еще один справочник - и будете переписывать весь свой г...внокод (именно так у 1Сников называется ваше творение\).

А послезавтра - еще и Крепеж... и так далее.
в некоторых моментах в 1С я абсолютный пень
Неее, пень - это уже кое-что: его можно хотя бы в печку засунуть.

Ноль - гораздо ближе к истине.

P.S. Привыкайте к профессиональному стилю общения, иначе тяжко будет. ;-)
user1931597; user1928795; user1863362; GeraltSnow; user1880116; Xershi; +6 Ответить
16. Sasuke_Utiha 23.02.24 22:25 Сейчас в теме
Никогда ранее не обращалась на форумы. Пришла к выводу, что это, по большей части, какая-то помойка, из которой приходится выуживать ответы нормальных, адекватных людей, действительно стремящихся помочь, из высказываний неких "экспертов", которые, вероятно, заходят сюда исключительно затем, чтобы подпортить другим людям настроение. Очень актуальна в данном случае поговорка "молчи, за умного сойдешь". Всем, кто постарался помочь - большое вам спасибо. Дегенератам-"экспертам" могу лишь порекомендовать написать свое мнение на бумаге помягче
18. пользователь 23.02.24 22:44
Сообщение было скрыто модератором.
...
19. пользователь 23.02.24 22:52
Сообщение было скрыто модератором.
...
20. Bukaska 147 23.02.24 22:55 Сейчас в теме
(16)Спокойнее. Я бы посмотрела базу, хотя я не считаю себя спецом, а так.. по мелочи.
25. Sasuke_Utiha 23.02.24 23:22 Сейчас в теме
(20)В общей сложности могу описать, где-то скринами докинуть... На работе расписывала схему данных, но не забрала ее. Да и она не доработана. Есть 2 магазина одного ИП. Склад 1, все выгружается в нем. На данный момент в программе куча справочников (большинство состоят только из номера (типа Counter) и наименования, например, "Цвет", "ТипПолотна" и т.п.). Есть справочники ВхДверь, МкДверь, Погонаж, Фурнитура (Ламинат и Линолеум пока не берусь делать, с этим бы закончить сперва). Плюс потом добавлю справочник "Другое", куда менеджеры будут писать, что хотят (например, какую-то часть полотна: царгу, филенку или какой-нибудь уплотнитель для короба). Есть регистры накоплений Склад и Закупки (когда буду делать Расходную накладную, возможно, что-то еще добавится). Есть регистр сведений Цены (закупочная, наценка в % и розничная цена). С ним при изменении наименования автоматически подставляются цены (закупочные - в Приход, розничные будут в Расходе и Списании (кража, порча, утеря и т.п.)). При изменении цены и количества подставляется сумма, при изменении суммы меняется цена (мало ли, вдруг начальство скажет подбить для какого-нибудь знакомого под определенную сумму в Расходе, так что, пусть будет). Есть еще пара модулей, для подстановки цены и для расчета суммы как раз. Со справочниками несколько заморочено вышло. Например, МкДверь. Если пользователь выбирает из списка, что полотно глухое, исчезает поле "Цвет стекла". Если выбирает остекленное, поле "Цвет стекла", соответственно, возвращается. Так же указывается название (например, "Симфония"), ширина, высота, цвет полотна, поставщик (названия дверей могут совпадать у разных поставщиков). Все это записывается в невидимое в самом справочнике поле "Наименование". А когда пользователь из того же "Прихода" выбирает справочник МкДверь, там уже идет красиво оформленная строка (ДПГ - дверное полотно глухое): "ДПГ "Симфония" 700*2000 мм Эмаль белая ЛайнДор". Он выбрал, ему подставилась сразу же цена, он вписал количество, все. Плюс в приходе можно указать поставщика (обязательное поле), фактическую дату прихода, номер накладной поставщика, дату накладной поставщика (полезно, если надо сформировать какую-нибудь претензию по браку). Напротив каждой позиции указывается магазин и номер расходной накладной. Плюс есть поле "Примечание" (к примеру, сделать пометку, что какой-нибудь короб поцарапан посередине, нужно предупредить сборщика или же сделать запись типа "отказались от 2 шт по браку, ждем замену" и т.п.).
34. Bukaska 147 24.02.24 00:06 Сейчас в теме
(25)
За обмен я точно ответить не могу, я там не сильна, а в целом внутри все равно это надо покопаться, чтобы понимать что откуда берется.
Реквизит, если вы там что-то выбираете, другой реквизит пропадает - это настроена видимость элементов в модуле формы
. А так без базы ТЗ понять сложно. Пок5а что я не совсем понимаю, можно обойтись модулем формы, или все таки нужно использовать конструктор через модуль объекта.))). Но пока что больше к форме склоняюсь, что нужно просто сбегать на сервер и получить данные и отобразить их на форме, сохранить объект в конце концов
35. Sasuke_Utiha 24.02.24 00:09 Сейчас в теме
(34)Полагаю, просто нужно при изменении наименования проверить, из какого справочника берется информация, по основам алгоритмизации нас гоняли страшно, так что это я понимаю. Дело за синтаксисом. Завтра попробую предложенные уважаемыми соискателями методы
36. Bukaska 147 24.02.24 00:32 Сейчас в теме
(35)По мне так не совсем понятно, зачем такой реквизит, как единица Измерения - гонять через Если?
По факту там и так, когда вы выбираете нужное наименование в табличной части, то в каждой процедуре ПриИзменении() пишем:
СтрокаТабличнойЧасти = Элементы.ТабличнаяЧасть.ТекущиеДанные();

И начинаем привязывать к каждому реквизиту процедуру при Изменении()
ТабличнаяЧастьКоличествоПриИзменении()
Там пишем:
СтрокатабличнойЧасти = Элементы.Товары.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокатабличнойЧасти.Количество * СтрокатабличнойЧасти.Цена;


ТабличнаяЧастьЕдИзмПриИзменении()
И в каждую процедуру добавляем код про текущие данные и следом пишем про конкретный элемент, что нам нужен.
ТоЕсть у вас должен быть реквизит в табличной части например: ЕдИзм
СтрокатабличнойЧасти = Элементы.ТабличнаяЧасть.ТекущиеДанные;
СтрокатабличнойЧасти.ЕдИзм = Элементы.ТабличнаяЧасть.ЕдИзм; // Эту строку нужно заменить той строкой, что даю ниже, просто показала два разных варианта

Но это если бы вы сами вводили данные, а чтобы оно подставлялось. Оно должно подставляться из объекта, значит:
Значит нужно сбегать на сервер, но сначала
СтрокатабличнойЧасти.ЕдИзм = ПолучитьЕдиницуИзмерения(СтрокаТабличнойЧасти.Номенклатура)//Это мы вписываем сюда функцию для получения данных на сервере

А это мы бегаем на сервер, без этого никак.
НаСервере
Функция ПолучитьЕдиницуИзмерения(Номенклатура)
Возврат Номенклатура.ЕдИзм;
КонецФунции


В общем я плохо умею объяснять, надеюсь меня завтра тут более опытные юзеры не убьют, но я реально спать уже хочу, глаза в кучу)))
39. user1863362 24.02.24 08:45 Сейчас в теме
(25) И всё это предстоит теперь делать форумчанам.
22. starik-2005 3167 23.02.24 23:12 Сейчас в теме
(16)
Никогда ранее не обращалась на форумы.
Зря.

Пришла к выводу
Вывод неверный.

(16)
которые, вероятно, заходят сюда исключительно затем
Нет. Просто есть такие люди, которые живут в теплом климате. Их иногда называют кубанойдами. Про них много легенд сложено. Многие из этих легенд правдивы. Вы с одним таким экземпляром познакомились. Но не все, кто живет на юге у моря, такие вот "эксперды". Но да, скука там сейчас та еще, вот и веселится дите великовозрастное...
23. Bukaska 147 23.02.24 23:16 Сейчас в теме
(22)Подтверждаю. Меня в свое время и посильнее били. Ничего, живая))))
24. пользователь 23.02.24 23:19
Сообщение было скрыто модератором.
...
26. Sasuke_Utiha 23.02.24 23:28 Сейчас в теме
(24)Благо, я родом не из Краснодарского края, а с Урала. И меня по-прежнему корежит от местного диалекта, но это их дело, как им говорить и как жить
27. user1928795 23.02.24 23:34 Сейчас в теме
(26)
И меня по-прежнему корежит
На форуме вам не нравится, от местного диалекта корежит... Возможно, всё-таки, не в окружающих дело.
31. Sasuke_Utiha 23.02.24 23:38 Сейчас в теме
(27)Когда я задавала вопрос, у меня и в мыслях не было, что здесь столько агрессивно настроенных людей. Да, предполагала, что вылезет 1-2 токсичных, а, по факту, человека 2-3 действительно стараются помочь, а остальные только несут какой-то агрессивный вздор. И это не я заостряла внимание на месте своего проживания, мол, смотрите, она из этих. А стоило сказать, что не "из этих", опять все не так
32. starik-2005 3167 23.02.24 23:39 Сейчас в теме
(31)
несут какой-то агрессивный вздор
Так они бухие. Я вот не пью, поэтому вздор несу не агрессивный )))
Sasuke_Utiha; +1 Ответить
33. Sasuke_Utiha 23.02.24 23:42 Сейчас в теме
(32)Одобряю. После работы хожу в спортзал, там, по большей части, тоже люди непьющие, потому неагрессивные) Хотя некоторые дамы разных возрастов готовы до последней капли крови отстаивать тренажеры, на которых занимаются
29. starik-2005 3167 23.02.24 23:36 Сейчас в теме
(24) Ну вот видите, мучается она от вас )))
Sasuke_Utiha; +1 Ответить
28. Sasuke_Utiha 23.02.24 23:34 Сейчас в теме
(22)Увы, подобных знакомств мне более чем достаточно. Идет эдакий гоповатый "эксперд" по улице в компании своих коллег-"ученых", орет, матерится, считая себя неимоверно крутым. А то еще и в машине едут, врубив на полную какое-нибудь музло (иначе и не скажешь). Еще и посигналят, промчавшись прямо перед тобой, а ты в этот момент идешь по переходу на зеленый... На тротуарах же от таких на другую сторону перейдешь, лишь бы не прицепились
30. starik-2005 3167 23.02.24 23:37 Сейчас в теме
(28)
Идет эдакий гоповатый "эксперд" по улице в компании своих коллег-"ученых", орет, матерится, считая себя неимоверно крутым.
Прям про меня )))
37. пользователь 24.02.24 00:40
Сообщение было скрыто модератором.
...
38. пользователь 24.02.24 08:33
Сообщение было скрыто модератором.
...
40. пользователь 24.02.24 08:49
Сообщение было скрыто модератором.
...
41. user1931597 25.02.24 09:38 Сейчас в теме
Я бы порекомендовал для начала курсы, например на профессионала/специалиста.
Ну и книжек почитать, того же Радченко - "1С:Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы."
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот