Программистские этюды







Рассматриваются задачи, связанные с учетом характеристик номенклатуры:
1) Обход итогов при партионном списании по ФИФО для пары Номенклатура+Характеристика
2) Обмен сведениями об остатках номенклатуры с помощью XML для пары Номенклатура+Характеристика
Дополнительно. Внимание новичкам – типовая консоль запросов.

Посвящается сайту "Математические этюды" http://www.etudes.ru/

Все рассмотренные примеры отлаживались на конфигурации "Управление торговлей 10.3". Задачи взяты из жизни, а решения не претендуют на уникальность или универсальность. Тем более что, пока я писал статью, на ум приходили совсем уже другие решения… Smile

 Этюд 1. Обход итогов при партионном списании по ФИФО для пары Номенклатура+Характеристика

Есть определенная схема построения запроса при программировании метода списания стоимости товара по ФИФО. Она представлена на рис. 1.

рис. 1.

Понятно, что схема учебная – в жизни учет товаров более сложен. Так, например, в конфигурации «Управление торговлей» учет товара дополнительно может вестись в разрезе характеристик. Что это значит применительно к нашей задаче? А то, что добавляется еще один разрез учета – характеристика, отдельно по которой нужно учитывать  сумму и количество партии.

Дополнительный разрез учета добавляет проблем при использовании  стандартной схемы построения запроса. Подробно об этих проблемах описано в статье //infostart.ru/public/125988/ .

И замечу, что речь не идет о других способах конструирования запросов, как например:

//infostart.ru/public/99207/

или

http://www.nashe1c.ru/materials-view.jsp?id=312

Так вот, что я сделал. Пару Номенклатура+Характеристика однозначно определяет поле Характеристика, потому что Номенклатура = Характеристика.Владелец. Такое соответствие относится только к товарам, а к таре не относится – тару однозначно определяет сама Номенклатура. Поэтому в запросе я дополнительно реализую Группировочное поле в результирующей таблице, по которому беру Итоги (рис. 2,3).

рис. 2.

рис. 3.

  Далее в цикле по ГруппировочномуПолю Товар и Характеристику определяю так:

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока Выборка.Следующий() Цикл

   Если ТипЗнч(Выборка.ГруппировочноеПоле) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда

    Товар = Выборка.ГруппировочноеПоле.Владелец.Наименование;
   
Характеристика = Выборка.ГруппировочноеПоле.Наименование;
   
Код = Выборка.ГруппировочноеПоле.Владелец.Код;

  ИначеЕсли ТипЗнч(Выборка.ГруппировочноеПоле) = Тип("СправочникСсылка.Номенклатура") Тогда

    Товар = Выборка.ГруппировочноеПоле.Наименование;
   
Характеристика = "";
   
Код = Выборка.ГруппировочноеПоле.Код;

  Иначе //на всякий случай

    Товар = "Неизвестный товар";
   
Характеристика = "";
   
Код = "";

КонецЕсли;
 

Товар и Характеристику надо определять как минимум для вывода сообщения по товару (таре), по которой не хватает остатка:

 

Если НужноСписать>ОстатокНаСкладе Тогда

  Сообщить("Подсистема учета ТЗР: на складе не хватает товара"
 
+ Символы.ПС + "По документу — " + СтрТЗ.Документ
  + Символы.ПС + "Склад — " + ТекСклад //СтрТЗ.Документ.Склад
 
+ Символы.ПС + "Товар — " + Товар + " (код " + Код + ")"
 
+ ?(НЕ ПустаяСтрока(Характеристика), Символы.ПС + "Характеристика — " + Характеристика, "")
  +
Символы.ПС + "Не хватает — " + (НужноСписатьОстатокНаСкладе) + " кг. "
 
+ Символы.ПС + "Нужно списать — " + НужноСписать + " кг. "
 
+ Символы.ПС + "Тек. остаток — " + ОстатокНаСкладе + " кг.", СтатусСообщения.Внимание);

  Отказ = Истина;
  Продолжить;

КонецЕсли;

Далее все алгоритмы проходят по стандартной схеме списания по ФИФО. Как это реализовано в конфигурации УТ, я не анализировал. Подобную задачу решил для новой подсистемы учета транспортно-заготовительных расходов. Знаете, когда ТЗР распределяется по сумме товара? Вот это из этой оперы.

 *Идея использования рисунка схемы построения запроса взята из методических материалов курса обучения, который я проходил давным-давно. По части авторства: рисунок нарисован мною с нуля, схема сильно изменена по сравнению с источником.

 

 Этюд 2. Обмен сведениями об остатках номенклатуры с помощью XML для пары Номенклатура+Характеристика

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

Я реализовал обмен информацией с помощью xml,  выгрузка и загрузка остатков происходила только для так называемых «свободных» остатков,  количество товара выгружалось (загружалось) с учетом характеристик товара; серии и качество товара учитывать не надо было.

В конфигурации УТ можно вести количественный учет товаров в разрезе дополнительных параметров, так называемых характеристик номенклатуры: цвет, размер и других потребительских свойств.

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

Вообще говоря, учет характеристик при выгрузке и загрузке файла обмена не считается тривиальной задачей, поскольку, если товар в разных информационных базах идентифицируется по совпадению артикула, то характеристики – только по одновременному совпадению названия свойства и значения показателя этого свойства. Например, если в одной базе характеристика «цвет обуви» задается как «Цвет», а в другой – «Цвет обуви», то для одного и того же 43 размера эти товары не будут идентифицированы как совпадающие. Потому что у них разные названия характеристики, которая определяет цвет обуви.

Таким образом, задача обрисовывается такая: при загрузке файла xml при совпадении названия характеристики и значения показателя характеристики с характеристикой товара текущей базы необходимо считать, что указанное количество свободного остатка относится к этой характеристике. Если хотя бы одна характеристика не совпадает, или нет одинаковых характеристик, то необходимо считать, что свободный остаток регистрируется по товару без характеристик. Считается, что для уточнения информации об остатках товаров без характеристик следует связываться с ответственным менеджером поставщика-дистрибьютора.

Теперь о реализации. Файл выгрузки представлен на рис. 4.

Рис. 4.

Видно, что при наличии остатка в разрезе характеристики – характеристика товара раскладывается на составляющие ее свойства и значения этих свойств. К примеру, для товара с артикулом «Б-130005» характеристика товара имеет свойства «Размер=36», «Полнота=5», «Тип4Кожи=Натуральная кожа».

Следует обратить внимание на название узла «Тип4Кожи». В программе «1С:Управление торговлей» свойство имеет название «Тип кожи», узнаваемое пользователем. XML-теги не определены жестко: разработчик вправе придумать свои собственные теги. Но по xml-стандарту название узлов в xml-файлах не должны содержать пробелов и других символов наподобие «!;%*()_+».

Поэтому для выгрузки свойств товара реализован механизм, который заменяет «некорректные» символы на цифры, а при загрузке остатков наоборот – цифры заменяет на символы. Кому интересно будет, отдельно выложу исходники для демонстрации идеи. Хотя считаю, что это слишком просто реализуется. Так как цифр имеется ограниченное количество (от 0 до 9), то такая замена может происходить только с ограниченным числом символов. Символы, не вошедшие в этот список, исключаются из названий свойств – при записи характеристики происходит проверка (рис. 5).

Рис. 5.

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

При загрузке xml-файл считывается, информация записывается во временную таблицу:

 

ОстаткиТЗ = Новый ТаблицаЗначений;
ОстаткиТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ОстаткиТЗ.Колонки.Добавить("ХарактеристикаНоменклатуры", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
ОстаткиТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ФайлXML.ПолноеИмя);

ФормироватьСтруктуру = Ложь;
Пока
ЧтениеXML.Прочитать() Цикл

  Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
     
ИмяУзла = ЧтениеXML.Имя;
      Если
ИмяУзла = "ЗаписьРегистра" Тогда
         
НоваяСтрокаТЗ = ОстаткиТЗ.Добавить();
      КонецЕсли;
      Если
ИмяУзла = "ХарактеристикаНоменклатуры" Тогда
         
ХарактеристикаНоменклатуры = Новый Структура;
         
ФормироватьСтруктуру
= Истина;
      КонецЕсли;
      Если
ИмяУзла = "Количество" Тогда
         
ФормироватьСтруктуру = Ложь;
         
НоваяСтрокаТЗ["ХарактеристикаНоменклатуры"] = ПолучитьЗначениеИзСтроки(ХарактеристикаНоменклатуры, "ХарактеристикаНоменклатуры");
      КонецЕсли;
  ИначеЕсли
ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
      Если
ИмяУзла = "Номенклатура" или ИмяУзла = "Количество" Тогда
         
НоваяСтрокаТЗ[ИмяУзла] = ПолучитьЗначениеИзСтроки(ЧтениеXML.Значение, ИмяУзла);
      Иначе
          Если
ФормироватьСтруктуру Тогда
             
ХарактеристикаНоменклатуры.Вставить(ИмяУзла, ЧтениеXML.Значение
);
          КонецЕсли;
      КонецЕсли;
  КонецЕсли;

КонецЦикла;

ЧтениеXML.Закрыть();
 

 

Дам пояснение. Для работы с XML-документами используется модель последовательного доступа, что означает следующее. При считывании структуры xml-файла:

1)      мы перебираем узлы сверху-вниз;

2)      мы не перескакиваем от узла к узлу, а целенаправленно анализируем: достигнуто «НачалоУзла» или «ТекстУзла»;

3)      когда проходим цикл по узлам, анализируем название узла.

Фактически запись и чтение данных из XML-документа производится «фрагментами» элементов. При этом очевидно, что при работе с XML-документами, имеющими сложную структуру, реализация процедур будет также сильно усложняться.

 

Предоставлю код, который позволяет из строкового значения xml-узла получить соответствующий в базе данных элемент:

 

Функция ПолучитьЗначениеИзСтроки(ЗначениеУзла, ИмяУзла)

  Рез = Неопределено;

  Попытка
  Если
ИмяУзла = "Номенклатура" Тогда //найдем по артикулу

      Запрос = Новый Запрос;
     
Запрос.Текст = "ВЫБРАТЬ
      | Номенклатура.Ссылка
      |ИЗ
      | Справочник.Номенклатура КАК Номенклатура
      |ГДЕ
      | Номенклатура.Артикул = &Артикул
      | И Номенклатура.ПометкаУдаления = ЛОЖЬ"
;

      Запрос.УстановитьПараметр("Артикул", ЗначениеУзла);

      Результат = Запрос.Выполнить();
      Если
Результат.Пустой() Тогда
         
ТекущаяНом = Справочники.Номенклатура.Новая;
          Возврат
Справочники.Номенклатура.Новая;
      КонецЕсли;

      Выборка = Результат.Выбрать();

     


     
//выбираем только один элемент
     
Если Выборка.Следующий() Тогда
         
ТекущаяНом = Выборка.Ссылка;
          Возврат
Выборка.Ссылка;
      КонецЕсли;

  ИначеЕсли ИмяУзла = "ХарактеристикаНоменклатуры" Тогда

      Если ТекущаяНом = Справочники.Номенклатура.Новая Тогда
          Возврат Неопределено;
      КонецЕсли;

      ЗапросПоХарактеристикам = Новый Запрос;
     
ЗапросПоХарактеристикам.Текст = "ВЫБРАТЬ
      | ЗначенияСвойствОбъектов.Объект,
      | ЗначенияСвойствОбъектов.Свойство,
      | ЗначенияСвойствОбъектов.Значение.Наименование КАК Значение
      |ИЗ
      | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
      |ГДЕ
      | ЗначенияСвойствОбъектов.Объект.ПометкаУдаления = ЛОЖЬ
      | И ЗначенияСвойствОбъектов.Объект.Владелец = &Владелец"
;

      ЗапросПоХарактеристикам.УстановитьПараметр("Владелец", ТекущаяНом);

      ТаблицаХарактеристик = ЗапросПоХарактеристикам.Выполнить().Выгрузить();
      Если
ТаблицаХарактеристик.Количество() = 0 Тогда
          Возврат Неопределено;
      КонецЕсли;

      //ЗначениеУзла — для характеристики в данном случае это Структура,
      //Ключ — название свойства, например Цвет, Размер и т.д.
      //ЗначениеКлюча — значение свойства
     
СписокПодходящихХарактеристик = Новый Массив;
      Для Каждого
КлючИЗначение Из ЗначениеУзла Цикл
     
         
//здесь НазваниеСвойства подготавливается по значению КлючИЗначение.Ключ

          …

         
НайденноеСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(НазваниеСвойства, Истина);
         
//здесь же срабатывает проверка, если найденное свойство = пустой ссылке
         
Если НайденноеСвойство.НазначениеСвойства <> ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов.Справочник_ХарактеристикиНоменклатуры Тогда
               Продолжить;
          КонецЕсли;

          ПараметрыОтбора = Новый Структура;
         
ПараметрыОтбора.Вставить("Свойство", НайденноеСвойство);
          ПараметрыОтбора.Вставить("Значение", КлючИЗначение.Значение);

          МассивПодходящихСтрокХарактеристик = ТаблицаХарактеристик.НайтиСтроки(ПараметрыОтбора);
          Если
МассивПодходящихСтрокХарактеристик.Количество() = 0 Тогда
               Возврат Неопределено;
          КонецЕсли;

          Для Каждого Стр Из МассивПодходящихСтрокХарактеристик Цикл
               Если
СписокПодходящихХарактеристик.Найти(Стр.Объект) = Неопределено Тогда
                   
СписокПодходящихХарактеристик.Добавить(Стр.Объект);
               КонецЕсли;
          КонецЦикла;

          //будем сокращать таблицу подходящих характеристик
         
ЗапросПоХарактеристикам.Текст = ЗапросПоХарактеристикам.Текст + "
          | И ЗначенияСвойствОбъектов.Объект В (&СписокХарактеристик)"
;
         
ЗапросПоХарактеристикам.УстановитьПараметр("СписокХарактеристик", СписокПодходящихХарактеристик);

          ТаблицаХарактеристик = ЗапросПоХарактеристикам.Выполнить().Выгрузить();

      КонецЦикла;

      Если ТаблицаХарактеристик.Количество() = 0 Тогда
          Возврат Неопределено;
      КонецЕсли;

      Рез = ТаблицаХарактеристик[0].Объект;

  ИначеЕсли ИмяУзла = "Количество" Тогда
     
Рез = Число(ЗначениеУзла);
  КонецЕсли;

  Исключение

      …

  КонецПопытки;

  Возврат Рез;

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

Прокомментирую. Номенклатура (или товар в нашем случае) определяется по переданному артикулу. С этим сложностей нет. А вот как быть с характеристикой? Каждая характеристика в терминах конфигурации УТ представляет собой набор свойств со своими значениями. Хранятся такие наборы в регистре сведений. И как бы ну очень хочется использовать что-то наподобие метода ТаблицыЗначений НайтиСтроки(ПараметрыОтбора), в параметры отбора которого можно передать загружаемый набор свойств со своими значениями. На выходе хотим получить определенную характеристику товара. Но не тут-то было! В параметры отбора нельзя передать загружаемый набор свойств – можно только одно свойство и его значение через Структуру. Выход – использовать запрос к нашему регистру сведений. А суть предложенного алгоритма – при обходе xml-узлов наращивать набор свойств и значений, передавать набор в запрос, проверять наличие очередного свойства и значения в регистре и так по кругу по всем загружаемым свойствам.

 

 Этюд 3. Дополнительно. Внимание новичкам – типовая консоль запросов.

 

Вы когда-нибудь обращали внимание, иногда при выполнении запроса в консоли запросов появляется окно сообщения: «Ожидается выражение «Выбрать» ?.. И даже номер строки указан, в которой происходит ошибка.

Рис. 6.

Так вот, консоль запросов позволяет обрабатывать только часть выделенного текста в запросе. Я использую эту возможность при просмотре результата временных и вложенных таблиц или при редактировании только части запроса, входя в конструктор выделенного текста запроса. Для просмотра временных таблиц следует закомментировать выражение «Поместить», выделить часть текста запроса и нажать «Выполнить». После просмотра следует не забыть удалить комментарии в строке «Поместить» (рис. 7). Вообще-то, об этой возможности консоли запросов написано в справке, но кто ж ее читал именно для консоли запросов?

Рис. 7.

Картинка для анонса любезно предоставлена по лицензии GNU:

http://ru.wikipedia.org/wiki/Файл:Universal_joint_transparant.gif

 

Центр автоматизации, Гумеров Р.И.


См. также:

Как эффективно использовать Инфостарт NEW!

Список реализаций + структура подчиненности + реестр документов SALE’1sm

Список заказов поставщикам + структура подчиненности SALE’1sm

Список заказов покупателей + структура подчиненности SALE’1sm

Договоры для 1с-ника ТОП-скачиваний

Сетка расписания (Планировщик) нестанДАрт

Два механизма, которые ускорили работу бухгалтеров в 1С нестанДАрт

Мини-CRM для УТ 10.3

Расчет банковских (рабочих) дней нестанДАрт

Шаблоны кода в режиме 1С:Предприятие SALE’1sm

Доработка конфигурации Конвертация Данных

Планирование платежей. Прогнозирование прибылей и убытков

Ввод показателей план-факта БП 3.0 Know-how

Инвентаризация личного опыта Для новичков 1С

Большие запросы: взгляд на проблему нестанДАрт

Технология создания коммерческих разработок Know-how

Андроид-решение для создания заказов в 1С Know-how + нестанДАрт

Отчет Остатки и цены

Печать ценников с одной и двумя ценами 55х40, 100х60, 140х200

Загрузка данных о розничных продажах из магазинов Intimissimi (Интимиссими) и Calzedonia (Кальцедония)

Доработки обмена "УТ 10.3 — интернет-магазина Shop-Script"

34 Comments

  1. Rustig

    Рассматриваются задачи, связанные с учетом характеристик номенклатуры:

    1) Обход итогов при партионном списании по ФИФО для пары Номенклатура+Характеристика

    2) Обмен сведениями об остатках номенклатуры с помощью XML для пары Номенклатура+Характеристика

    Дополнительно. Внимание новичкам – типовая консоль запросов.

    Перейти к публикации

    Reply
  2. AleksSF

    Почему-то рисунки не видны

    Reply
  3. Rustig

    (1) Посмотрите сейчас.

    Reply
  4. AleksSF

    (2) То-же самое

    Reply
  5. Арчибальд

    (2) положи картинки в раздел «Изображения» и ссылки перещелкни.

    Reply
  6. Stamper

    вот черт побери, а я всё по инерции считал это «не найдено ВЫБРАТЬ» багом, а это фича =)))

    спасибо

    Reply
  7. Rustig

    (3), (4) изображения выложил. в IE до сих пор не видно, в Мозиле — видно.

    Арчи, про ссылки не понимаю как перебить — я картинки вставлял копи-пастом.

    Reply
  8. motkot

    Rustig, если критику воспринимаешь правильно, то такая конструкция «Выборка.ГруппировочноеПоле.Владелец.Наименование» приводит к дополнительному обращению к БД, следовательно, приводит к дополнительным накладным расходам. Решение: выбирать все необходимые поля сразу в запросе.

    Reply
  9. alexk-is

    +(8) Ещё хотелось бы добавить, что работать с РегистрСведений.ЗначенияСвойствОбъектов нужно через ВЫРАЗИТЬ()

    Например,

    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК …).Владелец = &Владелец

    Reply
  10. motkot

    (9) alexk-is, читал бегло, сразу бросилось в глаза первое…

    Reply
  11. Rustig

    (9) не убедительно, :). Конструкция Выразить() предназначена для других ситуаций.

    Хотя я не эксперт по технологическим вопросам… 🙂

    Reply
  12. Rustig

    (8) критике рад! о чем вы пишите знаю, но никогда не применяю, потому что несущественно — документ проводится, глазом не успеете моргнуть 🙂

    Reply
  13. alexk-is

    (11) Для каких таких других?

    В данном случае я пытаюсь тонко намекнуть, что следует избегать скрытых множественных соединенй в запросах. Например, при попытке выполнить запрос ЗапросПоХарактеристикам в УПП под MS SQL я получаю:

    Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256.

    Посмотрите внимательно на тип данных измерения Объект: «ДокументСсылка, СправочникСсылка». Соответственно в запросе соединяются все таблицы по документам, справочникам и ещё, конечно, регистр сведений. Измерение Значение тоже составного типа, но там соединяется значительно меньше таблиц — около 15 справочников.

    Такой запрос уже работает.

    ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Объект,
    ЗначенияСвойствОбъектов.Свойство,
    ЗначенияСвойствОбъектов.Значение.Наименование КАК Значение
    ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    ГДЕ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры).ПометкаУдаления = ЛОЖЬ
    И ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры).Владелец = &Владелец

    Показать

    Было бы неплохо разобраться и с ЗначенияСвойствОбъектов.Значение.Наименование

    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Значение КАК …).Наименование

    Reply
  14. Rustig

    (13) спасибо! на будущее учту. вы все правильно написали. Я-то имел в виду, что конструкцию приведения типов Выразить() надо использовать только по необходимости, а в моем случае ее не было, судя по работоспособности алгоритма. Хотя теперь, если судить по тому, как устроен механизм запросов, я бы включил выражение Выразить() в запрос. Так что еще раз вам спасибо. Добавлю, что на момент отладки в регистре было мало данных, возможно поэтому ошибок не возникало.

    а вас не смущает, что во второй задаче запрос доформировывается и вызывается каждый раз при обходе цикла?

    Reply
  15. motkot

    (12) производительность системы не измеряется в «морганиях глазами». Попробуйте для начала использовать «замер производительности» до и после изменений в коде. Ответ получите объективно в цифрах.

    Reply
  16. alexk-is
    Reply
  17. Rustig

    (15) все правильно вы пишите. иногда проверяю с помощью замера производительности. но как-то интуитивно: где-то считаю надо замерить, а где-то не замечаю разницы… оба ваши совета абсолютно верны и объективны. но не все программисты способны уделять время таким деталям. я не идеален 🙂

    Reply
  18. Rustig

    (16) отлично что вы увидели этот момент. пусть каждый желающий выскажется. Я для себя, найдя другое решение, решил ничего не изменять. Алгоритмов достижения результата может быть несколько.

    Reply
  19. fixin

    не знаю, пейсали автору или нет.

    Когда делается списание с учетом характеристик, нужно делать обязательно отбор партий по серийным номерам документа.

    Порой у товара может быть 10 000 серийников и отбор по хар-ке существенно ускоряет проведение.

    Пусть использует, если нужно.

    Текст запроса не вижу, потому не знаю…

    Reply
  20. Rustig

    (19) опишите пожалуйста подробнее, :). Учет серий в рассмотренной подсистеме не предусмотрен, хотя в УТ отдельно ведется. заранее спасибо!

    Reply
  21. samamoiloff

    (6) А почему картинка — супер? Не понял. Интересно. Намекните хоть…

    Reply
  22. NCCSOFT

    К сожалению, не понял практическую полезность статьи (разве что для обучения). «Обход итогов списаний по ФИФО», и «сам алгоритм списания по ФИФО» разные вещи. И 1С 77…82 не способен быстро рассчитывать себестоимость (проверено на практике… тут всё подробно расписал: NCC:Бизнес-Аналитика (расчет себестоимости за 2 секунды +OLAP-инструмент)). И вообще SQL устарелая технология, я отказался от неё уже 3 года — только NO-SQL.

    Мне понравилась статья на хабре: Производительность C++ vs. Java vs. PHP vs. Python. Тест «в лоб».

    r := 0; for i := 0 to 9999 do for j := 0 to 9999 do r := ( r + ( i * j ) mod 100) mod 47;

    Я не поленился, и сделал тесты еще на нескольких языках (включая 1С), и вот что вышло, результат теста (должно получиться r = 39):

    Delphi 7, XE, XE2 — 4.7 секунды

    C++, JAVA 7 Server — 4.7 секунды

    PERL 5 — 72 секунды

    PHP 5 — 58 секунд

    1С 77 — 2230 секунд (ОФИГЕТЬ!!!)

    1С 82 — 496 секунд (НО ТОЖЕ ОФИГЕТЬ!!)


    FastScript 4 (от FastReport.ru) — 114 секунд

    Flash AS 2.0 — 700 секунд

    Всё тестировал на старом своем компьютере (Атлон 3200Гц / 3Гб ОЗУ)

    Хотел даже написать статью на инфостарте, но руки не долши.

    Делайте выводы 🙂

    Reply
  23. Rustig

    (22) спасибо за комментарий!

    ваш комментарий очень полезен с практической точки зрения в плане обучения.

    🙂 и у вас отличная программа (посмотрел видеоролик)! буду ее рекомендовать клиентам! это серьезно

    а так еще немного «философии» добавлю, но это не только к вам относится 🙂

    Из интервью http://www.livejournal.ru/themes/id/54277 : «Мой хороший знакомый, философ Александр Неклесса, дал определение, что образование — это встреча с ИНЫМ. Есть «я», и все что я знаю, представляю, умею. Когда я сталкиваюсь с чем-то непохожим на мои представления, у меня есть несколько разных способов столкновения. Я могу это уничтожить, проигнорировать или с этим встретиться. Если я встречаюсь, с тем, что не есть «я», а с иным, в этот момент и начинается настоящее образование.»

    Вы правильно заметили, «практическая полезность статьи» заключена «разве что для обучения». А для меня это еще и творческое самовыражение.

    Reply
  24. Rustig
    Reply
  25. zigomodo

    Спасибо за статью,все разложено как по полочкам. Спасибо автору за то,что не поленился написать много букв)

    Reply
  26. Stamper

    (22) NCCSOFT, любопытно про NO-SQL

    известны ли примеры бизнес-программ на таких СУБД? если можно, ссылки дайте плз

    Reply
  27. NCCSOFT

    (26) NO-SQL означает «Not Only SQL» (т.е. не только SQL, в SQL тоже есть плюсы и полность отказываться было бы глупо).

    Почитайте на хабре. Я сейчас делаю программу «NCC:Предприятие» («убица 1С 8.3») (почти шутка) на этих принципах 🙂 только не смейтесь, это реально так. Она по функционалу как «1С Торговля и склад + финансы + логистика + закупки + заказы + упр.зарплата и персонал + производство + выгрузка в 1С 8.2 Бухгалтерию + CRM + CMS».

    Это и моё творчество, и работа.

    Примеры ссылок именно «бизнес-программ» не могу дать, т.к. не видел. Оно и понятно — это «на острие атаки», а всякие «соц.сети» не в счет.

    Reply
  28. Stamper

    (27) NCCSOFT, я в курсе! по-этому и написал NO-SQL а не No-SQL 😉 ну Вы поняли

    если есть что показать — вышлите на stamper собака ukr точка net, пожалуйста

    а если еще нет, то не забудьте вписать мою почту в лист рассылки 🙂

    Reply
  29. NCCSOFT

    (28) Круто, реально круто! Впишу, обязательно впишу, как будут новости — вы первый в списке! Даже мои друзья (мы празновали мое 36-ти летие, отдыхали на Обском Море), они не в первых списках. Они сказали, что если бы узнали чем я занимаюсь (в советское время) — они вынуждены были сообщить об это в соответствующие органы… ИИ рулит…

    Reply
  30. nataon

    спасибо автору

    Reply
  31. Al-X

    Спасибо Автору !! На некоторые вещи «прям глаза открылись»…

    Reply
  32. Sasha255n

    (25) zigomodo, Это иррония или скарказм, или вы взаправду все))))?

    Reply
  33. Sasha255n

    (31) Al-X, Открыл глаза …. Да…. Это иррония или скарказм, или вы взаправду все )))) ?

    Reply
  34. Sanario

    Эх. Спасибо за статью. Одно пожелание — скриншоты бы покрупнее — невидно нифига ничего.

    Reply

Leave a Comment

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