Задал мне бух. вопрос: а как бы при создании копии строки ТМЦ "Продукция" (для создания новой очень похожей Продукции), копировался и ее состав? Есть ли такая возможность, коллеги?
С уважением, Владимир. ---------------------------- платформа 7.70.027 БУ релиз 7.70.317( хорошенько доработанный в части отчетов. Доки:РН, ПН, Счет - можно вводить сразу СуммаСНДС и т.п.).
Є, див. процедуру ВводНового(<ПризнКопирования>,<ОбъектКопирования>), правда, прийдеться спочатку записати елемент ТМЦ, а потім створити підлеглий елемент до нього у дов. СоставПродукции.
Вариант1: Написать обработку, вызов её поместить в кнопку на форме списка справочника ТМЦ (напр."Копировать") По клику передать в обработку все данные по текущему элементу справочника ТМЦ (те которые надо повторить) и соответствующий состав. В обработке прописать создание нового элемента справочника ТМЦ, заполнение его реквизитов, запись И создание элементов подчиненного справочника - СоставПродукции. В форме обработки можно это все предоставить для редактирования.
Вариант2: функцию этой кнопки разместить непосредственно в модуле формы списка справочника ТМЦ
Цитата(mister-x @ 26.09.11, 12:43)
Є, див. процедуру ВводНового(<ПризнКопирования>,<ОбъектКопирования>), правда, прийдеться спочтаку записати елемент ТМЦ, а потім створити підлеглий елемент до нього у дов. СоставПродукции.
похоже свои пробелы в знаниях я восполняю изобретаниями велосипеда
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП) 1С Предприятие 8.3: Бух.предприятия 3.0 + самописка ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Кроме высшего образования, нужно иметь хотя бы среднее соображение
Є, див. процедуру ВводНового(<ПризнКопирования>,<ОбъектКопирования>), правда, прийдеться спочатку записати елемент ТМЦ, а потім створити підлеглий елемент до нього у дов. СоставПродукции.
Де така процедура ВводНового(<ПризнКопирования>,<ОбъектКопирования>), є тільки з 1 параметром?
С уважением, Владимир. ---------------------------- платформа 7.70.027 БУ релиз 7.70.317( хорошенько доработанный в части отчетов. Доки:РН, ПН, Счет - можно вводить сразу СуммаСНДС и т.п.).
Процедура ВводНового(<?>,) Синтаксис: ВводНового(<ПризнКопирования>,<ОбъектКопирования>) Назначение: Предопределенная процедура при интерактивном вводе нового элемента справочника. Параметры: <ПризнКопирования> - признак того, что объект введен копированием. Число: 1 - объект введен копированием, 0 - просто новый объект. Данный признак может быть использован для анализа необходимости инициализации реквизитов нового объекта. <ОбъектКопирования> - объект, который был скопирован. Замечание: Данная процедура может располагаться только в программных модулях форм справочника.
Процедура ВводНового(<?>,) Синтаксис: ВводНового(<ПризнКопирования>,<ОбъектКопирования>) Назначение: Предопределенная процедура при интерактивном вводе нового элемента справочника. Параметры: <ПризнКопирования> - признак того, что объект введен копированием. Число: 1 - объект введен копированием, 0 - просто новый объект. Данный признак может быть использован для анализа необходимости инициализации реквизитов нового объекта. <ОбъектКопирования> - объект, который был скопирован. Замечание: Данная процедура может располагаться только в программных модулях форм справочника.
Ой, простите, Вы правы! За лето проведенное на даче ( без 1С), немного поглупел. Глянул в модул и решил, что я не знаю такой процедуры. Короче спасибо! Надо писать блок копирования "Состава.." иначе существующими методами никак.... Не такая и простая эта задачка...
С уважением, Владимир. ---------------------------- платформа 7.70.027 БУ релиз 7.70.317( хорошенько доработанный в части отчетов. Доки:РН, ПН, Счет - можно вводить сразу СуммаСНДС и т.п.).
кому як, мені - пальці трошки розім*яти (думати там тяжко не потрібно)
А у мене не виходить. И записать нужно ТМЦ и переписать Подчиненные Состава. Записать() в далоге нельзя и тупик пока.....
Цитата(MATEVI @ 26.09.11, 14:45)
Могу еще посоветовать глянуть как создается партия в глПолучитьПартию
Хороший пример, но одно существенное НО: Текущий ТМЦ уже записан. В моей ситуации текущий элемент ТМЦ надо записать (а в диалоге не дает), а потом ему подчинить ряд элементов "Состава прод..". Подскажите, как это увязать, плз.
Я вот наваял быстренько блочек, а нет не получается:
Процедура ВводНового(ПризнакКопирования,кТМЦ) Если ПризнакКопирования = 1 Тогда // Гр___________________________________________________________________________ Если (кТМЦ.ВидТМЦ = Перечисление.ВидыТМЦ.Продукция) Или (кТМЦ.ВидТМЦ = Перечисление.ВидыТМЦ.Полуфабрикат) Тогда Записать(); // здесь выдает ошибку СпрТ = СоздатьОбъект("Справочник.СоставПродукции"); СпрТ.ИспользоватьВладельца(ТекущийЭлемент()); СпрС = СоздатьОбъект("Справочник.СоставПродукции"); СпрС.ИспользоватьВладельца(кТМЦ); СпрС.ВключатьПодчиненные(1); СпрС.ВыбратьЭлементы(); Пока СпрС.ПолучитьЭлемент(1) = 1 Цикл СпрТ.ИспользоватьРодителя(""); СпрТ.Новый(); СпрТ.Владелец = ТекущийЭлемент(); СпрТ.Затрата = СпрС.Затрата; СпрТ.Кво = СпрС.Кво; СпрТ.Записать(); КонецЦикла; КонецЕсли; // Гр__________________________________________ Возврат; КонецЕсли; Валюта_Прод = глВосстановитьЗначение(,"ОсновнаяВалюта"); Валюта_Прих = глВосстановитьЗначение(,"ОсновнаяВалюта"); ВидТМЦ = Перечисление.ВидыТМЦ.Товар; ИзмВид(); СтавкаНДС = глВосстановитьЗначение(,"БазНДС"); БазЕдиница = глВосстановитьЗначение(,"БазЕдиница"); ИспользоватьДату('01.01.1980'); ВидДеятельности = глВосстановитьЗначение(,"БазВидДеятельности"); КонецПроцедуры
С уважением, Владимир. ---------------------------- платформа 7.70.027 БУ релиз 7.70.317( хорошенько доработанный в части отчетов. Доки:РН, ПН, Счет - можно вводить сразу СуммаСНДС и т.п.).
////////////////////////////////////////////////////// //Создать свою процедуру для читаемости Если ВидТМЦ=Перечисление.ВидыТМЦ.Продукция Тогда //Написать вопросы. О том что будет скопирован и записан и ТМЦ и Состав // и всякое бла-бла Спр = СоздатьОбъект("Справочник.СоставПродукции"); нСпр = СоздатьОбъект("Справочник.СоставПродукции"); ТМЦ1 = СоздатьОбъект("Справочник.ТМЦ"); ТМЦ1.ИспользоватьДату(ТекущаяДата()); // тут меня смущает ТМЦ2 = СоздатьОбъект("Справочник.ТМЦ"); Если ТМЦ2.НайтиЭлемент(Объект)=1 Тогда Обт = ТМЦ2.ТекущийЭлемент(); КонецЕсли; ТМЦ1.Новый(); ТМЦ1.Наименование = Обт.Наименование; //тут что то было вроде наподобие общих реквизитов вроде. ТМЦ1.Родитель = Обт.Родитель; //Это вынести в отдельную процедуру МетаД=Метаданные.Справочник("ТМЦ"); Для а=1 По МетаД.Реквизит() Цикл Если Метаданные.Справочник("ТМЦ").Реквизит(МетаД.Реквизит(а).Идентификатор).Выбран()=1 Тогда ТМЦ1.УстановитьАтрибут(МетаД.Реквизит(а).Идентификатор,Обт.ПолучитьАтрибут(МетаД.Реквизит(а).Идентификатор)); КонецЕсли; КонецЦикла; Попытка ТМЦ1.Записать(); Исключение КонецПопытки; Спр.ИспользоватьВладельца(Обт); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл нСпр.Новый(); нСпр.Владелец = ТМЦ1.ТекущийЭлемент(); нСпр.УстановитьНовыйКод(); //Это вынести в отдельную процедуру МетаД=Метаданные.Справочник("СоставПродукции"); Для а=1 По МетаД.Реквизит() Цикл Если Метаданные.Справочник("СоставПродукции").Реквизит(МетаД.Реквизит(а).Идентификатор).Выбран()=1 Тогда нСпр.УстановитьАтрибут(МетаД.Реквизит(а).Идентификатор,Спр.ПолучитьАтрибут(МетаД.Реквизит(а).Идентификатор)); КонецЕсли; КонецЦикла; Попытка нСпр.Записать(); Исключение КонецПопытки; КонецЦикла; ОткрытьФорму(ТМЦ1.ТекущийЭлемент()); СтатусВозврата(0); Возврат; КонецЕсли; ////////////////////////////////////////////////////// Возврат; КонецЕсли;
я так розумію, вищенаписаний код повинен йти в обробці, тоді в формі елементу ТМЦ:
Процедура ВводНового(ПризнакКопирования,кТМЦ) Если (ПризнакКопирования = 1) и (кТМЦ.ЭтоГруппа()=0) Тогда //тут відкриваємо обробку (в фоновому режимі*) і передаємо туди кТМЦ статусВозврата(0); возврат; конецесли; ...
*фоновий режим - в самій обробці:
Процедура ПриОткрытии() //аналізуємо переданий параметр у обробку і якщо він елемент ТМЦ, тоді //виконуємо вищеописаний код (можна помістити в іншу процедуру і її тут викликати), далі статусВозврата(0); возврат; ...
За помощь спасибо, но... Как на меня так ваши предложения больно усложнены, я этого не люблю (из многолетнего опыта разработки с 1975г). Я ночью придумад, как сделать проще. Я разнес эти действия в две процедуры: ВводНового() - фиксирую факт наличия в "Состав прод" подчиенных эл-тов у копируемого эл-та кТМЦ_. А в процедуре ПриЗаписи() реализую перезапись "Состава прод". И интерактив остается, и не ругается и все работает. Дело в том что конструкция
Попытка ТМЦ1.Записать(); Исключение КонецПопытки;
не работает, Записать() очень непростая команда, если вы находитесь в интерактивном вводе.
глСохранитьЗначение(Контекст,"СчетЗатрат",СчетЗатрат); Если глЗаписьПериодическихРеквизитов(Контекст) = 0 Тогда СтатусВозврата(0); Возврат; КонецЕсли; Если Выбран() = 0 Тогда Записать(); // этот метод не возвращает 0 в случае неудачи и не "ловится" Попыткой Попытка глПолучитьПартиюПоУмолчанию(Партия, ТекущийЭлемент()); Исключение // будем считать, что ошибка была еще в Записать() // например, "код не уникален" СтатусВозврата(0); // иначе получим сообщение об ошибке 2 раза КонецПопытки; // Гр___________________________________________________________________________ Если ФлСостава = 1 Тогда // при копировании элемента ТМЦ есть записи в подчиненном Спр."Состав продукции" ТЭ =ТекущийЭлемент(); СпрТ = СоздатьОбъект("Справочник.СоставПродукции"); СпрТ.ИспользоватьВладельца(ТЭ); СпрТ.ИспользоватьРодителя(""); СпрС = СоздатьОбъект("Справочник.СоставПродукции"); // переписываем все элементы "Состава продукции" из исходного ТМЦ в результирующий СпрС.ИспользоватьВладельца(кТМЦ_); СпрС.ВыбратьЭлементы(); Пока СпрС.ПолучитьЭлемент() = 1 Цикл СпрТ.Новый(); СпрТ.Владелец = ТЭ; СпрТ.Наименование = СпрС.Наименование; СпрТ.Затрата = СпрС.Затрата; СпрТ.Кво = СпрС.Кво; СпрТ.Записать(); КонецЦикла; КонецЕсли; // Гр___________________________________________________________________________ КонецЕсли; КонецПроцедуры
С уважением, Владимир. ---------------------------- платформа 7.70.027 БУ релиз 7.70.317( хорошенько доработанный в части отчетов. Доки:РН, ПН, Счет - можно вводить сразу СуммаСНДС и т.п.).
ВводНового() - фиксирую факт наличия в "Состав прод" подчиенных эл-тов у копируемого эл-та кТМЦ_. А в процедуре ПриЗаписи() реализую перезапись "Состава прод". И интерактив остается, и не ругается и все работает. Дело в том что конструкция
ви прочитали мої думки, але краще запись "Состава" робити ПриЗакрытии(), а то в ПриЗаписи(), елемент ТМЦ може бути ще не записаний (а так і є Если Выбран() = 0 Тогда), на кнопці ОК помістити - Записать, Закрыть; тю та воно там вже є
Bob210250, красивое решение. Вы знаете ,полезла в свой справочник ТМЦ там подобным образом моими коллегами-предшествинниками бала реализована запись дополнительной единицы измерения именно в процедуре ПриЗаписи(). И сбоев у нас не наблюдалось
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП) 1С Предприятие 8.3: Бух.предприятия 3.0 + самописка ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Кроме высшего образования, нужно иметь хотя бы среднее соображение
ви прочитали мої думки, але краще запись "Состава" робити ПриЗакрытии(), а то в ПриЗаписи(), елемент ТМЦ може бути ще не записаний (а так і є Если Выбран() = 0 Тогда), на кнопці ОК помістити - Записать, Закрыть; тю та воно там вже є
Я наверное не очень точно описал задачу: Бухгалтер в интерактивном режиме выбирает элемент в Справочнике ТМЦ и делает "Копировать строку" (стандартная функция 1С), чтобы создать новый элемент очень похожый (обувь разных размеров). И хочется чтобы и состав копировался. Условие простое как лом...
С уважением, Владимир. ---------------------------- платформа 7.70.027 БУ релиз 7.70.317( хорошенько доработанный в части отчетов. Доки:РН, ПН, Счет - можно вводить сразу СуммаСНДС и т.п.).
А смысл тогда этого всего? Вы просили я так понял копирование состава по F9. Тот код который я дал, делает именно это без каких то других дополнительных действий со стороны пользователя. Впрочем Ваше право...
А смысл тогда этого всего? Вы просили я так понял копирование состава по F9. Тот код который я дал, делает именно это без каких то других дополнительных действий со стороны пользователя. Впрочем Ваше право...
Вот именно "Копировать строку (F9)" ТМЦ, что бы чуть изменить название ТМЦ и потом чуть состав. И не набирать все опять ручками. Я что то не так объяснил? Извините, никого обидеть не хотел!
С уважением, Владимир. ---------------------------- платформа 7.70.027 БУ релиз 7.70.317( хорошенько доработанный в части отчетов. Доки:РН, ПН, Счет - можно вводить сразу СуммаСНДС и т.п.).
Вот именно "Копировать строку (F9)" ТМЦ, что бы чуть изменить название ТМЦ и потом чуть состав. И не набирать все опять ручками. Я что то не так объяснил? Извините, никого обидеть не хотел!
Та никто не обижается. Тот кусок который я дал, решает задачу? Я проверял на типовой демо 288 на костюмах и платьях Копирует и создает со всеми внутренностями
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!