8.х Помогите решить задачу!

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем st88, 25 окт 2012.

  1. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Есть документ, в него добавляются личные счета из справочника ( у лс есть реквизит типа булево ФлагЗанято равный 0 по умолчанию). При записи документа, тем лс, что добавлены в ТЧ документа ставится реквизит ФлагЗанят равный 1!!! Тем самым помечаем те лс которые заняты текущим документом и другой такой же документ их выбрать не может, пока реквизит ФлагЗанят у лс равен 1!!!
    У документа есть флажок на форме «В Архив», при установке его документ меняет свой статус в своём реквизите СтатусДокумента с «Открыт» на «Архив», и при записи документа, тем лс, что добавлены в ТЧ документа ставится реквизит ФлагЗанят равный 0!!! Тем самым делаем лс снова доступными для других документов.


    ЗАДАЧА!!!


    Как сделать так чтобы, при открытии документа со статусом Архив и (или) при его изменении или смене статуса не трогались лс которые в нём, т.к. мы жмём записать и лс которые в нём – присваивается ФлагЗанято = 0!!! ХТЯ ОНИ могут быть заняты каким либо другим документом Открытым, а мы влезем и снимем с них ФлагЗанято!!!!
  2. PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    Чере условие: Если ЭтоНовый() Тогда ставим знак занят КонецЕсли;
  3. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Кто новый? внимательнее прочитайте задачу. лс могут и не добавлять и не удалятся из документа
  4. PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    Я это понял. Вставьте условие при открытии формы документа, что Если НЕ ЭтоНовый() Тогда устоновить доступность к ТЧ документа = Ложь

    и ее нельзя будет изменять и добавлять новые строки
  5. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    ну а если открываем документ который не новый, но статус открыт, вносим какие либо изменения в докумт, но не трогаем лс в нём...
  6. PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    измкенения в шапке документа, но не в ТЧ?
  7. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    и в ТЧ тоже могут быть изменения!
  8. PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    ну тогда нужно ограничить доступ только к тем колонкам которые редактировать нельзя
  9. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Смотрите, когда устанавливается флаг, то идёт выборка лс из табл части, и каждому лс устанавливается флаг в справочнике.лс реквизит ФлагЗанято. Т.е. вы предлагаете как-то запретить работу выборки? тогда как и каким условием, где его прописать?!

    щас условие:
    при записи, если статус докум Открыт, то всем лс из тч флаг=1
    При закрытии, если флаг "в архив"=1, то всем лс из тч ставим реквизит флаг обратно = 0
  10. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Решил проблему вводом одной переменной:

    перем менятьфлаг экспорт;

    Процедура ПриОткрытии()


    //// проверка на флажок занятости

    Если состояниеДокумента = "Открыт" тогда
    МенятьФлаг = истина
    Иначеесли состояниеДокумента = "Архив" тогда
    МенятьФлаг = Ложь ;

    конецесли;



    КонецПроцедуры

    Процедура ПриЗаписи(Отказ)
    Если состояниеДокумента = "Открыт" и менятьФлаг = истина тогда

    ////меняем
    конецесли;
    Если состояниеДокумента = "Архив" и менятьФлаг = истина тогда
    ///меняем
    конецесли;

    КонецПроцедуры
  11. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Выдаёт такую вот ошибку:

    Ошибка при вызове метода контекста (Выполнить)
    Результат = Запрос.Выполнить();
    по причине:
    {(8, 37)}: Не задано значение параметра "Абонент"
    Абоненты.НаименованиеПолное ПОДОБНО <<?>>&Абонент

    В чём косяк???


    Процедура ПриЗаписи(Отказ)
    Если состояниеДокумента = "Открыт" и менятьФлаг = истина тогда

    ////меняем

    Для каждого СтрокаВедомость из Ведомость цикл
    Абонент_выб=СтрокаВедомость.Абонент;
    ЗаменитьФлаг(Абонент_выб);
    конеццикла;


    конецесли;
    Если состояниеДокумента = "Архив" и менятьФлаг = истина тогда
    ///меняем
    конецесли;

    КонецПроцедуры

    Процедура ЗаменитьФлаг(Абонент_выб=неопределено);

    Если Абонент_выб <> неопределено тогда
    Запрос = новый Запрос;
    Запрос.Текст = (
    "ВЫБРАТЬ
    | Абоненты.НаименованиеПолное,
    | Абоненты.Наименование,
    | Абоненты.ФлагЗанятости
    |ИЗ
    | Справочник.Абоненты КАК Абоненты
    |ГДЕ
    |Абоненты.НаименованиеПолное ПОДОБНО &Абонент "
    );
    Запрос.УстановитьПараметр("Абонент ","%"+Абонент_выб+"%");

    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
    Выборка.ФлагЗанятости = истина;
    КонецЦикла;
    конецесли;
    конецпроцедуры
  12. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а задать параметр не пробовали? Проверьте отладчиком что туда помещается

    З.Ы. сорри, сразу не приметила....оформляйте код тегами...

    и еще, уберите пробел в строке, где задаете значение параметра
  13. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    так параметр задан в том то и дело, он его наличие проверяет перед запросом: Если Абонент_выб <> неопределено тогда
  14. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    убрал "_" всё равно таже ошибка!!!(
  15. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    пройдитесь отладчиком и посмотрите, что у вас передается в запрос.
  16. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    всё нашёл ошибку!))

    но теперь другая выскакивает:
    {Документ.Разработка_документа.Форма.ФормаДокумента.Форма(787)}: Поле объекта недоступно для записи (ФлагЗанятости)
    Выборка.ФлагЗанятости = истина;
  17. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    как вариант попробовать
    Код:
    Запрос.УстановитьПараметр("Абонент","%"+Строка(Абонент_выб)+"%");
    естественно... Выборка - это набор данных, доступный толкьо для чтения...
  18. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    если в выборке нельзя нечего менять, то как тогда абонентам из тч документа установить значение в реквизит Справочники.Абоненты.ФлагЗанятости?
  19. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну дак в тч документа и надо устанавливать. Выборка она же нигде не храниться, смысла туда записывать информацию нет.
  20. TopicStarter Overlay
    st88
    Online

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Код:
    Для каждого СтрокаВедомость из Ведомость цикл
    Абонентвыб=СтрокаВедомость.Абонент;
    СтрокаВедомость.Абонент.ФлагЗанятости=Истина;
    
    также тупо в справочник нечего не запишится???:

Поделиться этой страницей