Добрый день. Программирую базу данных в 1С для магазина дверей. Уже неделю ищу ответ на свой вопрос. Существует документ "Приход", в который подставляются наименования из разных справочников. Хочу в этом документе при изменении наименования сделать нечто вроде:
Если (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.ВхДверь.Наименование) ИЛИ (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.МкДверь.Наименование) ИЛИ (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.Погонаж.Наименование) Тогда Документы.Приход.ТабличнаяЧасть.ЕдИзм = "Шт";
ИначеЕсли (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.Ламинат.Наименование) ИЛИ (Документы.Приход.ТабличнаяЧасть.Номенклатура = Справочники.Линолеум.Наименование) Тогда Документы.Приход.ТабличнаяЧасть.ЕдИзм = "Метр квадратный";
Общий алгоритм понятен, а синтаксис языка наложить не могу. Т.е. если данные взяты из таблиц "ВхДверь", "МкДверь" или "Погонаж", то единицы измерения должны быть "Шт" (тоже есть справочник, из которого подставляются значения). Если же номенклатура взята из "Линолеума" или "Ламината", то значение единиц измерения по умолчанию должно стать "Метр квадратный". (Возможно, линолеум будет в дальнейшем в погонных метрах, пока прорабатываю эту систему).
(2)Если нечего умного сказать, лучше промолчать. Может, и выразилась не в той терминологии, какая разница? Кто-то же придумал термин "Программист 1С". Я вообще студентка, которая работает кладовщиком/менеджером
(1)А в справочниках разве своей единицы измерения нет?
Вы можете сделать документ 1 и на его основании делать документ 2, в котором все будет подхватываться из данных заполнения
Чтобы неделю не искать ответ, почитайте книги.
Для начала - Радченко
1С:Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы.
1С:Программирование для начинающих
Детям и родителям, менеджерам и руководителям
Разработка в системе "1С:Предприятие 8.3"
(6)Очень продуктивно, конечно, как же я сама не додумалась. Мне уже накидывали литературы, в основном, по Метаданным. Вы всерьез полагаете, что люди пишут на форумы в надежде получить список литературы на лето?
(8)Вы собрались учить язык по ответам на форуме?
Если вы не можете написать условие сравнения, очевидно, что знаний вам не хватает. Я привел книги для начинающих.
Не хотите, не читайте, мне вообще без разницы.
(8) Вот вы ерничаете (или не знаю, что делаете) а вас между прочим, не зря туда посылают, особенно с учетом того, что Вы ответили мне: там есть очень отлично расписанная тема, План видов характеристик называется и там как раз рассматривается учет характеристик номенклатуры на примере кабелей (сечение, цвет обметки, производитель) и шлангов, кажется. Никаких пустых полей, ПОЛНЫЙ учет по ссылкам! Посмотрите, вам точно будет полезно - книга не кусается) Правда, я рассматривал версию для EDT, но подозреваю, что в классическом то же самое.
Если у вас на различные группы номенклатуры свои справочники (непривычно, но это ваше дело), то можно было бы сделать и реквизит табличной части Номенклатура Составным типом, тогда сравнивать нужно было бы так:
, а при вводе номенклатуры первым этапом шел бы выбор (чего это - Ламинат, Погонаж или Входная дверь), а вторым можно было бы и выбор самого элемента, то есть товарной позиции, из соответствующего списка.
И это не лирика, с опечатками замучаетесь бороться, чтобы хоть как-то остатки подбивать, цены подхватывать и прочее - в общем подставляйте ссылки, а не наименования, иначе без мороки с запросами в сочетании с учетом очепяток не обойтись
(4)Дело в том, что у всех этих типов номенклатуры множество различных параметров, например, у погонажа достаточно указать размер и цвет, у входных дверей - цвет, ширину, высоту, открывание, а у межкомнатных и того больше параметров. Не хотелось, чтобы больше половины полей висели пустыми. Ссылки везде подставляю, все выбирается из списков, в "Приходе" на номенклатуру составной тип, а цены подставляются автоматически из регистра сведений.
Попробовала ввести предложенное Вами решение, как будто бы все звучит хорошо, но внезапно Тонкий клиент не знает, что такое "Документы". Перевела с него на Сервер, говорит "Текущие данные таблицы недоступны на сервере". Поискала, может, где какую галочку надо поставить, но увы. Со скорбью признаю, что в некоторых моментах в 1С я абсолютный пень
(7) Ну в 1С все - это коллекции отображения базы данных в ОРМ. А коллекция - это список разнообразных объектоы в какой-то структуре данных.
Таблица - это тоже колекция строк таблицы, в свою. очередь строка - это коллекция колонок.
Доступ к элементам коллекуции осуществляется или по индексу, или, если у элеиетка коллекции есть имя, то и по имени тоже (но никто не мешает обратиться и по индексу).
Итак, вот у нас есть документ. Он не один, он - это просто записи в таблице базы данных. То же самое и со справочниками.
В общем и целом все эти объекты доступны через ссылку, исключением являются регистры - они доступны через наборы записей или через менеджер записи.
И есть два отображения справочников и документов (ни и еще всех тех объектов 1С, которые имеют ссылку) на язык:
1. Это простое отображение чтения. Это когда у нас есть ссылка на элемент справочника или документ, и мы можем обратиться через точку. Т.е. "МояСцылка.Номер".
2. Это экземпляр объекта, в который отображается запись в базе данных, при "МойОбъект = МояСсылка.ПолучитьОбъект()". Такой объект можно менять и записывать в базу данных.
Ну и если в объекте есть табличная часть, то она тоже является коллекцией, к которой можно обратиться оп индексу. Это коллекция строк объекта.
Поэтому "Документы.Приход.ТабличнаяЧасть.Номенклатура" нужно заменить на:
1. Получить ссылку на нужны документ. Как? "МояСсылка = Документы.НайтиПоНомеру(НомерДоумента)", например.
2. Дальше тут у нас табличная часть с именем "Номенклатура", т.е. это коллекция строк. "МояСтрока = МояСсылка.Номенклатура[Индекс]".
3. Ну и дальше "Если МояСтрока.Номенклатура = НужныйЭлементСправочникаНоменклатура Тогда".
4. Ну а как получить "НужныйЭлементСправочникаНоменклатура" - так это должно буть уже понятно. Т.е. "Справочники.Номенклатура.НайтиПоНаименованию("Нужное наименование")".
Но т.к. задача в том, чтобы для линолеума и ламината подставить единицу измерения (которая тоже является элементом справочника), то, предположу, дело происходит в форме. А в форме уже есть объект - отображение записи документа. Более того, подставлять нужную единицу измерения нужно в момент изменения вводимой номенклатцры (в элементе справочника которой, кстати, уже есть орбычно единица измерения).
Т.е. весь код, который должен быть написан, сводится к следующему:
Но с этим кодом есть проблема! Она в том, что в управляемых формах есть клиентский контекст и серверный контекст. В клиентском контексте нельзя получить кдиницу из номенклатуры, поэтому придется сгонять за ней на сервер. В БСП есть модуль ОбщегоНазначения, в котором уже есть такая процедура, но можно ли его дернуть с клиента - не помню. Ну и никто не мешает написать свою функцию с серверным контекстом, которая вернет нужный реквидит. Например, так:
// дело было на сервере...
Функция РеквизитОбъекта(Ссылка, Реквизит)
Возврат Ссылка[Реквизит] // обращаемся к коллекции по имени
КонецФункции
Ну и в итоге "ТекущаяСтрока.ЕдИзм = РеквизитОбъекта(Номенклатура, "ЕдИзм")"
у всех этих типов номенклатуры множество различных параметров
Кто запрещает ввести еще один параметр, одинаковый для всех типов - ЕдиницаИзмерения?
Это если решать поставленную вами задачу "в лоб", не оспаривая идею введения нескольких видов справочников.
Если предложенное почему-то не устраивает, то вот вам подсказка: тип справочника надо определять через обращение к метаданным, а не через сравнение со всеми возможными типами.
А то завтра вам скажут, что в ассортимент магазина будет входить Фурнитура и надо завести еще один справочник - и будете переписывать весь свой г...внокод (именно так у 1Сников называется ваше творение\).
А послезавтра - еще и Крепеж... и так далее.
в некоторых моментах в 1С я абсолютный пень
Неее, пень - это уже кое-что: его можно хотя бы в печку засунуть.
Ноль - гораздо ближе к истине.
P.S. Привыкайте к профессиональному стилю общения, иначе тяжко будет. ;-)
Никогда ранее не обращалась на форумы. Пришла к выводу, что это, по большей части, какая-то помойка, из которой приходится выуживать ответы нормальных, адекватных людей, действительно стремящихся помочь, из высказываний неких "экспертов", которые, вероятно, заходят сюда исключительно затем, чтобы подпортить другим людям настроение. Очень актуальна в данном случае поговорка "молчи, за умного сойдешь". Всем, кто постарался помочь - большое вам спасибо. Дегенератам-"экспертам" могу лишь порекомендовать написать свое мнение на бумаге помягче
(20)В общей сложности могу описать, где-то скринами докинуть... На работе расписывала схему данных, но не забрала ее. Да и она не доработана. Есть 2 магазина одного ИП. Склад 1, все выгружается в нем. На данный момент в программе куча справочников (большинство состоят только из номера (типа Counter) и наименования, например, "Цвет", "ТипПолотна" и т.п.). Есть справочники ВхДверь, МкДверь, Погонаж, Фурнитура (Ламинат и Линолеум пока не берусь делать, с этим бы закончить сперва). Плюс потом добавлю справочник "Другое", куда менеджеры будут писать, что хотят (например, какую-то часть полотна: царгу, филенку или какой-нибудь уплотнитель для короба). Есть регистры накоплений Склад и Закупки (когда буду делать Расходную накладную, возможно, что-то еще добавится). Есть регистр сведений Цены (закупочная, наценка в % и розничная цена). С ним при изменении наименования автоматически подставляются цены (закупочные - в Приход, розничные будут в Расходе и Списании (кража, порча, утеря и т.п.)). При изменении цены и количества подставляется сумма, при изменении суммы меняется цена (мало ли, вдруг начальство скажет подбить для какого-нибудь знакомого под определенную сумму в Расходе, так что, пусть будет). Есть еще пара модулей, для подстановки цены и для расчета суммы как раз. Со справочниками несколько заморочено вышло. Например, МкДверь. Если пользователь выбирает из списка, что полотно глухое, исчезает поле "Цвет стекла". Если выбирает остекленное, поле "Цвет стекла", соответственно, возвращается. Так же указывается название (например, "Симфония"), ширина, высота, цвет полотна, поставщик (названия дверей могут совпадать у разных поставщиков). Все это записывается в невидимое в самом справочнике поле "Наименование". А когда пользователь из того же "Прихода" выбирает справочник МкДверь, там уже идет красиво оформленная строка (ДПГ - дверное полотно глухое): "ДПГ "Симфония" 700*2000 мм Эмаль белая ЛайнДор". Он выбрал, ему подставилась сразу же цена, он вписал количество, все. Плюс в приходе можно указать поставщика (обязательное поле), фактическую дату прихода, номер накладной поставщика, дату накладной поставщика (полезно, если надо сформировать какую-нибудь претензию по браку). Напротив каждой позиции указывается магазин и номер расходной накладной. Плюс есть поле "Примечание" (к примеру, сделать пометку, что какой-нибудь короб поцарапан посередине, нужно предупредить сборщика или же сделать запись типа "отказались от 2 шт по браку, ждем замену" и т.п.).
(25)
За обмен я точно ответить не могу, я там не сильна, а в целом внутри все равно это надо покопаться, чтобы понимать что откуда берется.
Реквизит, если вы там что-то выбираете, другой реквизит пропадает - это настроена видимость элементов в модуле формы
. А так без базы ТЗ понять сложно. Пок5а что я не совсем понимаю, можно обойтись модулем формы, или все таки нужно использовать конструктор через модуль объекта.))). Но пока что больше к форме склоняюсь, что нужно просто сбегать на сервер и получить данные и отобразить их на форме, сохранить объект в конце концов
(34)Полагаю, просто нужно при изменении наименования проверить, из какого справочника берется информация, по основам алгоритмизации нас гоняли страшно, так что это я понимаю. Дело за синтаксисом. Завтра попробую предложенные уважаемыми соискателями методы
(35)По мне так не совсем понятно, зачем такой реквизит, как единица Измерения - гонять через Если?
По факту там и так, когда вы выбираете нужное наименование в табличной части, то в каждой процедуре ПриИзменении() пишем:
ТабличнаяЧастьЕдИзмПриИзменении()
И в каждую процедуру добавляем код про текущие данные и следом пишем про конкретный элемент, что нам нужен.
ТоЕсть у вас должен быть реквизит в табличной части например: ЕдИзм
СтрокатабличнойЧасти = Элементы.ТабличнаяЧасть.ТекущиеДанные;
СтрокатабличнойЧасти.ЕдИзм = Элементы.ТабличнаяЧасть.ЕдИзм; // Эту строку нужно заменить той строкой, что даю ниже, просто показала два разных варианта
Но это если бы вы сами вводили данные, а чтобы оно подставлялось. Оно должно подставляться из объекта, значит:
Значит нужно сбегать на сервер, но сначала
СтрокатабличнойЧасти.ЕдИзм = ПолучитьЕдиницуИзмерения(СтрокаТабличнойЧасти.Номенклатура)//Это мы вписываем сюда функцию для получения данных на сервере
А это мы бегаем на сервер, без этого никак.
НаСервере
Функция ПолучитьЕдиницуИзмерения(Номенклатура)
Возврат Номенклатура.ЕдИзм;
КонецФунции
В общем я плохо умею объяснять, надеюсь меня завтра тут более опытные юзеры не убьют, но я реально спать уже хочу, глаза в кучу)))
которые, вероятно, заходят сюда исключительно затем
Нет. Просто есть такие люди, которые живут в теплом климате. Их иногда называют кубанойдами. Про них много легенд сложено. Многие из этих легенд правдивы. Вы с одним таким экземпляром познакомились. Но не все, кто живет на юге у моря, такие вот "эксперды". Но да, скука там сейчас та еще, вот и веселится дите великовозрастное...
(27)Когда я задавала вопрос, у меня и в мыслях не было, что здесь столько агрессивно настроенных людей. Да, предполагала, что вылезет 1-2 токсичных, а, по факту, человека 2-3 действительно стараются помочь, а остальные только несут какой-то агрессивный вздор. И это не я заостряла внимание на месте своего проживания, мол, смотрите, она из этих. А стоило сказать, что не "из этих", опять все не так
(32)Одобряю. После работы хожу в спортзал, там, по большей части, тоже люди непьющие, потому неагрессивные) Хотя некоторые дамы разных возрастов готовы до последней капли крови отстаивать тренажеры, на которых занимаются
(22)Увы, подобных знакомств мне более чем достаточно. Идет эдакий гоповатый "эксперд" по улице в компании своих коллег-"ученых", орет, матерится, считая себя неимоверно крутым. А то еще и в машине едут, врубив на полную какое-нибудь музло (иначе и не скажешь). Еще и посигналят, промчавшись прямо перед тобой, а ты в этот момент идешь по переходу на зеленый... На тротуарах же от таких на другую сторону перейдешь, лишь бы не прицепились
Я бы порекомендовал для начала курсы, например на профессионала/специалиста.
Ну и книжек почитать, того же Радченко - "1С:Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы."