Есть документ с табличной частью Номенклатура,СерииНоменклатуры,Установить( тип Булево),Количество.
Надо,чтобы при проведении документа,если стоит галочка в Установить, то в справочнике СерииНоменклатуры на форме элемента у соответствующей серии Ставилась эта галочка тоже в Истина.
Как это реализовать ? или может поделитесь ссылкой с примером.
В правильном ли направлении думаю?:
Что использовать вместое РежимЗаписиДокумента. Надо запись справочника.
Надо,чтобы при проведении документа,если стоит галочка в Установить, то в справочнике СерииНоменклатуры на форме элемента у соответствующей серии Ставилась эта галочка тоже в Истина.
Как это реализовать ? или может поделитесь ссылкой с примером.
В правильном ли направлении думаю?:
Процедура ПослеЗаписи
Серии = Справочники.СерииНоменклатуры.ПустаяСсылка();
НовСтр = ЭтотОбъект.ТЧ.Добавить();
Если НовСтр.Установить = Истина Тогда
Упс = Серии.ПолучитьОбъект();
Упс.ТребуетсяДооформление = Истина;
Упс.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецПроцедуры;
ПоказатьЧто использовать вместое РежимЗаписиДокумента. Надо запись справочника.
По теме из базы знаний
Найденные решения
Странная задача. Но если её всё-таки нужно решить, то я механизм вижу примерно так:
Процедура ПослеЗаписи()
Для каждого строка из Объект.ТабЧастьТовары цикл
СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект(); // получили элемент справочника
Если строка.Установить тогда
СерияОбъект.ТребуетсяДооформление = истина;
// необходимо оставить информацию о том, что именно этот документ
// изменил реквизит (для отмены проведения), либо придумайте свой реквизит для механизма:
СерияОбъект.Комментарий = "ИзмененДокументом № " + Строка(Объект.Номер);
СерияОбъект.Записать(); // это справочник, никакой режим записи не нужен!
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Если при отмене проведения галку необходимо снимать
Процедура ПриЗаписи() // возможно нужна другая процедура, тут нужно проверять
Если РежимЗаписиДокумента.ОтменаПроведения тогда
Для каждого строка из Объект.ТабЧастьТовары цикл
СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект();
Если строка.Установить тогда
Коммент = СерияОбъект.Комментарий;
// если элемент справочника изменён именно этим документом тогда убираем признак
Если Прав(Коммент, СтрДлина(СерияОбъект.Комментарий) - 20) = Объект.Номер тогда
СерияОбъект.ТребуетсяДооформление = ложь;
СерияОбъект.Комментарий = ""; // удалили признак изменения документом
СерияОбъект.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Странная задача. Но если её всё-таки нужно решить, то я механизм вижу примерно так:
Процедура ПослеЗаписи()
Для каждого строка из Объект.ТабЧастьТовары цикл
СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект(); // получили элемент справочника
Если строка.Установить тогда
СерияОбъект.ТребуетсяДооформление = истина;
// необходимо оставить информацию о том, что именно этот документ
// изменил реквизит (для отмены проведения), либо придумайте свой реквизит для механизма:
СерияОбъект.Комментарий = "ИзмененДокументом № " + Строка(Объект.Номер);
СерияОбъект.Записать(); // это справочник, никакой режим записи не нужен!
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Если при отмене проведения галку необходимо снимать
Процедура ПриЗаписи() // возможно нужна другая процедура, тут нужно проверять
Если РежимЗаписиДокумента.ОтменаПроведения тогда
Для каждого строка из Объект.ТабЧастьТовары цикл
СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект();
Если строка.Установить тогда
Коммент = СерияОбъект.Комментарий;
// если элемент справочника изменён именно этим документом тогда убираем признак
Если Прав(Коммент, СтрДлина(СерияОбъект.Комментарий) - 20) = Объект.Номер тогда
СерияОбъект.ТребуетсяДооформление = ложь;
СерияОбъект.Комментарий = ""; // удалили признак изменения документом
СерияОбъект.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры;
Показать
Поскольку процедура выбрана "ПослеЗаписи" - значит транзакция уже окончена и синхронизировать запись документа и справочника не имеет смысла.
Тогда имеет смысл синхронизировать установку это галки со всеми записями во всех документах такого вида,
то есть
Сперва запрос: а нет ли вообще документов, проведенных с такой серией в табличной части?
Если Результат пустой - тогда если галка установлена - снимаем, объект записываем,
если результат не пустой, а галка не установлена - устанавливаем, объект записываем.
Процедура записи правильная в (5) только условия нужно проверить, вдруг записывать не надо (и без того все правильно).
Тогда имеет смысл синхронизировать установку это галки со всеми записями во всех документах такого вида,
то есть
ВЫБРАТЬ
ДокументВидТЧ.Ссылка КАК Ссылка
ИЗ
Документ.ДокументВид.ТабличнаяЧасть КАК ДокументВидТЧ
ГДЕ
ДокументВидТЧ.СерияНоменклатуры= &НужнаяМнеСерия
И ДокументВидТЧ.Ссылка.Проведен = ИСТИНА
Сперва запрос: а нет ли вообще документов, проведенных с такой серией в табличной части?
Если Результат пустой - тогда если галка установлена - снимаем, объект записываем,
если результат не пустой, а галка не установлена - устанавливаем, объект записываем.
Процедура записи правильная в (5) только условия нужно проверить, вдруг записывать не надо (и без того все правильно).
Как отметили в (8) транзакция уже окончена.
1. Некорректно для данной задачи использовать обработчик после записи, у вас может быть ситуация, когда документ провелся, а элемент справочника не перезаписался (например конфликт блокировок).
В данном случае правильнее использовать обработку проведения.
Если нужно, чтобы при отмене проведения тоже изменялись данные (например, снимались галочки), то можно использовать обработку отмены проведения.
2. Судя по обработчику "После записи" я так понимаю вы используете модуль формы, и тут вы тоже можете столкнуться с проблемой.
Если нажать провести не из формы документа, а из формы списка, то изменений в справочнике не будет.
1. Некорректно для данной задачи использовать обработчик после записи, у вас может быть ситуация, когда документ провелся, а элемент справочника не перезаписался (например конфликт блокировок).
В данном случае правильнее использовать обработку проведения.
Если нужно, чтобы при отмене проведения тоже изменялись данные (например, снимались галочки), то можно использовать обработку отмены проведения.
2. Судя по обработчику "После записи" я так понимаю вы используете модуль формы, и тут вы тоже можете столкнуться с проблемой.
Если нажать провести не из формы документа, а из формы списка, то изменений в справочнике не будет.
(5) только получение объекта нужно поставить уже после всех "если", когда уже явно выяснили, что объект нужно будет изменять
да и по уму, вообще не использовать при/после записи, а юзать ОбработкуПроведения, если уж совсем по поставленному условию все делать, ибо там в любом случае ТЧ будет каким то образом обходиться, смысл гонять циклы несколько раз по одной и той же ТЧ в разных событиях
да и по уму, вообще не использовать при/после записи, а юзать ОбработкуПроведения, если уж совсем по поставленному условию все делать, ибо там в любом случае ТЧ будет каким то образом обходиться, смысл гонять циклы несколько раз по одной и той же ТЧ в разных событиях
(16) В подобном случае я бы не подписался галочку в справочнике делать. Но если уж так хочется, то можно подпиской на событие проверить что там вообще с данной номенклатурой и сериями во всех документах и нарисовать "галочку" соответствующую действительности. Три варианта развития событий получается:
1. Все серии с "галочкой"
2. Все серии без "галочки"
3. Есть серии как с "галочкой" так и без.
1. Все серии с "галочкой"
2. Все серии без "галочки"
3. Есть серии как с "галочкой" так и без.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот