Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Как заблокировать реквизит

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

1C
1
2
3
4
приОткрытии
Если ЗначениеЗаполнено(Объект.Склад)Тогда
          Элементы.Склад.Доступность = Ложь;
    КонецЕсли;
таким Макаром работает только на клиенте внешнюю обработку пропускает.....
Ответ:
1C
1
2
3
4
5
6
7
8
9
10
&НаСервере
Процедура Команда1НаСервере()
Партнер = Объект.Реквизит1.ПолучитьОбъект();
Партнер.Склад = "333";
Try
   партнер.Записать();
Except
EndTry;
 
КонецПроцедуры
Вопрос: Заблокировать форму документа сразу после проведения

Добрый день.
Подскажите, может кто-то сталкивался с задачей: блокировать(ТолькоПросмотр = Истина) форму документа сраааазу же после успешного проведения, если пользователь её не закрыл, не переоткрыл, а просто нажал Провести и остался на ней.

На данный момент максимум чего удалось добиться - блокировать форму проведенного документа при его открытии:

Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    Если Объект.Проведен = Истина Тогда
        ЭтаФорма.ТолькоПросмотр = Истина;
    КонецЕсли;
КонецПроцедуры
Ответ: &НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
    Если Объект.Проведен Тогда
        ЭтаФорма.ТолькоПросмотр = Истина;
    КонецЕсли; 
КонецПроцедуры
Вопрос: Получить объекты выделенных элементов динамического списка

Всем привет!
Блин! столкнулся с проблемой ... даже не знаю..
Что нужно для первого шага задуманной процедуры.. ПОЛУЧИТЬ ОБЪЕКТ ЭЛЕМЕНТА ВЫДЕЛЕННОЙ СТРОКИ ДИНАМИЧЕСКОГО СПИСКА!
Я просто не могу понять почему это можно когда речь о получении одного элемента списка:
Код:
СписокИмя="Список"; ЭлементСписка = Элементы[СписокИмя].ТекущаяСтрока; Предупреждение(ЭлементСписка);
А почему целая проблема когда нужно получить объекты несколько выделенных элементов уже в цикле.
Код:
СписокИмя="Список";
ВыделенныеСтроки = Элементы[СписокИмя].ВыделенныеСтроки;
Для каждого СтрокаСписка Из ВыделенныеСтроки Цикл
ЭлементСписка=Элементы[СписокИмя].ДанныеСтроки(СтрокаСписка);
Сообщить(ЭлементСписка);
КонецЦикла;
И самое не понятное, что бы получить не объект элемента, а просто значение реквизита можно сделать так:
Код:
ЭлементСписка=Элементы[СписокИмя].ДанныеСтроки(СтрокаСписка)["ИмяРеквизита"];
Только в случае если это список справочника, то можно указать любой реквизит наименование, код и т.д.
Но в случае, если список документов то, стоит только указать реквизит возврата на пример номер то выдает кляузу. И вообще на какие то определенные реквизиты реагирует нормально. А на какие то ревет.
Дур-дом ... т.е. платформе не все реквизиты по вкусу, что ли ? .. одурею.
Поэтому ни в какую... А нужно элементарное... Просто получить объекты выделенных элементов списка. А уже полом сам знаю как получить нужные значения реквизитов полученных объектов списка.
Конечно для этого есть команда ПолучитьОбъект(), но она для сервера.
И что понять не могу, почему если список справочника все без проблем, а если документа то выдает кляузу. Тогда как и тот и другой это динамический список.
Поэтому как получить объекты? Может что то не учел. И может капризной среде нужен на пример какой то индекс ... вообщем не знаю.
Поэтому это уже не просто просьба а крик о помощи!
Буду очень очень очень очень признателен!
Ответ:
Да получилось.. вот таким макаром
Код:
СписокИмя="Список";
ВыделенныеСтроки = Элементы[СписокИмя].ВыделенныеСтроки;
Для каждого СтрокаСписка Из ВыделенныеСтроки Цикл
ЭлементКод=Элементы[СписокИмя].ДанныеСтроки(СтрокаСписка).код;
ЭлементИмя=Элементы[СписокИмя].ДанныеСтроки(СтрокаСписка).Наименование;
Сообщить(ЭлементИмя+" - "+ЭлементКод);
КонецЦикла;
В том и дело, что в выше указанном коде он используется, но для списка документов возникает кляуза.
Я просто не знаю "Разбирайте" что имеется ввиду.... и как разбирать В указном цикле он и разбирается.
Просто кляузничает если список документа. Ну на пример если так
Код:
ЭлементНомер=Элементы[СписокИмя].ДанныеСтроки(СтрокаСписка).Номер;
Тут же ревет о том, что "Поле объекта не обнаружено (Номер)"
Ладно! Если так не хочет тогда без номера
Код:
ЭлементСписка_Объект=Элементы[СписокИмя].ДанныеСтроки(СтрокаСписка);
Сообщить(ЭлементСписка_Объект);
На что любезно но не без ехидства сообщает: "". И ничего более.
А нужно, что бы он выдавал список выделенных объектов (не по типу текста а просто ссылки или объекты). И так по всем тем выделенным элементам которых затрагивает цикл.
Вот что нужно!
Только не понятно как это сделать?
Гуууууу ....
Вообщем прощу и буду очень признателен!
И если не трудно побольше конкретики и работающих примеров.
Буду признателен!
Вопрос: Поле объекта не обнаружено (Объект) ДанныеФормы = Форма.Объект;

Пытаюсь открыть форму не сохраненного документа, выскакивает ошибка.
Раньше работало.
Бухгалтерия 3.1 

&НаКлиенте
Процедура СоздатьДокументТовары()
    Форма = ПолучитьФорму("Документ.ВводНачальныхОстатков.ФормаОбъекта");
    ДанныеФормы = Форма.Объект;
    ЗаполнитьДокументНаСервере(ДанныеФормы);
    КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
    Форма.Открыть();
КонецПроцедуры

&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы);

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

    //    //СтрДок = Док.Товары.Добавить();

    //    //СтрДок.Количество = Стр.Количество;

    //    //СтрДок.Номенклатура = Стр.Номенклатура;

    //    НоваяСтрока = Док.НоменклатураНаСкладе.Добавить();

    //    //НоваяСтрока.НомерСтрокиТЧ  = НомСт;

    //    НоваяСтрока.СчетУчета = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах;

    //    НоваяСтрока.Номенклатура = НоваяСтрока.Номенклатура;

    //    

    //КонецЦикла;

    
    ЗначениеВДанныеФормы(Док,ДанныеФормы);

КонецФункции
Ответ: Всем спасибо, проблему нашел. Не указал вид учета.

    ЗначенияЗаполнения = Новый Структура();
    ЗначенияЗаполнения.Вставить("РазделУчета", Объект.РазделУчета);
    Форма = ОткрытьФорму("Документ.ВводНачальныхОстатков.ФормаОбъекта", Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения));
    ДанныеФормы = Форма.Объект;
Вопрос: Правила регистрации объектов

Суть в следующем, есть работающий обмен между ЗУП 3.1 и УПП. Правила конвертации объектов не типовые (ибо типовых нет). В правилах регистрации объектов - пусто. Понадобилось донастроить обмен так, чтобы подразделения выгружались только актуальные. То есть если у подразделения Расформировано = Истина, то его регистрировать и выгружать не надо. Сделал в базе Конвертации правила регистрации объектов, пробовал делать отбор по свойствам объектов для справочника ПодразделенияОрганизаций, то есть указывал свойство Расформировано, вид сравнения равно, значение Ложь. Ничего не дало. Пробовал там же в обработчиках событий перед обработкой добавить Отказ = Объект.Расформировано;    тоже не помогло. После того как я эти правила регистрации загружаю в базу, все равно при записи расформированного подразделения оно регистрируется в обмене. Я чего-то не догоняю? Что еще надо сделать-то, условие вроде бы простейшее, но не работает
Ответ: я свой вариант кстати не пробовал прогонять, может и мой работал. Я посчитал, что в зарегистрированных объектах мои объекты по отбору/отсечке вообще не должны появляться. и пытался найти такой вариант. Возможно я не понимаю логику работы, как и в () и все объекты всегда показываются в зарегистрированных, а уже при обмене накладываются правила регистрации. короче задача закрыта, если будет еще что-то подобное - буду копать глубже
Вопрос: Блокировка объекта

1С:Предприятие 8.3 (8.3.6.2152) режим управляемых форм.
День добрый, суть задачи следующая:
Есть справочник, ссылку на объект которого планирую выбирать запросом и предоставлять пользователю для редактирования. Для того, что бы разные пользователи не получили для редактирования один и тот же объект справочника, необходимо что то предпринять. Верно ли я понял, что для этого можно использовать блокировку? Если да, то как грамотно это сделать?
Ответ:
Что-то предпринимать нужно в том случае, если один и тот же объект может быть отредактирован не из основной формы этого объекта.
Если редактирование объекта выполняется через основную форму, то система сама блокирует объект при открытии формы, о чем было замечено TODD22.
Вопрос: Пакетное создание объектов конфигурации

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

А если ещё в некоторых фиксированных процедурах существующих модулей появится несколько строк кода, то вообще будет супер.
Ответ: () разрабатывать эти объекта надо в отдельной конфигурации и поставлять в другие посредством комплекта поставки. В "профессиональной разработке" поставка расписана во всех мучительных подробностях
Вопрос: При обработке, чтобы объекты не попадали в план обмена полный

Всем привет. Подскажите. Есть база УПП, РИБ, обмен по плану полный. Нужно обработкой почистить базу, но чтобы объекты не попали в регистрацию изменений. Пробовал ставить
"....обменданнным.получатели.автозаполнение = ложь", не получается, все равно данные попадают в план обмена полный. Как победить?
Ответ:
Направляю ряд законченных обработчиков
Процедуру вызываете для обработчика. Перед употреблением встряхнуть на тестовой базе
Код:
Процедура ВыполнитьЗапись(ДокументОбъект)
   
    ДокументОбъект.ОбменДанными.Получатели.Очистить();
    ДокументОбъект.ОбменДанными.Получатели.Автозаполнение = ложь;
    МассивРегистраций = ПолучитьУзлыВКоторыхДокументЗарегистрирован(ДокументОбъект); // формирует массив уже имеющихся регистраций
      
    Если ДокументОбъект.Проведен Тогда
        Попытка
            ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
        Исключение
            ТекстОшибки = ОписаниеОшибки();
            Сообщить(ТекстОшибки);
        КонецПопытки;
       
    Иначе
        Попытка
            ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
       
    КонецЕсли;
   
    СнятьРегистрациюСУзлов(ДокументОбъект); // снимает всю регистрацию
    ЗарегистрироватьНаОбмен(МассивРегистраций); // возвращает регистрацию из массива
   
КонецПроцедуры

Функция ПолучитьУзлыВКоторыхДокументЗарегистрирован(ДокументОбъект)
   
    МассивРегистраций = Новый Массив;
    Для каждого ПланМенеджер из ПланыОбмена Цикл
        ПланУзелВыборка = ПланМенеджер.Выбрать();
        Пока ПланУзелВыборка.Следующий() Цикл
            ПланУзел = ПланУзелВыборка.Ссылка;
            // нельзя проверять свой же узел ена изменения
            Если ПланМенеджер.ЭтотУзел() = ПланУзел Тогда
                Продолжить;
            КонецЕсли;
            Если ПланыОбмена.ИзменениеЗарегистрировано(ПланУзел, ДокументОбъект.Ссылка) Тогда
                Структура = Новый Структура;
                Структура.Вставить("Менеджер", ПланМенеджер);
                Структура.Вставить("Узел", ПланУзел);
                Структура.Вставить("Объект", ДокументОбъект.Ссылка);
                МассивРегистраций.Добавить(Структура);
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    Возврат МассивРегистраций;
   
КонецФункции

Процедура СнятьРегистрациюСУзлов(ДокументОбъект)
   
    Для каждого ПланМенеджер из ПланыОбмена Цикл
        ПланУзелВыборка = ПланМенеджер.Выбрать();
        Пока ПланУзелВыборка.Следующий() Цикл
            ПланУзел = ПланУзелВыборка.Ссылка;
            // нельзя проверять свой же узел ена изменения
            Если ПланМенеджер.ЭтотУзел() = ПланУзел Тогда
                Продолжить;
            КонецЕсли;
            // удалить регистрацию можно только если она разрешена
            Попытка
                ПланыОбмена.УдалитьРегистрациюИзменений(ПланУзел, ДокументОбъект.Ссылка);
            Исключение
               
            КонецПопытки;
        КонецЦикла;
    КонецЦикла;
   
КонецПроцедуры

Процедура ЗарегистрироватьНаОбмен(МассивРегистраций)
   
    Для каждого стр из МассивРегистраций Цикл
        ПланМенеджер = стр.Менеджер;
        ПланУзел = стр.Узел;
        Объект = стр.Объект;
        ПланыОбмена.ЗарегистрироватьИзменения(ПланУзел, Объект);
    КонецЦикла;
   
КонецПроцедуры
Вопрос: Удаление объектов после обмена

Доброго дня.

Выполнил обмен, оказалось, что давным-давно уже проводилась выгрузка в приёмник по УИДу.
Но потом пользователи поменяли некоторых контрагентов в приёмнике на других и работали с ними уже как с другими.
Я сделал обмен, разумеется поиск по УИДу включен, плюс поля поиска.
Результат стал ожидаемым - перезаписались найденные по УИДу объекты в приёмнике и контрагенты вернулись в исходное состояние.

Как правильней вернуть все назад?

Ещё одна беда: задублировались контрагенты, хотя по правилам поиска все верно - оказалось, что у них разная форма собственности. Как правильно производить удаление дублей? Ведь при удалении объекта он попадает в регистрацию узла (тип УдалениеОбъекта с его УИД) с последующим удалением в приёмнике. Руками очищать регистрацию или проставлять соответствие объектов в ИБ?
Ответ:
Попробовал вручную привязать элементов с одинаковыми УИД в разных базах к разным элементам. Но они всё равно перезаписываются.
Видимо поиск по УИД в приоритете. Только после того, как объект не был найден по ссылке уже идёт поиск в соответствиях объектов ИБ (РС "СоответствияОбъектовИБ"), а далее по полям поиска.
Печаль... есть куча документов, поиск и замена значений не катит.
Вопрос: Запись объекта на сервере

Я нихера не понимаю.

Платформа 8.2 при попытке передать объект в модуль имеющий галку "Сервер" и "Вызов сервера" ругается что "нельзя передать на сервер мутабельное".
Что вроде-бы понятно.

Однако в 8.3 в БП3.0 в РТУ в ОбработкеПроведения я вижу ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект) - т.е. передача объекта на сервер (модуль ПроведениеСервер имеет галки Сервер и ВнешнееСоединение). Как так?! В 8.3 стало возможно передавать объект на сервер?

Установка галок Сервер и ВнешнееСоединение в 8.2 не помогает: "Переменная не определена <ИмяОбщегоМодуля>".
Ответ: Вспомнил.
В бп3.0 же УФ. Т.е. объект не создается ни клиенте. И ни куда не "ездит". Он сразу на сервере рождается. Вот и нет проблем с передачей мутабельных.