На данной странице приведены ответы на часто задаваемые вопросы о настройке и работе в бесплатной системе учета СКИФ (Склад-Коммерция-Интернет-Финансы). Подробнее о системе СКИФ.

Общие вопросы

  • Почему система бесплатна?
    Система СКИФ полностью бесплатна как для частных лиц, так и для организаций.
    СКИФ размещается на вашем сайте или на вашем компьютере, поэтому у нас нет затрат на содержание серверов. Мы зарабатываем на адаптации системы под персональные потребности крупных заказчиков. СКИФ универсален, но крупным заказчикам обычно требуется его доработка под сложившуюся структуру, добавление собственных модулей и т.п. Небольшому бизнесу или бизнесу с несложной структурой, как правило, никаких доработок не требуется или эти доработки простые и могут быть выполнены собственными силами.
    Вместе с тем, чем больше количество наших пользователей, тем больше мы получаем отзывов и предложений, как улучшить работу системы, какие полезные функции добавить и т.д. Таким образом, нам выгодно распространять СКИФ бесплатно, потому что это позволяет нам его совершенствовать.
  • Чем СКИФ лучше других программ и сервисов учета?
    СКИФ - это программа на PHP+MySQL, которая устанавливается на вашем сайте или сервере. В отличие от использования сторонних облачных сервисов, это позволяет вам:
    - иметь полный контроль и доступ к системе и вашей базе данных, исключить доступ к данным посторонних
    - дорабатывать систему под свои потребности
    - напрямую интегрировать учет с вашим интернет-магазином и другими сервисами на вашем сайте
    - бесплатно использовать систему без ограничений по количеству пользователей, размеру базы данных и прочих лимитов, присущих "бесплатным" тарифам других облачных сервисов.
    Другие преимущества

Установка и настройка системы

  • Можно ли установить систему на свой компьютер, а не на сайт?
    Да, вы можете установить программу на собственный компьютер или даже на флэшку, а также открыть доступ к системе с других компьютеров в вашей локальной сети для организации совместной работы. Воспользуйтесь инструкцией по локальной установке СКИФ и инструкцией по открытию доступа к СКИФ в локальной сети.

    При локальной установке вы теряете преимущества облачного учета.
    Наша рекомендация, если у вас бизнес связанный с торговлей - зарегистрировать сайт, пусть даже сейчас у вас нет возможности им заниматься. Вы сможете вести на сервере хостера учет без сайта и интернет-магазина. А когда-нибудь вы захотите сделать сайт, чтобы увеличить продажи своих товаров и лояльность ваших клиентов, и у вашего домена уже будет определенный возраст, что станет плюсом для продвижения в поисковых системах.
    Если вам потребуется, мы окажем всю необходимую помощь по регистрации сайта и развертыванию на нём системы учета.
  • Как установить систему в подпапку сайта?
    Вам необязательно создавать отдельный домен или поддомен для установки системы, вы можете установить её в подпапку вашего сайта. Эту возможность можно использовать для интеграции складского учета с вашим интернет-магазином на другом движке.
    Вы можете создать неограниченное количество автономных установок системы в разных подпапках на одном сайте. Например, если вы продвигаете франшизу и хотите предоставить своим клиентам готовые интернет-витрины и системы учета на своем сервере.

    Для установки системы в подпапку, добавьте её название в переменные окружения HTTP_HOST и DOCUMENT_ROOT в начало файлов index.php в корневом файле дистрибутива и тех модулях, которые планируете использовать: admin-система управления сайтом, scif-складской и финансовый учет, catalog-интернет-магазин, cabinet-личный кабинет контрагента.
    Например, если вы устанавливаете систему в подпапку /wn/, добавьте в файлы index.php перед строкой с require следующую строку:
    $_SERVER["HTTP_HOST"].="/wn"; $_SERVER["DOCUMENT_ROOT"].="/wn";
    а в файле .htaccess в корне дистрибутива её нужно добавить в условие RewriteCond:
    RewriteCond %{REQUEST_URI} !^/wn/(admin|cabinet|catalog|scif)(/.*|$)
    Это всё, далее устанавка системы в подпапку не отличается от обычной установки.

    Если вы делате несколько автономных установок системы на одном сайте, в файле настроек wn_settings.php в каждой папке задайте собственный префикс для таблиц базы данных в константе WN_PREFIX.
  • Как изменить адрес входа в систему?
    По умолчанию вход в систему учета расположен по адресу /ваш-домен/scif/. Вы можете изменить адрес папки входа или сделать вход в систему с главной страницы домена. Для изменения папки входа измените её название, а также значение константы WEBNICE в файле index.php и путь к файлу с паролями в .htaccess
    Если вы хотите входить в систему учета с главной страницы домена, просто скопируйте файл index.php из папки /scif/ в корневую директорию сайта.
  • Как восстановить забытый пароль?
    Для входа в систему используется два пароля: серверный и пароль учетной записи. Логины и пароли для входа в систему администрирования сайта /admin/ и систему учета /scif/ по умолчанию разные. Для входа в систему администрирования /admin/ серверный логин по умолчанию - admin, логин первой учетной записи - Администратор.
    Для входа в систему учета /scif/ серверный логин по умолчанию - scif, логин первой учетной записи - Директор.

    Если вы забыли серверный пароль, удалите файлы .admpasswd и .htaccess в нужной папке (/admin/ или /scif/), после чего войдите в систему и установите новый пароль через меню "Сервис-Серверный пароль".

    Если вы забыли пароль учетной записи, выполните через phpMyAdmin (есть в дистрибутиве по адресу /admin/phpmyadmin/) следующий SQL-запрос:
    - Для системы администрирования сайта /admin/:
    UPDATE wn_users SET password=MD5("ваш пароль") WHERE id="1";
    - Для системы учета /scif/:
    UPDATE wn_scif1_spr_users SET password=MD5("ваш пароль") WHERE id="1";

Интеграция с сайтом/интернет-магазином/банком/внешними сервисами

  • Как интегрировать учет с интернет-магазином?
    СКИФ включает в себя систему учета, сайт и интернет-магазин, напрямую интегрированные друг с другом. Таким образом, при использовании нашего движка интернет-магазина данные учета и интернет-магазина уже взаимосвязаны и синхронизируются в режиме реального времени по заданным вами настройкам.
    Если вы используете другой интернет-магазин, есть несколько способов его интеграции со складским учетом:
    1. Экспорт-импорт файлов. В СКИФ есть возможность выгружать и загружать как документы, так и справочники в Excel файлы. Если в движке вашего интернет-магазина такая возможность тоже есть, вы можете синхронизировать данные при помощи их экспорта-импорта через файлы.
    2. Передача данных из интернет-магазина. Если у вас самописный интернет-магазин или вы хорошо знакомы с его программным кодом, вы можете добавить в его скрипты функции записи данных в таблицы системы учета. Используйте описание структуры таблиц СКИФ.
    3. Передача данных из системы учета. По вашему техническому заданию мы можем добавить в функционал системы учета запись данных в таблицы вашего интернет-магазина.
    4. Внешний скрипт синхронизации данных, который по заданным параметрам сравнивает новые данные в интернет-магазине и системе учета и выполняет их синхронизацию. Можно настроить как его автоматический запуск по заданному вами расписанию, так и запускать вручную. Преимущество внешнего скрипта по сравнению с двумя предыдущими способами в том, что не происходит вмешательства в программную часть движков. Таким образом, нет риска нарушения их работы и сохраняется возможность простого обновления до новых версий.
    Пример синхронизации смотрите в скрипте /scif/includes/acts/sync_shop.php

    Вы можете реализовать интеграцию учета с магазином собственными силами или заказать нам. Используйте наш бриф для составления технического задания.
  • Как подключить платежную систему?
    Вы можете подключить на сайте любую платежную систему для возможности оплаты заказов вашими покупателями. В функции order_send() в файле /catalog/includes/functions.php приведен пример, как после отправки заказа покупателя выводится кнопка для оплаты через платежную систему Робокасса. А в файле /themes/default/includes/acts/pay.php - пример для оплаты заказа по номеру.
    Вы можете запросить у нас бесплатные модули для подключения платежных систем Яндекс.Касса, Робокасса, WalletOne, Тинькофф.Оплата, PayPal или заказать интеграцию с любой другой платежной системой.
  • Как загрузить товары или другой справочник из файла?
    Чтобы не вводить товары и услуги в справочник номенклатуры вручную при начале работы или появлении большого количества новых товаров, вы можете загружать их импортом из Excel. Вы также можете загружать из файла любой другой справочник: контрагентов, пользователей и т.д. Для этого в меню "Сервис-Импорт справочника" задайте необходимые параметры и выберите загружаемый файл на своем компьютере. Вы можете использовать в файле формулы, а для поля "Описание" можно использовать HTML-теги.
    Пример файла для импорта
  • Как отслеживать конверсию в интернет-магазине?
    Для отслеживания конверсии мы рекомендуем использовать функционал счетчика Яндекс.Метрика.
    Для этого создайте цель с типом Javascript-событие, например, с именем ORDER и добавьте вызов этого события в редактируемый блок "Код отслеживания конверсии" в разделе администрирования в меню Материалы-Редактируемые блоки:

    <script type="text/javascript">
    window.onload = function() {
    yaCounterXXXXXXX.reachGoal("ORDER");
    };
    </script>

    где XXXXXXX - код вашего счетчика. Этот код будет вызываться при отправке заказа в интернет-магазине.
    Если нужна более детальная статистика, в этот же код можно добавить передачу параметров визита.
  • Как настроить импорт документов из банка?
    Выгрузите из интернет-банка текстовый файл обмена за нужный период, после чего загрузите его в СКИФ из меню Сервис-Импорт банка. Обработка создает ссылки на ввод каждого документа с заполненными значениями даты, суммы, контрагента (по совпадению ИНН) и т.д.
    Вы можете полностью автоматизировать импорт документов, если создадите в файле настроек wn_settings.php в корне сайта функцию client_bank(). В эту функцию подаётся массив полей и значений из файла обмена, а на выход нужно отдать массив для создания нужного документа в СКИФ.
    Пример функции client_bank:
    function client_bank($val) { // в массиве $val - значения полей очередной секции из файла обмена
    global $rs; // номер нашего расчетного счета, передаётся из обработки
    $div='';
    $details=$val['НазначениеПлатежа'];
    $det=mb_substr($details,0,27); // начало назначения платежа, будем использовать его для распознавания типа операции
    $note=$val['Номер']; // номер платежа в банке, запишем его в примечание документа
    $type=($val['ПлательщикСчет']!=$rs?1:-1);  // если счет плательщика совпадает с нашим, значит это исходящий платеж
     if ($type<0) { // исходящие платежи
      switch ($det) {
      case "Комиссия за перечисление ср": // комиссия за вывод на карту
      $div.='Комиссия банка:';
      // $data - массив данных для автоматической загрузки в базу:
      // t-тип документа, finitem-статья движения, date-дата документа, org-организация, account-касса/счет,account_to-касса назначения при перемещении,contr-контрагент,manager-ответственный,note-примечание
      $data=array('t'=>24,'finitem'=>0,'date'=>$val['Дата'],'account'=>ACCOUNT,'summa'=>$val['Сумма'],'note'=>'Вывод на карту '.$note);
      // генерируем форму для автоматического создания документа
      $div.=data_item($data);
      break;
      // здесь другие ваши условия
      }
     } else { // входящие платежи
      switch ($det) {
      // по некоторым платежам вы можете создать в СКИФ несколько документов.
      // например, при поступлении средст от платежного агрегатора Робокасса, создаём два документа: перемещение денег на р/с и списание комиссии эквайера
      case 'Перечисление на основ.Заяв.':      // Робокасса
      preg_match('#с учетом взаимозачет комис.Банка \'([\d\.]+)\'\. НДС#u',$details,$items);
      $div.='Робокасса:';
      // документ "Перемещение" со счета "Электронные деньги" на "Расчетный счет"
      $data=array('t'=>29,'finitem'=>0,'date'=>$val['Дата'],'account'=>6,'account_to'=>ACCOUNT,'summa'=>$val['Сумма'],'note'=>$note);
      $div.=data_item($data);
      // документ "Изъятие" - комиссия эквайера со счета "Электронные деньги", статья движения finitem - Комиссия
      $data=array('t'=>24,'finitem'=>3,'date'=>$val['Дата'],'account'=>6,'summa'=>$items[1],'note'=>$note);
      $div.=data_item($data);
      break;
      // здесь другие ваши условия
      }
     }
    return $div;
    }
    Вы также можете заказать создание такой функции нам.

Доработки программы

  • Как изменить внешний вид программы учета?
    Вы можете легко менять внешний вид программы под собственный вкус. Для этого просто внесите необходимые изменения в файл таблицы стилей /scif/style.css самостоятельно или закажите эту работу нам.
    Оформление по умолчанию:
    Пример 1:
    Пример 2:
  • Как создать собственную тему оформления сайта и интернет-магазина?
    В комплекте дистрибутива идут четыре темы оформления, вы можете посмотреть их в работе, переключившись на нужную по скриншотам с главной страницы демо-сайта. Простой путь создания уникального внешнего вида сайта - просто выбрать одну из этих тем и внести в неё необходимые изменения (заменить логотип, цветовое оформление в файлах стилей и т.п.).
    Вы также можете создать собственную тему оформления. Для этого создайте новую папку, например, /themes/my/, скопируйте в неё файлы из другой темы, которую будете видоизменять, например, /themes/default/. Затем внесите нужные изменения и смените тему оформления в панели администрирования через меню Сервис-Настройки в поле "Тема оформления".
  • Как добавить собственную печатную форму?
    Вы можете самостоятельно редактировать и создавать новые печатные формы или заказать эту работу нам. Шаблоны печатных форм и скрипты, их заполняющие, находятся в папке /scif/includes/printforms/. Рекомендуется не изменять печатные формы дистрибутива, а создавать их копии, чтобы нечаянно не потерять изменения при обновлении системы.
    Например, шаблон счет-фактуры находится в файле 8.xls, а формирующий скрипт в файле 8.php. Если вы хотите изменить счет-фактуру или создать новый документ, похожий на счет-фактуру, проделайте следующее:
    - скопируйте файлы 8.xls и 8.php в файлы 1008.xls и 1008.php в той же папке /scif/includes/printforms/
    - внесите нужные вам изменения в новые файлы
    - в файле настроек в корне сайта wn_settings.php добавьте следующую строку:
    $scif_printforms['1008']=array('name'=>'Моя счет-фактура','desc'=>'Моя счет-фактура с печатью','cat'=>'store');
    Таким образом, у Вас получится два варианта счет-фактуры в списке "Печать". Если дистрибутивный вариант вам не нужен, добавьте также следующую строку:
    @unset($scif_printforms[8]);
  • Как добавить собственные поля в справочники?
    Вы можете самостоятельно добавлять новые поля в любые справочники. Для этого нужно выполнить 2 простых действия:
    1. Добавить поле нужного формата в соответствующую таблицу базы данных. Это можно сделать через входящий в комплект дистрибутива /admin/phpmyadmin/. Имя нужной таблицы можно узнать здесь.
    2. Добавить описание поля в файле настроек wn_settings.php в корне сайта.

    Пример 1. Добавим товару текстовое поле "Ключевые слова" для вывода на странице в интернет-магазине. Для этого:
    1. В таблицу справочника номенклатуры wn_scif1_spr_noms добавим строковое поле meta_keywords
    2. В файл настроек wn_settings.php добавим следующий код:
    $sprs[5]["userfields"]=array(
    "meta_keywords"=>array("name"=>"Ключевые слова","type"=>"text","size"=>60,"maxlength"=>255),
    );
    Где 5 - это код справочника номенклатуры. Код нужного справочника можно посмотреть в массиве $sprs в файле /scif/index.php

    Всё. После этого на странице редактирования товара внизу появится новое поле.

    Для вывода этого поля на странице товаров в каталоге нужно внести изменения в файл /catalog/includes/acts/product.php:
    1. Добавляем поле в sql-запрос:
    $product_data=$db->sql_fetch_assoc($db->sql_query("SELECT... здесь добавим в перечисление нужное нам поле
    2. Ниже делаем добавление этого поля в переменную $meta, если поле заполнено:
    if (!empty($product_data["meta_keywords"])) {
    $meta='<meta name="Keywords" content="'.$product_data["meta_keywords"].'">';
    }


    Пример 2. Добавим в карточку сотрудника привязку к складам/торговым точкам, при этом одного сотрудника нужно иметь возможность связать сразу с несколькими складами.
    Для вывода поля редактирования вызывается функция edit_field(), а для обработки поля функция process_field(), которые находятся в файле /includes/functions.php. Если в параметре массива указать значения my_edit_field и my_process_field, можно задать обработку в собственных функциях. Для нашей задачи нужно выполнить следующее:
    1. В таблицу пользователей wn_scif1_spr_users добавим текстовое поле stores
    2. В файл настроек wn_settings.php добавим следующий код:
    $sprs[2]['userfields']=array('stores'=>array('name'=>'Склады','my_edit_field'=>'stores','my_process_field'=>'stores'));
    function my_edit_field($key,$val,$cur_val='') {
    global $stores;
    $return='';
     switch ($val['my_edit_field']) {
     case 'stores':
     $arr=(!empty($cur_val)?explode(',',$cur_val):array());
      foreach ($stores AS $k=>$v) {
      $return.='<input type="checkbox" name="stores[]" value="'.$k.'"'.(in_array($k,$arr)?' checked':'').'>-'.$v['name'].'<br>';
      }
     break;
     }
    return $return;
    }
    function my_process_field($key,$val,$cur_val='') {
     switch ($val['my_process_field']) {
     case 'stores':
     $return=((!empty($_POST[$key]) AND count($_POST[$key]))?implode(',',$_POST[$key]):'');
     break;
     }
    return $return;
    }
    

    Всё. После этого в карточке пользователя появятся чекбоксы с названиями складов.
  • Как добавить собственные поля в документы?
    Вы можете самостоятельно добавлять новые поля в документы. Для этого нужно выполнить 2 простых действия:
    1. Добавить поле нужного формата в соответствующую таблицу базы данных:
    - wn_scifN_doc - для добавления поля в складские документы (и wn_scifN_doc_history для хранения истории изменений складских документов)
    - wn_scifN_fin - для добавления поля в финансовые документы
    где N - индекс базы
    Добавить поле можно через входящий в комплект дистрибутива /admin/phpmyadmin/.
    2. Добавить описание поля в файле настроек wn_settings.php в корне сайта:
    - в переменную $docs_cat["store"]["userfields"] - для складских документов
    - в переменную $docs_cat["fin"]["userfields"] - для финансовых документов


    Пример 1. Добавим в складские документы поле "Описание" для многострочного ввода текста. Например, вы можете его использовать, если нужно делать объемные примечания к документам. Массив, который нужно добавить в wn_settings.php будет иметь следующий вид:
    $docs_cat["store"]["userfields"]=array(
    "ext_note"=>array("name"=>"Описание","type"=>"textarea")
    );
    Всё. После этого на странице создания/редактирования складского документа появится новое поле.

    Для вывода редактирования поля вызывается функция edit_field(), а для обработки поля функция process_field(), которые находятся в файле /includes/functions.php. Если в параметре массива указать значения my_edit_field и my_process_field, можно задать обработку в собственных функциях. При помощи собственных обработчиков вы можете реализовать более сложные варианты.

    Пример 2. Добавим в складской документ поле "Отсрочка", для которого нам нужно ограничить формат ввода только двумя цифрами и которое при изменении будет проставлять рассчитанную дату в поле "Срок оплаты".
    Для добавления данного поля нужно выполнить следующее:
    1. В таблицу документов wn_scif1_doc добавим поле delay в формате TINYINT
    2. В файл настроек wn_settings.php добавим следующий код:
    $docs_cat["store"]["userfields"]=array(
    "delay"=>array("name"=>"Отсрочка","format"=>"intval","my_edit_field"=>"delay")
    );
    
    function my_edit_field($key,$val,$cur_val='') {
    global $row;
    $return='';
     switch ($val['my_edit_field']) {
     case 'delay':
     $return='<input type="text" value="'.$cur_val.'" id="delay" name="delay" size="2" maxlength="2" pattern="\d{,2}" title="Не более 2-х цифр" onchange="change_term(this.value)"> дн.
      <script type="text/javascript">
      function change_term(day) {
      var diff=parseInt(day)+1;
      var calcDate = new Date($("#date").datepicker("getDate"));
      calcDate.setDate(calcDate.getDate()+diff);
      $("#payment_term").datepicker("setDate", calcDate);
      }
      </script>';
     }
    return $return;
    }
    


    Пример 3. Добавим в финансовые документы поле "Период", состоящее из года и месяца, при этом на странице редактирования они будут выводиться как два отдельных поля "Месяц" и "Год". Такое поле может быть востребовано для финансового планирования и аналитики, когда какие-то затраты требуется отнести не на тот период, в котором был расход денег.
    Для добавления данного поля нужно выполнить следующее:
    1. В таблицу документов wn_scif1_fin добавим поле period в формате MEDIUMINT
    2. В файл настроек wn_settings.php добавим следующий код:
    $docs_cat['fin']['userfields']=array(
    'period'=>array('name'=>'Отчет.период','my_edit_field'=>'period','my_process_field'=>'period')
    );
    function my_edit_field($key,$val,$cur_val='') {
    global $row;
    $return='';
    switch ($val['my_edit_field']) {
    case 'period':
    $months=array(1=>'январь',2=>'февраль',3=>'март',4=>'апрель',5=>'май',6=>'июнь',7=>'июль',8=>'август',9=>'сентябрь',10=>'октябрь',11=>'ноябрь',12=>'декабрь');
    if ($cur_val) {
    $month=intval(substr($cur_val,-2));
    $year=intval(substr($cur_val,0,4));
    } else {
    $month=date('n');
    $year=date('Y');
    }
    // добавим пустое скрытое поле, чтобы избежать Notice при обработке
    $return.='<input type="hidden" name="period">
    <select name="month">';
    foreach ($months AS $key=>$val) {
    $return.='<option value="'.$key.'"'.($key==$month?' selected':'').'>'.$val.'</option>';
    }
    $return.='</select>
    <input type="text" value="'.$year.'" name="year" size="3" maxlength="4" pattern="\d{4}" title="Четыре цифры года"> г.';
    }
    return $return;
    }
    function my_process_field($key,$val,$cur_val='') {
    switch ($val['my_process_field']) {
    case 'period':
    $return=intval($_POST['year']).str_pad(intval($_POST['month']),2,0,STR_PAD_LEFT);
    break;
    }
    return $return;
    }
    
    Всё. После этого в финансовых документах появится возможность указания периода.
  • Как прикреплять файлы/картинки к справочнику, документу или задаче?
    Вы можете создать пользовательское поле для прикрепления изображений или файлов разрешенных вами форматов к документам, справочникам или задачам. Для этого:

    1. Добавьте поле типа TEXT в нужную таблицу базы данных: `tasks` - задачи, `doc` - складские документы, `fin` - финансовые документы, `spr_contrs` - контрагенты, `spr_noms` - номеклатура и т.д. (см. описание таблиц СКИФ). Например, мы хотим прикреплять файлы в карточке товара, для этого добавим поле `my_files` в таблицу справочника номенклатуры при помощи следующего SQL-запроса:
    ALTER TABLE `wn_scif1_spr_noms` ADD `my_files` TEXT NOT NULL DEFAULT '';

    2. Добавьте описание поля в файл настроек wn_settings.php в корне сайта:
    $tasks_userfields - задачи, $docs_cat["store"]["userfields"] - складские документы, $docs_cat["fin"]["userfields"] - финансовые документы, $sprs[N]["userfields"] - справочник, где N - код нужного справочника. Мы добавляем поле в справочник номенклатуры, поэтому наш массив будет выглядеть следующим образом:
    $sprs[5]["userfields"]=array(
     "my_files"=>array("name"=>"Файлы", "my_edit_field"=>"my_files", "my_process_field"=>"my_files", "path"=>"files/manuals/", "formats"=>array("doc","docx"))
    );
    
    В массиве мы указываем в какой папке будут храниться файлы от корня системы (переменная path) и какие форматы файлов будут разрешены в загрузке (массив formats). Если файлы предназначаются только для внутреннего использования, лучше создать подпапку в папке /scif/, например, "scif/files/", она будет защищена серверным паролем. Если нужен публичный доступ к файлам, например, это изображения товара, нужно указать папку, доступную на сайте. Например, мы собираемся прикреплять к товарам инструкции, которые будут доступны в интернет-магазине, поэтому создадим подпапку /manuals/ в папке /files/. Обязательно укажите, какие форматы разрешены к загрузке, исключать эту проверку небезопасно!
    В этот же файл настроек добавьте функцию my_edit_field(), которая будет управлять выводом поля и функцию my_process_field(), которая отвечает за обработку поля.
    function my_edit_field($key,$val,$cur_val='') {
    global $db, $v, $row, $users, $userdata, $table;
    $return='';
     switch ($val['my_edit_field']) {
     case 'my_files':
     $return.='<input type="file" name="files">';
      if (!empty($row['my_files'])) {
      $return.='<br><br><b>Загружены ранее</b>:<br>';
      $arr=unserialize(stripslashes($row['my_files']));
       if (!empty($_GET['delfile'])) { // удаляем файл
       $key=htmlclean($_GET['delfile']);
        if (isset($arr[$key]) AND ($userdata['role']==1 OR $arr[$key]['user_id']==$userdata['id'])) { // разрешаем удалять файл только автору и администратору
        $return.='Файл '.$key.' удален<br>';
        unset($arr[$key]);
         if (file_exists(WN_PATH.$val['path'].$key)) { unlink(WN_PATH.$val['path'].$key); }
        $db->sql_query("UPDATE `".SCIF_PREFIX.$table."` SET `my_files`='".(count($arr)?addslashes(serialize($arr)):'')."' WHERE `id`='".$v."'");
        }
       }
       foreach ($arr AS $fk=>$fv) {
       $return.=date('d.m.y H:i',$fv['time']).' <a href="'.WN_HOME.$val['path'].$fk.'">'.$fk.'</a> ('.$users[$fv['user_id']]['name'].')'
       .(($userdata['id']==$fv['user_id'] OR $userdata['role']==1)?' <a href="?act=spritem&amp;t=5&amp;v='.$v.'&amp;delfile='.$fk.'" style="color:red" onclick="return del()" title="Удалить выбранный файл">x</a>':'')
       .'<br>';
       }
      }
     }
    return $return;
    }
    function my_process_field($key,$val,$cur_val='') {
    global $row, $_FILES, $userdata;
     switch ($val['my_process_field']) {
     case 'my_files':
      if (!empty($_FILES['files']['name'])) { // загрузка файла
      echo '<div class="panel_top">';
      $pos=mb_strrpos($_FILES['files']['name'], '.');
      $name=mb_substr($_FILES['files']['name'],0,$pos);
      $type=mb_strtolower(mb_substr($_FILES['files']['name'], 1 + $pos));
      $filename=translit_to_eng($name).'.'.$type;
       if (in_array($type,$val['formats'])) {
       $file=WN_PATH.$val['path'].$filename;
        if (!file_exists($file)) {
         if (move_uploaded_file($_FILES['files']['tmp_name'], $file)) {
         echo 'Файл '.$filename.' успешно загружен!';
         $arr=unserialize($row['my_files']);
         $arr[$filename]=array('user_id'=>$userdata['id'],'time'=>time());
         $row['my_files']=addslashes(serialize($arr));
         } else {
         echo error('Не удалось загрузить файл '.$file.'! Ошибка '.$_FILES['files']['error']);
         }
        } else {
        echo error('Файл с именем '.$filename.' на сервере уже есть! Дайте другое имя файлу или удалите ранее загруженный.');
        }
       } else {
       echo error('Не разрешенный формат файла '.$filename.'!');
       }
      echo '</div>';
      }
     $return=$row['my_files'];
     break;
     }
    return $return;
    }
    
    Это всё, теперь в карточке товара появится внизу поле "Файлы" и можно будет добавлять новые файлы и скачивать ранее добавленные. Если нужно сделать доступными эти файлы в каталоге на сайте, внесите соответствующие изменения в скриптах вашего шаблона оформления в папке /catalog/
  • Как добавить собственный отчет?
    Вы можете самостоятельно создавать новые отчеты или заказать эту работу нам. Отчеты находятся в папке /scif/includes/reports/. Рекомендуется не заменять отчеты из дистрибутива, а создавать новые с индексом от 1000, чтобы нечаянно не потерять изменения при обновлении системы.
    Для образца создания отчета вы можете использовать скрипт с открытым исходным кодом reports/22.php, в котором продемострировано создание отчета на примере расчета заработной платы. Если вы хотите создать собственный отчет по зарплате, проделайте следующее:
    - скопируйте файл 22.php в файл 1000.php в той же папке /scif/includes/reports/
    - внесите нужные вам изменения в новый файл
    - в файле настроек в корне сайта wn_settings.php добавьте следующие строки:
    if (isset($scif_reps)) {
    unset($scif_reps[22]);
    $scif_reps[1000]=array("name"=>"Зарплата","desc"=>"Расчет зарплаты","submenu"=>4);
    }
    
  • Как добавить собственный модуль?
    Вы можете расширять функциональность системы, самостоятельно создавая новые модули или заказывая эту работу нам. Модули находятся в папке /scif/includes/acts/. Рекомендуется не заменять модули из дистрибутива, а создавать новые с собственными именами, чтобы нечаянно не потерять изменения при обновлении системы.
    В качестве образца вы можете использовать скрипт с открытым исходным кодом acts/mail.php. Для создания собственного модуля просто разместите скрипт с нужным функционалом в папке /scif/includes/acts/, например, my_module.php. После этого вы можете обращаться к нему по адресу ?act=my_module. Вы можете добавить ссылки на него в блоки "Объявление" и "Заметки" на главной странице системы или в меню "Действия"
    Для добавления ссылки на модуль в меню "Сервис", в файле настроек в корне сайта wn_settings.php добавьте строку:
    $scif_actions["my_module"]=array("name"=>"Название","desc"=>"Описание","menu"=>8,"id"=>1000);
    
  • Как настроить список справочника?
    Первые две колонки в любом справочнике - это код и название. Набор и последовательность вывода остальных полей вы можете настраивать самостоятельно.
    Для этого задайте в файле настроек wn_settings.php переменную $sprs[N]["my_sprlist"]=true; если в выборке полей для справочника участвует только сама таблица справочника или $sprs[N]["my_sprlist"]="join"; если для вывода нужна выборка и из других таблиц (где N-код нужного справочника). После этого определите собственную функцию my_sprlist()

    Пример 1. В справочнике контрагентов мы хотим выводить кликабельное поле email, а также значение свойства "Статус". При этом выделим цветом колонки с определенным статусом. Для этого добавим в wn_settings.php следующий код:
    $sprs[6]['my_sprlist']='join';
    function my_sprlist($type,$row=array()) {
    global $t;
     switch ($t) {
     case 6: // контрагенты
      switch ($type) {
      case 'head':
      $return='<th>Email</th><th>Статус</th>';
      break;
      case 'sql':
      $return=', s.email, s.property4, v.name AS status_name';
      break;
      case 'join':
      $return='LEFT JOIN '.SCIF_PREFIX.'spr_values v ON s.property4=v.id';
      break;
      case 'row':
      $return='<td'.($row['property4']==1?' style="background-color:red"':'').'>'.($row['email']?'<a href="mailto:'.$row['email'].'" target="_blank">'.$row['email'].'</a>':'&nbsp;').'</td>
      <td>'.($row['status_name']?$row['status_name']:'&nbsp;').'</td>';
      break;
      }
     break;
     }
    return $return;
    }
    

    Пример 2. В справочник номенклатуры добавим колонку "Артикул". Этот пример немного сложнее, потому что в справочнике номеклатуры нам нужно выводить также цены и остатки на складах и вывод его отличается при просмотре как справочника и для подбора товаров в документ.
    $sprs[5]['my_sprlist']=true;
    function my_sprlist($type,$row=array()) {
    global $t, $prices, $stores, $m, $head, $count_prices, $count_stores, $s, $p;
     switch ($t) {
     case 5: // номенклатура
      switch ($type) {
      case 'head':
      $count_prices=count($prices);
      $count_stores=count($stores);
       if ($m==1) { // форма множественного подбора (в документ)
       $return='<th>Уп.</th><th>Артикул</th><th data-sorter="false">Кол-во</th><th data-sorter="false">Цена</th><th>'.$stores[$s]['name'].'</th>';
       } else {  // форма списка
       $head=''; // здесь перезаписываем head с Код и Наименование для добавления rowspan
       $return='<th rowspan="2">Код</th><th rowspan="2">Наименование</th><th rowspan="2">Артикул</th>
       <th colspan="'.$count_prices.'" align="center">Цены</th>
       <th colspan="'.$count_stores.'" align="center">Остатки</th>
       </tr>
       <tr>';
        // цены
        foreach ($prices AS $key=>$val) {
        $return.='<th align="right">'.$val['name'].'</th>';
        }
        // остатки на складах
        foreach ($stores AS $key=>$val) {
        $return.='<th align="right">'.$val['name'].'</th>';
        }
       }
      break;
      case 'sql':
      $return=', s.packing1 AS packing, s.vendorcode';
       foreach ($prices AS $key=>$val) {
       $return.=', s.price'.$key;
       }
       foreach ($stores AS $key=>$val) {
       $return.=', s.store'.$key;
       }
      break;
      case 'row':
       if ($m==1) { // форма множественного подбора (в документ)
       $return='<td>'.$row['packing'].'</td>
       <td>'.($row['vendorcode']?$row['vendorcode']:'&nbsp;').'</td>
       <td><input type="text" id="quant'.$row['id'].'" value="1" class="numeric"></td>
       <td><input type="text" id="price'.$row['id'].'" value="'.(float)$row['price'.$p].'" class="numeric"></td>
       <td align="right">'.quant($row['store'.$s]).'</td>';
       } else {
       $return='<td>'.($row['vendorcode']?$row['vendorcode']:'&nbsp;').'</td>';
        // цены
        foreach ($prices AS $key=>$val) {
        $return.='<td align="right">'.$row['price'.$key].'</td>';
        }
        // остатки на складах
        foreach ($stores AS $key=>$val) {
        $return.='<td align="right">'.quant($row['store'.$key]).'</td>';
        }
       }
      break;
      }
     break;
     }
    return $return;
    }
    
  • Как настроить внешний вид журнала документов?
    Вы можете менять оформление колонок журнала документов в зависимости от значений в строке, например:
    - подсветить красным документы, по которым есть просроченный долг
    - раскрасить разными цветами документы с разными статусами
    - выделить документы, в которых пользователь назначен ответственным
    и т.д.
    Для этого создайте в файле настроек wn_settings.php в корне сайта функцию tuning_journals_rows(), примеры реализации есть в файле /scif/includes/functions.php

    Вы также можете изменять внешний вид журнала при помощи CSS. Например, если вы хотите скрыть неиспользуемую вами колонку "Скидка", добавьте в файл /scif/style.php следующий стиль:
    #list.doclist table th:nth-child(7), #list.doclist table td:nth-child(7) {display:none}
  • Как добавить единицы измерения и другие служебные справочники?
    Служебные справочники, такие как единицы измерения, ставки НДС, упаковки и др. определены в файле /scif/index.php. Вы можете дополнить или переопределить их, добавив массивы в файл настроек wn_settings.php в корне сайта. Например, для добавления нужных единиц измерения, добавьте следующий массив:
    $scif_units=array('шт'=>array('code'=>796),'рул'=>array('code'=>736));
    и т.д., где code - это код ОКЕИ, он используется для вывода в печатных формах.
  • Как отредактировать контекстное меню "Действия"
    На странице просмотра справочников вы можете добавить вверху меню "Действия" для доступа к часто выполняемым действиям с элементами этого справочника. В дистрибутиве такое меню создано для справочника "Контрагенты" и включает пункты "Взаиморасчеты", "Задачи" и "Почта". Вы можете изменять и добавлять собственные пункты для этого и любых других справочников.
    Например, мы хотим автоматизировать документ выписки документа "Изъятие средств", который используем для выдачи зарплаты сотрудника. Сделаем в справочнике "Пользователи" пункт меню "Зарплата". Для этого добавим в файл настроек wn_settings.php следующую строку:
    $sprs[2]["actions"][1000]=array("name"=>"Зарплата", "url_start"=>"?act=finitem&t=24&def[finitem]=3&def[manager]=", "url_end"=>"", "desc"=>"Документ на выдачу зарплаты");
    После клика на выбранный пункт, будет открываться новая вкладка с адресом, содержащим переменную url_start, затем код выбранного элемента справочника, затем url_end. В данном примере в url_start мы указываем, что нужно открыть финансовый документ (act=finitem) типа "Изъятие" (t=24) и передаем в него данные для заполнения в массиве def (def[finitem] - статья движения, def[manager] - ответственный, в него и подставится код выбранного пользователя)

Работа в программе

  • Как еще больше упростить ведение учета?
    В СКИФ есть несколько возможностей для быстрого ввода документов:

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

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

    - предзаполнение новых документов.
    Кроме копирования документов, вы можете передать данные для заполнения новых документов в массиве def в адресной строке и разместить ссылку, например, на главной странице в блоке "Объявления" (будет доступна всем пользователям) или в блоке "Заметки" (будет доступна только вам). Например, вы выдаете экспедиторам командировочные по документу "Изъятие". Чтобы не заполнять каждый раз в новом документе поля "Статья движения", "Организация", "Касса", "Сумма" и другие, вы можете создать ссылку вида ?act=finitem&t=24&def[org]=1&def[finitem]=6&def[account]=1&def[summa]=500, тогда все перечисленные поля в новом документе уже будут заполнены.

    - импорт документов из Excel.
    Вы можете создавать любые документы импортом из Excel:
    • заказы покупателей, заполненные в вашем прайс-листе,
    • документы от поставщиков, содержащие артикулы или штрихкоды,
    результаты инвентаризаций или внесение начальных остатков
    Импорт позволяет существенно ускорить и сократить количество ошибок при вводе документов.

    - автоматизация любых процессов.
    Поскольку, в отличие от облачных сервисов, программа размещена на вашем сайте или вашем компьютере, вы можете дорабатывать её под свои персональные потребности для автоматизации часто выполняемых вами действий. Персональная доработка может значительно упростить и облегчить вам ведение учета. Напишите нам на адрес biz@webnice.biz для получения консультации.
  • Как оформлять возвраты?
    В СКИФ нет отдельного документа "Возврат". Для оформления возвратов от покупателя мы рекомендуем использовать пару документов "Покупка" и "Оплата поставщику" (как если бы вы покупали товар у покупателя). Если деньги выдаются в день возврата, оплату можно внести сразу в документе "Покупка". Если за счет возврата товара нужно погасить долг покупателя по другим его накладным, используйте затем документ "Оплата от покупателя".
    Для оформления возвратов от вас поставщику, вместо "Покупка" и "Оплата поставщику" используйте обратную пару - "Продажа" и "Оплата от покупателя".
    Другие способы
    Если данные документы для возвратов вам по каким-либо причинам не подходит, вы можете использовать:
    1) Удаление возвращаемого товара из накладной продажи (найти по какой накладной был продан товар, можно в отчете "Склад-Карточка движения").
    Минусы способа: не видно движение товара по датам, что может быть неудобным кладовщикам при инвентаризации, если со времени возврата прошло много времени. К изменениям старых накладных также обычно негативно относится бухгалтерия.
    2) Пару документов "Оприходование" и "Изъятие денег".
    Минусы способа: нет прямой привязки оплаты к складскому документу "Оприходование" и возврат не виден в сверке с контрагентом.
    У рекомендуемого нами выше способа использования для возврата пары "Покупка"+"Оплата поставщику" этих недостатков нет.

    Напишите нам, если вам нужна обработка, автоматизирующая создание данных документов
  • Как оформлять производственные операции?
    Для любого товара по ссылке из его карточки вы можете создать список комплектующих для использования в процедуре комплектации/раскомплектации (меню Склад-Комплектация). Эта процедура создает две складские накладные: 1) списания комплектующих и 2) оприходования комплектов (или наборот). Процедуру можно выполнять как по заданным спискам комплектующих, так и вручную (если эти списки у вас непостоянны).
    Примеры использования:
    - Производство: списываете материалы, приходуете готовую продукцию
    - Комплектация: списываете комплектующие, приходуете комплекты
    - Расформирование: списываете наборы, приходуете их составляющие
    и т.п.
  • CRM (управление взаимоотношениями с клиентами)
    В СКИФ вы можете сохранять данные по каждому клиенту и проводить их сегментацию по самостоятельно задаваемым критериям.
    По каждому клиенту возможен просмотр истории и формирование сверки взаиморасчетов.
    Есть возможность отправки почты прямо из программы и функционал маркетинговой Email-рассылки.
    Вы можете использовать встроенную систему задач и поручений для напоминаний о необходимости выполнить запланированные дела, совершить звонки и т.п.
    В личном кабинете на сайте клиенту доступны данные о выписанных документах, сумме задолженности, возможность импортировать документы для загрузки и др.
    В скрипте /cron/reminders.php приведен пример организации автоматической рассылки клиентам уведомлений о наступлении задолженности, предстоящей отгрузке и т.п.
    Вы также можете автоматически вносить в систему дату о последнем контакте с контрагентом на основе данных вашей переписки в почтовом ящике.
    Это лишь некоторые из возможностей СКИФ, которые позволят вам эффективнее работать с клиентами и поддерживать их лояльность. Вы можете дополнять систему любыми новыми возможностями, которые вам потребуются.
  • Мультивалютный учет
    Если вы получаете документа от поставщика в валюте или вам нужно выставлять в валюте счета покупателям, вы можете использовать следующие возможности системы:
    1) В справочнике цен можно создать несколько типов цен, например, Долларовые и Рублевые. Соответственно, для каждого товара указывать цену и в рублях и в долларах (или автоматически пересчитывать по курсу ЦБ, у нас есть для этого обработка). Документы тоже можно выписывать в разных ценах. Например, счет на оплату выписывать в долларах, а когда он оплачен, выписывать накладную уже в рублях по текущему курсу. Вы также можете создать собственную печатную форму, в которых цены будут указаны в нескольких валютах.
    2) В документе есть возможность пересчета цен до заданному коэффициенту. Например, поставщик прислал вам инвойс в валюте. Вводите его в документ "Покупка" с ценами в валюте из документа поставщика, затем выберите внизу документа ссылку "Курс" и укажите текущий курс. Цены будут пересчитаны в рубли.
  • Отправка электронной почты
    В СКИФ есть возможность отправки электронной почты прямо из программы. Вы можете использовать эту возможность, чтобы не раздавать всем сотрудникам пароли от корпоративного почтового ящика, а также вести учет отправленных писем. Вы также можете создать различные шаблоны для автоматизации отправки однотипных писем.
    Если в файле настроек wn_settings.php указать параметры доступа к вашему SMTP-серверу, то почта будет отправлять через него и, следовательно, все письма, отправленные из программы, будут автоматически появляться в папке "Исходящие" вашего почтового ящика. Параметры доступа к SMTP-серверу необходимо указывать в массиве $mail_smtp. Пример для GMail:
    $mail_smtp=array("host"=>"smtp.gmail.com", "username"=>"yourname@gmail.com", "password"=>"yourpass", "port"=>465);
  • Инструкция по проведению инвентаризации
    Вы легко можете выгрузить остатки для проведения инвентаризации и загрузить её итоги при помощи экспорта/импорта данных из файла Excel. Подробную инструкцию по проведению инвентаризации, включающую также некоторые рекомендации организационного характера, можно скачать здесь.
    Пример файла импорта результатов инвентаризации.
    Обычно нет смысла хранить результаты проведенной инвентаризации в системе также в виде отдельного документа, но при необходимости вы можете использовать для этих целей документ "Внутренний заказ".
Не нашли ответа на свой вопрос? Спросите у нас по email biz@webnice.biz или skype webnice.biz
Закажите систему учета СКИФ из формы заказа или отправив письмо на адрес biz@webnice.biz