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

       

Дополнение


Изделие

С.Изделия

Кол

Число 5.0



+

В журнал добавим графу "Сборщик". Создаем форму документа.

Поля Валюта, ДатаКурса, Курс удаляем. Поле АвторДокумента делаем недоступным. Добавляем кнопку [Заявка] с формулой Заявка(), по этой кнопке мы будем распечатывать перечень входящих в изделия комплектующих, с указанием общего количества.

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


В модуле формы документа пишем:

Процедура ВводНового()

  АвторДокумента=СокрЛП(ИмяПользователя());

  ФирмаДокумента=Константа.ОснФирма;

  Валюта=Константа.ОснВалюта;

  ДатаКурса=ДатаДок;

  Курс=1;

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

//==========================================================

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

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

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

//==========================================================

Процедура Заявка()

// Печать спецификации

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

  ТабЗн.НоваяКолонка("Ком","Справочник.Комплектующие");

  ТабЗн.НоваяКолонка("Кол","Число",12,0);

  СпрКом=СоздатьОбъект("Справочник.Комплектация");

// Подчиненный справочнику Изделия справочник Комплектация

  ВыбратьСтроки();

// Обходим строки документа

  Пока ПолучитьСтроку()=1 Цикл

    СпрКом.ИспользоватьВладельца(Изделие);

// Выбираем комплектующие по изделию

    СпрКом.ВыбратьЭлементы();

// Обходим справочник с составом комплектов




    Пока СпрКом.ПолучитьЭлемент()=1 Цикл

      ТабЗн.НоваяСтрока();

      ТабЗн.Ком=СпрКом.ТекущийЭлемент().Комплектующее;

// Это мы определили, что входит в комплект

      ТабЗн.Кол=Кол;

// И сколько

    КонецЦикла;

    СпрКом.ИспользоватьВладельца("");

  КонецЦикла;

  СпрКом="";

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

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

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

  ТабЗн.Свернуть("1","2");

// Суммируем строки с одинаковыми комплектующими

  ТабЗн.Сортировать("1");

  ТабЗн.ВыбратьСтроки();

  Стр=1;

  Пока ТабЗн.ПолучитьСтроку()=1 Цикл

    Комп=ТабЗн.Ком;

    НазвРодителя=СокрЛП(Комп.Родитель.Наименование);

    Поз1=Найти(НазвРодителя,"(");

    Поз2=Найти(НазвРодителя,")");

    ГОСТ=Сред(НазвРодителя,Поз1+1,Поз2-Поз1-1);

    Ком=СокрЛП(Комп.Наименование)+" "+ГОСТ;

    Колич=ТабЗн.Кол;

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

    Стр=Стр+1;

  КонецЦикла;

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

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

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

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

//==========================================================

Функция Ост(Скл,Изд)

// Функция с двумя параметрами на входе: Склад и Изделие

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

  СпрКом=СоздатьОбъект("Справочник.Комплектация");

  БухИтоги=СоздатьОбъект("БухгалтерскиеИтоги");

  БухИтоги.ИспользоватьПланСчетов(ПланыСчетов.Наш);

  БухИтоги.ИспользоватьРазделительУчета(ФирмаДокумента);

  СпрКом.ИспользоватьВладельца(Изд);

  СпрКом.ВыбратьЭлементы();

// Обходим все комплектующие, входящие в изделие

  Пока СпрКом.ПолучитьЭлемент()=1 Цикл

    СКом=СпрКом.ТекущийЭлемент();



    Ком=СКом.Комплектующее;

    БухИтоги.ИспользоватьСубконто(ВидыСубконто.МестоХранения,Скл,2);

    БухИтоги.ИспользоватьСубконто(ВидыСубконто.Комплектующее,Ком,2);

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

    БухИтоги.ВыполнитьЗапрос(,ДатаДок,"10.2");

    КолКом=БухИтоги.СКД(3);

// Выясняем, сколько штук этих комплектующих еще есть на складе

    СпЗн.ДобавитьЗначение(КолКом);

// Добавляем в список

  КонецЦикла;

  СпрКом="";

  ИОст=0;

// Ищем минимальное значение в списке

  Для ЧЦ=1 По СпЗн.РазмерСписка() Цикл

    ТТТ="";

    Если ЧЦ=1 Тогда

      КолСп=СпЗн.ПолучитьЗначение(ЧЦ,ТТТ);

      ИОст=КолСп;

    Иначе

      КолСп=СпЗн.ПолучитьЗначение(ЧЦ,ТТТ);

      Если ИОст>КолСп Тогда

        ИОст=КолСп;

      КонецЕсли;

    КонецЕсли;

  КонецЦикла;

  Возврат(ИОст);

// Выдаем это минимальное значение

КонецФункции

//==========================================================

Процедура Кол()

  ОстКомпл=Ост(Склад,Изделие);

// Выясняем остаток на складе

  Если Кол>ОстКомпл Тогда

// Если запросили больше

    Кол=ОстКомпл;

// Даем сколько есть

  КонецЕсли;

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

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

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

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

    Сообщить("Документ Наряд на сборку №"+НомерДок+"

    |от "+ДатаДок+" не проведен.

    |Не выбран склад заготовок");

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



    Возврат;

  КонецЕсли;

  Если Сборщик.Выбран()=0 Тогда

    Сообщить("Документ Наряд на сборку №"+НомерДок+"

    |от "+ДатаДок+" не проведен.

    |Не указан сборщик");

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

    Возврат;

  КонецЕсли;

// Это были обычные проверки

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

  ТабЗн.НоваяКолонка("Ком","Справочник.Комплектующие");

  ТабЗн.НоваяКолонка("Кол","Число",12,0);

  СпрКом=СоздатьОбъект("Справочник.Комплектация");

  ВыбратьСтроки();

  Пока ПолучитьСтроку()=1 Цикл

    СпрКом.ИспользоватьВладельца(Изделие);

    СпрКом.ВыбратьЭлементы();

    Пока СпрКом.ПолучитьЭлемент()=1 Цикл

      ТабЗн.НоваяСтрока();

      ТабЗн.Ком=СпрКом.ТекущийЭлемент().Комплектующее;

      ТабЗн.Кол=Кол;

    КонецЦикла;

    СпрКом.ИспользоватьВладельца("");

  КонецЦикла;

  БухИтоги=СоздатьОбъект("БухгалтерскиеИтоги");

  БухИтоги.ИспользоватьПланСчетов(ПланыСчетов.Наш);

  БухИтоги.ИспользоватьРазделительУчета(ФирмаДокумента);

  ФлагОтказа=0;

  ТабЗн.Свернуть("1","2");

  ТабЗн.ВыбратьСтроки();

  Пока ТабЗн.ПолучитьСтроку()=1 Цикл

    Ком=ТабЗн.Ком;

    Колич=ТабЗн.Кол;

    БухИтоги.ИспользоватьСубконто(ВидыСубконто.МестоХранения,Склад,2);

    БухИтоги.ИспользоватьСубконто(ВидыСубконто.Комплектующее,Ком,2);

    БухИтоги.ВыполнитьЗапрос(,ДатаДок,"10.2");

    КолКом=БухИтоги.СКД(3);

    Если Колич>КолКом Тогда

      ФлагОтказа=1;

      Сообщить(Строка(Ком));

    КонецЕсли;

  КонецЦикла;

// Если посмотреть модуль документа, это похоже на процедуру Заявка()



  Если ФлагОтказа=1 Тогда

    Сообщить("Документ Наряд на сборку №"+НомерДок+"

    |от "+ДатаДок+" не проведен.

    |Заказ по вышеперечисленным позициям

    |превышает остаток на складе");

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

    Возврат;

  КонецЕсли;

// Отказ от проведения по причине нехватки комплектующих

  ТабЗн.УдалитьСтроки();

  ТабЗн="";

  ТабПар=СоздатьОбъект("ТаблицаЗначений");

  ТабПар.НоваяКолонка("Док","Документ.ПриходнаяНакладная");

  ТабПар.НоваяКолонка("Кол","Число",10,0);

  ТабПар.НоваяКолонка("Сум","Число",14,2);

  СуммаОпер=0;

  ВыбратьСтроки();

  Пока ПолучитьСтроку()=1 Цикл // По Изделию

// Обходим строки

    НС=НомерСтроки;

    Изд=Изделие;

    СпрКом.ИспользоватьВладельца(Изделие);

    СпрКом.ВыбратьЭлементы();

    Пока СпрКом.ПолучитьЭлемент()=1 Цикл // По Комплектующей

// Обходим комплектующие

      Колич=Кол;

      Ком=СпрКом.ТекущийЭлемент().Комплектующее;

      БухИтоги.ИспользоватьСубконто(ВидыСубконто.МестоХранения,Склад,2);

      БухИтоги.ИспользоватьСубконто(ВидыСубконто.Комплектующее,Ком,2);

      БухИтоги.ИспользоватьСубконто(ВидыСубконто.ПриходнаяНакладная,,1);

      БухИтоги.ВыполнитьЗапрос(,ДатаДок,"10.2");

      ТабПар.УдалитьСтроки();

      БухИтоги.ВыбратьСубконто(3);

// Выбираем только третье!!! субконто

      Пока БухИтоги.ПолучитьСубконто(3)=1 Цикл

// Определяем партии

        ДокП=БухИтоги.Субконто(3);

        КолП=БухИтоги.СКД(3);

        СумП=БухИтоги.СКД(1);

        ТабПар.НоваяСтрока();

        ТабПар.Док=ДокП;



        ТабПар.Кол=КолП;

        ТабПар.Сум=СумП;

      КонецЦикла;

      ТабПар.Сортировать("1+");

      ТабПар.ВыбратьСтроки();

      Пока ТабПар.ПолучитьСтроку()=1 Цикл // По Партии

// Обходим партии

        ДокП=ТабПар.Док;

        КолП=ТабПар.Кол;

        СумП=ТабПар.Сум;

        Если Колич>КолП Тогда

          ПривязыватьСтроку(НС);

          Операция.НоваяПроводка();

          Операция.Дебет.Счет = СчетПоКоду("20",ПланыСчетов.Наш);

          Операция.Кредит.Счет = СчетПоКоду("10.2",ПланыСчетов.Наш);

          Операция.Дебет.ВидЗатрат = Перечисление.ВидыЗатрат.НаКомплектующие;

          Операция.Дебет.Изделие = Изделие;

          Операция.Дебет.НарядНаКомплектацию = ТекущийДокумент();

          Операция.Кредит.МестоХранения = Склад;

          Операция.Кредит.Комплектующее = Ком;

          Операция.Кредит.ПриходнаяНакладная = ДокП;

          Операция.Фирма = ФирмаДокумента;

          Операция.Комментарий = "Передача комплектующих на сборку";

          Операция.НомерЖурнала = "10";

          Операция.Сумма = СумП;

          Операция.Количество = КолП;

          Колич=Колич-КолП;

          СуммаОпер=СуммаОпер+СумП;

// Накапливаем сумму операции по каждой проводке

        Иначе

          СумО=Окр(Колич*(СумП/КолП),2,1);

// Определяем сумму остатка через цену партии



          ПривязыватьСтроку(НС);

          Операция.НоваяПроводка();

          Операция.Дебет.Счет = СчетПоКоду("20",ПланыСчетов.Наш);

          Операция.Кредит.Счет = СчетПоКоду("10.2",ПланыСчетов.Наш);

          Операция.Дебет.ВидЗатрат = Перечисление.ВидыЗатрат.НаКомплектующие;

          Операция.Дебет.Изделие = Изделие;

          Операция.Дебет.НарядНаКомплектацию = ТекущийДокумент();

          Операция.Кредит.МестоХранения = Склад;

          Операция.Кредит.Комплектующее = Ком;

          Операция.Кредит.ПриходнаяНакладная = ДокП;

          Операция.Фирма = ФирмаДокумента;

          Операция.Комментарий = "Передача комплектующих на сборку";

          Операция.НомерЖурнала = "10";

          Операция.Сумма = СумО;

          Операция.Количество = Колич;

          СуммаОпер=СуммаОпер+СумО;

// Накапливаем сумму операции по каждой проводке

          Прервать;

// Все кончилось, больше партии по этому комплектующему обходить незачем

        КонецЕсли;

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

    КонецЦикла; // По Комплектующей

  КонецЦикла; // По Изделию

  Операция.Содержание = "Запуск производства";

  Операция.СуммаОперации = СуммаОпер;

  Операция.Автор = АвторДокумента;

  Операция.Записать();

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

Вроде бы все. Но этот механизм не будет правильно списывать партии в том случае, если в документе будут разные изделия, содержащие одинаковые комплектующие. Это показывает разницу в алгоритмическом подходе при использовании компонент Оперативный учет и Бухгалтерский учет. В Оперативном учете можно проводя строки документа все время отслеживать меняющиеся остатки, а в Бухгалтерском учете операция формируется в самом конце.



Например, в изделии А (10 шт.) есть комплектующая К, и в изделии Б (10 шт.) есть комплектующая К. Суммарно изделие К должно быть списано из партии 1 и из партии 2 по 10 штук, но этот механизм дважды спишет К из партии 1. А это неправильно. Перепишем эту процедуру заново:

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

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

    Сообщить("Документ Наряд на сборку №"+НомерДок+" от "+ДатаДок+"

    |не проведен.

    |Не выбран склад заготовок");

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

    Возврат;

  КонецЕсли;

  Если Сборщик.Выбран()=0 Тогда

    Сообщить("Документ Наряд на сборку №"+НомерДок+" от "+ДатаДок+"

    |не проведен.

    |Не указан сборщик");

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

    Возврат;

  КонецЕсли;

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

  ТабЗн.НоваяКолонка("Ком","Справочник.Комплектующие");

  ТабЗн.НоваяКолонка("Кол","Число",12,0);

  СпрКом=СоздатьОбъект("Справочник.Комплектация");

  ВыбратьСтроки();

  Пока ПолучитьСтроку()=1 Цикл

    СпрКом.ИспользоватьВладельца(Изделие);

    СпрКом.ВыбратьЭлементы();

    Пока СпрКом.ПолучитьЭлемент()=1 Цикл

      ТабЗн.НоваяСтрока();

      ТабЗн.Ком=СпрКом.ТекущийЭлемент().Комплектующее;

      ТабЗн.Кол=Кол;

    КонецЦикла;

    СпрКом.ИспользоватьВладельца("");

  КонецЦикла;

  БухИтоги=СоздатьОбъект("БухгалтерскиеИтоги");

  БухИтоги.ИспользоватьПланСчетов(ПланыСчетов.Наш);

  БухИтоги.ИспользоватьРазделительУчета(ФирмаДокумента);

  ФлагОтказа=0;

  ТабЗн.Свернуть("1","2");

  ТабЗн.ВыбратьСтроки();

  Пока ТабЗн.ПолучитьСтроку()=1 Цикл

    Ком=ТабЗн.Ком;



    Колич=ТабЗн.Кол;

    БухИтоги.ИспользоватьСубконто(ВидыСубконто.МестоХранения,Склад,2);

    БухИтоги.ИспользоватьСубконто(ВидыСубконто.Комплектующее,Ком,2);

    БухИтоги.ВыполнитьЗапрос(,ДатаДок,"10.2");

    КолКом=БухИтоги.СКД(3);

    Если Колич>КолКом Тогда

      ФлагОтказа=1;

      Сообщить(Строка(Ком));

    КонецЕсли;

  КонецЦикла;

  Если ФлагОтказа=1 Тогда

    Сообщить("Документ Наряд на сборку №"+НомерДок+" от "+ДатаДок+"

    |не проведен.

    |Заказ по вышеперечисленным позициям

    |превышает остаток на складе");

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

    Возврат;

  КонецЕсли;

// Без изменений

  ТабКом=СоздатьОбъект("ТаблицаЗначений");

  ТабКом.НоваяКолонка("Ком","Справочник.Комплектующие");

  ТабКом.НоваяКолонка("Док","Документ.ПриходнаяНакладная");

  ТабКом.НоваяКолонка("Кол","Число",10,0);

  ТабКом.НоваяКолонка("Сум","Число",14,2);

// В этой таблице мы будем хранить список комплектующих в разрезе партий

// в количестве, достаточном для списания

  ТабЗн.Сортировать("1+");

  ТабЗн.ВыбратьСтроки();

  Пока ТабЗн.ПолучитьСтроку()=1 Цикл

    КомП=ТабЗн.Ком;

    КолКом=ТабЗн.Кол;

    БухИтоги.ИспользоватьСубконто(ВидыСубконто.МестоХранения,Склад,2);

    БухИтоги.ИспользоватьСубконто(ВидыСубконто.Комплектующее,КомП,2);

    БухИтоги.ИспользоватьСубконто(ВидыСубконто.ПриходнаяНакладная,,1);

    БухИтоги.ВыполнитьЗапрос(,ДатаДок,"10.2");

    БухИтоги.ВыбратьСубконто(3);

    Пока БухИтоги.ПолучитьСубконто(3)=1 Цикл

      ДокП=БухИтоги.Субконто(3);

      КолП=БухИтоги.СКД(3);



      СумП=БухИтоги.СКД(1);

      Если КолКом>0 Тогда

// Заполняем таблицу по комплектующим-партиям

        ТабКом.НоваяСтрока();

        ТабКом.Ком=КомП;

        ТабКом.Док=ДокП;

        ТабКом.Кол=КолП;

        ТабКом.Сум=СумП;

        КолКом=КолКом-КолП;

      Иначе

        Прервать;

// Чтобы не выбирать лишних партий

      КонецЕсли;

    КонецЦикла;

  КонецЦикла;

  ТабЗн.УдалитьСтроки();

  ТабЗн="";

  ТабКом.Сортировать("1+,2+");

  СуммаОпер=0;

  ВыбратьСтроки();

  Пока ПолучитьСтроку()=1 Цикл // По Изделию

    НС=НомерСтроки;

    Изд=Изделие;

    СпрКом.ИспользоватьВладельца(Изделие);

    СпрКом.ВыбратьЭлементы();

    Пока СпрКом.ПолучитьЭлемент()=1 Цикл // По Комплектующей

      Колич=Кол;

      КомТ=СпрКом.ТекущийЭлемент().Комплектующее;

      ТабКом.ВыбратьСтроки();

      Пока ТабКом.ПолучитьСтроку()=1 Цикл // По Партии

// Выбираем партии из динамической таблицы!

        КомП=ТабКом.Ком;

        Если КомП<>КомТ Тогда

          Продолжить;

// Запрашиваемая комплектующая не соответствует строке в таблицу, идем дальше

        КонецЕсли;

        ДокП=ТабКом.Док;

        КолП=ТабКом.Кол;

        Если КолП=0 Тогда

// Партия уже опустошена, пропускаем

          Продолжить;

        КонецЕсли;

        СумП=ТабКом.Сум;

        СтрП=ТабКом.НомерСтроки;

        Если Колич>КолП Тогда

          ПривязыватьСтроку(НС);



          Операция.НоваяПроводка();

          Операция.Дебет.Счет = СчетПоКоду("20",ПланыСчетов.Наш);

          Операция.Кредит.Счет = СчетПоКоду("10.2",ПланыСчетов.Наш);

          Операция.Дебет.ВидЗатрат = Перечисление.ВидыЗатрат.НаКомплектующие;

          Операция.Дебет.Изделие = Изделие;

          Операция.Дебет.НарядНаКомплектацию = ТекущийДокумент();

          Операция.Кредит.МестоХранения = Склад;

          Операция.Кредит.Комплектующее = КомП;

          Операция.Кредит.ПриходнаяНакладная = ДокП;

          Операция.Фирма = ФирмаДокумента;

          Операция.Комментарий = " Передача комплектующих на сборку";

          Операция.НомерЖурнала = "10";

          Операция.Сумма = СумП;

          Операция.Количество = КолП;

          Колич=Колич-КолП;

          СуммаОпер=СуммаОпер+СумП;

          ТабКом.УстановитьЗначение(СтрП,"Кол",0);

          ТабКом.УстановитьЗначение(СтрП,"Сум",0);

// Опустошаем партию полностью

        Иначе

          СумО=Окр(Колич*(СумП/КолП),2,1);

          ПривязыватьСтроку(НС);

          Операция.НоваяПроводка();

          Операция.Дебет.Счет = СчетПоКоду("20",ПланыСчетов.Наш);

          Операция.Кредит.Счет = СчетПоКоду("10.2",ПланыСчетов.Наш);

          Операция.Дебет.ВидЗатрат = Перечисление.ВидыЗатрат.НаКомплектующие;

          Операция.Дебет.Изделие = Изделие;



          Операция.Дебет.НарядНаКомплектацию = ТекущийДокумент();

          Операция.Кредит.МестоХранения = Склад;

          Операция.Кредит.Комплектующее = КомП;

          Операция.Кредит.ПриходнаяНакладная = ДокП;

          Операция.Фирма = ФирмаДокумента;

          Операция.Комментарий = "Передача комплектующих на сборку";

          Операция.НомерЖурнала = "10";

          Операция.Сумма = СумО;

          Операция.Количество = Колич;

          СуммаОпер=СуммаОпер+СумО;

          ТабКом.УстановитьЗначение(СтрП,"Кол",КолП-Колич);

          ТабКом.УстановитьЗначение(СтрП,"Сум",СумП-СумО);

// Опустошаем партию частично и переходим к следующей комплектующей

          Прервать;

        КонецЕсли;

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

    КонецЦикла; // По Комплектующей

  КонецЦикла; // По Изделию

  Операция.Содержание = "Запуск производства";

  Операция.СуммаОперации = СуммаОпер;

  Операция.Автор = АвторДокумента;

  Операция.Записать();

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

Новый вариант хотя и сложнее, но работает правильно. И даже быстрее, так как обращений к Бухгалтерским итогам будет меньше или столько же, ведь они вынесены за цикл по изделиям.

Проверим работу нашего документа с разными наборами данных.

2.40 Документ ПриходныйОрдер.

Товар отгружен, пора получить за него денежки. Деньги мы будем получать с покупателя наличными в кассу по Приходному ордеру. Проводка в документе будет всего одна (Д 50.1 – К 62). Списывать долг с конкретного покупателя мы будем в разрезе конкретной накладной на отгруз. Причем, если сумма в ордере больше непогашенного остатка по указанной накладной, то мы раскидаем остаток прихода денег по остальным непогашенным накладным клиента, а если накладная не указана, то спишем долг по самой ранней накладной. Этот документ будет очень похож на Расходный ордер, поэтому просто скопируем его и внесем небольшие изменения.



Сведем данные по документу в таблицу:

Идентификатор: ПриходныйОрдер

Журнал: Кассовые

Нумератор: Нет       Периодичность: Год

Длина: 5         Тип: число

Уникальность: да       Автонумерация: да

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

Проводить: да

Автоматическое удаление движений: да

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

Бухгалтерский учет: да

Расчет: нет

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

Создавать операцию: Всегда     Редактировать операцию: нет


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