1С Режим Конфигуратор

       

Дополнительно


Контрагент

с кем мы ведем дела

С.Контрагенты

Д



Договор

по какому договору

С.Договора

Д, И




Сумма

Сумма долга

Число 15.2




ФлагДвижения

тип движения

Число 1.0

+

Здесь:

Д – отбор движений;

И – отбор итогов;

+ - не отрицательный;

Движения по регистру будут следующие:

Приход – приход к нам товара (общей суммой) либо денег;

Расход – отгруз нами товара (общей суммой) либо выплата денег.

Переходим к конструированию регистра.

  • Создаем новый регистр;
  • Идентификатор - "Взаиморасчеты", Комментарий – "регистр взаиморасчетов с контрагентами", Измерения, ресурсы, реквизиты – по таблице, Тип регистра – остатки, быстрая обработка движений – по желанию;
  • 2.13 Первый документ. Приход денег.

    У нас есть контрагенты и договора с ними, у нас есть место (регистр), где мы можем хранить информацию по взаиморасчетам с ними. Теперь нам нужен документ, который позволит вводить эти взаиморасчеты. Первым нашим документом будет документ "Приход денег".

    В любом документе в 1С есть два поля, присутствующих всегда. Это "ДатаДок" – дата документа и "НомерДок" – номер документа. 1С позволяет завести еще сколько надо полей, которые будут присутствовать во всех документах. Это "Общие реквизиты" документа. Заведем один такой общий реквизит – "Комментарий" текстового типа длиной не более 100 символов. Назначение его ясно из названия.

  • Входим в ветвь "Документы" дерева метаданных;
  • Устанавливаем курсор на раздел "Общие реквизиты";
  • Вводим новый общий реквизит;
  • Идентификатор – "Комментарий", тип – Строка, длина – 100;

    Обговорим теперь структуру нашего документа "Приход денег". Кроме полей с датой, номером и комментарием нам, разумеется, понадобится указание – кто нам эти деньги платит? – "Контрагент", на каком основании он платит нам эти деньги? – "Договор", сколько денег он нам платит? – "Сумма". Типы полей "Контрагент" и "Договор" - соответствующие справочники. Поле "Сумма" будет у нас Число 9.2. Создадим этот документ.

  • Вводим новый документ;



  • Идентификатор – "ПриходДенег", Синоним – "Приход денег", Комментарий – "приход денег от контрагента";


  • Документ будет проводиться – да, при записи документ будет перепроводиться – да;

    Здесь необходимо дать пояснение, что такое проведение документа. Проведение документа – это внесение соответствующих изменений в механизмы хранения данных (в регистры, планы счетов, журналы расчетов). Документ, у которого стоит указание на возможность проведения, может находиться в трех состояниях – не существует (наиболее частое), записан – данные сохранены, проведен – данные сохранены и учтены в механизме хранения данных (если этот механизм не указан, документ все равно считается проведенным) – т. е. совершил какое-то движение в учете.


  • Документ будет принадлежать журналу – да, Создать новый журнал – "ДвижениеДенег";

    Журнал – список документов определенного/определенных видов. Имеет экранную форму.


  • И документ и журнал вставим в экранное меню;


  • Открылось окно свойств документа;


  • В перечень реквизитов шапки занесем наши реквизиты – "Контрагент", "Договор", "Сумма". Табличной (многострочной) части в этом документе нет;


  • Нумератор – не назначен, Периодичность – год;

    Периодичность – это как часто будет появляться документ с номером 1.


  • Автоматическая нумерация строк – нет (у нас строк не будет);


  • Оперативный учет – ДА;

    Этим мы покажем, что движение осуществляется по регистрам.


  • Создадим форму документа;


  • Вставим поле с текстом, где мы укажем название документа;


  • Расставим элементы экранной формы документа поудобнее;


  • В свойствах поля договор на закладке "Дополнительно" в поле "связан с" пишем "Контрагент";



    Справочник "Договора" у нас подчиненный, и мы в форме документа указываем, что договора мы будем брать, принадлежащие ранее указанному контрагенту.


  • Мы желаем, чтобы при выборе другого контрагента, поле договор очищалось;


  • В свойствах поля ввода "Контрагент" на закладке "Дополнительно" пишем формулу Контрагент();




  • В модуле формы пишем следующую процедуру:

    Перем СтКонтрагент;

    // Это мы добавили переменную, область действия которой

    // весь модуль формы документа

    //-----------------------------------------------

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

    // Это предопределенная процедура, запускается при возникновении

    // события – открытие формы документа

    // Она сформировалась автоматически, как мы указали в визарде создания

    // документов

      ПриЗаписиПерепроводить(1);

    // Это означает, что если мы проведенный документ изменили, то при

    // попытке его сохранения программа попытается его перепровести

      СтКонтрагент=Контрагент;

    // Инициализируем переменную СтКонтрагент значением реквизита Контрагент

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

    //-----------------------------------------------

    Процедура Контрагент()

      Если Контрагент<>СтКонтрагент Тогда

    // В поле Контрагент содержимое изменилось

        Договор="";

    // Очищаем поле Договор

        СтКонтрагент=Контрагент;

    // Инициализируем переменную СтКонтрагент новым значением

    // реквизита Контрагент

      КонецЕсли;

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


  • Закроем форму;


  • Откроем Модуль документа;


  • Мы видим текст:

    // ********************

    Процедура ОбработкаПроведения()

    //Здесь следует написать алгоритм проведения документа

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

    Модуль документа служит для задания правил внесения изменений в механизмы хранения данных.


  • Перепишем процедуру ОбработкаПроведения:

    Процедура ОбработкаПроведения()

    // Предопределенная процедура, запускающая механизмы регистрации движений

      Если Контрагент.Выбран()=0 Тогда

    // Выбран() – метод, возвращающий состояние поля ввода = 1, если поле

    // заполнено и 0 если нет

        Предупреждение("Контрагент не выбран");

    // Вызовем на экран информационное окно с сообщением

        НеПроводитьДокумент();

    // Указываем, что документ заполнен неправильно – он не должен быть проведен

      КонецЕсли;

      Если Договор.Выбран()=0 Тогда

        Предупреждение("Договор не выбран");



        НеПроводитьДокумент();

      КонецЕсли;

      Если Договор.ДатаДоговора>ДатаДок Тогда

    // Договор еще не был заключен на дату документа

        Предупреждение("Неверная дата договора");

        НеПроводитьДокумент();

      КонецЕсли;

    // Теперь будем заполнять поля регистра "Взаиморасчеты"

      Регистр.Взаиморасчеты.Контрагент = Контрагент;

      Регистр.Взаиморасчеты.Договор = Договор;

      Регистр.Взаиморасчеты.Сумма = Сумма;

    // Движение – поступление денег за продаваемый нами товар

    // ФлагДвижения = 4

      Регистр.Взаиморасчеты.ФлагДвижения = 4;

    // Наш долг возрос, либо долг контрагента уменьшился – на регистр

    // пишем сумму приходом

      Регистр.Взаиморасчеты.ДвижениеПриходВыполнить();

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


  • Закрываем модуль документа;


  • Закроем окно свойств документа;


  • Переходим к редактированию журнала. Находим журнал "ДвижениеДенег";


  • Входим в редактирование журнала;


  • Добавим новую графу;


  • Идентификатор – "Сумма";


  • В возможных значениях отметим Документ.ПриходДенег.Шапка.Сумма;


  • В выбранных значениях появилось указание на поле документа "Приход денег" "Сумма";


  • Входим в форму списка журнала;


  • Разместим графы журнала как будет удобнее, и поменяем им ширину, чтобы все было видно;


  • Закроем форму списка журнала и окно свойств журнала;


  • Сохраним конфигурацию;


  • 2.14 Работа с документом.

    Документ готов. Проверим его в работе.

  • Открываем 1С:Предприятие в монопольном режиме;


  • Через меню "Операции" команда "Управление оперативными итогами";


  • Ставим дату актуальности итогов на 01.10.2000;


  • Нажимаем [Установить];


  • Появился вопрос "Изменить Точку Актуальности итогов";


  • Отвечаем [Да];


  • Нам сообщают, что изменение точки актуальности завершено. Подтверждаем получение сообщения (подробнее см. "Руководство пользователя");


  • Выходим из окна управления итогами;


  • Из нового раздела меню "Документы" вызываем документ приход денег;




  • Номер документа – 1, Дата – 02.10.2000, Комментарий – "наш первый документ", Контрагент – "Винни-Пух и все все все", Договор – "№12 от 2 Октября 2000 г.", Сумма – 1000;


  • [Закрыть];


  • Нас спросят – сохранить ли документ? [Да];


  • Попросят указать время – в начало дня;


  • Входим в меню "Журналы". Выберем журнал "ДвижениеДенег";


  • Если мы в журнале ничего не видим, значит, у нас стоит не тот период просмотра журнала. Входим в меню Действия, команда "Интервал". Устанавливаем диапазон дат от 01.10.2000 до текущей даты;


  • Мы видим наш документ. Пиктограммка слева – голубенький листок бумажки. Это значит, что документ сохранен;


  • Откроем этот документ, дважды щелкнув его мышкой;


  • Теперь нажмем [ОК];


  • Нас спросят про сохранение документа – [Да];


  • Провести документ? – [Да];


  • Точка актуальности будет перенесена на новую дату. Продолжить? – [Да];

    Нами точка Актуальности была выставлена на 01.10.2000, а документ от 02.10.2000 – точка актуальности перемещается на последний проведенный документ.


  • В журнале пиктограммка приобрела красную галочку – флаг проведения документа, и красную черточку внизу – признак того, что ТА (Точка Актуальности стоит на текущем документе);


  • Посмотрим, какие движения произвел наш документ;


  • Курсор на документ. Меню "Действия", команда "Движения документа". Появилось окошко. В нем галочка стоит на строке с надписью Взаиморасчеты – это означает, что движение было только по этому регистру;

    Тут есть еще строчка – Реквизиты справочников. Документ при проведении может менять значения периодических реквизитов справочников! (Если, конечно, это прописать в процедуре ОбработкаПроведения).


  • Выбираем эту строку;


  • Появилось окно "Движения регистров Взаиморасчеты (Приход денег 1 (02.10.2000))";


  • Видим в списке движений одну строку со знаком плюс (+) – это был приход. Движение было только одно – как мы и написали;


  • Закроем 1С:Предприятие;


  • 2.15 Отчет по долгам.

    Мы теперь, по данным нашей программы, должны фирме "Винни-Пух и все все все" – 1000 ед. денег. Это мы можем определить из нашего единственного документа, но когда таких документов будет много, и контрагентов в документах будет тоже много, мы запутаемся. Пусть лучше машина сама показывает нам кто, кому, по какому договору и сколько должен. Для таких целей существуют отчеты. Простейший отчет – "список номенклатуры" – мы уже создавали. Этот отчет у нас был включен в форму списка справочника. Теперь мы создадим отчет, имеющий свою отдельную форму.



  • В дереве метаданных, в разделе отчеты, создаем новый отчет;


  • Идентификатор – "Взаиморасчеты";


  • А вот вставлять в интерфейс из визарда не будем. Мы потом сами ручками вставим;


  • Конструкторы никакие вызывать не будем – так напишем (либо скопируем с сей методички);


  • Появилась экранная форма отчета;


  • Добавим поле ввода. Идентификатор – ВыбДата, тип – дата;


  • В модуле формы пишем:

    Процедура Сформировать()

      Запрос=СоздатьОбъект("Запрос");

    // Запрос – специальный объект в 1С, служит для получения структурированной

    // выборки данных

      ТЗ="

      |Период с ВыбДата по ВыбДата;

      |Контр = Регистр.Взаиморасчеты.Контрагент;

      |Дог = Регистр.Взаиморасчеты.Договор;

      |Сум = Регистр.Взаиморасчеты.Сумма;

      |Функция СумКонОст = КонОст(Сум);

      |Группировка Контр упорядочить по Контр.Код;

      |";

    // Это текст запроса. Подробности в "Описании языка" том 2

      Если Запрос.Выполнить(ТЗ)=0 Тогда

        Сообщить("Запрос не выполнен");

        Возврат;

      КонецЕсли;

    // Если запрос будет не выполнен по какой либо причине, метод Выполнить()

    // вернет 0. Мы сообщим пользователю о произошедшей ошибке, и

    // командой Возврат – прервем выполнение процедуры

      ИтогоМы=0;

      ИтогоНам=0;

    // В этих двух переменных мы будем хранить итоговую информацию по долгу

      Таб=СоздатьОбъект("Таблица");

      Таб.ИсходнаяТаблица("");

      Таб.ВывестиСекцию("Шапка");

      Пока Запрос.Группировка("Контр")=1 Цикл

    // Получаем очередную запись из запроса

        ТЭ=Запрос.Контр;

    // Во временную переменную передаем значение выборки

        Долг=Запрос.СумКонОст;

    // Определяем суммарный долг по текущему значению выборки

    // Дальше уже все знакомые нам методы

        Если ТЭ.ЭтоГруппа()=1 Тогда

          НазГр=СокрЛП(ТЭ.Наименование);

          Если  Долг=0 Тогда

          ИначеЕсли Долг>0 Тогда



            Мы=Долг;

            Нам=0;

          ИначеЕсли Долг<0 Тогда

            Мы=0;

            Нам=-Долг;

          КонецЕсли;

          Таб.ВывестиСекцию("Группа");

        Иначе

          Наз="("+СокрЛП(Строка(ТЭ.Код))+") "+СокрЛП(ТЭ.Наименование);

          Если  Долг=0 Тогда

            Продолжить;

          ИначеЕсли Долг>0 Тогда

            Мы=Долг;

            Нам=0;

            ИтогоМы=ИтогоМы+Мы;

          ИначеЕсли Долг<0 Тогда

            Мы=0;

            Нам=-Долг;

            ИтогоНам=ИтогоНам+Нам;

          КонецЕсли;

          Таб.ВывестиСекцию("Строка");

        КонецЕсли;

      КонецЦикла;

      Таб.ВывестиСекцию("Итого");

      Таб.ТолькоПросмотр(1);

      Таб.ПараметрыСтраницы(1,100,1);

      Таб.Показать("");

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


  • Перейдем на закладку таблица, создадим шаблон, такого вида:



  • Закроем форму отчета;


  • Теперь будем включать наш отчет в меню. В окне метаданных перейдем на закладку "Интерфейсы";


  • Меню Действия, команда "Редактировать". Редактировать меню;


  • Входим в редактирование строки "новая колонка...";



  • Название пишем "Отчеты";


  • [ОК];


  • Открываем появившийся раздел меню "Отчеты";


  • Открываем подраздел меню "новый...";



  • Выбираем объект – Отчеты.Взаиморасчеты;


  • Поля Название, Подсказка заполнились автоматически. Их можно поменять;


  • [ОК];


  • Меню Действия команда "Тест" вызовет окошко, где будет показано, как будет выглядеть наше меню;


  • Закрываем тестовое окно;


  • Закрываем окно редактирования меню;


  • Возвращаемся к дереву метаданных;


  • Сохраняем конфигурацию;


  • Входим в 1С:Предприятие;




  • Через меню Отчеты вызываем наш отчет "Взаиморасчеты";


  • Устанавливаем дату 02.10.2000;


  • Нажимаем [Сформировать];


  • Результат. Мы должны всем поставщикам 1000, из них Винни-Пуху 1000, а всего наш долг 1000. Что и требовалось;


  • 2.16 Документ "Выплата денег".

    Документ "Выплата денег" будет практически аналогичен документу "Приход денег". Поэтому мы его создадим простым копированием. И потом внесем в него ряд небольших изменений.

  • В дереве метаданных скопируем документ "ПриходДенег" в буфер обмена Windows;


  • Вставим из буфера обмена в раздел "Документы" копию;


  • Изменим Идентификатор на "ВыплатаДенег", аналогично изменим Синоним и комментарий;


  • Внесем соответствующие косметические изменения в форму документа;


  • В модуле проведения документа вместо строки:

     Регистр.Взаиморасчеты.ДвижениеПриходВыполнить();

    напишем

     Регистр.Взаиморасчеты.ДвижениеРасходВыполнить();


  • В модуле проведения документа вместо строки:

     Регистр.Взаиморасчеты.ФлагДвижения = 4;

    напишем

     Регистр.Взаиморасчеты.ФлагДвижения = 3;


  • В журнале "ДвижениеДенег" изменим реквизит "Сумма";


  • В выбранные значения добавим реквизит "Сумма" из нового документа;


  • Перейдем на закладку "Интерфейсы" и добавим в меню в раздел "Документы" наш документ "ВыплатаДенег";


  • Команду укажем – Документы.ВыплатаДенег.Ввести;


  • Закроем лишние окна;


  • Сохраним конфигурацию;


  • Откроем 1С:Предприятие;


  • Создадим новый документ типа "Выплата денег". Заполним его. Сохраним. Проведем. И полюбуемся на движения которые сформировал документ и результат, который выдаст нам отчет;


  • Глава 6

    2.17 Документ "Изменение цен".

    Мы уже упоминали, что документы при проведении могут изменять значения периодических реквизитов справочников. Разумеется, документы могут изменять значения и непериодических реквизитов, но это мало интересно. При изменении периодических, программа будет запоминать когда и с помощью чего меняли значения.



    В справочнике "Номенклатура" мы имеем два реквизита интересующего нас типа: "ЦенаП" и "ЦенаР". В их свойствах мы указали, что они могут изменяться документами. Спроектируем такой документ.

    Пусть наш документ будет иметь возможность изменять цену не одного товара, а любого количества. Значит наш документ будет содержать многострочную часть. Документ должен иметь возможность изменять сразу и цену поступления и цену реализации. При работе с ценами товара мы хотим видеть, какие цены были до изменения. Эти поля должны быть не редактируемые. Для документа будет заведен отдельный журнал. Создадим этот документ. Все данные по документу сведем в таблицу:

    Идентификатор: ИзменениеЦен

    Журнал: ИзменениеЦен

    Нумератор: Нет        

    Периодичность: Год

    Длина: 5        

    Тип: число

    Уникальность: да    

    Автонумерация: да

    Оперативный учет: нет

    Может являться основанием для документа любого вида?: нет


    Содержание раздела