Быстрый старт. Мастер-группа Q&A от 05.05.2012

Публикуем очередную сессию мастер-группы курса “Быстрый старт”.

1. Связи между таблицами.
Как  организовать  связь “многие-ко-многим”  между  справочниками?
Например,  как между собой можно объединить справочник “Авторы” и “Книги”, когда  один  автор  может  написать  несколько книг, в тоже время одна книга  может  быть  написана  несколькими  авторами.

2. Реквизиты обработок.
Для чего используются реквизиты обработок, и как хранятся в информационной базе?

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.

комментариев 26 на “Быстрый старт. Мастер-группа Q&A от 05.05.2012”

  1. Добрый день, тестирую создание внешней печатной формы для ЗУП. Есть трудовой договор фирмы, хотел поместить его вместо типового договора. Печатная форма трудового договора выводится когда выбирается  Справочник Сотрудники – далее конктерный сотрудник – там есть кнопка вывода Трудового договора. 

    Создал внешнюю форму Epf – создал реквизит СсылкаНаОбъект – положил его в основную форму. Реквизит ссылочный тип данных на Справочники.Объект.Сотрудники организаций.

    Когда запускаю обработку – пишет ошибку {Форма.Форма.Форма(2)}: Значение не является значением объектного типа (Показать)
     Печать().Показать();

    Что может быть здесь неправильно?   
         

    • Андрей Шнитов 15.06.2012 в 09:34

      Добрый день!

      Вам нужно проверить, что возвращает функция Печать(). Для этого модифицируйте код следующим образом:

      ТабДок = Печать();
      ТабДок.Показать();

      Проанализируйте в отладчике значение переменной ТабДок. Возможно, значение переменной будет “Неопределено”. Тогда, анализируйте функцию Печать().

  2. Добрый день,

    Изучал тему быстрых клавиш, вот если открыт какой-либо документ – как можно закрыть и документ и конфигурацию сразу быстрыми клавишами?. Есть ли у вас список всех типовых горячих клавиш 1С 8.2?  

    • Андрей Шнитов 07.06.2012 в 17:40

      Попробуйте Alt+F4.
      Полный список горячих клавиш смотрите в справке, которая вызывается в режиме конфигуратора кнопкой F1.
      Раздел справки называется “Сочетания клавиш (Конфигуратор)”

      • Посмотрел. Искал как можно выделить целую строку в коде. нашел либо курсор в начало строки и клик на мыши или shift+end – Можно ли выделить строку кода, если курсор находится в любом месте строки?

        Удалить строку так можно – Ctrl+L  

        • Андрей Шнитов 13.06.2012 в 11:35

          Home+Shift+End, либо один щелчок мыши на левой колонке текста модуля (там, где устанавливаются точки останова)

  3. Изучаю тему Ввод на основании. Есть документ ЗаказПокупателя, на основании него создается документ СчетНаОплату. В каком модуле происходит создание нового документа СчетНаОплату? В процедуре ОбработкаЗаполнения похоже нет.

    Видимо это Документы.СчетНаОплатуПокупателя.СоздатьДокумент();
    Как это можно быстро найти в конфигурации?

    • Андрей Шнитов 01.06.2012 в 08:00

      Создание документа, в данной ситуации, не привязано к какому-либо модулю или оператору. Документ автоматически создается платформой. Но дальнейшее заполнение документа может осуществляться как в обработке заполнения, так и в подписке на обработку заполнения.

      • Просто интересует в каком месте конфигурации  документ СчетНаОплату  – <… автоматически создается платформой.

      • Может просто система сначала открывает форму документа СчетНаОплату – тогда вопрос – где в таком случае открывается форма СчетНаОплату? В модкле объекта похоже нет.

        • Андрей Шнитов 01.06.2012 в 14:26

          Точки входа в конфигурации для обработки этого события нет, как и определенной строчки программного кода. После того как мы настроили в режиме конфигуратора, что один документ вводится на основании другого, платформа в пользовательском режиме автоматически создает в основной форме документа-основания команду: Создать на основании – . Обработку этой команды (создание нового объекта и открытие его формы) платформа осуществляет автоматически.

          • Сделал такую проверку – если на основании Заказа покупателя
            введен Счет на оплату, запрашивается диалог хотите ли
            продолжить работу. Если Да, то все нормально – Если нет,
            то сейчас открывается форма Счета на оплату, но реквизиты не заполняются.

            Хотя в таком случае хотелось бы, чтобы форма не открывалась.

            Код разместил в процедуре ОбработкаЗаполнения Счета на оплату.  Как можно тогда реализовать такую проверку?
             

            • Андрей Шнитов 02.06.2012 в 15:11

              У меня к вам два вопроса прежде чем продолжим обсуждение:
              1) Какая цель данной доработки? Потому, что здесь похоже на дублирование действий системы. Пользователь уже выбрал команду “Ввести на основании”, а вы у него еще раз спрашиваете хочет ли он продолжить работу. Даже если пользователь ошибся, выбрав данную команду, он легко может отказаться от этой операции, нажав Esc. При этом форма документа закроется без сохранения.
              2) Как вы реализовали вывод вопроса в модуле объекта, если этот модуль компилируется на сервере?

              • Просто поставили такую задачу – напомнить пользователю,
                что уже введено определенное количество счетов на
                на основании ЗаказаПокупателя.
                Диалог организован на процедуре Вопрсос в УТ –
                обычная форма.

                • Андрей Шнитов 03.06.2012 в 14:50

                  Добрый день!
                  1) Какая версия УТ?
                  2) Напишите более подробно, как реализовано решение. Желательно с фрагментами программного кода.

              • Конфигурация УТ Украина 2.3.16

                ОбработкаЗаполнения
                Процедура ОбработкаЗаполнения(Основание)
                #Если Клиент Тогда
                 Если ТипЗнч(Основание) = Тип(“ДокументСсылка.ЗаказПокупателя”) Тогда
                  //ТИЮ_Начало Если вводится СчетНаОплатуПокупателя проверить другие счета на этом же основании
                  НашЗаказПокупателяСсылка=Основание;
                  
                  //Выбор всех счетов
                  Запрос = Новый Запрос;
                     Запрос.Текст =
                   “ВЫБРАТЬ
                   | СчетНаОплатуПокупателю.Номер КАК НомерСчета,
                   | СчетНаОплатуПокупателю.ЗаказПокупателя.Номер КАК НомерЗаказаПокупателя,
                   | СчетНаОплатуПокупателю.ЗаказПокупателя.Ссылка КАК ЗаказПокупателяДокумент
                   |ИЗ
                   | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю”;
                   
                  Результат = Запрос.Выполнить();
                  ВыборкаДетальныеЗаписи = Результат.Выбрать();
                  //Найдем – есть ли Счета
                  КоличествоУжеЗаведенныхСчетов=0;
                  Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                   
                   ЗаказПокупателяДокумент=ВыборкаДетальныеЗаписи.ЗаказПокупателяДокумент;
                   
                   Если НашЗаказПокупателяСсылка=ЗаказПокупателяДокумент Тогда
                    
                    //Сообщение = Новый СообщениеПользователю;
                    //Сообщение.Текст = “На основании ЗаказаПокупателя есть введенные СчетаНаОплату”;
                    //Сообщение.Сообщить();
                    КоличествоУжеЗаведенныхСчетов=КоличествоУжеЗаведенныхСчетов+1;
                    
                   КонецЕсли;
                     
                  КонецЦикла;
                  
                  Если КоличествоУжеЗаведенныхСчетов<>0 Тогда
                    //Опрос пользователя о продолжении ввода на основании
                    Режим = РежимДиалогаВопрос.ДаНет;  
                    Ответ = Вопрос(“На основание этого Заказа покупателя уже создан Счет -(“+КоличествоУжеЗаведенныхСчетов+”шт.) на оплату покупателя, продолжить создание Счета?”, Режим, 0);  
                    
                    Если Ответ = КодВозвратаДиалога.Нет Тогда  
                     
                     Сообщение = Новый СообщениеПользователю;
                     Сообщение.Текст = “Выбрано Нет”;
                     Сообщение.Сообщить();
                     
                    Иначе
                     Сообщение = Новый СообщениеПользователю;
                     Сообщение.Текст = “Выбрано Да”;
                     Сообщение.Сообщить();
                    КонецЕсли;
                  КонецЕсли;
                  // Заполнение по заказу
                  ЗаказПокупателя = Основание;
                  
                  Если КоличествоУжеЗаведенныхСчетов=0 Тогда
                  
                   ЗаполнитьПоЗаказуПокупателя(); 
                  
                  КонецЕсли;
                  //ТИЮ_Закончено Если вводится СчетНаОплатуПокупателя проверить другие счета на этом же основании
                  
                  //ТИЮ_Для функционала ОплатаОтДругогоЛица
                  СтруктурнаяЕдиницаКонтрагента_КП = Основание.СтруктурнаяЕдиницаКонтрагента_КП;
                  
                        УправлениеЗапасами.ЗаполнитьСоставНабораПоОснованию(ЭтотОбъект, Основание);
                 ИначеЕсли ТипЗнч(Основание) = Тип(“ДокументСсылка.РеализацияТоваровУслуг”) Тогда
                  
                  // Заполнение по реализации
                  Если ЗначениеЗаполнено(Основание.Сделка) И ТипЗнч(Основание.Сделка) = Тип(“ДокументСсылка.ЗаказПокупателя”) Тогда
                   ЗаказПокупателя = Основание.Сделка;
                  КонецЕсли;
                  ЗаполнитьПоРеализации(Основание);
                 ИначеЕсли ТипЗнч(Основание) = Тип(“ДокументСсылка.Событие”) Тогда
                  Комментарий               = Основание.Комментарий;
                  КонтактноеЛицоКонтрагента = Основание.КонтактноеЛицо;
                  Контрагент                = Основание.Контрагент;
                  Ответственный             = Основание.Ответственный;
                  Организация               = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию( глЗначениеПеременной(“глТекущийПользователь”), “ОсновнаяОрганизация”);
                  СтруктураПараметровДляПолученияДоговора = ЗаполнениеДокументов.ПолучитьСтруктуруПараметровДляПолученияДоговораПродажи();
                  ДоговорКонтрагента  = ЗаполнениеДокументов.ПолучитьДоговорПоОрганизацииИКонтрагенту(Организация, Контрагент, СтруктураПараметровДляПолученияДоговора);
                 КонецЕсли;
                #КонецЕсли
                КонецПроцедуры // ОбработкаЗаполнения()

                  

                • Андрей Шнитов 05.06.2012 в 07:57

                  В вашем случае задачу не решить с помощью процедуры ОбработкаЗаполнения в модуле объекта из-за того, что в ней нельзя повлиять на открытие/закрытие формы документа “Счет на оплату”. Выход здесь следующий – создавать в форме документа “Заказ покупателя” новую кнопку для отработки ввода на основании и прописывать собственный алгоритм.

                • Спасибо.

                • Андрей Шнитов 06.06.2012 в 10:34

                  igortar, пожалуйста! :)

  4. Добрый день,

    Изучаю тему модуля 4 – заполнение табличных частей документа из запроса через внешнюю обработку на примере УТ

    Есть документ ЗаказПокупателя, в нем в табличной части есть колонка Размещение.

    В шапке документа есть реквизит Склад/Группа.

    Подключил внешнюю обработку ЗаполнениеСклада к кнопке Заполнить.

    В Обработке сделал запрос к табличной части документа и реквизиту склад.

    Как бы теперь обойти результат запроса и присвоить каждой строчке табличного документа в колонке Размещение – значение реквизита склад?

    Спасибо.

    • Добрый день, Игорь!

      Ознакомьтесь с уроком “5.6.14. Заполнение документа “Поступление товаров и услуг” десятью самыми продаваемыми товарами”.
      Вам нужно реализовать похожий механизм.

      Запросом к табличной части обращаться не нужно (ведь вам нужно просто заполнить колонку).
      Необходимо поработать с объектом “Табличная Часть”.

  5. Первый вопрос в мастер-группу, поэтому заранее извините, если не в ту ветку.
    Вопрос по ДЗ 1.2 
     Непонятно,чем отличается добавление в списки “Левая колонка” и”Правая колонка” при настройке рабочего стола. Визуально последствия выглядят одинаково.

    Вопрос общий – куда выкладывать замечания по замеченным неточностям видеоуроков ?
     

    • Андрей Шнитов 10.05.2012 в 20:00

      Принципиально ничем, кроме того, что ширину левой колонки можно настроить в отношении 2:1 относительно правой. Также, если выберите для отображения одну колонку, то будет отображаться, именно, левая колонка. Замечания присылайте на mg@spec8.ru

  6. Здравствуйте, первое сообщение в мастер группу, так что может не в тему….
    меня интерисует вопрос: есть ли разница между внешними обработками и входящими в состав конфигурации, а именно в составе реквизитов в них. Может есть какие то особенности, кроме того, что внешняя находится во внешнем файле.

    • Андрей Шнитов 08.05.2012 в 20:00

      Принципиальная разница в том, что внешний объект не может быть встроен в командный интерфейс.
      Отсюда и отсутствие команд и невозможность настроить права доступа