1С: специалист по платформе. Задача 1.26

Решение задачи 1.26  специалиста по платформе.

За основу взял решение предыдущей задачи. Основное отличие — появились пени.  Поэтому и в регистр «Взаиморасчеты» необходимо добавить второй ресурс «Пени».
В документах потребуются косметические изменения.

3) Документ «Счет»

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Счета.Записывать = Истина;
Движение = Движения.Счета.ДобавитьПриход();
Движение.Период = Дата;
Движение.Счет = Ссылка;
Движение.Сумма = Сумма;
КонецПроцедуры

4) Документ «Расходная накладная»
Чтобы документ вводился только на основании счета потребуется 2 процедуры

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Не ЗначениеЗаполнено(Объект.Счет) Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры

 
Обработка проведения:
 
Движения.Счета.Записывать = Истина;
Движения.Взаиморасчеты.Записывать = Истина;
// Блокировка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Счета");
ЭлементБлокировки.УстановитьЗначение("Счет", Счет);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

// Согласно новой методике проведения сначала делаем движения, затем проверку не ушли ли в минус

Движение = Движения.Счета.ДобавитьРасход();
Движение.Период = Дата;
Движение.Счет = Счет;
Движение.Сумма = СуммаПоДокументу;

Движение = Движения.Взаиморасчеты.ДобавитьПриход();
Движение.Период = Дата;
Движение.Счет = Счет;
Движение.Сумма = СуммаПоДокументу;
Движение.Контрагент = Контрагент;
//записываем движения чтобы они попали в запрос
Движения.Счета.Записать();

// запрос с проверкой
Запрос = Новый("Запрос");
Запрос.Текст ="ВЫБРАТЬ
|СчетаОстатки.СуммаОстаток КАК СуммаСчета
|ИЗ
|РегистрНакопления.Счета.Остатки(&ТочкаИтогов, Счет = &Счет) КАК СчетаОстатки
|ГДЕ
|СчетаОстатки.СуммаОстаток < 0";

Запрос.УстановитьПараметр("Счет",Счет);
ТочкаИтогов = ?(РежимПроведения= РежимПроведенияДокумента.Оперативный, Неопределено, Новый Граница(МоментВремени(),ВидГраницы.Включая));
Запрос.УстановитьПараметр("ТочкаИтогов",ТочкаИтогов);
Результат = Запрос.Выполнить();
Если  Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Если Выборка.СуммаСчета < СуммаПоДокументу Тогда
Отказ = Истина;
Сообщение = Новый("СообщениеПользователю");
Сообщение.Текст = "Сумма документа превышает сумму счета на "+ (-Выборка.СуммаСчета);
Сообщение.Сообщить();
КонецЕсли;
КонецЕсли;
 
 
 
5) Документ «Поступление денег»
По условию сначала списываются пени. Не нашел ничего лучшего как дважды обойти результат запроса,  первым обходом спишем пени, вторым сумму основного долга.


Процедура ОбработкаПроведения(Отказ, Режим)
Движения.Взаиморасчеты.Записывать = Истина;
Движения.Взаиморасчеты.Записать() ;

// Блокировка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
ЭлементБлокировки.УстановитьЗначение("Контрагент", Контрагент);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

Запрос  = Новый("Запрос");
Запрос.Текст = "ВЫБРАТЬ
|ПриходДенегСписокСчетов.Счет
|ПОМЕСТИТЬ СписокСчетов
|ИЗ
|Документ.ПриходДенег.СписокСчетов КАК ПриходДенегСписокСчетов
|ГДЕ
|ПриходДенегСписокСчетов.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|ВзаиморасчетыОстатки.Счет,
|ВзаиморасчетыОстатки.СуммаОстаток КАК Долг,
|ВзаиморасчетыОстатки.ПеняОстаток КАК Пеня
|ИЗ
|РегистрНакопления.Взаиморасчеты.Остатки(
|&ТочкаИтогов,
|Контрагент = &Контрагент
|И Счет В
|(ВЫБРАТЬ
|СписокСчетов.Счет
|ИЗ
|СписокСчетов)) КАК ВзаиморасчетыОстатки
|
|УПОРЯДОЧИТЬ ПО
|ВзаиморасчетыОстатки.Счет.Дата
|ИТОГИ
|СУММА(Долг),
|СУММА(Пеня)
|ПО
|ОБЩИЕ";

Запрос.УстановитьПараметр("Контрагент",Контрагент);
ТочкаИтогов = ?(Режим= РежимПроведенияДокумента.Оперативный, Неопределено, Новый Граница(МоментВремени(),ВидГраницы.Исключая));
Запрос.УстановитьПараметр("ТочкаИтогов",ТочкаИтогов);
Запрос.УстановитьПараметр("Ссылка",Ссылка);

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


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

КонецЕсли;
КонецПроцедуры

 
 
 

6) Документ «Пени»


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

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|СчетаОстаткиИОбороты.Счет,
|СчетаОстаткиИОбороты.СуммаКонечныйОстаток,
|МАКСИМУМ(СчетаОстаткиИОбороты.Регистратор.Дата) КАК ДатаПолнойОтгрузки
|ПОМЕСТИТЬ Счета
|ИЗ
|РегистрНакопления.Счета.ОстаткиИОбороты(, &ТочкаИтогов, Регистратор, , ) КАК СчетаОстаткиИОбороты
|ГДЕ
|СчетаОстаткиИОбороты.СуммаКонечныйОстаток = 0
|
|СГРУППИРОВАТЬ ПО
|СчетаОстаткиИОбороты.Счет,
|СчетаОстаткиИОбороты.СуммаКонечныйОстаток
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|Счета.Счет,
|ЕСТЬNULL(ВзаиморасчетыОстатки.СуммаОстаток, 0) КАК Долг,
|Счета.Счет.ПроцентПени КАК ПроцентПени,
|ВзаиморасчетыОстатки.Контрагент,
|РАЗНОСТЬДАТ(Счета.ДатаПолнойОтгрузки, &Дата, ДЕНЬ) КАК ДнейПросрочки
|ИЗ
|РегистрНакопления.Взаиморасчеты.Остатки(
|&ТочкаИтогов,
|Счет В
|(ВЫБРАТЬ
|Счета.Счет
|ИЗ
|Счета)) КАК ВзаиморасчетыОстатки
|ЛЕВОЕ СОЕДИНЕНИЕ Счета КАК Счета
|ПО ВзаиморасчетыОстатки.Счет = Счета.Счет";

Запрос.УстановитьПараметр("Дата", Дата);
ТочкаИтогов = ?(РежимПроведения= РежимПроведенияДокумента.Оперативный, Неопределено, Новый Граница(МоментВремени(),ВидГраницы.Исключая));
Запрос.УстановитьПараметр("ТочкаИтогов",ТочкаИтогов);

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.Взаиморасчеты.ДобавитьПриход();
Движение.Период     = Дата;
Движение.Счет       = Выборка.Счет;
Движение.Контрагент = Выборка.Контрагент;
Движение.Пеня      = Выборка.Долг * Выборка.ДнейПросрочки *(Выборка.ПроцентПени/100);
КонецЦикла;
КонецПроцедуры

 
 

7) Отчет «Анализ состояния счетов»

Пришлось помучаться, текст запроса получился довольно громоздким, вангую критику от некоторых комрадов)
Текст запроса:

ВЫБРАТЬ
СчетаОстаткиИОбороты.Счет,
МАКСИМУМ(СчетаОстаткиИОбороты.Регистратор.Дата) КАК РегистраторДата
ПОМЕСТИТЬ ОтгруженныеСчета
ИЗ
РегистрНакопления.Счета.ОстаткиИОбороты(, &Период, Регистратор, , ) КАК СчетаОстаткиИОбороты
ГДЕ
СчетаОстаткиИОбороты.СуммаКонечныйОстаток = 0
СГРУППИРОВАТЬ ПО
СчетаОстаткиИОбороты.Счет
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СчетаОстатки.Счет,
СчетаОстатки.СуммаОстаток
ПОМЕСТИТЬ НеотгруженныеСчета
ИЗ
РегистрНакопления.Счета.Остатки(&Период, ) КАК СчетаОстатки
ГДЕ
СчетаОстатки.СуммаОстаток > 0
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВзаиморасчетыОстатки.Счет,
ОтгруженныеСчета.РегистраторДата КАК ДатаПолнойОтгрузки,
ВзаиморасчетыОстатки.СуммаОстаток КАК ЗадолженностьПоСчету,
ВзаиморасчетыОстатки.ПеняОстаток КАК ЗадолженностьПоПеням
ИЗ
РегистрНакопления.Взаиморасчеты.Остатки(
&Период,
Счет В
(ВЫБРАТЬ
НеотгруженныеСчета.Счет КАК Счет
ИЗ
НеотгруженныеСчета КАК НеотгруженныеСчета)
ИЛИ Счет В
(ВЫБРАТЬ
ОтгруженныеСчета.Счет КАК Счет
ИЗ
ОтгруженныеСчета КАК ОтгруженныеСчета)) КАК ВзаиморасчетыОстатки
ЛЕВОЕ СОЕДИНЕНИЕ ОтгруженныеСчета КАК ОтгруженныеСчета
ПО ВзаиморасчетыОстатки.Счет = ОтгруженныеСчета.Счет
ГДЕ
ВзаиморасчетыОстатки.СуммаОстаток > 0
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НеотгруженныеСчета.Счет,
"",
НеотгруженныеСчета.СуммаОстаток,
0
ИЗ
НеотгруженныеСчета КАК НеотгруженныеСчета

8) Отчет «Анализ счета за период»

ВЫБРАТЬ
ВзаиморасчетыОстаткиИОбороты.Регистратор КАК Документ,
ВзаиморасчетыОстаткиИОбороты.СуммаПриход КАК Задолженность,
ВзаиморасчетыОстаткиИОбороты.СуммаРасход КАК Оплачено,
ВЫБОР
КОГДА ВзаиморасчетыОстаткиИОбороты.ПеняПриход > 0
ТОГДА ВзаиморасчетыОстаткиИОбороты.ПеняПриход
КОГДА ВзаиморасчетыОстаткиИОбороты.ПеняРасход > 0
ТОГДА -ВзаиморасчетыОстаткиИОбороты.ПеняРасход
КОНЕЦ КАК Пеня
ИЗ
РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Регистратор, ДвиженияИГраницыПериода, Счет = &Счет) КАК ВзаиморасчетыОстаткиИОбороты
УПОРЯДОЧИТЬ ПО
ВзаиморасчетыОстаткиИОбороты.Регистратор.Дата
 

РАБОТА НАД ОШИБКАМИ:

1) Документ «Расходная накладная»

Движения.Счета.Записывать = Истина;
Движения.Счета.Очистить();

// Согласно новой методике проведения сначала делаем движения, затем проверку не ушли ли в минус
Движение = Движения.Счета.ДобавитьРасход();
Движение.Период = Дата;
Движение.Счет = Счет;
Движение.Сумма = СуммаПоДокументу;

//блокировка
Движения.Счета.БлокироватьДляИзменения = Истина;
Движения.Записать();

// запрос с проверкой
Запрос = Новый("Запрос");
Запрос.Текст ="ВЫБРАТЬ
| СчетаОстатки.СуммаОстаток КАК СуммаСчета
|ИЗ
| РегистрНакопления.Счета.Остатки(&ТочкаИтогов, Счет = &Счет) КАК СчетаОстатки
|ГДЕ
| СчетаОстатки.СуммаОстаток < 0";

Запрос.УстановитьПараметр("Счет",Счет);
ТочкаИтогов = ?(РежимПроведения= РежимПроведенияДокумента.Оперативный, Неопределено, Новый Граница(МоментВремени(),ВидГраницы.Включая));
Запрос.УстановитьПараметр("ТочкаИтогов",ТочкаИтогов);

Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Если Выборка.СуммаСчета < СуммаПоДокументу Тогда
Отказ = Истина;
Сообщение = Новый("СообщениеПользователю");
Сообщение.Текст = "Сумма документа превышает сумму счета на "+ (-Выборка.СуммаСчета);
Сообщение.Сообщить();
Возврат;
КонецЕсли;
КонецЕсли;

// Если не случился отказ
Движения.Взаиморасчеты.Записывать = Истина;
Движение = Движения.Взаиморасчеты.ДобавитьПриход();
Движение.Период = Дата;
Движение.Счет = Счет;
Движение.Сумма = СуммаПоДокументу;
Движение.Контрагент = Контрагент;

1) Документ «Приход денег»

Движения.Взаиморасчеты.Записывать = Истина;

Движения.Взаиморасчеты.Очистить();
Движения.Записать();

// Блокировка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
ЭлементБлокировки.УстановитьЗначение("Контрагент", Контрагент);

// В первоначальном варианте упустил добавить параметр на счета из таб. части.

ЭлементБлокировки.ИспользоватьИзИсточникаДанных(СписокСчетов);

ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Счет","Счет");

ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

Запрос = Новый("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| ПриходДенегСписокСчетов.Счет
|ПОМЕСТИТЬ СписокСчетов
|ИЗ
| Документ.ПриходДенег.СписокСчетов КАК ПриходДенегСписокСчетов
|ГДЕ
| ПриходДенегСписокСчетов.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВзаиморасчетыОстатки.Счет,
| ВзаиморасчетыОстатки.СуммаОстаток КАК Долг,
| ВзаиморасчетыОстатки.ПеняОстаток КАК Пеня
|ИЗ
| РегистрНакопления.Взаиморасчеты.Остатки(
| &ТочкаИтогов,
| Контрагент = &Контрагент
| И Счет В
| (ВЫБРАТЬ
| СписокСчетов.Счет
| ИЗ
| СписокСчетов)) КАК ВзаиморасчетыОстатки
|
|УПОРЯДОЧИТЬ ПО
| ВзаиморасчетыОстатки.Счет.Дата
|ИТОГИ
| СУММА(Долг),
| СУММА(Пеня)
|ПО
| ОБЩИЕ";

Запрос.УстановитьПараметр("Контрагент",Контрагент);
ТочкаИтогов = ?(Режим= РежимПроведенияДокумента.Оперативный, Неопределено, Новый Граница(МоментВремени(),ВидГраницы.Исключая));
Запрос.УстановитьПараметр("ТочкаИтогов",ТочкаИтогов);
Запрос.УстановитьПараметр("Ссылка",Ссылка);

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

КонецЦикла;


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

КонецЕсли;

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


3) Документ «Пени».

Движения.Взаиморасчеты.Записывать = Истина;
Движения.Взаиморасчеты.Очистить();
Движения.Записать();

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Счета");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

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

 

7 Comments

  1. GROOVY

    Блокировки установлены некорректно. Не продемонстрирована технология оперативного проведения. -2 балла.

    Reply
  2. Betis

    (1) GROOVY, Здравствуйте, Павел!

    Спасибо за внимание. Если Вас не затруднит, гляньте небольшую работу над ошибками.(добавил в конце статьи):

    1) Изменил обработку проведения накладной по мотивам Вашей статьи о новой методике оперативного проведения

    2) В «приходе денег» изменил блокировку

    3) Пользуясь случаем хотел бы задать Вам вопрос насчет использования конструктора Новый(«») (Не для объектов) .

    Например Запрос = Новый(«Запрос»), Сообщение = Новый(«СообщениеПользователю»), Структура = Новый(«Структура») и тд. Можно ли так делать? Есть ли какая-то проблема?

    Reply
  3. TODD22
    3) Пользуясь случаем хотел бы задать Вам вопрос насчет использования конструктора Новый(«») (Не для объектов) .

    Например Запрос = Новый(«Запрос»), Сообщение = Новый(«СообщениеПользователю»), Структура = Новый(«Структура») и тд. Можно ли так делать? Есть ли какая-то проблема?

    А разве «Запрос», «СообщениеПользователю», «Структура» это не объекты?

    Как мне кажется проблемы в создании объектов нет. Если они создаются через конструктор.

    Есть проблема множественного создания объектов. Когда то давно меня из за этого не взяли на работу 🙁

    И кстати вот недавно решал в двух организациях билеты на спеца по опер учёту на собеседование. Из за новой методики проведения а именно из за того что я одним запросом проверял остатки и если их хватало делал второй запрос уже к регистру партий моё решение не защитали. Сказали что не надо делать два запроса к базе. Типа можно было проверить хватает остатков или нет простым запросом к регистру партий. А это типа быдлокод 🙁

    Reply
  4. Betis

    (3) TODD22, Я имел в виду конструктор создания именно для НЕ прикладных объектов.

    По-поводу случая на собеседовании, то чего только не бывает на собесах. насчет партионного списания, по-моему Вы сделали правильно, по-крайней мере Чистов рекомендует именно так делать, но видимо там были спецы круче)

    Reply
  5. TODD22
    По-поводу случая на собеседовании, то чего только не бывает на собесах. насчет партионного списания, по-моему Вы сделали правильно, по-крайней мере Чистов рекомендует именно так делать, но видимо там были спецы круче)

    Ага… чего только не бывает. В одну контору как то пришёл года два назад устраиваться. Мне дают задачу на спеца как тестовое задание. Я спросил у человека а он сам может решить эту задачу, он сказал что нет 🙂

    Reply
  6. slazzy

    (2), ну снова Вы за своё

    3) Пользуясь случаем хотел бы задать Вам вопрос насчет использования конструктора Новый(«») (Не для объектов) .

    Например Запрос = Новый(«Запрос»), Сообщение = Новый(«СообщениеПользователю»), Структура = Новый(«Структура») и тд. Можно ли так делать? Есть ли какая-то проблема?

    я уже отвечал на вопрос. Физически так можно делать. Нужно ли так делать? Нет, не нужно. Так НИКТО не делает. Если можно штаны одеть через голову, то это вовсе не призыв их одевать через голову.

    Есть стандарты разработки, есть соглашения о коде, есть просто «тут так принято». Так вот «тут не принято» делать так и в маломальски серьезных фирмах за это бьют по рукам. Не надо показывать характер и пытаться доказать, что мол если не написано «так нельзя», то я буду делать.

    Reply
  7. Bukaska

    (6) slazzy, Бесполезняк.. неужели на форуме Чистова не пообщаться по данной тематике? Зачем создавать публикашку с кучей косяков? Я понимаю, человек сдал и выложил вариант, как правильно сдавать, а не так, что я не понимая, не сдавал, помогите сдать…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *