скрипт выпуск и комплектация

В данном форуме обсуждаются любые вопросы, связанные с деятельностью нашей компании
Дмитрий Шапорев
Новичок
Сообщения: 35
Зарегистрирован: 22 авг 2022, 17:27
Откуда: Санкт-Петербург

скрипт выпуск и комплектация

Сообщение Дмитрий Шапорев »

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

Код: Выделить всё

// Данный скрипт предназначен для использования в точке зрения
// в проверке документа кассовой смены перед записью.
// Загружаем реквизиты документа
ДобавитьКонтекст( "SELECT ndok, date, firm, rs, sklad, cur, cur_rate, branch, identity_column
 FROM spr008 
 WHERE identity_column= " + @ИДДокумента, "Документ" );
ОсновнойУчет = ЗАПРОС( "SELECT dbo.fn_getdefaultaccount ( '" + _ТОЧКАЗРЕНИЯ + "' )" );

// Если у документа есть выписанные на основании документы 
// выпуска и комплектации, то ничего не делаем
IF ( ЗАПРОС( "SELECT CASE WHEN EXISTS(SELECT * FROM crosslink 
WHERE code = '008' AND ic= " + @ИДДокумента + " AND 

 
cr_code = '009') THEN 1 ELSE 0 END " ) == 1 ) 
RETURN true;

ИмяТаблицыПродукции = "#" + УникальноеИмя( );
//------- Создаем таблицу для сбора необходимой информации
ЗАПРОС( "CREATE TABLE " + ИмяТаблицыПродукции + " 
(nn char(10), nnname char(250), kolp float, incena float, cena float, ed char(15),
kodn char(2), koef_e float, koef_c float, sklad char( 3 ) ) " );
СистемноеСообщение( "Пожалуйста, подождите. " +

 
"Идет проверка документа на наличие производимой продукции." );

ДобавитьКонтекст( "SELECT nn, nnname, SUM( kolp ) AS kolp, ed, kodn, koef_e, koef_c
 FROM spec008 
 WHERE ic= " + @ИДДокумента + "
 GROUP BY nn, nnname, ed, kodn, koef_e, koef_c ", "Спецификация" );

ВыбратьКонтекст( "Спецификация" );
ИтогоСумма = 0.00;
WHILE ( !КонецКонтекста( "Спецификация" ) )
{
//------- Если в карточке товара не стоит галочка Формировать автоматически - пропускаем
IF ( ЗАПРОС( "SELECT f_make FROM sprnn WHERE nn= '" + Спецификация.nn + "' " ) )
{
//------- Проверяем наличие необходимого количества уже собранного на складе
ДобавитьКонтекст( "EXECUTE sp_calcsklad '" + Спецификация.nn + "', '" + 

 
TTOC( Документ.date ) + "', '" + Документ.sklad + "', '" +

 
ОсновнойУчет + "'", "ОстатокНаДату" );
ДобавитьКонтекст( "EXECUTE sp_calcsklad '" + Спецификация.nn + "', '', '" +
 Документ.sklad + "', '" + ОсновнойУчет + "'", "ТекущийОстаток" );

// Если не хватает остатка, то добавляем строку в таблицу
IF ( ROUND( Спецификация.kolp - ОстатокНаДату.kolp, 3 ) > 0 OR
 ROUND( Спецификация.kolp - ТекущийОстаток.kolp, 3 ) > 0 )
{
Количество = MAX( ROUND( Спецификация.kolp - ОстатокНаДату.kolp, 3 ),
ROUND( Спецификация.kolp - ТекущийОстаток.kolp, 3 ) );
Склад = ЗАПРОС( "SELECT sklad_ingredients FROM sprres_g 

 
WHERE code= (SELECT group_ FROM sprres 
 WHERE code= '" + Спецификация.nn + "')" );
 ЗАПРОС( "INSERT INTO " + ИмяТаблицыПродукции + "
( nn, nnname, kolp, cena, incena, ed, kodn, koef_e, koef_c, sklad ) 
VALUES ( '" + STDF( Спецификация.nn ) + "', '" + 
STDF( Спецификация.nnname ) + "', " + 
STR( Количество, 20, 8 ) + ", " +
STR( ОстатокНаДату.cena, 20, 8 ) + ", " + 
STR( ОстатокНаДату.cena, 20, 8 ) + ", '" + 
STDF( Спецификация.ed ) + "', '" + 
STDF( Спецификация.kodn ) + "', " + 
STR( Спецификация.koef_e, 20, 8 ) + ", " + 
STR( Спецификация.koef_c, 20, 8 ) + ", '" + Склад + "' ) " );
ИтогоСумма += ( Спецификация.kolp - ОстатокНаДату.kolp) *

 
ОстатокНаДату.cena;
}
УдалитьКонтекст( "ОстатокНаДату" );
УдалитьКонтекст( "ТекущийОстаток" );
}
Пропустить( 1, "Спецификация" );
}
УдалитьКонтекст( "Спецификация" );

//------ Начинаем транзакцию для записи документа Выпуск и комплектация
ЗАПРОС( "BEGIN TRANSACTION" );
//------ Создаем документ Выпуск и комплектация
//------ Код Выпускаи комплектации- 009
// Формируем список учетов для нового документа
СписокУчетов = "";
ДобавитьКонтекст( "SELECT account_ FROM specviewpoints_def 

 
WHERE code= '" + _ТОЧКАЗРЕНИЯ + "' AND objtype= 'DOC' AND 

 
objcode= '009' AND t_concept = ''", "МоделиУчета");
WHILE ( !КонецКонтекста( "МоделиУчета" ) )
{
СписокУчетов += МоделиУчета.account_;
Пропустить( 1, "МоделиУчета" );
}
УдалитьКонтекст( "МоделиУчета" );
СписокУчетов = ALLTRIM( СписокУчетов );

ДобавитьКонтекст( "EXECUTE sp_insertdoc '009', '', '" + Документ.date + "', '', '" + 
Документ.firm + "', '', 'RUB', '', '" + СписокУчетов + "', '" + 

_ТОЧКАЗРЕНИЯ + "', 0, '" + ОсновнойУчет + "'", "ident" );

ДобавитьКонтекст(
"UPDATE spr009 SET 
f_make = 1, 
sklad = '" + Документ.sklad + "',
sklad_d = '" + Документ.sklad + "',
summa = " + STR( ИтогоСумма, 20, 8 ) + ",
firm = '" + Документ.firm + "',
rs = '" + Документ.rs + "',
branch = '" + Документ.branch + "',
cur = '" + Документ.cur + "',
cur_rate= " + STR( Документ.cur_rate, 16, 8 ) + ",
taccess = '', caccess='', 
note = 'По документу кассовой смены № " + 
ALLTRIM( Документ.ndok ) + " от " + DTOC( Документ.date ) + "' 
WHERE identity_column= " + ident.ident, "Пустой" );
УдалитьКонтекст( "Пустой" );

ДобавитьКонтекст(
"INSERT INTO spec009 ( ic, nn, spec_ic, ed, kolp, nnname, incena, cena, summa, 
kodn, koef_e, koef_c, f_make, sklad )
SELECT " + ident.ident + ", nn, 0, ed, kolp, nnname, incena, cena, kolp * cena, 
kodn, koef_e, koef_c, 1, sklad 
FROM " + ИмяТаблицыПродукции, "Пустой" );
УдалитьКонтекст( "Пустой" );

//-------- Вызываем процедуру формирования состава продукции
ЗАПРОС("EXECUTE sp_recalc009 " + ident.ident );

// Добавляем связь на основании
ДобавитьКонтекст(
"INSERT INTO crosslink (code, ic, ndok, date, cr_code, cr_ic, cr_ndok, cr_date, cr_type ) 
VALUES ( '008'," + Документ.identity_column + ", '" + Документ.ndok + "', '" + 
TTOC( Документ.date ) + "', '009'," + ident.ident + ", '" + ident.ndok + "', '" + 
TTOC( ident.date ) + "', '0' )", "Пустой" );
УдалитьКонтекст( "Пустой" );

 

ЗАПРОС("IF @@TRANCOUNT > 0 COMMIT TRANSACTION");

СистемноеСообщение( );
УдалитьКонтекст( "Документ" );
//------ Вызываем созданный документ на редактирование
ОтправитьСообщение( _ГЛАВНОЕОКНОПРИЛОЖЕНИЯ, _СООБЩЕНИЕ_ПРОСМОТРДОКУМЕНТА, "009", ident.ident );

УдалитьКонтекст( "ident" );
// Возвращаем ИСТИНУ, т.к. необходимо произвести запись до конца
RETURN true;